changeset 442:753f1380d6bc cannam

Merge from branch "redmine-1.2"
author Chris Cannam
date Mon, 06 Jun 2011 14:41:04 +0100
parents adc8466df404 (current diff) cbce1fd3b1b7 (diff)
children 350acce374a2
files .svn/all-wcprops .svn/entries app/.svn/all-wcprops app/.svn/entries app/controllers/.svn/all-wcprops app/controllers/.svn/entries app/controllers/.svn/text-base/repositories_controller.rb.svn-base app/controllers/application_controller.rb app/controllers/issues_controller.rb app/controllers/projects_controller.rb app/controllers/repositories_controller.rb app/controllers/users_controller.rb app/helpers/.svn/all-wcprops app/helpers/.svn/entries app/helpers/.svn/text-base/application_helper.rb.svn-base app/helpers/.svn/text-base/repositories_helper.rb.svn-base app/helpers/application_helper.rb app/helpers/projects_helper.rb app/helpers/repositories_helper.rb app/models/.svn/all-wcprops app/models/.svn/entries app/models/.svn/text-base/changeset.rb.svn-base app/models/.svn/text-base/mail_handler.rb.svn-base app/models/.svn/text-base/repository.rb.svn-base app/models/.svn/text-base/user.rb.svn-base app/models/.svn/text-base/wiki.rb.svn-base app/models/changeset.rb app/models/issue.rb app/models/mail_handler.rb app/models/project.rb app/models/repository.rb app/models/repository/.svn/entries app/models/repository/.svn/text-base/mercurial.rb.svn-base app/models/repository/git.rb app/models/repository/mercurial.rb app/models/user.rb app/models/wiki.rb app/sweepers/.svn/entries app/views/.svn/all-wcprops app/views/.svn/entries app/views/account/.svn/entries app/views/activities/.svn/entries app/views/admin/.svn/entries app/views/attachments/.svn/entries app/views/auth_sources/.svn/entries app/views/auto_completes/.svn/entries app/views/boards/.svn/all-wcprops app/views/boards/.svn/entries app/views/calendars/.svn/all-wcprops app/views/calendars/.svn/entries app/views/common/.svn/entries app/views/context_menus/.svn/entries app/views/custom_fields/.svn/entries app/views/documents/.svn/entries app/views/enumerations/.svn/entries app/views/files/.svn/entries app/views/gantts/.svn/entries app/views/groups/.svn/entries app/views/issue_categories/.svn/entries app/views/issue_moves/.svn/entries app/views/issue_relations/.svn/entries app/views/issue_statuses/.svn/entries app/views/issues/.svn/all-wcprops app/views/issues/.svn/entries app/views/issues/_attributes.rhtml app/views/issues/_form.rhtml app/views/journals/.svn/entries app/views/layouts/.svn/all-wcprops app/views/layouts/.svn/entries app/views/layouts/base.rhtml app/views/ldap_auth_sources/.svn/entries app/views/mailer/.svn/entries app/views/members/.svn/entries app/views/messages/.svn/all-wcprops app/views/messages/.svn/entries app/views/my/.svn/entries app/views/my/blocks/.svn/entries app/views/news/.svn/all-wcprops app/views/news/.svn/entries app/views/previews/.svn/entries app/views/projects/.svn/all-wcprops app/views/projects/.svn/entries app/views/projects/settings/.svn/all-wcprops app/views/projects/settings/.svn/entries app/views/projects/settings/_repository.rhtml app/views/queries/.svn/entries app/views/reports/.svn/entries app/views/repositories/.svn/all-wcprops app/views/repositories/.svn/entries app/views/repositories/_dir_list_content.rhtml app/views/repositories/revision.rhtml app/views/roles/.svn/entries app/views/search/.svn/entries app/views/settings/.svn/all-wcprops app/views/settings/.svn/entries app/views/time_entry_reports/.svn/entries app/views/timelog/.svn/all-wcprops app/views/timelog/.svn/entries app/views/trackers/.svn/entries app/views/users/.svn/all-wcprops app/views/users/.svn/entries app/views/users/_form.rhtml app/views/versions/.svn/entries app/views/watchers/.svn/entries app/views/welcome/.svn/entries app/views/wiki/.svn/all-wcprops app/views/wiki/.svn/entries app/views/wikis/.svn/entries app/views/workflows/.svn/all-wcprops app/views/workflows/.svn/entries config/.svn/all-wcprops config/.svn/entries config/environments/.svn/entries config/initializers/.svn/entries config/locales/.svn/all-wcprops config/locales/.svn/entries config/locales/.svn/text-base/nl.yml.svn-base config/locales/bg.yml config/locales/bs.yml config/locales/ca.yml config/locales/cs.yml config/locales/da.yml config/locales/de.yml config/locales/el.yml config/locales/en-GB.yml config/locales/en.yml config/locales/es.yml config/locales/eu.yml config/locales/fi.yml config/locales/fr.yml config/locales/gl.yml config/locales/he.yml config/locales/hr.yml config/locales/hu.yml config/locales/id.yml config/locales/it.yml config/locales/ja.yml config/locales/ko.yml config/locales/lt.yml config/locales/lv.yml config/locales/mk.yml config/locales/mn.yml config/locales/nl.yml config/locales/no.yml config/locales/pl.yml config/locales/pt-BR.yml config/locales/pt.yml config/locales/ro.yml config/locales/ru.yml config/locales/sk.yml config/locales/sl.yml config/locales/sr-YU.yml config/locales/sr.yml config/locales/sv.yml config/locales/th.yml config/locales/tr.yml config/locales/uk.yml config/locales/vi.yml config/locales/zh-TW.yml config/locales/zh.yml config/routes.rb db/.svn/all-wcprops db/.svn/entries db/migrate/.svn/all-wcprops db/migrate/.svn/entries doc/.svn/all-wcprops doc/.svn/entries doc/.svn/text-base/git.rdoc.svn-base doc/git.rdoc extra/.svn/entries extra/mail_handler/.svn/all-wcprops extra/mail_handler/.svn/entries extra/sample_plugin/.svn/entries extra/sample_plugin/app/.svn/entries extra/sample_plugin/app/controllers/.svn/entries extra/sample_plugin/app/models/.svn/entries extra/sample_plugin/app/views/.svn/entries extra/sample_plugin/app/views/example/.svn/entries extra/sample_plugin/app/views/my/.svn/entries extra/sample_plugin/app/views/my/blocks/.svn/entries extra/sample_plugin/app/views/settings/.svn/entries extra/sample_plugin/assets/.svn/entries extra/sample_plugin/assets/images/.svn/entries extra/sample_plugin/assets/stylesheets/.svn/entries extra/sample_plugin/config/.svn/entries extra/sample_plugin/config/locales/.svn/entries extra/sample_plugin/db/.svn/entries extra/sample_plugin/db/migrate/.svn/entries extra/soundsoftware/reposman-soundsoftware.rb extra/svn/.svn/entries extra/svn/reposman.rb files/.svn/entries lib/.svn/all-wcprops lib/.svn/entries lib/SVG/.svn/entries lib/SVG/Graph/.svn/entries lib/generators/.svn/entries lib/generators/redmine_plugin/.svn/entries lib/generators/redmine_plugin/templates/.svn/entries lib/generators/redmine_plugin_controller/.svn/entries lib/generators/redmine_plugin_controller/templates/.svn/entries lib/generators/redmine_plugin_model/.svn/entries lib/generators/redmine_plugin_model/templates/.svn/entries lib/plugins/.svn/entries lib/redmine/.svn/all-wcprops lib/redmine/.svn/entries lib/redmine/.svn/text-base/version.rb.svn-base lib/redmine/activity/.svn/entries lib/redmine/core_ext/.svn/entries lib/redmine/core_ext/string/.svn/entries lib/redmine/default_data/.svn/entries lib/redmine/export/.svn/entries lib/redmine/helpers/.svn/all-wcprops lib/redmine/helpers/.svn/entries lib/redmine/scm/.svn/all-wcprops lib/redmine/scm/.svn/entries lib/redmine/scm/adapters/.svn/all-wcprops lib/redmine/scm/adapters/.svn/entries lib/redmine/scm/adapters/.svn/text-base/cvs_adapter.rb.svn-base lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter.rb.svn-base lib/redmine/scm/adapters/abstract_adapter.rb lib/redmine/scm/adapters/cvs_adapter.rb lib/redmine/scm/adapters/mercurial/.svn/all-wcprops lib/redmine/scm/adapters/mercurial/.svn/entries lib/redmine/scm/adapters/mercurial_adapter.rb lib/redmine/version.rb lib/redmine/views/.svn/entries lib/redmine/views/builders/.svn/entries lib/redmine/views/my_page/.svn/entries lib/redmine/wiki_formatting/.svn/entries lib/redmine/wiki_formatting/textile/.svn/entries lib/tasks/.svn/all-wcprops lib/tasks/.svn/entries log/.svn/entries public/.svn/all-wcprops public/.svn/entries public/help/.svn/entries public/images/.svn/all-wcprops public/images/.svn/entries public/images/.svn/prop-base/zoom_in_g.png.svn-base public/images/.svn/prop-base/zoom_out_g.png.svn-base public/images/.svn/text-base/zoom_in_g.png.svn-base public/images/.svn/text-base/zoom_out_g.png.svn-base public/images/files/.svn/entries public/images/jstoolbar/.svn/entries public/images/zoom_in_g.png public/images/zoom_out_g.png public/javascripts/.svn/all-wcprops public/javascripts/.svn/entries public/javascripts/application.js public/javascripts/calendar/.svn/all-wcprops public/javascripts/calendar/.svn/entries public/javascripts/calendar/lang/.svn/all-wcprops public/javascripts/calendar/lang/.svn/entries public/javascripts/jstoolbar/.svn/all-wcprops public/javascripts/jstoolbar/.svn/entries public/javascripts/jstoolbar/lang/.svn/all-wcprops public/javascripts/jstoolbar/lang/.svn/entries public/stylesheets/.svn/all-wcprops public/stylesheets/.svn/entries public/stylesheets/.svn/text-base/application.css.svn-base public/stylesheets/application.css public/themes/.svn/entries public/themes/alternate/.svn/entries public/themes/alternate/stylesheets/.svn/entries public/themes/classic/.svn/entries public/themes/classic/images/.svn/entries public/themes/classic/stylesheets/.svn/entries script/.svn/entries script/performance/.svn/entries script/process/.svn/entries test/.svn/all-wcprops test/.svn/entries test/.svn/text-base/test_helper.rb.svn-base test/exemplars/.svn/entries test/fixtures/.svn/all-wcprops test/fixtures/.svn/entries test/fixtures/.svn/text-base/attachments.yml.svn-base test/fixtures/attachments.yml test/fixtures/configuration/.svn/all-wcprops test/fixtures/diffs/.svn/entries test/fixtures/encoding/.svn/entries test/fixtures/files/.svn/all-wcprops test/fixtures/files/.svn/entries test/fixtures/ldap/.svn/entries test/fixtures/mail_handler/.svn/entries test/fixtures/mailer/.svn/entries test/fixtures/repositories/.svn/all-wcprops test/fixtures/repositories/.svn/entries test/functional/.svn/all-wcprops test/functional/.svn/entries test/functional/.svn/text-base/attachments_controller_test.rb.svn-base test/functional/.svn/text-base/repositories_mercurial_controller_test.rb.svn-base test/functional/attachments_controller_test.rb test/functional/repositories_mercurial_controller_test.rb test/integration/.svn/all-wcprops test/integration/.svn/entries test/integration/api_test/.svn/all-wcprops test/integration/api_test/.svn/entries test/integration/lib/.svn/entries test/integration/lib/redmine/.svn/entries test/mocks/.svn/entries test/mocks/development/.svn/entries test/mocks/test/.svn/entries test/test_helper.rb test/unit/.svn/all-wcprops test/unit/.svn/entries test/unit/.svn/prop-base/calendar_test.rb.svn-base test/unit/.svn/text-base/attachment_test.rb.svn-base test/unit/.svn/text-base/calendar_test.rb.svn-base test/unit/.svn/text-base/repository_mercurial_test.rb.svn-base test/unit/.svn/text-base/wiki_test.rb.svn-base test/unit/attachment_test.rb test/unit/calendar_test.rb test/unit/helpers/.svn/all-wcprops test/unit/helpers/.svn/entries test/unit/helpers/.svn/text-base/application_helper_test.rb.svn-base test/unit/helpers/application_helper_test.rb test/unit/lib/.svn/all-wcprops test/unit/lib/.svn/entries test/unit/lib/redmine/.svn/all-wcprops test/unit/lib/redmine/.svn/entries test/unit/lib/redmine/.svn/text-base/i18n_test.rb.svn-base test/unit/lib/redmine/helpers/.svn/entries test/unit/lib/redmine/i18n_test.rb test/unit/lib/redmine/menu_manager/.svn/entries test/unit/lib/redmine/scm/.svn/entries test/unit/lib/redmine/scm/adapters/.svn/entries test/unit/lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter_test.rb.svn-base test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb test/unit/lib/redmine/views/.svn/entries test/unit/lib/redmine/views/builders/.svn/entries test/unit/lib/redmine/wiki_formatting/.svn/all-wcprops test/unit/lib/redmine/wiki_formatting/.svn/entries test/unit/repository_mercurial_test.rb test/unit/wiki_test.rb tmp/.svn/entries tmp/cache/.svn/entries tmp/sessions/.svn/entries tmp/sockets/.svn/entries tmp/test/.svn/entries vendor/.svn/all-wcprops vendor/.svn/entries vendor/gems/.svn/all-wcprops vendor/gems/.svn/entries vendor/gems/coderay-0.9.7/.svn/all-wcprops vendor/gems/coderay-0.9.7/bin/.svn/all-wcprops vendor/gems/coderay-0.9.7/lib/.svn/all-wcprops vendor/gems/coderay-0.9.7/lib/coderay/.svn/all-wcprops vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/all-wcprops vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/.svn/all-wcprops vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/all-wcprops vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/all-wcprops vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/.svn/all-wcprops vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/.svn/all-wcprops vendor/gems/coderay-0.9.7/lib/coderay/styles/.svn/all-wcprops vendor/gems/coderay-0.9.7/test/.svn/all-wcprops vendor/gems/coderay-0.9.7/test/functional/.svn/all-wcprops vendor/gems/rubytree-0.5.2/.svn/entries vendor/gems/rubytree-0.5.2/lib/.svn/entries vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries vendor/gems/rubytree-0.5.2/test/.svn/entries vendor/plugins/.svn/all-wcprops vendor/plugins/.svn/entries vendor/plugins/acts_as_activity_provider/.svn/entries vendor/plugins/acts_as_activity_provider/lib/.svn/entries vendor/plugins/acts_as_attachable/.svn/entries vendor/plugins/acts_as_attachable/lib/.svn/entries vendor/plugins/acts_as_customizable/.svn/all-wcprops vendor/plugins/acts_as_customizable/.svn/entries vendor/plugins/acts_as_customizable/lib/.svn/entries vendor/plugins/acts_as_event/.svn/entries vendor/plugins/acts_as_event/lib/.svn/entries vendor/plugins/acts_as_list/.svn/entries vendor/plugins/acts_as_list/lib/.svn/entries vendor/plugins/acts_as_list/lib/active_record/.svn/entries vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries vendor/plugins/acts_as_list/test/.svn/entries vendor/plugins/acts_as_searchable/.svn/entries vendor/plugins/acts_as_searchable/lib/.svn/entries vendor/plugins/acts_as_tree/.svn/entries vendor/plugins/acts_as_tree/lib/.svn/entries vendor/plugins/acts_as_tree/lib/active_record/.svn/entries vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries vendor/plugins/acts_as_tree/test/.svn/entries vendor/plugins/acts_as_tree/test/fixtures/.svn/entries vendor/plugins/acts_as_versioned/.svn/entries vendor/plugins/acts_as_versioned/lib/.svn/entries vendor/plugins/acts_as_versioned/test/.svn/entries vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries vendor/plugins/acts_as_watchable/.svn/entries vendor/plugins/acts_as_watchable/lib/.svn/entries vendor/plugins/awesome_nested_set/.svn/entries vendor/plugins/awesome_nested_set/lib/.svn/entries vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries vendor/plugins/awesome_nested_set/rails/.svn/entries vendor/plugins/awesome_nested_set/test/.svn/entries vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries vendor/plugins/awesome_nested_set/test/db/.svn/entries vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries vendor/plugins/classic_pagination/.svn/entries vendor/plugins/classic_pagination/lib/.svn/entries vendor/plugins/classic_pagination/test/.svn/entries vendor/plugins/classic_pagination/test/fixtures/.svn/entries vendor/plugins/engines/.svn/entries vendor/plugins/engines/generators/.svn/entries vendor/plugins/engines/generators/plugin_migration/.svn/entries vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries vendor/plugins/engines/lib/.svn/entries vendor/plugins/engines/lib/engines/.svn/entries vendor/plugins/engines/lib/engines/plugin/.svn/entries vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries vendor/plugins/engines/tasks/.svn/text-base/engines.rake.svn-base vendor/plugins/engines/tasks/engines.rake vendor/plugins/engines/test/.svn/entries vendor/plugins/engines/test/app/.svn/entries vendor/plugins/engines/test/app/controllers/.svn/entries vendor/plugins/engines/test/app/controllers/namespace/.svn/entries vendor/plugins/engines/test/app/helpers/.svn/entries vendor/plugins/engines/test/app/models/.svn/entries vendor/plugins/engines/test/app/things/.svn/entries vendor/plugins/engines/test/app/views/.svn/entries vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries vendor/plugins/engines/test/app/views/namespace/.svn/entries vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries vendor/plugins/engines/test/app/views/notify_mail/.svn/entries vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries vendor/plugins/engines/test/functional/.svn/entries vendor/plugins/engines/test/lib/.svn/entries vendor/plugins/engines/test/plugins/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries vendor/plugins/engines/test/plugins/test_assets/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries vendor/plugins/engines/test/plugins/test_load_path/.svn/entries vendor/plugins/engines/test/plugins/test_migration/.svn/entries vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries vendor/plugins/engines/test/plugins/test_routing/.svn/entries vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries vendor/plugins/engines/test/plugins/test_testing/.svn/entries vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries vendor/plugins/engines/test/unit/.svn/entries vendor/plugins/engines/test/unit/test_testing/.svn/entries vendor/plugins/gravatar/.svn/entries vendor/plugins/gravatar/lib/.svn/entries vendor/plugins/gravatar/spec/.svn/entries vendor/plugins/open_id_authentication/.svn/entries vendor/plugins/open_id_authentication/generators/.svn/entries vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries vendor/plugins/open_id_authentication/lib/.svn/entries vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries vendor/plugins/open_id_authentication/tasks/.svn/text-base/open_id_authentication_tasks.rake.svn-base vendor/plugins/open_id_authentication/tasks/open_id_authentication_tasks.rake vendor/plugins/open_id_authentication/test/.svn/entries vendor/plugins/prepend_engine_views/.svn/entries vendor/plugins/rfpdf/.svn/entries vendor/plugins/rfpdf/lib/.svn/entries vendor/plugins/rfpdf/lib/rfpdf/.svn/entries vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/bookmark.rb.svn-base vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/chinese.rb.svn-base vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/fpdf_eps.rb.svn-base vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/japanese.rb.svn-base vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/korean.rb.svn-base vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/makefont.rb.svn-base vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/rfpdf.rb.svn-base vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/view.rb.svn-base vendor/plugins/rfpdf/lib/rfpdf/bookmark.rb vendor/plugins/rfpdf/lib/rfpdf/chinese.rb vendor/plugins/rfpdf/lib/rfpdf/fpdf_eps.rb vendor/plugins/rfpdf/lib/rfpdf/japanese.rb vendor/plugins/rfpdf/lib/rfpdf/korean.rb vendor/plugins/rfpdf/lib/rfpdf/makefont.rb vendor/plugins/rfpdf/lib/rfpdf/rfpdf.rb vendor/plugins/rfpdf/lib/rfpdf/view.rb vendor/plugins/rfpdf/test/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries
diffstat 1287 files changed, 76837 insertions(+), 49293 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Thu Mar 03 15:08:45 2011 +0000
+++ b/.hgignore	Mon Jun 06 14:41:04 2011 +0100
@@ -24,3 +24,5 @@
 tmp/test/*
 vendor/rails
 *.rbc
+.svn/
+.git/
--- a/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,29 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 24
-/svn/!svn/ver/4993/trunk
+V 38
+/svn/!svn/ver/6000/branches/1.2-stable
 END
-.hgignore
-K 25
-svn:wc:ra_dav:version-url
-V 34
-/svn/!svn/ver/4834/trunk/.hgignore
-END
-Rakefile
-K 25
-svn:wc:ra_dav:version-url
-V 31
-/svn/!svn/ver/67/trunk/Rakefile
-END
-README.rdoc
-K 25
-svn:wc:ra_dav:version-url
-V 36
-/svn/!svn/ver/3849/trunk/README.rdoc
-END
-.gitignore
-K 25
-svn:wc:ra_dav:version-url
-V 35
-/svn/!svn/ver/4834/trunk/.gitignore
-END
--- a/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-03T05:51:46.224821Z
-4993
+2011-06-03T11:41:34.837596Z
+6000
 tmaruyama
 has-props
 
@@ -29,6 +29,9 @@
 test
 dir
 
+app
+dir
+
 .hgignore
 file
 
@@ -36,14 +39,11 @@
 
 
 
-970b3ffe21e2c668737cf5abf0d0ac48
-2011-02-15T11:04:52.942730Z
-4834
+cf080444603c5774a6f20da6bbafe234
+2011-03-28T04:54:13.617808Z
+5235
 tmaruyama
 
-app
-dir
-
 log
 dir
 
@@ -53,7 +53,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 bbf560d44f092d22a30d3a562436ad8c
 2006-12-05T20:45:04.842118Z
 67
@@ -81,16 +81,13 @@
 
 307
 
-extra
-dir
-
 README.rdoc
 file
 
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 67c937b1f1d0603e69f322de34bbfe04
 2010-07-18T15:49:24.341728Z
 3849
@@ -118,6 +115,9 @@
 
 208
 
+extra
+dir
+
 db
 dir
 
@@ -133,19 +133,13 @@
 script
 dir
 
-doc
-dir
-
-config
-dir
-
 .gitignore
 file
 
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 84dbba0b6ddcd80d28c62a3f8e344bc4
 2011-02-15T11:04:52.942730Z
 4834
@@ -173,6 +167,12 @@
 
 477
 
+config
+dir
+
+doc
+dir
+
 lib
 dir
 
--- a/.svn/text-base/.hgignore.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/.svn/text-base/.hgignore.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -25,3 +25,5 @@
 tmp/test/*
 vendor/rails
 *.rbc
+.svn/
+.git/
--- a/.svn/tmp/.hgignore.tmp	Thu Mar 03 15:08:45 2011 +0000
+++ b/.svn/tmp/.hgignore.tmp	Mon Jun 06 14:41:04 2011 +0100
@@ -24,3 +24,5 @@
 tmp/test/*
 vendor/rails
 *.rbc
+.svn/
+.git/
--- a/app/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 28
-/svn/!svn/ver/4990/trunk/app
+V 42
+/svn/!svn/ver/6000/branches/1.2-stable/app
 END
--- a/app/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-03T03:30:10.954225Z
-4990
+2011-06-03T11:41:34.837596Z
+6000
 tmaruyama
 
 
--- a/app/controllers/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,299 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 40
-/svn/!svn/ver/4954/trunk/app/controllers
+V 54
+/svn/!svn/ver/5946/branches/1.2-stable/app/controllers
 END
-issues_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/4741/trunk/app/controllers/issues_controller.rb
-END
-queries_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/3684/trunk/app/controllers/queries_controller.rb
-END
-sys_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/3201/trunk/app/controllers/sys_controller.rb
-END
-mail_handler_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/3202/trunk/app/controllers/mail_handler_controller.rb
-END
-watchers_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/3798/trunk/app/controllers/watchers_controller.rb
-END
-auto_completes_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/4503/trunk/app/controllers/auto_completes_controller.rb
-END
-my_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4497/trunk/app/controllers/my_controller.rb
-END
-comments_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4172/trunk/app/controllers/comments_controller.rb
-END
-members_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/3784/trunk/app/controllers/members_controller.rb
-END
-context_menus_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4580/trunk/app/controllers/context_menus_controller.rb
-END
-welcome_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/2941/trunk/app/controllers/welcome_controller.rb
-END
-journals_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4954/trunk/app/controllers/journals_controller.rb
-END
-time_entry_reports_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/4232/trunk/app/controllers/time_entry_reports_controller.rb
-END
-workflows_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4895/trunk/app/controllers/workflows_controller.rb
-END
-reports_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/3692/trunk/app/controllers/reports_controller.rb
-END
-project_enumerations_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/4075/trunk/app/controllers/project_enumerations_controller.rb
-END
-custom_fields_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/3627/trunk/app/controllers/custom_fields_controller.rb
-END
-settings_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4432/trunk/app/controllers/settings_controller.rb
-END
-timelog_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4511/trunk/app/controllers/timelog_controller.rb
-END
-issue_moves_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/4292/trunk/app/controllers/issue_moves_controller.rb
-END
-users_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/4729/trunk/app/controllers/users_controller.rb
-END
-files_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/4177/trunk/app/controllers/files_controller.rb
-END
-application_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/4573/trunk/app/controllers/application_controller.rb
-END
-previews_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4174/trunk/app/controllers/previews_controller.rb
-END
-ldap_auth_sources_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/3744/trunk/app/controllers/ldap_auth_sources_controller.rb
-END
-auth_sources_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/3744/trunk/app/controllers/auth_sources_controller.rb
-END
-search_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/3806/trunk/app/controllers/search_controller.rb
-END
-messages_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/3528/trunk/app/controllers/messages_controller.rb
-END
-issue_relations_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/4764/trunk/app/controllers/issue_relations_controller.rb
-END
-versions_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4354/trunk/app/controllers/versions_controller.rb
-END
-boards_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/3942/trunk/app/controllers/boards_controller.rb
-END
-attachments_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/3281/trunk/app/controllers/attachments_controller.rb
-END
-news_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4505/trunk/app/controllers/news_controller.rb
-END
-trackers_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/3627/trunk/app/controllers/trackers_controller.rb
-END
-groups_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/3934/trunk/app/controllers/groups_controller.rb
-END
-issue_statuses_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/3416/trunk/app/controllers/issue_statuses_controller.rb
-END
-roles_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/3627/trunk/app/controllers/roles_controller.rb
-END
-wikis_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/3370/trunk/app/controllers/wikis_controller.rb
-END
-repositories_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4860/trunk/app/controllers/repositories_controller.rb
-END
-admin_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/3200/trunk/app/controllers/admin_controller.rb
-END
-projects_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4647/trunk/app/controllers/projects_controller.rb
-END
-account_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4757/trunk/app/controllers/account_controller.rb
-END
-calendars_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4388/trunk/app/controllers/calendars_controller.rb
-END
-issue_categories_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/3597/trunk/app/controllers/issue_categories_controller.rb
-END
-gantts_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/4388/trunk/app/controllers/gantts_controller.rb
-END
-documents_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/3597/trunk/app/controllers/documents_controller.rb
-END
-wiki_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4429/trunk/app/controllers/wiki_controller.rb
-END
-activities_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4579/trunk/app/controllers/activities_controller.rb
-END
-enumerations_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/3524/trunk/app/controllers/enumerations_controller.rb
-END
--- a/app/controllers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/controllers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/controllers
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-27T13:34:41.060565Z
-4954
+2011-05-29T07:24:15.223638Z
+5946
 jplang
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-b2f39d4816a34c8fdbe451324ff298e4
-2011-01-22T13:28:20.816262Z
-4741
-jplang
+2011-06-06T13:18:33.000000Z
+d59e2a3cb278ad2ba6a857ef6f85996f
+2011-05-17T04:34:03.515027Z
+5823
+tmaruyama
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-12253
+12798
 
 queries_controller.rb
 file
@@ -66,11 +66,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-7ad6758cfd160c4b6ef6d71be06e087c
-2010-04-19T15:08:28.751734Z
-3684
-edavis10
+2011-06-06T13:18:33.000000Z
+d5fb2cc0fcbed592991370967f38af2b
+2011-04-03T14:31:32.940784Z
+5304
+jplang
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-2999
+3261
 
 sys_controller.rb
 file
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 7a73aba15fcd447531d1552de01706d9
 2009-12-20T09:44:28.044710Z
 3201
@@ -134,11 +134,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-612f3e7497e14c728934e83fbe5778c4
-2009-12-20T09:45:04.782778Z
-3202
-jplang
+2011-06-06T13:18:33.000000Z
+a198d0cd4a30c00a40a646cecbbe71e2
+2011-05-18T07:13:08.785903Z
+5838
+tmaruyama
 has-props
 
 
@@ -160,7 +160,7 @@
 
 
 
-1588
+1571
 
 watchers_controller.rb
 file
@@ -168,11 +168,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-3ee494bd8196306eab8913bd462b44da
-2010-06-20T16:08:15.578906Z
-3798
-edavis10
+2011-06-06T13:18:33.000000Z
+74083636df6bb82e8dc1f4fbd3da2882
+2011-04-05T12:09:15.508559Z
+5320
+jplang
 has-props
 
 
@@ -194,7 +194,7 @@
 
 
 
-3234
+3021
 
 auto_completes_controller.rb
 file
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 edbdb443ff7cc8f299f7772b3532eca1
 2010-12-12T16:06:43.892596Z
 4503
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 40ea055e0f9f9aa83680751fdab5a0a5
 2010-12-12T14:25:23.262992Z
 4497
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 c2289eb9b654117a101c072955d4c705
 2010-09-23T15:20:19.085385Z
 4172
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 20e245fa61dc0dcb2f105a8f0e6af98c
 2010-06-19T19:51:43.174421Z
 3784
@@ -338,10 +338,10 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-596c3ab10f8cf4687f6d8b163e7a2243
-2010-12-29T19:55:52.079810Z
-4580
+2011-06-06T13:18:33.000000Z
+ee556c18cb658bef786cc6f69388f9b8
+2011-04-17T15:17:18.418900Z
+5495
 jplang
 
 
@@ -364,7 +364,7 @@
 
 
 
-1847
+2432
 
 welcome_controller.rb
 file
@@ -372,7 +372,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 95ad1acf7766861a4dbd0aebd9c847de
 2009-10-21T03:21:31.657956Z
 2941
@@ -406,10 +406,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-0610cb98929633e94c97f1060f4f1566
-2011-02-27T13:34:41.060565Z
-4954
+2011-06-06T13:18:33.000000Z
+ddbc5c8699b975f1a27001b7ffd6d930
+2011-03-06T16:04:35.458860Z
+5021
 jplang
 has-props
 
@@ -432,7 +432,7 @@
 
 
 
-4081
+4105
 
 time_entry_reports_controller.rb
 file
@@ -440,7 +440,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 dadcb57d89dc3c90c5fa099b143c07f8
 2010-10-05T16:07:17.015270Z
 4232
@@ -474,7 +474,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 73cdba17212ad890eea7b7c7ee140d7e
 2011-02-20T15:38:07.840581Z
 4895
@@ -508,7 +508,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 8f7e6e7308912a6169a700b0c88174a0
 2010-04-27T16:43:52.584075Z
 3692
@@ -542,7 +542,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 828b364ba2850ceddb3caa566bf10124
 2010-09-10T16:00:49.687515Z
 4075
@@ -570,17 +570,17 @@
 
 856
 
-custom_fields_controller.rb
+timelog_controller.rb
 file
 
 
 
 
-2011-03-03T11:05:10.000000Z
-00272455ac5be11da48f92c4a443c538
-2010-04-03T11:54:24.331654Z
-3627
-winterheart
+2011-06-06T13:18:33.000000Z
+240786bf604abb8c412b2776b93a2795
+2011-05-29T07:24:15.223638Z
+5946
+jplang
 has-props
 
 
@@ -602,7 +602,7 @@
 
 
 
-2373
+12415
 
 settings_controller.rb
 file
@@ -610,10 +610,78 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-98c4c9f33f038160a44752d229926c32
-2010-11-27T14:06:11.754120Z
-4432
+2011-06-06T13:18:33.000000Z
+cef6dc401dea01bdddca8a8a405aeaee
+2011-05-18T02:18:47.811055Z
+5827
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2286
+
+custom_fields_controller.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+e87f5ffac690480de57ac0a90daad01c
+2011-05-01T23:15:03.415033Z
+5611
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2395
+
+users_controller.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+24f3515ac133508d948f9b73fca6656a
+2011-04-05T12:57:18.861470Z
+5328
 jplang
 has-props
 
@@ -636,41 +704,7 @@
 
 
 
-2271
-
-timelog_controller.rb
-file
-
-
-
-
-2011-03-03T11:05:10.000000Z
-3e6698f208a263105c7b4a59c60b26b3
-2010-12-14T18:29:24.891563Z
-4511
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-10484
+8639
 
 issue_moves_controller.rb
 file
@@ -678,67 +712,33 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-cacd6ffe0ce299e2ede9d45b7ef8af42
-2010-10-25T18:44:46.868009Z
-4292
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2441
-
-users_controller.rb
-file
-
-
-
-
-2011-03-03T11:05:10.000000Z
-7860374d98cda03916d9b06d9ec8d370
-2011-01-16T15:23:11.666065Z
-4729
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-8474
+2011-06-06T13:18:33.000000Z
+cbd01754dc3edc7ce30bd9e401608908
+2011-05-17T03:59:02.899695Z
+5821
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2435
 
 files_controller.rb
 file
@@ -746,33 +746,33 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-f0246e8f8dde5ea7b93e4dc2162181fc
-2010-09-26T08:07:41.604064Z
-4177
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1289
+2011-06-06T13:18:33.000000Z
+e40d3a7211765dd6a7dd0fde90906bab
+2011-05-18T07:12:48.748391Z
+5837
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1273
 
 application_controller.rb
 file
@@ -780,11 +780,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-218c497f1c4c6d7b41cdac214e595156
-2010-12-23T14:49:14.339855Z
-4573
-jplang
+2011-06-06T13:18:33.000000Z
+bc154e2fdd08480fb618932b2f969313
+2011-05-12T04:25:47.924303Z
+5749
+tmaruyama
 has-props
 
 
@@ -806,75 +806,7 @@
 
 
 
-15545
-
-previews_controller.rb
-file
-
-
-
-
-2011-03-03T11:05:10.000000Z
-c5ae4fae18159e70fd81c2487bb1daa1
-2010-09-24T16:26:46.819682Z
-4174
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-957
-
-ldap_auth_sources_controller.rb
-file
-
-
-
-
-2011-03-03T11:05:10.000000Z
-5f7b9cb2e9c8a60db58ea0833cf481c5
-2010-05-23T03:16:31.304135Z
-3744
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-917
+15561
 
 auth_sources_controller.rb
 file
@@ -882,7 +814,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 237280766d09418161536250d514a7bf
 2010-05-23T03:16:31.304135Z
 3744
@@ -910,13 +842,81 @@
 
 2542
 
+ldap_auth_sources_controller.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+5f7b9cb2e9c8a60db58ea0833cf481c5
+2010-05-23T03:16:31.304135Z
+3744
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+917
+
+previews_controller.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+fa4b7467e77f8a7bc86ff60a68052684
+2011-03-28T21:45:30.892324Z
+5246
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1754
+
 search_controller.rb
 file
 
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 0015154998f830227b636ee423f007f3
 2010-06-20T20:01:32.722003Z
 3806
@@ -950,7 +950,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 f3f4378ec15e1401ead0dcac4e9cb059
 2010-03-03T17:05:00.967826Z
 3528
@@ -978,13 +978,47 @@
 
 5824
 
+versions_controller.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+a98fb262a20669600a85c0f72202c5e6
+2010-11-01T13:13:32.982466Z
+4354
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6241
+
 issue_relations_controller.rb
 file
 
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 8c5249f85056c74e0ab06b5dfa9fed72
 2011-01-27T21:38:47.430923Z
 4764
@@ -1012,47 +1046,13 @@
 
 2450
 
-versions_controller.rb
-file
-
-
-
-
-2011-03-03T11:05:10.000000Z
-a98fb262a20669600a85c0f72202c5e6
-2010-11-01T13:13:32.982466Z
-4354
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-6241
-
 boards_controller.rb
 file
 
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 52638c82da929081099076d5aa0f9212
 2010-08-16T23:39:27.396462Z
 3942
@@ -1086,11 +1086,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-21c0e5d894d1429ac39f3253ae021594
-2010-01-05T18:16:03.565347Z
-3281
-jplang
+2011-06-06T13:18:33.000000Z
+c679c8cbf25d1c5d30e2f88bb177a202
+2011-05-18T07:12:27.059090Z
+5836
+tmaruyama
 has-props
 
 
@@ -1112,7 +1112,7 @@
 
 
 
-2982
+2954
 
 news_controller.rb
 file
@@ -1120,10 +1120,10 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-cb358f888a6a92cc99bef83af92cd766
-2010-12-12T17:00:52.100205Z
-4505
+2011-06-06T13:18:33.000000Z
+cc665f966818b086c188baf351bf8966
+2011-03-04T14:32:58.878627Z
+5003
 jplang
 has-props
 
@@ -1146,7 +1146,7 @@
 
 
 
-3369
+3396
 
 trackers_controller.rb
 file
@@ -1154,7 +1154,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 a5e793eb94e501be4c1a39acc65cc568
 2010-04-03T11:54:24.331654Z
 3627
@@ -1188,11 +1188,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-77209ec52ddcefafb0bfbb76195167ec
-2010-08-10T22:37:00.826946Z
-3934
-jbbarth
+2011-06-06T13:18:33.000000Z
+4e6c1f74ad57c0df68dfb3a6c6432a2e
+2011-04-01T16:47:30.350690Z
+5284
+jplang
 has-props
 
 
@@ -1214,7 +1214,7 @@
 
 
 
-5214
+5213
 
 issue_statuses_controller.rb
 file
@@ -1222,7 +1222,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 f0fdda9126d71c0b2d4638de50ab1097
 2010-02-12T19:15:39.389877Z
 3416
@@ -1256,11 +1256,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-28f2e44219870c62c9844354b78af6e1
-2010-04-03T11:54:24.331654Z
-3627
-winterheart
+2011-06-06T13:18:33.000000Z
+18be86518ea841401ee1c2b3233d72a4
+2011-05-01T23:15:03.415033Z
+5611
+tmaruyama
 has-props
 
 
@@ -1282,7 +1282,7 @@
 
 
 
-2612
+2638
 
 wikis_controller.rb
 file
@@ -1290,7 +1290,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 7ae79a9d22586240a01af73834b718a3
 2010-02-05T16:57:02.094258Z
 3370
@@ -1324,10 +1324,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-5511ecf5c7190efe44398994a222b486
-2011-02-17T14:17:04.791825Z
-4860
+2011-06-06T13:18:33.000000Z
+5f8aa278140d3fe42d722efd89fda547
+2011-05-21T06:16:19.667418Z
+5875
 tmaruyama
 has-props
 
@@ -1350,7 +1350,7 @@
 
 
 
-11539
+12667
 
 admin_controller.rb
 file
@@ -1358,11 +1358,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-ed65a11326fe54914ba3a750a2b6f943
-2009-12-19T20:33:24.113306Z
-3200
-jplang
+2011-06-06T13:18:33.000000Z
+4577094f50fcbc76c8dba52341a2fbe2
+2011-04-25T23:21:34.669083Z
+5550
+tmaruyama
 has-props
 
 
@@ -1384,7 +1384,7 @@
 
 
 
-3104
+3119
 
 projects_controller.rb
 file
@@ -1392,10 +1392,10 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-c07d79c1bd100dd8972ea408c4fe549f
-2011-01-06T20:57:17.003359Z
-4647
+2011-06-06T13:18:33.000000Z
+34607f6af6fe864c4f2be4fba2d288fc
+2011-04-29T07:26:45.965477Z
+5581
 jplang
 has-props
 
@@ -1418,7 +1418,7 @@
 
 
 
-10103
+10004
 
 account_controller.rb
 file
@@ -1426,7 +1426,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 7b162cad903bb22948f7040a48509256
 2011-01-23T11:40:07.678287Z
 4757
@@ -1460,10 +1460,10 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-0be20cab6d5ea49f428a90cf3afef3e3
-2010-11-07T22:38:10.728638Z
-4388
+2011-06-06T13:18:33.000000Z
+4bc844343a8613ab25bd4c76969d566a
+2011-04-01T14:34:44.070899Z
+5276
 jplang
 
 
@@ -1486,7 +1486,7 @@
 
 
 
-1390
+2155
 
 issue_categories_controller.rb
 file
@@ -1494,11 +1494,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-119ceb4a27aa554d03867f46cb142d0e
-2010-03-17T15:41:58.766740Z
-3597
-edavis10
+2011-06-06T13:18:33.000000Z
+c42630be286026f052791d256b487246
+2011-05-01T23:15:03.415033Z
+5611
+tmaruyama
 has-props
 
 
@@ -1520,7 +1520,7 @@
 
 
 
-3338
+3364
 
 gantts_controller.rb
 file
@@ -1528,10 +1528,10 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-81dbee1745da99b9ea499f3fbe1d3944
-2010-11-07T22:38:10.728638Z
-4388
+2011-06-06T13:18:33.000000Z
+8093015b8337589c3a8dd96f912a626c
+2011-04-01T14:34:44.070899Z
+5276
 jplang
 
 
@@ -1554,7 +1554,7 @@
 
 
 
-1019
+1786
 
 documents_controller.rb
 file
@@ -1562,7 +1562,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 c2c68bf5fa3ed22a8f55c8414d1efce9
 2010-03-17T15:41:58.766740Z
 3597
@@ -1596,11 +1596,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-ccc57886f63cb0efb0149b601dd2ac43
-2010-11-27T10:34:44.408431Z
-4429
-jplang
+2011-06-06T13:18:33.000000Z
+4e9a4e1dd2d09a4cee7f4df56e8659f1
+2011-05-17T04:34:44.952857Z
+5824
+tmaruyama
 has-props
 
 
@@ -1622,7 +1622,7 @@
 
 
 
-10185
+10000
 
 activities_controller.rb
 file
@@ -1630,33 +1630,33 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-ad33818a03b408419be4e616e8c88b5c
-2010-12-29T19:37:42.740543Z
-4579
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2037
+2011-06-06T13:18:33.000000Z
+9c942b1453ca9c17ecdda63d252646dc
+2011-05-18T07:12:04.304929Z
+5835
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2018
 
 enumerations_controller.rb
 file
@@ -1664,11 +1664,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-1caaedc7bb0a3085878dc94446c70ab0
-2010-03-02T20:03:09.514061Z
-3524
-jplang
+2011-06-06T13:18:33.000000Z
+4c46e4cd141ad0a3534b60df7be534bc
+2011-05-01T23:15:03.415033Z
+5611
+tmaruyama
 has-props
 
 
@@ -1690,5 +1690,5 @@
 
 
 
-2706
+2734
 
--- a/app/controllers/.svn/text-base/activities_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/activities_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -5,7 +5,7 @@
 
   def index
     @days = Setting.activity_days_default.to_i
-    
+
     if params[:from]
       begin; @date_to = params[:from].to_date + 1; rescue; end
     end
@@ -14,18 +14,18 @@
     @date_from = @date_to - @days
     @with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
     @author = (params[:user_id].blank? ? nil : User.active.find(params[:user_id]))
-    
-    @activity = Redmine::Activity::Fetcher.new(User.current, :project => @project, 
+
+    @activity = Redmine::Activity::Fetcher.new(User.current, :project => @project,
                                                              :with_subprojects => @with_subprojects,
                                                              :author => @author)
     @activity.scope_select {|t| !params["show_#{t}"].nil?}
     @activity.scope = (@author.nil? ? :default : :all) if @activity.scope.empty?
 
     events = @activity.events(@date_from, @date_to)
-    
+
     if events.empty? || stale?(:etag => [@activity.scope, @date_to, @date_from, @with_subprojects, @author, events.first, User.current, current_language])
       respond_to do |format|
-        format.html { 
+        format.html {
           @events_by_day = events.group_by(&:event_date)
           render :layout => false if request.xhr?
         }
@@ -40,7 +40,7 @@
         }
       end
     end
-    
+
   rescue ActiveRecord::RecordNotFound
     render_404
   end
@@ -55,5 +55,4 @@
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-
 end
--- a/app/controllers/.svn/text-base/admin_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/admin_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -17,9 +17,7 @@
 
 class AdminController < ApplicationController
   layout 'admin'
-  
   before_filter :require_admin
-
   helper :sort
   include SortHelper	
 
@@ -30,22 +28,20 @@
   def projects
     @status = params[:status] ? params[:status].to_i : 1
     c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
-    
     unless params[:name].blank?
       name = "%#{params[:name].strip.downcase}%"
       c << ["LOWER(identifier) LIKE ? OR LOWER(name) LIKE ?", name, name]
     end
-    
     @projects = Project.find :all, :order => 'lft',
                                    :conditions => c.conditions
 
     render :action => "projects", :layout => false if request.xhr?
   end
-  
+
   def plugins
     @plugins = Redmine::Plugin.all
   end
-  
+
   # Loads the default configuration
   # (roles, trackers, statuses, workflow, enumerations)
   def default_configuration
@@ -59,7 +55,7 @@
     end
     redirect_to :action => 'index'
   end
-  
+
   def test_email
     raise_delivery_errors = ActionMailer::Base.raise_delivery_errors
     # Force ActionMailer to raise delivery errors so we can catch it
@@ -73,14 +69,16 @@
     ActionMailer::Base.raise_delivery_errors = raise_delivery_errors
     redirect_to :controller => 'settings', :action => 'edit', :tab => 'notifications'
   end
-  
+
   def info
     @db_adapter_name = ActiveRecord::Base.connection.adapter_name
     @checklist = [
-      [:text_default_administrator_account_changed, User.find(:first, :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?],
+      [:text_default_administrator_account_changed,
+          User.find(:first,
+                    :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?],
       [:text_file_repository_writable, File.writable?(Attachment.storage_path)],
-      [:text_plugin_assets_writable, File.writable?(Engines.public_directory)],
-      [:text_rmagick_available, Object.const_defined?(:Magick)]
+      [:text_plugin_assets_writable,   File.writable?(Engines.public_directory)],
+      [:text_rmagick_available,        Object.const_defined?(:Magick)]
     ]
-  end  
+  end
 end
--- a/app/controllers/.svn/text-base/application_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/application_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -23,29 +23,29 @@
 
   layout 'base'
   exempt_from_layout 'builder', 'rsb'
-  
+
   # Remove broken cookie after upgrade from 0.8.x (#4292)
   # See https://rails.lighthouseapp.com/projects/8994/tickets/3360
   # TODO: remove it when Rails is fixed
   before_filter :delete_broken_cookies
   def delete_broken_cookies
     if cookies['_redmine_session'] && cookies['_redmine_session'] !~ /--/
-      cookies.delete '_redmine_session'    
+      cookies.delete '_redmine_session'
       redirect_to home_path
       return false
     end
   end
-  
+
   before_filter :user_setup, :check_if_login_required, :set_localization
   filter_parameter_logging :password
   protect_from_forgery
-  
+
   rescue_from ActionController::InvalidAuthenticityToken, :with => :invalid_authenticity_token
-  
+
   include Redmine::Search::Controller
   include Redmine::MenuManager::MenuController
   helper Redmine::MenuManager::MenuHelper
-  
+
   Redmine::Scm::Base.all.each do |scm|
     require_dependency "repository/#{scm.underscore}"
   end
@@ -56,7 +56,7 @@
     # Find the current user
     User.current = find_current_user
   end
-  
+
   # Returns the current user or nil if no user is logged in
   # and starts a session if needed
   def find_current_user
@@ -94,14 +94,14 @@
       User.current = User.anonymous
     end
   end
-  
+
   # check if login is globally required to access the application
   def check_if_login_required
     # no check needed if user is already logged in
     return true if User.current.logged?
     require_login if Setting.login_required?
-  end 
-  
+  end
+
   def set_localization
     lang = nil
     if User.current.logged?
@@ -117,7 +117,7 @@
     lang ||= Setting.default_language
     set_language_if_valid(lang)
   end
-  
+
   def require_login
     if !User.current.logged?
       # Extract only the basic url parameters on non-GET requests
@@ -146,7 +146,7 @@
     end
     true
   end
-  
+
   def deny_access
     User.current.logged? ? render_403 : require_login
   end
@@ -197,7 +197,7 @@
   # Finds and sets @project based on @object.project
   def find_project_from_association
     render_404 unless @object.present?
-    
+
     @project = @object.project
   rescue ActiveRecord::RecordNotFound
     render_404
@@ -221,12 +221,16 @@
   def find_issues
     @issues = Issue.find_all_by_id(params[:id] || params[:ids])
     raise ActiveRecord::RecordNotFound if @issues.empty?
+    if @issues.detect {|issue| !issue.visible?}
+      deny_access
+      return
+    end
     @projects = @issues.collect(&:project).compact.uniq
     @project = @projects.first if @projects.size == 1
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-  
+
   # Check if project is unique before bulk operations
   def check_project_uniqueness
     unless @project
@@ -235,7 +239,7 @@
       return false
     end
   end
-  
+
   # make sure that the user is a member of the project (or admin) if project is private
   # used as a before_filter for actions that do not require any particular permission on the project
   def check_project_privacy
@@ -271,27 +275,28 @@
       end
     end
     redirect_to default
+    false
   end
-  
+
   def render_403(options={})
     @project = nil
     render_error({:message => :notice_not_authorized, :status => 403}.merge(options))
     return false
   end
-    
+
   def render_404(options={})
     render_error({:message => :notice_file_not_found, :status => 404}.merge(options))
     return false
   end
-  
+
   # Renders an error response
   def render_error(arg)
     arg = {:message => arg} unless arg.is_a?(Hash)
-    
+
     @message = arg[:message]
     @message = l(@message) if @message.is_a?(Symbol)
     @status = arg[:status] || 500
-    
+
     respond_to do |format|
       format.html {
         render :template => 'common/error', :layout => use_layout, :status => @status
@@ -309,31 +314,31 @@
   def use_layout
     request.xhr? ? false : 'base'
   end
-  
+
   def invalid_authenticity_token
     if api_request?
       logger.error "Form authenticity token is missing or is invalid. API calls must include a proper Content-type header (text/xml or text/json)."
     end
     render_error "Invalid form authenticity token."
   end
-  
-  def render_feed(items, options={})    
+
+  def render_feed(items, options={})
     @items = items || []
     @items.sort! {|x,y| y.event_datetime <=> x.event_datetime }
     @items = @items.slice(0, Setting.feeds_limit.to_i)
     @title = options[:title] || Setting.app_title
     render :template => "common/feed.atom.rxml", :layout => false, :content_type => 'application/atom+xml'
   end
-  
+
   def self.accept_key_auth(*actions)
     actions = actions.flatten.map(&:to_s)
     write_inheritable_attribute('accept_key_auth_actions', actions)
   end
-  
+
   def accept_key_auth_actions
     self.class.read_inheritable_attribute('accept_key_auth_actions') || []
   end
-  
+
   # Returns the number of objects that should be displayed
   # on the paginated list
   def per_page_option
@@ -369,10 +374,10 @@
       offset = 0 if offset < 0
     end
     offset ||= 0
-    
+
     [offset, limit]
   end
-  
+
   # qvalues http header parser
   # code taken from webrick
   def parse_qvalues(value)
@@ -393,16 +398,16 @@
   rescue
     nil
   end
-  
+
   # Returns a string that can be used as filename value in Content-Disposition header
   def filename_for_content_disposition(name)
     request.env['HTTP_USER_AGENT'] =~ %r{MSIE} ? ERB::Util.url_encode(name) : name
   end
-  
+
   def api_request?
     %w(xml json).include? params[:format]
   end
-  
+
   # Returns the API key present in the request
   def api_key_from_request
     if params[:key].present?
@@ -459,7 +464,7 @@
     )
     render options
   end
-  
+
   # Overrides #default_template so that the api template
   # is used automatically if it exists
   def default_template(action_name = self.action_name)
@@ -473,7 +478,7 @@
     end
     super
   end
-  
+
   # Overrides #pick_layout so that #render with no arguments
   # doesn't use the layout for api requests
   def pick_layout(*args)
--- a/app/controllers/.svn/text-base/attachments_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/attachments_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,9 +19,9 @@
   before_filter :find_project
   before_filter :file_readable, :read_authorize, :except => :destroy
   before_filter :delete_authorize, :only => :destroy
-  
+
   verify :method => :post, :only => :destroy
-  
+
   def show
     if @attachment.is_diff?
       @diff = File.new(@attachment.diskfile, "rb").read
@@ -33,19 +33,19 @@
       download
     end
   end
-  
+
   def download
     if @attachment.container.is_a?(Version) || @attachment.container.is_a?(Project)
       @attachment.increment_download
     end
-    
+
     # images are sent inline
     send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename),
-                                    :type => detect_content_type(@attachment), 
+                                    :type => detect_content_type(@attachment),
                                     :disposition => (@attachment.image? ? 'inline' : 'attachment')
-   
+
   end
-  
+
   def destroy
     # Make sure association callbacks are called
     @attachment.container.attachments.delete(@attachment)
@@ -53,7 +53,7 @@
   rescue ::ActionController::RedirectBackError
     redirect_to :controller => 'projects', :action => 'show', :id => @project
   end
-  
+
 private
   def find_project
     @attachment = Attachment.find(params[:id])
@@ -63,20 +63,20 @@
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-  
+
   # Checks that the file exists and is readable
   def file_readable
     @attachment.readable? ? true : render_404
   end
-  
+
   def read_authorize
     @attachment.visible? ? true : deny_access
   end
-  
+
   def delete_authorize
     @attachment.deletable? ? true : deny_access
   end
-  
+
   def detect_content_type(attachment)
     content_type = attachment.content_type
     if content_type.blank?
--- a/app/controllers/.svn/text-base/calendars_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/calendars_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,3 +1,20 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
 class CalendarsController < ApplicationController
   menu_item :calendar
   before_filter :find_optional_project
@@ -36,9 +53,4 @@
     
     render :action => 'show', :layout => false if request.xhr?
   end
-  
-  def update
-    show
-  end
-
 end
--- a/app/controllers/.svn/text-base/context_menus_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/context_menus_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,6 @@
 class ContextMenusController < ApplicationController
   helper :watchers
+  helper :issues
   
   def issues
     @issues = Issue.visible.all(:conditions => {:id => params[:ids]}, :include => :project)
@@ -40,5 +41,18 @@
     
     render :layout => false
   end
-  
+
+  def time_entries
+    @time_entries = TimeEntry.all(
+       :conditions => {:id => params[:ids]}, :include => :project)
+    @projects = @time_entries.collect(&:project).compact.uniq
+    @project = @projects.first if @projects.size == 1
+    @activities = TimeEntryActivity.shared.active
+    @can = {:edit   => User.current.allowed_to?(:log_time, @projects),
+            :update => User.current.allowed_to?(:log_time, @projects),
+            :delete => User.current.allowed_to?(:log_time, @projects)
+            }
+    @back = back_url
+    render :layout => false
+  end  
 end
--- a/app/controllers/.svn/text-base/custom_fields_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/custom_fields_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -38,8 +38,9 @@
       flash[:notice] = l(:notice_successful_create)
       call_hook(:controller_custom_fields_new_after_save, :params => params, :custom_field => @custom_field)
       redirect_to :action => 'index', :tab => @custom_field.class.name
+    else
+      @trackers = Tracker.find(:all, :order => 'position')
     end
-    @trackers = Tracker.find(:all, :order => 'position')
   end
 
   def edit
@@ -48,8 +49,9 @@
       flash[:notice] = l(:notice_successful_update)
       call_hook(:controller_custom_fields_edit_after_save, :params => params, :custom_field => @custom_field)
       redirect_to :action => 'index', :tab => @custom_field.class.name
+    else
+      @trackers = Tracker.find(:all, :order => 'position')
     end
-    @trackers = Tracker.find(:all, :order => 'position')
   end
   
   def destroy
--- a/app/controllers/.svn/text-base/enumerations_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/enumerations_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -75,10 +75,12 @@
       # No associated objects
       @enumeration.destroy
       redirect_to :action => 'index'
+      return
     elsif params[:reassign_to_id]
       if reassign_to = @enumeration.class.find_by_id(params[:reassign_to_id])
         @enumeration.destroy(reassign_to)
         redirect_to :action => 'index'
+        return
       end
     end
     @enumerations = @enumeration.class.find(:all) - [@enumeration]
--- a/app/controllers/.svn/text-base/files_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/files_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -13,7 +13,7 @@
                 'created_on' => "#{Attachment.table_name}.created_on",
                 'size' => "#{Attachment.table_name}.filesize",
                 'downloads' => "#{Attachment.table_name}.downloads"
-                
+
     @containers = [ Project.find(@project.id, :include => :attachments, :order => sort_clause)]
     @containers += @project.versions.find(:all, :include => :attachments, :order => sort_clause).sort.reverse
     render :layout => !request.xhr?
--- a/app/controllers/.svn/text-base/gantts_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/gantts_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,3 +1,20 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
 class GanttsController < ApplicationController
   menu_item :gantt
   before_filter :find_optional_project
@@ -28,9 +45,4 @@
       format.pdf  { send_data(@gantt.to_pdf, :type => 'application/pdf', :filename => "#{basename}.pdf") }
     end
   end
-
-  def update
-    show
-  end
-
 end
--- a/app/controllers/.svn/text-base/groups_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/groups_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -132,7 +132,7 @@
   
   def autocomplete_for_user
     @group = Group.find(params[:id])
-    @users = User.active.like(params[:q]).find(:all, :limit => 100) - @group.users
+    @users = User.active.not_in_group(@group).like(params[:q]).all(:limit => 100)
     render :layout => false
   end
   
--- a/app/controllers/.svn/text-base/issue_categories_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/issue_categories_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -65,10 +65,12 @@
       # No issue assigned to this category
       @category.destroy
       redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'categories'
+      return
     elsif params[:todo]
       reassign_to = @project.issue_categories.find_by_id(params[:reassign_to_id]) if params[:todo] == 'reassign'
       @category.destroy(reassign_to)
       redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'categories'
+      return
     end
     @categories = @project.issue_categories - [@category]
   end
--- a/app/controllers/.svn/text-base/issue_moves_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/issue_moves_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -2,7 +2,7 @@
   default_search_scope :issues
   before_filter :find_issues, :check_project_uniqueness
   before_filter :authorize
-  
+
   def new
     prepare_for_issue_move
     render :layout => false if request.xhr?
@@ -48,7 +48,7 @@
     @copy = params[:copy_options] && params[:copy_options][:copy]
     @allowed_projects = Issue.allowed_target_projects_on_move
     @target_project = @allowed_projects.detect {|p| p.id.to_s == params[:new_project_id]} if params[:new_project_id]
-    @target_project ||= @project    
+    @target_project ||= @project
     @trackers = @target_project.trackers
     @available_statuses = Workflow.available_statuses(@project)
     @notes = params[:notes]
--- a/app/controllers/.svn/text-base/issues_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/issues_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -18,7 +18,7 @@
 class IssuesController < ApplicationController
   menu_item :new_issue, :only => [:new, :create]
   default_search_scope :issues
-  
+
   before_filter :find_issue, :only => [:show, :edit, :update]
   before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :move, :perform_move, :destroy]
   before_filter :check_project_uniqueness, :only => [:move, :perform_move]
@@ -30,10 +30,10 @@
   accept_key_auth :index, :show, :create, :update, :destroy
 
   rescue_from Query::StatementInvalid, :with => :query_statement_invalid
-  
+
   helper :journals
   helper :projects
-  include ProjectsHelper   
+  include ProjectsHelper
   helper :custom_fields
   include CustomFieldsHelper
   helper :issue_relations
@@ -60,12 +60,12 @@
   verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
   verify :method => :post, :only => :bulk_update, :render => {:nothing => true, :status => :method_not_allowed }
   verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
-  
+
   def index
     retrieve_query
     sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria)
     sort_update(@query.sortable_columns)
-    
+
     if @query.valid?
       case params[:format]
       when 'csv', 'pdf'
@@ -77,16 +77,16 @@
       else
         @limit = per_page_option
       end
-      
+
       @issue_count = @query.issue_count
       @issue_pages = Paginator.new self, @issue_count, @limit, params['page']
       @offset ||= @issue_pages.current.offset
       @issues = @query.issues(:include => [:assigned_to, :tracker, :priority, :category, :fixed_version],
-                              :order => sort_clause, 
-                              :offset => @offset, 
+                              :order => sort_clause,
+                              :offset => @offset,
                               :limit => @limit)
       @issue_count_by_group = @query.issue_count_by_group
-      
+
       respond_to do |format|
         format.html { render :template => 'issues/index.rhtml', :layout => !request.xhr? }
         format.api
@@ -101,18 +101,22 @@
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-  
+
   def show
     @journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
     @journals.each_with_index {|j,i| j.indice = i+1}
     @journals.reverse! if User.current.wants_comments_in_reverse_order?
-    @changesets = @issue.changesets.visible.all
-    @changesets.reverse! if User.current.wants_comments_in_reverse_order?
+
+    if User.current.allowed_to?(:view_changesets, @project)
+      @changesets = @issue.changesets.visible.all
+      @changesets.reverse! if User.current.wants_comments_in_reverse_order?
+    end
+
     @relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
     @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
     @edit_allowed = User.current.allowed_to?(:edit_issues, @project)
     @priorities = IssuePriority.all
-    @time_entry = TimeEntry.new
+    @time_entry = TimeEntry.new(:issue => @issue, :project => @issue.project)
     respond_to do |format|
       format.html { render :template => 'issues/show.rhtml' }
       format.api
@@ -152,7 +156,7 @@
       end
     end
   end
-    
+
   def edit
     update_issue_from_params
 
@@ -214,7 +218,7 @@
     set_flash_from_bulk_issue_save(@issues, unsaved_issue_ids)
     redirect_back_or_default({:controller => 'issues', :action => 'index', :project_id => @project})
   end
-  
+
   def destroy
     @hours = TimeEntry.sum(:hours, :conditions => ['issue_id IN (?)', @issues]).to_f
     if @hours > 0
@@ -236,7 +240,13 @@
         return unless api_request?
       end
     end
-    @issues.each(&:destroy)
+    @issues.each do |issue|
+      begin
+        issue.reload.destroy
+      rescue ::ActiveRecord::RecordNotFound # raised by #reload if issue no longer exists
+        # nothing to do, issue was already deleted (eg. by a parent)
+      end
+    end
     respond_to do |format|
       format.html { redirect_back_or_default(:action => 'index', :project_id => @project) }
       format.api  { head :ok }
@@ -245,19 +255,25 @@
 
 private
   def find_issue
+    # Issue.visible.find(...) can not be used to redirect user to the login form
+    # if the issue actually exists but requires authentication
     @issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
+    unless @issue.visible?
+      deny_access
+      return
+    end
     @project = @issue.project
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-  
+
   def find_project
     project_id = (params[:issue] && params[:issue][:project_id]) || params[:project_id]
     @project = Project.find(project_id)
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-  
+
   # Used by #edit and #update to set some common instance variables
   # from the params
   # TODO: Refactor, not everything in here is needed by #edit
@@ -265,9 +281,9 @@
     @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
     @priorities = IssuePriority.all
     @edit_allowed = User.current.allowed_to?(:edit_issues, @project)
-    @time_entry = TimeEntry.new
+    @time_entry = TimeEntry.new(:issue => @issue, :project => @issue.project)
     @time_entry.attributes = params[:time_entry]
-    
+
     @notes = params[:notes] || (params[:issue].present? ? params[:issue][:notes] : nil)
     @issue.init_journal(User.current, @notes)
     @issue.safe_attributes = params[:issue]
@@ -283,7 +299,7 @@
     else
       @issue = @project.issues.visible.find(params[:id])
     end
-    
+
     @issue.project = @project
     # Tracker must be set before custom field values
     @issue.tracker ||= @project.trackers.find((params[:issue] && params[:issue][:tracker_id]) || params[:tracker_id] || :first)
--- a/app/controllers/.svn/text-base/journals_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/journals_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -24,6 +24,7 @@
   menu_item :issues
   
   helper :issues
+  helper :custom_fields
   helper :queries
   include QueriesHelper
   helper :sort
--- a/app/controllers/.svn/text-base/mail_handler_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/mail_handler_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,27 +1,27 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 class MailHandlerController < ActionController::Base
   before_filter :check_credential
-  
+
   verify :method => :post,
          :only => :index,
          :render => { :nothing => true, :status => 405 }
-         
+
   # Submits an incoming email to MailHandler
   def index
     options = params.dup
@@ -32,9 +32,9 @@
       render :nothing => true, :status => :unprocessable_entity
     end
   end
-  
+
   private
-  
+
   def check_credential
     User.current = nil
     unless Setting.mail_handler_api_enabled? && params[:key].to_s == Setting.mail_handler_api_key
--- a/app/controllers/.svn/text-base/news_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/news_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -25,6 +25,8 @@
   before_filter :find_optional_project, :only => :index
   accept_key_auth :index
   
+  helper :watchers
+  
   def index
     case params[:format]
     when 'xml', 'json'
--- a/app/controllers/.svn/text-base/previews_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/previews_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,3 +1,20 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
 class PreviewsController < ApplicationController
   before_filter :find_project
 
--- a/app/controllers/.svn/text-base/projects_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/projects_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -117,7 +117,6 @@
       Mailer.with_deliveries(params[:notifications] == '1') do
         @project = Project.new
         @project.safe_attributes = params[:project]
-        @project.enabled_module_names = params[:enabled_modules]
         if validate_parent_id && @project.copy(@source_project, :only => params[:only])
           @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
           flash[:notice] = l(:notice_successful_create)
@@ -143,7 +142,7 @@
     end
     
     @users_by_role = @project.users_by_role
-    @subprojects = @project.children.visible
+    @subprojects = @project.children.visible.all
     @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC")
     @trackers = @project.rolled_up_trackers
     
@@ -156,11 +155,10 @@
                                             :include => [:project, :status, :tracker],
                                             :conditions => cond)
     
-    TimeEntry.visible_by(User.current) do
-      @total_hours = TimeEntry.sum(:hours, 
-                                   :include => :project,
-                                   :conditions => cond).to_f
+    if User.current.allowed_to?(:view_time_entries, @project)
+      @total_hours = TimeEntry.visible.sum(:hours, :include => :project, :conditions => cond).to_f
     end
+    
     @key = User.current.rss_key
     
     respond_to do |format|
--- a/app/controllers/.svn/text-base/queries_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/queries_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -25,11 +25,12 @@
     @query.project = params[:query_is_for_all] ? nil : @project
     @query.user = User.current
     @query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin?
+    
+    @query.add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v]) if params[:fields] || params[:f]
+    @query.group_by ||= params[:group_by]
+    @query.column_names = params[:c] if params[:c]
     @query.column_names = nil if params[:default_columns]
     
-    @query.add_filters(params[:fields], params[:operators], params[:values]) if params[:fields]
-    @query.group_by ||= params[:group_by]
-    
     if request.post? && params[:confirm] && @query.save
       flash[:notice] = l(:notice_successful_create)
       redirect_to :controller => 'issues', :action => 'index', :project_id => @project, :query_id => @query
@@ -41,10 +42,12 @@
   def edit
     if request.post?
       @query.filters = {}
-      @query.add_filters(params[:fields], params[:operators], params[:values]) if params[:fields]
+      @query.add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v]) if params[:fields] || params[:f]
       @query.attributes = params[:query]
       @query.project = nil if params[:query_is_for_all]
       @query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin?
+      @query.group_by ||= params[:group_by]
+      @query.column_names = params[:c] if params[:c]
       @query.column_names = nil if params[:default_columns]
       
       if @query.save
--- a/app/controllers/.svn/text-base/repositories_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/repositories_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -26,33 +26,45 @@
   menu_item :repository
   menu_item :settings, :only => :edit
   default_search_scope :changesets
-  
+
   before_filter :find_repository, :except => :edit
   before_filter :find_project, :only => :edit
   before_filter :authorize
   accept_key_auth :revisions
-  
+
   rescue_from Redmine::Scm::Adapters::CommandFailed, :with => :show_error_command_failed
-  
+
   def edit
     @repository = @project.repository
-    if !@repository
+    if !@repository && !params[:repository_scm].blank?
       @repository = Repository.factory(params[:repository_scm])
       @repository.project = @project if @repository
     end
     if request.post? && @repository
-      @repository.attributes = params[:repository]
+      p1 = params[:repository]
+      p       = {}
+      p_extra = {}
+      p1.each do |k, v|
+        if k =~ /^extra_/
+          p_extra[k] = v
+        else
+          p[k] = v
+        end
+      end
+      @repository.attributes = p
+      @repository.merge_extra_info(p_extra)
       @repository.save
     end
     render(:update) do |page|
-      page.replace_html "tab-content-repository", :partial => 'projects/settings/repository'
+      page.replace_html "tab-content-repository",
+                        :partial => 'projects/settings/repository'
       if @repository && !@project.repository
-        @project.reload #needed to reload association
+        @project.reload # needed to reload association
         page.replace_html "main-menu", render_main_menu(@project)
       end
     end
   end
-  
+
   def committers
     @committers = @repository.committers
     @users = @project.users
@@ -70,13 +82,17 @@
 
   def destroy
     @repository.destroy
-    redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'repository'
+    redirect_to :controller => 'projects',
+                :action     => 'settings',
+                :id         => @project,
+                :tab        => 'repository'
   end
 
   def show
     @repository.fetch_changesets if Setting.autofetch_changesets? && @path.empty?
 
     @entries = @repository.entries(@path, @rev)
+    @changeset = @repository.find_changeset_by_name(@rev)
     if request.xhr?
       @entries ? render(:partial => 'dir_list_content') : render(:nothing => true)
     else
@@ -122,17 +138,35 @@
 
     @content = @repository.cat(@path, @rev)
     (show_error_not_found; return) unless @content
-    if 'raw' == params[:format] || @content.is_binary_data? ||
-         (@entry.size && @entry.size > Setting.file_max_size_displayed.to_i.kilobyte)
+    if 'raw' == params[:format] ||
+         (@content.size && @content.size > Setting.file_max_size_displayed.to_i.kilobyte) ||
+         ! is_entry_text_data?(@content, @path)
       # Force the download
-      send_data @content, :filename => filename_for_content_disposition(@path.split('/').last)
+      send_opt = { :filename => filename_for_content_disposition(@path.split('/').last) }
+      send_type = Redmine::MimeType.of(@path)
+      send_opt[:type] = send_type.to_s if send_type
+      send_data @content, send_opt
     else
       # Prevent empty lines when displaying a file with Windows style eol
+      # TODO: UTF-16
+      # Is this needs? AttachmentsController reads file simply.
       @content.gsub!("\r\n", "\n")
       @changeset = @repository.find_changeset_by_name(@rev)
-   end
+    end
   end
 
+  def is_entry_text_data?(ent, path)
+    # UTF-16 contains "\x00".
+    # It is very strict that file contains less than 30% of ascii symbols
+    # in non Western Europe.
+    return true if Redmine::MimeType.is_type?('text', path)
+    # Ruby 1.8.6 has a bug of integer divisions.
+    # http://apidock.com/ruby/v1_8_6_287/String/is_binary_data%3F
+    return false if ent.is_binary_data?
+    true
+  end
+  private :is_entry_text_data?
+
   def annotate
     @entry = @repository.entry(@path, @rev)
     (show_error_not_found; return) unless @entry
@@ -167,14 +201,14 @@
     else
       @diff_type = params[:type] || User.current.pref[:diff_type] || 'inline'
       @diff_type = 'inline' unless %w(inline sbs).include?(@diff_type)
-      
+
       # Save diff type as user preference
       if User.current.logged? && @diff_type != User.current.pref[:diff_type]
         User.current.pref[:diff_type] = @diff_type
         User.current.preference.save
       end
-      
-      @cache_key = "repositories/diff/#{@repository.id}/" + Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}")    
+      @cache_key = "repositories/diff/#{@repository.id}/" + 
+                      Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}")
       unless read_fragment(@cache_key)
         @diff = @repository.diff(@path, @rev, @rev_to)
         show_error_not_found unless @diff
@@ -204,7 +238,7 @@
       render_404
     end
   end
-  
+
   private
 
   REV_PARAM_RE = %r{\A[a-f0-9]*\Z}i
@@ -217,7 +251,7 @@
     @path ||= ''
     @rev = params[:rev].blank? ? @repository.default_branch : params[:rev].strip
     @rev_to = params[:rev_to]
-    
+
     unless @rev.to_s.match(REV_PARAM_RE) && @rev_to.to_s.match(REV_PARAM_RE)
       if @repository.branches.blank?
         raise InvalidRevisionParam
@@ -232,27 +266,31 @@
   def show_error_not_found
     render_error :message => l(:error_scm_not_found), :status => 404
   end
-  
+
   # Handler for Redmine::Scm::Adapters::CommandFailed exception
   def show_error_command_failed(exception)
     render_error l(:error_scm_command_failed, exception.message)
   end
-  
+
   def graph_commits_per_month(repository)
     @date_to = Date.today
     @date_from = @date_to << 11
     @date_from = Date.civil(@date_from.year, @date_from.month, 1)
-    commits_by_day = repository.changesets.count(:all, :group => :commit_date, :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to])
+    commits_by_day = repository.changesets.count(
+                          :all, :group => :commit_date,
+                          :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to])
     commits_by_month = [0] * 12
     commits_by_day.each {|c| commits_by_month[c.first.to_date.months_ago] += c.last }
 
-    changes_by_day = repository.changes.count(:all, :group => :commit_date, :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to])
+    changes_by_day = repository.changes.count(
+                          :all, :group => :commit_date,
+                          :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to])
     changes_by_month = [0] * 12
     changes_by_day.each {|c| changes_by_month[c.first.to_date.months_ago] += c.last }
-   
+
     fields = []
     12.times {|m| fields << month_name(((Date.today.month - 1 - m) % 12) + 1)}
-  
+
     graph = SVG::Graph::Bar.new(
       :height => 300,
       :width => 800,
@@ -264,7 +302,7 @@
       :graph_title => l(:label_commits_per_month),
       :show_graph_title => true
     )
-    
+
     graph.add_data(
       :data => commits_by_month[0..11].reverse,
       :title => l(:label_revision_plural)
@@ -274,7 +312,7 @@
       :data => changes_by_month[0..11].reverse,
       :title => l(:label_change_plural)
     )
-    
+
     graph.burn
   end
 
@@ -284,18 +322,18 @@
 
     changes_by_author = repository.changes.count(:all, :group => :committer)
     h = changes_by_author.inject({}) {|o, i| o[i.first] = i.last; o}
-    
+
     fields = commits_by_author.collect {|r| r.first}
     commits_data = commits_by_author.collect {|r| r.last}
     changes_data = commits_by_author.collect {|r| h[r.first] || 0}
-    
+
     fields = fields + [""]*(10 - fields.length) if fields.length<10
     commits_data = commits_data + [0]*(10 - commits_data.length) if commits_data.length<10
     changes_data = changes_data + [0]*(10 - changes_data.length) if changes_data.length<10
-    
+
     # Remove email adress in usernames
     fields = fields.collect {|c| c.gsub(%r{<.+@.+>}, '') }
-    
+
     graph = SVG::Graph::BarHorizontal.new(
       :height => 400,
       :width => 800,
@@ -307,22 +345,18 @@
       :graph_title => l(:label_commits_per_author),
       :show_graph_title => true
     )
-    
     graph.add_data(
       :data => commits_data,
       :title => l(:label_revision_plural)
     )
-
     graph.add_data(
       :data => changes_data,
       :title => l(:label_change_plural)
     )
-       
     graph.burn
   end
+end
 
-end
-  
 class Date
   def months_ago(date = Date.today)
     (date.year - self.year)*12 + (date.month - self.month)
--- a/app/controllers/.svn/text-base/roles_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/roles_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -38,9 +38,10 @@
       end
       flash[:notice] = l(:notice_successful_create)
       redirect_to :action => 'index'
+    else
+      @permissions = @role.setable_permissions
+      @roles = Role.find :all, :order => 'builtin, position'
     end
-    @permissions = @role.setable_permissions
-    @roles = Role.find :all, :order => 'builtin, position'
   end
 
   def edit
@@ -48,8 +49,9 @@
     if request.post? and @role.update_attributes(params[:role])
       flash[:notice] = l(:notice_successful_update)
       redirect_to :action => 'index'
+    else
+      @permissions = @role.setable_permissions  
     end
-    @permissions = @role.setable_permissions
   end
 
   def destroy
--- a/app/controllers/.svn/text-base/settings_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/settings_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -17,7 +17,7 @@
 
 class SettingsController < ApplicationController
   layout 'admin'
-  
+
   before_filter :require_admin
 
   def index
@@ -36,16 +36,16 @@
       end
       flash[:notice] = l(:notice_successful_update)
       redirect_to :action => 'edit', :tab => params[:tab]
-      return
+    else
+      @options = {}
+      @options[:user_format] = User::USER_FORMATS.keys.collect {|f| [User.current.name(f), f.to_s] }
+      @deliveries = ActionMailer::Base.perform_deliveries
+
+      @guessed_host_and_path = request.host_with_port.dup
+      @guessed_host_and_path << ('/'+ Redmine::Utils.relative_url_root.gsub(%r{^\/}, '')) unless Redmine::Utils.relative_url_root.blank?
+
+      Redmine::Themes.rescan
     end
-    @options = {}
-    @options[:user_format] = User::USER_FORMATS.keys.collect {|f| [User.current.name(f), f.to_s] }
-    @deliveries = ActionMailer::Base.perform_deliveries
-
-    @guessed_host_and_path = request.host_with_port.dup
-    @guessed_host_and_path << ('/'+ Redmine::Utils.relative_url_root.gsub(%r{^\/}, '')) unless Redmine::Utils.relative_url_root.blank?
-    
-    Redmine::Themes.rescan
   end
 
   def plugin
@@ -54,9 +54,10 @@
       Setting["plugin_#{@plugin.id}"] = params[:settings]
       flash[:notice] = l(:notice_successful_update)
       redirect_to :action => 'plugin', :id => @plugin.id
+    else
+      @partial = @plugin.settings[:partial]
+      @settings = Setting["plugin_#{@plugin.id}"]
     end
-    @partial = @plugin.settings[:partial]
-    @settings = Setting["plugin_#{@plugin.id}"]
   rescue Redmine::PluginNotFound
     render_404
   end
--- a/app/controllers/.svn/text-base/timelog_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/timelog_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -18,7 +18,8 @@
 class TimelogController < ApplicationController
   menu_item :issues
   before_filter :find_project, :only => [:new, :create]
-  before_filter :find_time_entry, :only => [:show, :edit, :update, :destroy]
+  before_filter :find_time_entry, :only => [:show, :edit, :update]
+  before_filter :find_time_entries, :only => [:bulk_edit, :bulk_update, :destroy]
   before_filter :authorize, :except => [:index]
   before_filter :find_optional_project, :only => [:index]
   accept_key_auth :index, :show, :create, :update, :destroy
@@ -40,60 +41,56 @@
                 'hours' => 'hours'
     
     cond = ARCondition.new
-    if @project.nil?
-      cond << Project.allowed_to_condition(User.current, :view_time_entries)
-    elsif @issue.nil?
+    if @issue
+      cond << "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}"
+    elsif @project
       cond << @project.project_condition(Setting.display_subprojects_issues?)
-    else
-      cond << "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}"
     end
     
     retrieve_date_range
     cond << ['spent_on BETWEEN ? AND ?', @from, @to]
 
-    TimeEntry.visible_by(User.current) do
-      respond_to do |format|
-        format.html {
-          # Paginate results
-          @entry_count = TimeEntry.count(:include => [:project, :issue], :conditions => cond.conditions)
-          @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page']
-          @entries = TimeEntry.find(:all, 
-                                    :include => [:project, :activity, :user, {:issue => :tracker}],
-                                    :conditions => cond.conditions,
-                                    :order => sort_clause,
-                                    :limit  =>  @entry_pages.items_per_page,
-                                    :offset =>  @entry_pages.current.offset)
-          @total_hours = TimeEntry.sum(:hours, :include => [:project, :issue], :conditions => cond.conditions).to_f
+    respond_to do |format|
+      format.html {
+        # Paginate results
+        @entry_count = TimeEntry.visible.count(:include => [:project, :issue], :conditions => cond.conditions)
+        @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page']
+        @entries = TimeEntry.visible.find(:all, 
+                                  :include => [:project, :activity, :user, {:issue => :tracker}],
+                                  :conditions => cond.conditions,
+                                  :order => sort_clause,
+                                  :limit  =>  @entry_pages.items_per_page,
+                                  :offset =>  @entry_pages.current.offset)
+        @total_hours = TimeEntry.visible.sum(:hours, :include => [:project, :issue], :conditions => cond.conditions).to_f
 
-          render :layout => !request.xhr?
-        }
-        format.api  {
-          @entry_count = TimeEntry.count(:include => [:project, :issue], :conditions => cond.conditions)
-          @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page']
-          @entries = TimeEntry.find(:all, 
-                                    :include => [:project, :activity, :user, {:issue => :tracker}],
-                                    :conditions => cond.conditions,
-                                    :order => sort_clause,
-                                    :limit  =>  @entry_pages.items_per_page,
-                                    :offset =>  @entry_pages.current.offset)
-        }
-        format.atom {
-          entries = TimeEntry.find(:all,
-                                   :include => [:project, :activity, :user, {:issue => :tracker}],
-                                   :conditions => cond.conditions,
-                                   :order => "#{TimeEntry.table_name}.created_on DESC",
-                                   :limit => Setting.feeds_limit.to_i)
-          render_feed(entries, :title => l(:label_spent_time))
-        }
-        format.csv {
-          # Export all entries
-          @entries = TimeEntry.find(:all, 
-                                    :include => [:project, :activity, :user, {:issue => [:tracker, :assigned_to, :priority]}],
-                                    :conditions => cond.conditions,
-                                    :order => sort_clause)
-          send_data(entries_to_csv(@entries), :type => 'text/csv; header=present', :filename => 'timelog.csv')
-        }
-      end
+        render :layout => !request.xhr?
+      }
+      format.api  {
+        @entry_count = TimeEntry.visible.count(:include => [:project, :issue], :conditions => cond.conditions)
+        @offset, @limit = api_offset_and_limit
+        @entries = TimeEntry.visible.find(:all, 
+                                  :include => [:project, :activity, :user, {:issue => :tracker}],
+                                  :conditions => cond.conditions,
+                                  :order => sort_clause,
+                                  :limit  => @limit,
+                                  :offset => @offset)
+      }
+      format.atom {
+        entries = TimeEntry.visible.find(:all,
+                                 :include => [:project, :activity, :user, {:issue => :tracker}],
+                                 :conditions => cond.conditions,
+                                 :order => "#{TimeEntry.table_name}.created_on DESC",
+                                 :limit => Setting.feeds_limit.to_i)
+        render_feed(entries, :title => l(:label_spent_time))
+      }
+      format.csv {
+        # Export all entries
+        @entries = TimeEntry.visible.find(:all, 
+                                  :include => [:project, :activity, :user, {:issue => [:tracker, :assigned_to, :priority]}],
+                                  :conditions => cond.conditions,
+                                  :order => sort_clause)
+        send_data(entries_to_csv(@entries), :type => 'text/csv; header=present', :filename => 'timelog.csv')
+      }
     end
   end
   
@@ -164,27 +161,55 @@
     end    
   end
 
+  def bulk_edit
+    @available_activities = TimeEntryActivity.shared.active
+    @custom_fields = TimeEntry.first.available_custom_fields
+  end
+
+  def bulk_update
+    attributes = parse_params_for_bulk_time_entry_attributes(params)
+
+    unsaved_time_entry_ids = []
+    @time_entries.each do |time_entry|
+      time_entry.reload
+      time_entry.attributes = attributes
+      call_hook(:controller_time_entries_bulk_edit_before_save, { :params => params, :time_entry => time_entry })
+      unless time_entry.save
+        # Keep unsaved time_entry ids to display them in flash error
+        unsaved_time_entry_ids << time_entry.id
+      end
+    end
+    set_flash_from_bulk_time_entry_save(@time_entries, unsaved_time_entry_ids)
+    redirect_back_or_default({:controller => 'timelog', :action => 'index', :project_id => @projects.first})
+  end
+
   verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed }
   def destroy
-    if @time_entry.destroy && @time_entry.destroyed?
-      respond_to do |format|
-        format.html {
-          flash[:notice] = l(:notice_successful_delete)
-          redirect_to :back
-        }
-        format.api  { head :ok }
-      end
-    else
-      respond_to do |format|
-        format.html {
-          flash[:error] = l(:notice_unable_delete_time_entry)
-          redirect_to :back
-        }
-        format.api  { render_validation_errors(@time_entry) }
+    @time_entries.each do |t| 
+      begin
+        unless t.destroy && t.destroyed?
+          respond_to do |format|
+            format.html {
+              flash[:error] = l(:notice_unable_delete_time_entry)
+              redirect_to :back
+            }
+            format.api  { render_validation_errors(t) }
+          end
+          return
+        end
+      rescue ::ActionController::RedirectBackError
+        redirect_to :action => 'index', :project_id => @projects.first
+        return
       end
     end
-  rescue ::ActionController::RedirectBackError
-    redirect_to :action => 'index', :project_id => @time_entry.project
+
+    respond_to do |format|
+      format.html {
+        flash[:notice] = l(:notice_successful_delete)
+        redirect_back_or_default(:action => 'index', :project_id => @projects.first)
+      }
+      format.api  { head :ok }
+    end
   end
 
 private
@@ -199,6 +224,26 @@
     render_404
   end
 
+  def find_time_entries
+    @time_entries = TimeEntry.find_all_by_id(params[:id] || params[:ids])
+    raise ActiveRecord::RecordNotFound if @time_entries.empty?
+    @projects = @time_entries.collect(&:project).compact.uniq
+    @project = @projects.first if @projects.size == 1
+  rescue ActiveRecord::RecordNotFound
+    render_404
+  end
+
+  def set_flash_from_bulk_time_entry_save(time_entries, unsaved_time_entry_ids)
+    if unsaved_time_entry_ids.empty?
+      flash[:notice] = l(:notice_successful_update) unless time_entries.empty?
+    else
+      flash[:error] = l(:notice_failed_to_save_time_entries,
+                        :count => unsaved_time_entry_ids.size,
+                        :total => time_entries.size,
+                        :ids => '#' + unsaved_time_entry_ids.join(', #'))
+    end
+  end
+
   def find_project
     if (issue_id = (params[:issue_id] || params[:time_entry] && params[:time_entry][:issue_id])).present?
       @issue = Issue.find(issue_id)
@@ -269,4 +314,10 @@
     @to   ||= (TimeEntry.latest_date_for_project(@project) || Date.today)
   end
 
+  def parse_params_for_bulk_time_entry_attributes(params)
+    attributes = (params[:time_entry] || {}).reject {|k,v| v.blank?}
+    attributes.keys.each {|k| attributes[k] = '' if attributes[k] == 'none'}
+    attributes[:custom_field_values].reject! {|k,v| v.blank?} if attributes[:custom_field_values]
+    attributes
+  end
 end
--- a/app/controllers/.svn/text-base/users_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/users_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -38,6 +38,9 @@
       @limit = per_page_option
     end
     
+    scope = User
+    scope = scope.in_group(params[:group_id].to_i) if params[:group_id].present?
+    
     @status = params[:status] ? params[:status].to_i : 1
     c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
 
@@ -46,24 +49,27 @@
       c << ["LOWER(login) LIKE ? OR LOWER(firstname) LIKE ? OR LOWER(lastname) LIKE ? OR LOWER(mail) LIKE ?", name, name, name, name]
     end
     
-    @user_count = User.count(:conditions => c.conditions)
+    @user_count = scope.count(:conditions => c.conditions)
     @user_pages = Paginator.new self, @user_count, @limit, params['page']
     @offset ||= @user_pages.current.offset
-    @users =  User.find :all,
+    @users =  scope.find :all,
                         :order => sort_clause,
                         :conditions => c.conditions,
                         :limit  =>  @limit,
                         :offset =>  @offset
 
-		respond_to do |format|
-		  format.html { render :layout => !request.xhr? }
+    respond_to do |format|
+      format.html {
+        @groups = Group.all.sort
+        render :layout => !request.xhr?
+      }
       format.api
-		end	
+    end	
   end
   
   def show
     # show projects based on current user visibility
-    @memberships = @user.memberships.all(:conditions => Project.visible_by(User.current))
+    @memberships = @user.memberships.all(:conditions => Project.visible_condition(User.current))
     
     events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 10)
     @events_by_day = events.group_by(&:event_date)
--- a/app/controllers/.svn/text-base/watchers_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/watchers_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -76,21 +76,13 @@
   
   def set_watcher(user, watching)
     @watched.set_watcher(user, watching)
-    if params[:replace].present?
-      if params[:replace].is_a? Array
-        replace_ids = params[:replace]
-      else
-        replace_ids = [params[:replace]]
-      end
-    else
-      replace_ids = ['watcher']
-    end
     respond_to do |format|
       format.html { redirect_to :back }
       format.js do
         render(:update) do |page|
-          replace_ids.each do |replace_id|
-            page.replace_html replace_id, watcher_link(@watched, user, :replace => replace_ids)
+          c = watcher_css(@watched)
+          page.select(".#{c}").each do |item|
+            page.replace_html item, watcher_link(@watched, user)
           end
         end
       end
--- a/app/controllers/.svn/text-base/wiki_controller.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/.svn/text-base/wiki_controller.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -34,23 +34,27 @@
 class WikiController < ApplicationController
   default_search_scope :wiki_pages
   before_filter :find_wiki, :authorize
+  before_filter :find_existing_or_new_page, :only => [:show, :edit, :update]
   before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy]
-  
-  verify :method => :post, :only => [:protect], :redirect_to => { :action => :show }
 
   helper :attachments
-  include AttachmentsHelper   
+  include AttachmentsHelper
   helper :watchers
 
   # List of pages, sorted alphabetically and by parent (hierarchy)
   def index
-    load_pages_grouped_by_date_without_content
+    load_pages_for_index
+    @pages_by_parent_id = @pages.group_by(&:parent_id)
+  end
+
+  # List of page, by last update
+  def date_index
+    load_pages_for_index
+    @pages_by_date = @pages.group_by {|p| p.updated_on.to_date}
   end
 
   # display a page (in editing mode if it doesn't exist)
   def show
-    page_title = params[:id]
-    @page = @wiki.find_or_new_page(page_title)
     if @page.new_record?
       if User.current.allowed_to?(:edit_wiki_pages, @project) && editable?
         edit
@@ -79,13 +83,12 @@
     @editable = editable?
     render :action => 'show'
   end
-  
+
   # edit an existing page or a new one
   def edit
-    @page = @wiki.find_or_new_page(params[:id])    
     return render_403 unless editable?
     @page.content = WikiContent.new(:page => @page) if @page.new_record?
-    
+
     @content = @page.content_for_version(params[:version])
     @content.text = initial_page_content(@page) if @content.text.blank?
     # don't keep previous comment
@@ -93,18 +96,14 @@
 
     # To prevent StaleObjectError exception when reverting to a previous version
     @content.version = @page.content.version
-  rescue ActiveRecord::StaleObjectError
-    # Optimistic locking exception
-    flash[:error] = l(:notice_locking_conflict)
   end
 
   verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
   # Creates a new page or updates an existing one
   def update
-    @page = @wiki.find_or_new_page(params[:id])    
     return render_403 unless editable?
     @page.content = WikiContent.new(:page => @page) if @page.new_record?
-    
+
     @content = @page.content_for_version(params[:version])
     @content.text = initial_page_content(@page) if @content.text.blank?
     # don't keep previous comment
@@ -131,7 +130,8 @@
 
   rescue ActiveRecord::StaleObjectError
     # Optimistic locking exception
-    flash[:error] = l(:notice_locking_conflict)
+    flash.now[:error] = l(:notice_locking_conflict)
+    render :action => 'edit'
   end
 
   # rename a page
@@ -145,7 +145,8 @@
       redirect_to :action => 'show', :project_id => @project, :id => @page.title
     end
   end
-  
+
+  verify :method => :post, :only => :protect, :redirect_to => { :action => :show }
   def protect
     @page.update_attribute :protected, params[:protected]
     redirect_to :action => 'show', :project_id => @project, :id => @page.title
@@ -155,8 +156,8 @@
   def history
     @version_count = @page.content.versions.count
     @version_pages = Paginator.new self, @version_count, per_page_option, params['p']
-    # don't load text    
-    @versions = @page.content.versions.find :all, 
+    # don't load text
+    @versions = @page.content.versions.find :all,
                                             :select => "id, author_id, comments, updated_on, version",
                                             :order => 'version DESC',
                                             :limit  =>  @version_pages.items_per_page + 1,
@@ -164,12 +165,12 @@
 
     render :layout => false if request.xhr?
   end
-  
+
   def diff
     @diff = @page.diff(params[:version], params[:version_from])
     render_404 unless @diff
   end
-  
+
   def annotate
     @annotate = @page.annotate(params[:version])
     render_404 unless @annotate
@@ -180,7 +181,7 @@
   # Children can be either set as root pages, removed or reassigned to another parent page
   def destroy
     return render_403 unless editable?
-    
+
     @descendants_count = @page.descendants.size
     if @descendants_count > 0
       case params[:todo]
@@ -216,10 +217,6 @@
     end
   end
 
-  def date_index
-    load_pages_grouped_by_date_without_content
-  end
-  
   def preview
     page = @wiki.find_page(params[:id])
     # page is nil when previewing a new page
@@ -240,7 +237,7 @@
   end
 
 private
-  
+
   def find_wiki
     @project = Project.find(params[:project_id])
     @wiki = @project.wiki
@@ -248,13 +245,27 @@
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-  
+
+  # Finds the requested page or a new page if it doesn't exist
+  def find_existing_or_new_page
+    @page = @wiki.find_or_new_page(params[:id])
+    if @wiki.page_found_with_redirect?
+      redirect_to params.update(:id => @page.title)
+    end
+  end
+
   # Finds the requested page and returns a 404 error if it doesn't exist
   def find_existing_page
     @page = @wiki.find_page(params[:id])
-    render_404 if @page.nil?
+    if @page.nil?
+      render_404
+      return
+    end
+    if @wiki.page_found_with_redirect?
+      redirect_to params.update(:id => @page.title)
+    end
   end
-  
+
   # Returns true if the current user is allowed to edit the page, otherwise false
   def editable?(page = @page)
     page.editable_by?(User.current)
@@ -267,13 +278,7 @@
     helper.instance_method(:initial_page_content).bind(self).call(page)
   end
 
-  # eager load information about last updates, without loading text
-  def load_pages_grouped_by_date_without_content
-    @pages = @wiki.pages.find :all, :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on",
-                                    :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id",
-                                    :order => 'title'
-    @pages_by_date = @pages.group_by {|p| p.updated_on.to_date}
-    @pages_by_parent_id = @pages.group_by(&:parent_id)
+  def load_pages_for_index
+    @pages = @wiki.pages.with_updated_on.all(:order => 'title', :include => {:wiki => :project})
   end
-  
 end
--- a/app/controllers/activities_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/activities_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -5,7 +5,7 @@
 
   def index
     @days = Setting.activity_days_default.to_i
-    
+
     if params[:from]
       begin; @date_to = params[:from].to_date + 1; rescue; end
     end
@@ -14,18 +14,18 @@
     @date_from = @date_to - @days
     @with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
     @author = (params[:user_id].blank? ? nil : User.active.find(params[:user_id]))
-    
-    @activity = Redmine::Activity::Fetcher.new(User.current, :project => @project, 
+
+    @activity = Redmine::Activity::Fetcher.new(User.current, :project => @project,
                                                              :with_subprojects => @with_subprojects,
                                                              :author => @author)
     @activity.scope_select {|t| !params["show_#{t}"].nil?}
     @activity.scope = (@author.nil? ? :default : :all) if @activity.scope.empty?
 
     events = @activity.events(@date_from, @date_to)
-    
+
     if events.empty? || stale?(:etag => [@activity.scope, @date_to, @date_from, @with_subprojects, @author, events.first, User.current, current_language])
       respond_to do |format|
-        format.html { 
+        format.html {
           @events_by_day = events.group_by(&:event_date)
           render :layout => false if request.xhr?
         }
@@ -40,7 +40,7 @@
         }
       end
     end
-    
+
   rescue ActiveRecord::RecordNotFound
     render_404
   end
@@ -55,5 +55,4 @@
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-
 end
--- a/app/controllers/admin_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/admin_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -17,9 +17,7 @@
 
 class AdminController < ApplicationController
   layout 'admin'
-  
   before_filter :require_admin
-
   helper :sort
   include SortHelper	
 
@@ -30,22 +28,20 @@
   def projects
     @status = params[:status] ? params[:status].to_i : 1
     c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
-    
     unless params[:name].blank?
       name = "%#{params[:name].strip.downcase}%"
       c << ["LOWER(identifier) LIKE ? OR LOWER(name) LIKE ?", name, name]
     end
-    
     @projects = Project.find :all, :order => 'lft',
                                    :conditions => c.conditions
 
     render :action => "projects", :layout => false if request.xhr?
   end
-  
+
   def plugins
     @plugins = Redmine::Plugin.all
   end
-  
+
   # Loads the default configuration
   # (roles, trackers, statuses, workflow, enumerations)
   def default_configuration
@@ -59,7 +55,7 @@
     end
     redirect_to :action => 'index'
   end
-  
+
   def test_email
     raise_delivery_errors = ActionMailer::Base.raise_delivery_errors
     # Force ActionMailer to raise delivery errors so we can catch it
@@ -73,14 +69,16 @@
     ActionMailer::Base.raise_delivery_errors = raise_delivery_errors
     redirect_to :controller => 'settings', :action => 'edit', :tab => 'notifications'
   end
-  
+
   def info
     @db_adapter_name = ActiveRecord::Base.connection.adapter_name
     @checklist = [
-      [:text_default_administrator_account_changed, User.find(:first, :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?],
+      [:text_default_administrator_account_changed,
+          User.find(:first,
+                    :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?],
       [:text_file_repository_writable, File.writable?(Attachment.storage_path)],
-      [:text_plugin_assets_writable, File.writable?(Engines.public_directory)],
-      [:text_rmagick_available, Object.const_defined?(:Magick)]
+      [:text_plugin_assets_writable,   File.writable?(Engines.public_directory)],
+      [:text_rmagick_available,        Object.const_defined?(:Magick)]
     ]
-  end  
+  end
 end
--- a/app/controllers/application_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/application_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -23,29 +23,29 @@
 
   layout 'base'
   exempt_from_layout 'builder', 'rsb'
-  
+
   # Remove broken cookie after upgrade from 0.8.x (#4292)
   # See https://rails.lighthouseapp.com/projects/8994/tickets/3360
   # TODO: remove it when Rails is fixed
   before_filter :delete_broken_cookies
   def delete_broken_cookies
     if cookies['_redmine_session'] && cookies['_redmine_session'] !~ /--/
-      cookies.delete '_redmine_session'    
+      cookies.delete '_redmine_session'
       redirect_to home_path
       return false
     end
   end
-  
+
   before_filter :user_setup, :check_if_login_required, :set_localization
   filter_parameter_logging :password
   protect_from_forgery
-  
+
   rescue_from ActionController::InvalidAuthenticityToken, :with => :invalid_authenticity_token
-  
+
   include Redmine::Search::Controller
   include Redmine::MenuManager::MenuController
   helper Redmine::MenuManager::MenuHelper
-  
+
   Redmine::Scm::Base.all.each do |scm|
     require_dependency "repository/#{scm.underscore}"
   end
@@ -56,7 +56,7 @@
     # Find the current user
     User.current = find_current_user
   end
-  
+
   # Returns the current user or nil if no user is logged in
   # and starts a session if needed
   def find_current_user
@@ -94,14 +94,14 @@
       User.current = User.anonymous
     end
   end
-  
+
   # check if login is globally required to access the application
   def check_if_login_required
     # no check needed if user is already logged in
     return true if User.current.logged?
     require_login if Setting.login_required?
-  end 
-  
+  end
+
   def set_localization
     lang = nil
     if User.current.logged?
@@ -117,7 +117,7 @@
     lang ||= Setting.default_language
     set_language_if_valid(lang)
   end
-  
+
   def require_login
     if !User.current.logged?
       # Extract only the basic url parameters on non-GET requests
@@ -146,7 +146,7 @@
     end
     true
   end
-  
+
   def deny_access
     User.current.logged? ? render_403 : require_login
   end
@@ -197,7 +197,7 @@
   # Finds and sets @project based on @object.project
   def find_project_from_association
     render_404 unless @object.present?
-    
+
     @project = @object.project
   rescue ActiveRecord::RecordNotFound
     render_404
@@ -221,12 +221,16 @@
   def find_issues
     @issues = Issue.find_all_by_id(params[:id] || params[:ids])
     raise ActiveRecord::RecordNotFound if @issues.empty?
+    if @issues.detect {|issue| !issue.visible?}
+      deny_access
+      return
+    end
     @projects = @issues.collect(&:project).compact.uniq
     @project = @projects.first if @projects.size == 1
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-  
+
   # Check if project is unique before bulk operations
   def check_project_uniqueness
     unless @project
@@ -235,7 +239,7 @@
       return false
     end
   end
-  
+
   # make sure that the user is a member of the project (or admin) if project is private
   # used as a before_filter for actions that do not require any particular permission on the project
   def check_project_privacy
@@ -277,27 +281,28 @@
       end
     end
     redirect_to default
+    false
   end
-  
+
   def render_403(options={})
     @project = nil
     render_error({:message => :notice_not_authorized, :status => 403}.merge(options))
     return false
   end
-    
+
   def render_404(options={})
     render_error({:message => :notice_file_not_found, :status => 404}.merge(options))
     return false
   end
-  
+
   # Renders an error response
   def render_error(arg)
     arg = {:message => arg} unless arg.is_a?(Hash)
-    
+
     @message = arg[:message]
     @message = l(@message) if @message.is_a?(Symbol)
     @status = arg[:status] || 500
-    
+
     respond_to do |format|
       format.html {
         render :template => 'common/error', :layout => use_layout, :status => @status
@@ -315,31 +320,31 @@
   def use_layout
     request.xhr? ? false : 'base'
   end
-  
+
   def invalid_authenticity_token
     if api_request?
       logger.error "Form authenticity token is missing or is invalid. API calls must include a proper Content-type header (text/xml or text/json)."
     end
     render_error "Invalid form authenticity token.  Perhaps your session has timed out; try reloading the form and entering your details again."
   end
-  
-  def render_feed(items, options={})    
+
+  def render_feed(items, options={})
     @items = items || []
     @items.sort! {|x,y| y.event_datetime <=> x.event_datetime }
     @items = @items.slice(0, Setting.feeds_limit.to_i)
     @title = options[:title] || Setting.app_title
     render :template => "common/feed.atom.rxml", :layout => false, :content_type => 'application/atom+xml'
   end
-  
+
   def self.accept_key_auth(*actions)
     actions = actions.flatten.map(&:to_s)
     write_inheritable_attribute('accept_key_auth_actions', actions)
   end
-  
+
   def accept_key_auth_actions
     self.class.read_inheritable_attribute('accept_key_auth_actions') || []
   end
-  
+
   # Returns the number of objects that should be displayed
   # on the paginated list
   def per_page_option
@@ -375,10 +380,10 @@
       offset = 0 if offset < 0
     end
     offset ||= 0
-    
+
     [offset, limit]
   end
-  
+
   # qvalues http header parser
   # code taken from webrick
   def parse_qvalues(value)
@@ -399,16 +404,16 @@
   rescue
     nil
   end
-  
+
   # Returns a string that can be used as filename value in Content-Disposition header
   def filename_for_content_disposition(name)
     request.env['HTTP_USER_AGENT'] =~ %r{MSIE} ? ERB::Util.url_encode(name) : name
   end
-  
+
   def api_request?
     %w(xml json).include? params[:format]
   end
-  
+
   # Returns the API key present in the request
   def api_key_from_request
     if params[:key].present?
@@ -465,7 +470,7 @@
     )
     render options
   end
-  
+
   # Overrides #default_template so that the api template
   # is used automatically if it exists
   def default_template(action_name = self.action_name)
@@ -479,7 +484,7 @@
     end
     super
   end
-  
+
   # Overrides #pick_layout so that #render with no arguments
   # doesn't use the layout for api requests
   def pick_layout(*args)
--- a/app/controllers/attachments_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/attachments_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,9 +19,9 @@
   before_filter :find_project
   before_filter :file_readable, :read_authorize, :except => :destroy
   before_filter :delete_authorize, :only => :destroy
-  
+
   verify :method => :post, :only => :destroy
-  
+
   def show
     if @attachment.is_diff?
       @diff = File.new(@attachment.diskfile, "rb").read
@@ -33,19 +33,19 @@
       download
     end
   end
-  
+
   def download
     if @attachment.container.is_a?(Version) || @attachment.container.is_a?(Project)
       @attachment.increment_download
     end
-    
+
     # images are sent inline
     send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename),
-                                    :type => detect_content_type(@attachment), 
+                                    :type => detect_content_type(@attachment),
                                     :disposition => (@attachment.image? ? 'inline' : 'attachment')
-   
+
   end
-  
+
   def destroy
     # Make sure association callbacks are called
     @attachment.container.attachments.delete(@attachment)
@@ -53,7 +53,7 @@
   rescue ::ActionController::RedirectBackError
     redirect_to :controller => 'projects', :action => 'show', :id => @project
   end
-  
+
 private
   def find_project
     @attachment = Attachment.find(params[:id])
@@ -63,20 +63,20 @@
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-  
+
   # Checks that the file exists and is readable
   def file_readable
     @attachment.readable? ? true : render_404
   end
-  
+
   def read_authorize
     @attachment.visible? ? true : deny_access
   end
-  
+
   def delete_authorize
     @attachment.deletable? ? true : deny_access
   end
-  
+
   def detect_content_type(attachment)
     content_type = attachment.content_type
     if content_type.blank?
--- a/app/controllers/calendars_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/calendars_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,3 +1,20 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
 class CalendarsController < ApplicationController
   menu_item :calendar
   before_filter :find_optional_project
@@ -36,9 +53,4 @@
     
     render :action => 'show', :layout => false if request.xhr?
   end
-  
-  def update
-    show
-  end
-
 end
--- a/app/controllers/context_menus_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/context_menus_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,6 @@
 class ContextMenusController < ApplicationController
   helper :watchers
+  helper :issues
   
   def issues
     @issues = Issue.visible.all(:conditions => {:id => params[:ids]}, :include => :project)
@@ -40,5 +41,18 @@
     
     render :layout => false
   end
-  
+
+  def time_entries
+    @time_entries = TimeEntry.all(
+       :conditions => {:id => params[:ids]}, :include => :project)
+    @projects = @time_entries.collect(&:project).compact.uniq
+    @project = @projects.first if @projects.size == 1
+    @activities = TimeEntryActivity.shared.active
+    @can = {:edit   => User.current.allowed_to?(:log_time, @projects),
+            :update => User.current.allowed_to?(:log_time, @projects),
+            :delete => User.current.allowed_to?(:log_time, @projects)
+            }
+    @back = back_url
+    render :layout => false
+  end  
 end
--- a/app/controllers/custom_fields_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/custom_fields_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -38,8 +38,9 @@
       flash[:notice] = l(:notice_successful_create)
       call_hook(:controller_custom_fields_new_after_save, :params => params, :custom_field => @custom_field)
       redirect_to :action => 'index', :tab => @custom_field.class.name
+    else
+      @trackers = Tracker.find(:all, :order => 'position')
     end
-    @trackers = Tracker.find(:all, :order => 'position')
   end
 
   def edit
@@ -48,8 +49,9 @@
       flash[:notice] = l(:notice_successful_update)
       call_hook(:controller_custom_fields_edit_after_save, :params => params, :custom_field => @custom_field)
       redirect_to :action => 'index', :tab => @custom_field.class.name
+    else
+      @trackers = Tracker.find(:all, :order => 'position')
     end
-    @trackers = Tracker.find(:all, :order => 'position')
   end
   
   def destroy
--- a/app/controllers/enumerations_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/enumerations_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -75,10 +75,12 @@
       # No associated objects
       @enumeration.destroy
       redirect_to :action => 'index'
+      return
     elsif params[:reassign_to_id]
       if reassign_to = @enumeration.class.find_by_id(params[:reassign_to_id])
         @enumeration.destroy(reassign_to)
         redirect_to :action => 'index'
+        return
       end
     end
     @enumerations = @enumeration.class.find(:all) - [@enumeration]
--- a/app/controllers/files_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/files_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -13,7 +13,7 @@
                 'created_on' => "#{Attachment.table_name}.created_on",
                 'size' => "#{Attachment.table_name}.filesize",
                 'downloads' => "#{Attachment.table_name}.downloads"
-                
+
     @containers = [ Project.find(@project.id, :include => :attachments, :order => sort_clause)]
     @containers += @project.versions.find(:all, :include => :attachments, :order => sort_clause).sort.reverse
     render :layout => !request.xhr?
--- a/app/controllers/gantts_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/gantts_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,3 +1,20 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
 class GanttsController < ApplicationController
   menu_item :gantt
   before_filter :find_optional_project
@@ -28,9 +45,4 @@
       format.pdf  { send_data(@gantt.to_pdf, :type => 'application/pdf', :filename => "#{basename}.pdf") }
     end
   end
-
-  def update
-    show
-  end
-
 end
--- a/app/controllers/groups_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/groups_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -132,7 +132,7 @@
   
   def autocomplete_for_user
     @group = Group.find(params[:id])
-    @users = User.active.like(params[:q]).find(:all, :limit => 100) - @group.users
+    @users = User.active.not_in_group(@group).like(params[:q]).all(:limit => 100)
     render :layout => false
   end
   
--- a/app/controllers/issue_categories_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/issue_categories_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -65,10 +65,12 @@
       # No issue assigned to this category
       @category.destroy
       redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'categories'
+      return
     elsif params[:todo]
       reassign_to = @project.issue_categories.find_by_id(params[:reassign_to_id]) if params[:todo] == 'reassign'
       @category.destroy(reassign_to)
       redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'categories'
+      return
     end
     @categories = @project.issue_categories - [@category]
   end
--- a/app/controllers/issue_moves_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/issue_moves_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -2,7 +2,7 @@
   default_search_scope :issues
   before_filter :find_issues, :check_project_uniqueness
   before_filter :authorize
-  
+
   def new
     prepare_for_issue_move
     render :layout => false if request.xhr?
@@ -48,7 +48,7 @@
     @copy = params[:copy_options] && params[:copy_options][:copy]
     @allowed_projects = Issue.allowed_target_projects_on_move
     @target_project = @allowed_projects.detect {|p| p.id.to_s == params[:new_project_id]} if params[:new_project_id]
-    @target_project ||= @project    
+    @target_project ||= @project
     @trackers = @target_project.trackers
     @available_statuses = Workflow.available_statuses(@project)
     @notes = params[:notes]
--- a/app/controllers/issues_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/issues_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -18,7 +18,7 @@
 class IssuesController < ApplicationController
   menu_item :new_issue, :only => [:new, :create]
   default_search_scope :issues
-  
+
   before_filter :find_issue, :only => [:show, :edit, :update]
   before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :move, :perform_move, :destroy]
   before_filter :check_project_uniqueness, :only => [:move, :perform_move]
@@ -30,10 +30,10 @@
   accept_key_auth :index, :show, :create, :update, :destroy
 
   rescue_from Query::StatementInvalid, :with => :query_statement_invalid
-  
+
   helper :journals
   helper :projects
-  include ProjectsHelper   
+  include ProjectsHelper
   helper :custom_fields
   include CustomFieldsHelper
   helper :issue_relations
@@ -60,12 +60,12 @@
   verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
   verify :method => :post, :only => :bulk_update, :render => {:nothing => true, :status => :method_not_allowed }
   verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
-  
+
   def index
     retrieve_query
     sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria)
     sort_update(@query.sortable_columns)
-    
+
     if @query.valid?
       case params[:format]
       when 'csv', 'pdf'
@@ -77,16 +77,16 @@
       else
         @limit = per_page_option
       end
-      
+
       @issue_count = @query.issue_count
       @issue_pages = Paginator.new self, @issue_count, @limit, params['page']
       @offset ||= @issue_pages.current.offset
       @issues = @query.issues(:include => [:assigned_to, :tracker, :priority, :category, :fixed_version],
-                              :order => sort_clause, 
-                              :offset => @offset, 
+                              :order => sort_clause,
+                              :offset => @offset,
                               :limit => @limit)
       @issue_count_by_group = @query.issue_count_by_group
-      
+
       respond_to do |format|
         format.html { render :template => 'issues/index.rhtml', :layout => !request.xhr? }
         format.api
@@ -101,18 +101,22 @@
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-  
+
   def show
     @journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
     @journals.each_with_index {|j,i| j.indice = i+1}
     @journals.reverse! if User.current.wants_comments_in_reverse_order?
-    @changesets = @issue.changesets.visible.all
-    @changesets.reverse! if User.current.wants_comments_in_reverse_order?
+
+    if User.current.allowed_to?(:view_changesets, @project)
+      @changesets = @issue.changesets.visible.all
+      @changesets.reverse! if User.current.wants_comments_in_reverse_order?
+    end
+
     @relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
     @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
     @edit_allowed = User.current.allowed_to?(:edit_issues, @project)
     @priorities = IssuePriority.all
-    @time_entry = TimeEntry.new
+    @time_entry = TimeEntry.new(:issue => @issue, :project => @issue.project)
     respond_to do |format|
       format.html { render :template => 'issues/show.rhtml' }
       format.api
@@ -161,7 +165,7 @@
       end
     end
   end
-    
+
   def edit
     update_issue_from_params
 
@@ -223,7 +227,7 @@
     set_flash_from_bulk_issue_save(@issues, unsaved_issue_ids)
     redirect_back_or_default({:controller => 'issues', :action => 'index', :project_id => @project})
   end
-  
+
   def destroy
     @hours = TimeEntry.sum(:hours, :conditions => ['issue_id IN (?)', @issues]).to_f
     if @hours > 0
@@ -245,7 +249,13 @@
         return unless api_request?
       end
     end
-    @issues.each(&:destroy)
+    @issues.each do |issue|
+      begin
+        issue.reload.destroy
+      rescue ::ActiveRecord::RecordNotFound # raised by #reload if issue no longer exists
+        # nothing to do, issue was already deleted (eg. by a parent)
+      end
+    end
     respond_to do |format|
       format.html { redirect_back_or_default(:action => 'index', :project_id => @project) }
       format.api  { head :ok }
@@ -254,19 +264,25 @@
 
 private
   def find_issue
+    # Issue.visible.find(...) can not be used to redirect user to the login form
+    # if the issue actually exists but requires authentication
     @issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
+    unless @issue.visible?
+      deny_access
+      return
+    end
     @project = @issue.project
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-  
+
   def find_project
     project_id = (params[:issue] && params[:issue][:project_id]) || params[:project_id]
     @project = Project.find(project_id)
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-  
+
   # Used by #edit and #update to set some common instance variables
   # from the params
   # TODO: Refactor, not everything in here is needed by #edit
@@ -274,9 +290,9 @@
     @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
     @priorities = IssuePriority.all
     @edit_allowed = User.current.allowed_to?(:edit_issues, @project)
-    @time_entry = TimeEntry.new
+    @time_entry = TimeEntry.new(:issue => @issue, :project => @issue.project)
     @time_entry.attributes = params[:time_entry]
-    
+
     @notes = params[:notes] || (params[:issue].present? ? params[:issue][:notes] : nil)
     @issue.init_journal(User.current, @notes)
     @issue.safe_attributes = params[:issue]
@@ -304,7 +320,7 @@
     else
       @issue = @project.issues.visible.find(params[:id])
     end
-    
+
     @issue.project = @project
     # Tracker must be set before custom field values
     @issue.tracker ||= @project.trackers.find((params[:issue] && params[:issue][:tracker_id]) || params[:tracker_id] || :first)
--- a/app/controllers/journals_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/journals_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -24,6 +24,7 @@
   menu_item :issues
   
   helper :issues
+  helper :custom_fields
   helper :queries
   include QueriesHelper
   helper :sort
--- a/app/controllers/mail_handler_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/mail_handler_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,27 +1,27 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 class MailHandlerController < ActionController::Base
   before_filter :check_credential
-  
+
   verify :method => :post,
          :only => :index,
          :render => { :nothing => true, :status => 405 }
-         
+
   # Submits an incoming email to MailHandler
   def index
     options = params.dup
@@ -32,9 +32,9 @@
       render :nothing => true, :status => :unprocessable_entity
     end
   end
-  
+
   private
-  
+
   def check_credential
     User.current = nil
     unless Setting.mail_handler_api_enabled? && params[:key].to_s == Setting.mail_handler_api_key
--- a/app/controllers/news_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/news_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -25,6 +25,8 @@
   before_filter :find_optional_project, :only => :index
   accept_key_auth :index
   
+  helper :watchers
+  
   def index
     case params[:format]
     when 'xml', 'json'
--- a/app/controllers/previews_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/previews_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,3 +1,20 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
 class PreviewsController < ApplicationController
   before_filter :find_project
 
--- a/app/controllers/projects_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/projects_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -128,7 +128,6 @@
       Mailer.with_deliveries(params[:notifications] == '1') do
         @project = Project.new
         @project.safe_attributes = params[:project]
-        @project.enabled_module_names = params[:enabled_modules]
         if validate_parent_id && @project.copy(@source_project, :only => params[:only])
           @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
           flash[:notice] = l(:notice_successful_create)
@@ -154,7 +153,7 @@
     end
     
     @users_by_role = @project.users_by_role
-    @subprojects = @project.children.visible
+    @subprojects = @project.children.visible.all
     @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC")
     @trackers = @project.rolled_up_trackers
     
@@ -167,11 +166,10 @@
                                             :include => [:project, :status, :tracker],
                                             :conditions => cond)
     
-    TimeEntry.visible_by(User.current) do
-      @total_hours = TimeEntry.sum(:hours, 
-                                   :include => :project,
-                                   :conditions => cond).to_f
+    if User.current.allowed_to?(:view_time_entries, @project)
+      @total_hours = TimeEntry.visible.sum(:hours, :include => :project, :conditions => cond).to_f
     end
+    
     @key = User.current.rss_key
     
     respond_to do |format|
--- a/app/controllers/queries_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/queries_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -25,11 +25,12 @@
     @query.project = params[:query_is_for_all] ? nil : @project
     @query.user = User.current
     @query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin?
+    
+    @query.add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v]) if params[:fields] || params[:f]
+    @query.group_by ||= params[:group_by]
+    @query.column_names = params[:c] if params[:c]
     @query.column_names = nil if params[:default_columns]
     
-    @query.add_filters(params[:fields], params[:operators], params[:values]) if params[:fields]
-    @query.group_by ||= params[:group_by]
-    
     if request.post? && params[:confirm] && @query.save
       flash[:notice] = l(:notice_successful_create)
       redirect_to :controller => 'issues', :action => 'index', :project_id => @project, :query_id => @query
@@ -41,10 +42,12 @@
   def edit
     if request.post?
       @query.filters = {}
-      @query.add_filters(params[:fields], params[:operators], params[:values]) if params[:fields]
+      @query.add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v]) if params[:fields] || params[:f]
       @query.attributes = params[:query]
       @query.project = nil if params[:query_is_for_all]
       @query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin?
+      @query.group_by ||= params[:group_by]
+      @query.column_names = params[:c] if params[:c]
       @query.column_names = nil if params[:default_columns]
       
       if @query.save
--- a/app/controllers/repositories_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/repositories_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -26,33 +26,45 @@
   menu_item :repository
   menu_item :settings, :only => :edit
   default_search_scope :changesets
-  
+
   before_filter :find_repository, :except => :edit
   before_filter :find_project, :only => :edit
   before_filter :authorize
   accept_key_auth :revisions
-  
+
   rescue_from Redmine::Scm::Adapters::CommandFailed, :with => :show_error_command_failed
-  
+
   def edit
     @repository = @project.repository
-    if !@repository
+    if !@repository && !params[:repository_scm].blank?
       @repository = Repository.factory(params[:repository_scm])
       @repository.project = @project if @repository
     end
     if request.post? && @repository
-      @repository.attributes = params[:repository]
+      p1 = params[:repository]
+      p       = {}
+      p_extra = {}
+      p1.each do |k, v|
+        if k =~ /^extra_/
+          p_extra[k] = v
+        else
+          p[k] = v
+        end
+      end
+      @repository.attributes = p
+      @repository.merge_extra_info(p_extra)
       @repository.save
     end
     render(:update) do |page|
-      page.replace_html "tab-content-repository", :partial => 'projects/settings/repository'
+      page.replace_html "tab-content-repository",
+                        :partial => 'projects/settings/repository'
       if @repository && !@project.repository
-        @project.reload #needed to reload association
+        @project.reload # needed to reload association
         page.replace_html "main-menu", render_main_menu(@project)
       end
     end
   end
-  
+
   def committers
     @committers = @repository.committers
     @users = @project.users
@@ -70,13 +82,17 @@
 
   def destroy
     @repository.destroy
-    redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'repository'
+    redirect_to :controller => 'projects',
+                :action     => 'settings',
+                :id         => @project,
+                :tab        => 'repository'
   end
 
   def show
     @repository.fetch_changesets if Setting.autofetch_changesets? && @path.empty?
 
     @entries = @repository.entries(@path, @rev)
+    @changeset = @repository.find_changeset_by_name(@rev)
     if request.xhr?
       @entries ? render(:partial => 'dir_list_content') : render(:nothing => true)
     else
@@ -122,17 +138,35 @@
 
     @content = @repository.cat(@path, @rev)
     (show_error_not_found; return) unless @content
-    if 'raw' == params[:format] || @content.is_binary_data? ||
-         (@entry.size && @entry.size > Setting.file_max_size_displayed.to_i.kilobyte)
+    if 'raw' == params[:format] ||
+         (@content.size && @content.size > Setting.file_max_size_displayed.to_i.kilobyte) ||
+         ! is_entry_text_data?(@content, @path)
       # Force the download
-      send_data @content, :filename => filename_for_content_disposition(@path.split('/').last)
+      send_opt = { :filename => filename_for_content_disposition(@path.split('/').last) }
+      send_type = Redmine::MimeType.of(@path)
+      send_opt[:type] = send_type.to_s if send_type
+      send_data @content, send_opt
     else
       # Prevent empty lines when displaying a file with Windows style eol
+      # TODO: UTF-16
+      # Is this needs? AttachmentsController reads file simply.
       @content.gsub!("\r\n", "\n")
       @changeset = @repository.find_changeset_by_name(@rev)
-   end
+    end
   end
 
+  def is_entry_text_data?(ent, path)
+    # UTF-16 contains "\x00".
+    # It is very strict that file contains less than 30% of ascii symbols
+    # in non Western Europe.
+    return true if Redmine::MimeType.is_type?('text', path)
+    # Ruby 1.8.6 has a bug of integer divisions.
+    # http://apidock.com/ruby/v1_8_6_287/String/is_binary_data%3F
+    return false if ent.is_binary_data?
+    true
+  end
+  private :is_entry_text_data?
+
   def annotate
     @entry = @repository.entry(@path, @rev)
     (show_error_not_found; return) unless @entry
@@ -167,14 +201,14 @@
     else
       @diff_type = params[:type] || User.current.pref[:diff_type] || 'inline'
       @diff_type = 'inline' unless %w(inline sbs).include?(@diff_type)
-      
+
       # Save diff type as user preference
       if User.current.logged? && @diff_type != User.current.pref[:diff_type]
         User.current.pref[:diff_type] = @diff_type
         User.current.preference.save
       end
-      
-      @cache_key = "repositories/diff/#{@repository.id}/" + Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}")    
+      @cache_key = "repositories/diff/#{@repository.id}/" + 
+                      Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}")
       unless read_fragment(@cache_key)
         @diff = @repository.diff(@path, @rev, @rev_to)
         show_error_not_found unless @diff
@@ -204,7 +238,7 @@
       render_404
     end
   end
-  
+
   private
 
   REV_PARAM_RE = %r{\A[a-f0-9]*\Z}i
@@ -217,7 +251,7 @@
     @path ||= ''
     @rev = params[:rev].blank? ? @repository.default_branch : params[:rev].strip
     @rev_to = params[:rev_to]
-    
+
     unless @rev.to_s.match(REV_PARAM_RE) && @rev_to.to_s.match(REV_PARAM_RE)
       if @repository.branches.blank?
         raise InvalidRevisionParam
@@ -232,27 +266,31 @@
   def show_error_not_found
     render_error :message => l(:error_scm_not_found), :status => 404
   end
-  
+
   # Handler for Redmine::Scm::Adapters::CommandFailed exception
   def show_error_command_failed(exception)
     render_error l(:error_scm_command_failed, exception.message)
   end
-  
+
   def graph_commits_per_month(repository)
     @date_to = Date.today
     @date_from = @date_to << 11
     @date_from = Date.civil(@date_from.year, @date_from.month, 1)
-    commits_by_day = repository.changesets.count(:all, :group => :commit_date, :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to])
+    commits_by_day = repository.changesets.count(
+                          :all, :group => :commit_date,
+                          :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to])
     commits_by_month = [0] * 12
     commits_by_day.each {|c| commits_by_month[c.first.to_date.months_ago] += c.last }
 
-    changes_by_day = repository.changes.count(:all, :group => :commit_date, :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to])
+    changes_by_day = repository.changes.count(
+                          :all, :group => :commit_date,
+                          :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to])
     changes_by_month = [0] * 12
     changes_by_day.each {|c| changes_by_month[c.first.to_date.months_ago] += c.last }
-   
+
     fields = []
     12.times {|m| fields << month_name(((Date.today.month - 1 - m) % 12) + 1)}
-  
+
     graph = SVG::Graph::Bar.new(
       :height => 300,
       :width => 800,
@@ -264,7 +302,7 @@
       :graph_title => l(:label_commits_per_month),
       :show_graph_title => true
     )
-    
+
     graph.add_data(
       :data => commits_by_month[0..11].reverse,
       :title => l(:label_revision_plural)
@@ -274,7 +312,7 @@
       :data => changes_by_month[0..11].reverse,
       :title => l(:label_change_plural)
     )
-    
+
     graph.burn
   end
 
@@ -284,18 +322,18 @@
 
     changes_by_author = repository.changes.count(:all, :group => :committer)
     h = changes_by_author.inject({}) {|o, i| o[i.first] = i.last; o}
-    
+
     fields = commits_by_author.collect {|r| r.first}
     commits_data = commits_by_author.collect {|r| r.last}
     changes_data = commits_by_author.collect {|r| h[r.first] || 0}
-    
+
     fields = fields + [""]*(10 - fields.length) if fields.length<10
     commits_data = commits_data + [0]*(10 - commits_data.length) if commits_data.length<10
     changes_data = changes_data + [0]*(10 - changes_data.length) if changes_data.length<10
-    
+
     # Remove email adress in usernames
     fields = fields.collect {|c| c.gsub(%r{<.+@.+>}, '') }
-    
+
     graph = SVG::Graph::BarHorizontal.new(
       :height => 400,
       :width => 800,
@@ -307,22 +345,18 @@
       :graph_title => l(:label_commits_per_author),
       :show_graph_title => true
     )
-    
     graph.add_data(
       :data => commits_data,
       :title => l(:label_revision_plural)
     )
-
     graph.add_data(
       :data => changes_data,
       :title => l(:label_change_plural)
     )
-       
     graph.burn
   end
+end
 
-end
-  
 class Date
   def months_ago(date = Date.today)
     (date.year - self.year)*12 + (date.month - self.month)
--- a/app/controllers/roles_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/roles_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -38,9 +38,10 @@
       end
       flash[:notice] = l(:notice_successful_create)
       redirect_to :action => 'index'
+    else
+      @permissions = @role.setable_permissions
+      @roles = Role.find :all, :order => 'builtin, position'
     end
-    @permissions = @role.setable_permissions
-    @roles = Role.find :all, :order => 'builtin, position'
   end
 
   def edit
@@ -48,8 +49,9 @@
     if request.post? and @role.update_attributes(params[:role])
       flash[:notice] = l(:notice_successful_update)
       redirect_to :action => 'index'
+    else
+      @permissions = @role.setable_permissions  
     end
-    @permissions = @role.setable_permissions
   end
 
   def destroy
--- a/app/controllers/settings_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/settings_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -17,7 +17,7 @@
 
 class SettingsController < ApplicationController
   layout 'admin'
-  
+
   before_filter :require_admin
 
   def index
@@ -36,16 +36,16 @@
       end
       flash[:notice] = l(:notice_successful_update)
       redirect_to :action => 'edit', :tab => params[:tab]
-      return
+    else
+      @options = {}
+      @options[:user_format] = User::USER_FORMATS.keys.collect {|f| [User.current.name(f), f.to_s] }
+      @deliveries = ActionMailer::Base.perform_deliveries
+
+      @guessed_host_and_path = request.host_with_port.dup
+      @guessed_host_and_path << ('/'+ Redmine::Utils.relative_url_root.gsub(%r{^\/}, '')) unless Redmine::Utils.relative_url_root.blank?
+
+      Redmine::Themes.rescan
     end
-    @options = {}
-    @options[:user_format] = User::USER_FORMATS.keys.collect {|f| [User.current.name(f), f.to_s] }
-    @deliveries = ActionMailer::Base.perform_deliveries
-
-    @guessed_host_and_path = request.host_with_port.dup
-    @guessed_host_and_path << ('/'+ Redmine::Utils.relative_url_root.gsub(%r{^\/}, '')) unless Redmine::Utils.relative_url_root.blank?
-    
-    Redmine::Themes.rescan
   end
 
   def plugin
@@ -54,9 +54,10 @@
       Setting["plugin_#{@plugin.id}"] = params[:settings]
       flash[:notice] = l(:notice_successful_update)
       redirect_to :action => 'plugin', :id => @plugin.id
+    else
+      @partial = @plugin.settings[:partial]
+      @settings = Setting["plugin_#{@plugin.id}"]
     end
-    @partial = @plugin.settings[:partial]
-    @settings = Setting["plugin_#{@plugin.id}"]
   rescue Redmine::PluginNotFound
     render_404
   end
--- a/app/controllers/timelog_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/timelog_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -18,7 +18,8 @@
 class TimelogController < ApplicationController
   menu_item :issues
   before_filter :find_project, :only => [:new, :create]
-  before_filter :find_time_entry, :only => [:show, :edit, :update, :destroy]
+  before_filter :find_time_entry, :only => [:show, :edit, :update]
+  before_filter :find_time_entries, :only => [:bulk_edit, :bulk_update, :destroy]
   before_filter :authorize, :except => [:index]
   before_filter :find_optional_project, :only => [:index]
   accept_key_auth :index, :show, :create, :update, :destroy
@@ -40,60 +41,56 @@
                 'hours' => 'hours'
     
     cond = ARCondition.new
-    if @project.nil?
-      cond << Project.allowed_to_condition(User.current, :view_time_entries)
-    elsif @issue.nil?
+    if @issue
+      cond << "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}"
+    elsif @project
       cond << @project.project_condition(Setting.display_subprojects_issues?)
-    else
-      cond << "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}"
     end
     
     retrieve_date_range
     cond << ['spent_on BETWEEN ? AND ?', @from, @to]
 
-    TimeEntry.visible_by(User.current) do
-      respond_to do |format|
-        format.html {
-          # Paginate results
-          @entry_count = TimeEntry.count(:include => [:project, :issue], :conditions => cond.conditions)
-          @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page']
-          @entries = TimeEntry.find(:all, 
-                                    :include => [:project, :activity, :user, {:issue => :tracker}],
-                                    :conditions => cond.conditions,
-                                    :order => sort_clause,
-                                    :limit  =>  @entry_pages.items_per_page,
-                                    :offset =>  @entry_pages.current.offset)
-          @total_hours = TimeEntry.sum(:hours, :include => [:project, :issue], :conditions => cond.conditions).to_f
+    respond_to do |format|
+      format.html {
+        # Paginate results
+        @entry_count = TimeEntry.visible.count(:include => [:project, :issue], :conditions => cond.conditions)
+        @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page']
+        @entries = TimeEntry.visible.find(:all, 
+                                  :include => [:project, :activity, :user, {:issue => :tracker}],
+                                  :conditions => cond.conditions,
+                                  :order => sort_clause,
+                                  :limit  =>  @entry_pages.items_per_page,
+                                  :offset =>  @entry_pages.current.offset)
+        @total_hours = TimeEntry.visible.sum(:hours, :include => [:project, :issue], :conditions => cond.conditions).to_f
 
-          render :layout => !request.xhr?
-        }
-        format.api  {
-          @entry_count = TimeEntry.count(:include => [:project, :issue], :conditions => cond.conditions)
-          @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page']
-          @entries = TimeEntry.find(:all, 
-                                    :include => [:project, :activity, :user, {:issue => :tracker}],
-                                    :conditions => cond.conditions,
-                                    :order => sort_clause,
-                                    :limit  =>  @entry_pages.items_per_page,
-                                    :offset =>  @entry_pages.current.offset)
-        }
-        format.atom {
-          entries = TimeEntry.find(:all,
-                                   :include => [:project, :activity, :user, {:issue => :tracker}],
-                                   :conditions => cond.conditions,
-                                   :order => "#{TimeEntry.table_name}.created_on DESC",
-                                   :limit => Setting.feeds_limit.to_i)
-          render_feed(entries, :title => l(:label_spent_time))
-        }
-        format.csv {
-          # Export all entries
-          @entries = TimeEntry.find(:all, 
-                                    :include => [:project, :activity, :user, {:issue => [:tracker, :assigned_to, :priority]}],
-                                    :conditions => cond.conditions,
-                                    :order => sort_clause)
-          send_data(entries_to_csv(@entries), :type => 'text/csv; header=present', :filename => 'timelog.csv')
-        }
-      end
+        render :layout => !request.xhr?
+      }
+      format.api  {
+        @entry_count = TimeEntry.visible.count(:include => [:project, :issue], :conditions => cond.conditions)
+        @offset, @limit = api_offset_and_limit
+        @entries = TimeEntry.visible.find(:all, 
+                                  :include => [:project, :activity, :user, {:issue => :tracker}],
+                                  :conditions => cond.conditions,
+                                  :order => sort_clause,
+                                  :limit  => @limit,
+                                  :offset => @offset)
+      }
+      format.atom {
+        entries = TimeEntry.visible.find(:all,
+                                 :include => [:project, :activity, :user, {:issue => :tracker}],
+                                 :conditions => cond.conditions,
+                                 :order => "#{TimeEntry.table_name}.created_on DESC",
+                                 :limit => Setting.feeds_limit.to_i)
+        render_feed(entries, :title => l(:label_spent_time))
+      }
+      format.csv {
+        # Export all entries
+        @entries = TimeEntry.visible.find(:all, 
+                                  :include => [:project, :activity, :user, {:issue => [:tracker, :assigned_to, :priority]}],
+                                  :conditions => cond.conditions,
+                                  :order => sort_clause)
+        send_data(entries_to_csv(@entries), :type => 'text/csv; header=present', :filename => 'timelog.csv')
+      }
     end
   end
   
@@ -164,27 +161,55 @@
     end    
   end
 
+  def bulk_edit
+    @available_activities = TimeEntryActivity.shared.active
+    @custom_fields = TimeEntry.first.available_custom_fields
+  end
+
+  def bulk_update
+    attributes = parse_params_for_bulk_time_entry_attributes(params)
+
+    unsaved_time_entry_ids = []
+    @time_entries.each do |time_entry|
+      time_entry.reload
+      time_entry.attributes = attributes
+      call_hook(:controller_time_entries_bulk_edit_before_save, { :params => params, :time_entry => time_entry })
+      unless time_entry.save
+        # Keep unsaved time_entry ids to display them in flash error
+        unsaved_time_entry_ids << time_entry.id
+      end
+    end
+    set_flash_from_bulk_time_entry_save(@time_entries, unsaved_time_entry_ids)
+    redirect_back_or_default({:controller => 'timelog', :action => 'index', :project_id => @projects.first})
+  end
+
   verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed }
   def destroy
-    if @time_entry.destroy && @time_entry.destroyed?
-      respond_to do |format|
-        format.html {
-          flash[:notice] = l(:notice_successful_delete)
-          redirect_to :back
-        }
-        format.api  { head :ok }
-      end
-    else
-      respond_to do |format|
-        format.html {
-          flash[:error] = l(:notice_unable_delete_time_entry)
-          redirect_to :back
-        }
-        format.api  { render_validation_errors(@time_entry) }
+    @time_entries.each do |t| 
+      begin
+        unless t.destroy && t.destroyed?
+          respond_to do |format|
+            format.html {
+              flash[:error] = l(:notice_unable_delete_time_entry)
+              redirect_to :back
+            }
+            format.api  { render_validation_errors(t) }
+          end
+          return
+        end
+      rescue ::ActionController::RedirectBackError
+        redirect_to :action => 'index', :project_id => @projects.first
+        return
       end
     end
-  rescue ::ActionController::RedirectBackError
-    redirect_to :action => 'index', :project_id => @time_entry.project
+
+    respond_to do |format|
+      format.html {
+        flash[:notice] = l(:notice_successful_delete)
+        redirect_back_or_default(:action => 'index', :project_id => @projects.first)
+      }
+      format.api  { head :ok }
+    end
   end
 
 private
@@ -199,6 +224,26 @@
     render_404
   end
 
+  def find_time_entries
+    @time_entries = TimeEntry.find_all_by_id(params[:id] || params[:ids])
+    raise ActiveRecord::RecordNotFound if @time_entries.empty?
+    @projects = @time_entries.collect(&:project).compact.uniq
+    @project = @projects.first if @projects.size == 1
+  rescue ActiveRecord::RecordNotFound
+    render_404
+  end
+
+  def set_flash_from_bulk_time_entry_save(time_entries, unsaved_time_entry_ids)
+    if unsaved_time_entry_ids.empty?
+      flash[:notice] = l(:notice_successful_update) unless time_entries.empty?
+    else
+      flash[:error] = l(:notice_failed_to_save_time_entries,
+                        :count => unsaved_time_entry_ids.size,
+                        :total => time_entries.size,
+                        :ids => '#' + unsaved_time_entry_ids.join(', #'))
+    end
+  end
+
   def find_project
     if (issue_id = (params[:issue_id] || params[:time_entry] && params[:time_entry][:issue_id])).present?
       @issue = Issue.find(issue_id)
@@ -269,4 +314,10 @@
     @to   ||= (TimeEntry.latest_date_for_project(@project) || Date.today)
   end
 
+  def parse_params_for_bulk_time_entry_attributes(params)
+    attributes = (params[:time_entry] || {}).reject {|k,v| v.blank?}
+    attributes.keys.each {|k| attributes[k] = '' if attributes[k] == 'none'}
+    attributes[:custom_field_values].reject! {|k,v| v.blank?} if attributes[:custom_field_values]
+    attributes
+  end
 end
--- a/app/controllers/users_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/users_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -38,6 +38,9 @@
       @limit = per_page_option
     end
     
+    scope = User
+    scope = scope.in_group(params[:group_id].to_i) if params[:group_id].present?
+    
     @status = params[:status] ? params[:status].to_i : 1
     c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
 
@@ -46,19 +49,22 @@
       c << ["LOWER(login) LIKE ? OR LOWER(firstname) LIKE ? OR LOWER(lastname) LIKE ? OR LOWER(mail) LIKE ?", name, name, name, name]
     end
     
-    @user_count = User.count(:conditions => c.conditions)
+    @user_count = scope.count(:conditions => c.conditions)
     @user_pages = Paginator.new self, @user_count, @limit, params['page']
     @offset ||= @user_pages.current.offset
-    @users =  User.find :all,
+    @users =  scope.find :all,
                         :order => sort_clause,
                         :conditions => c.conditions,
                         :limit  =>  @limit,
                         :offset =>  @offset
 
-		respond_to do |format|
-		  format.html { render :layout => !request.xhr? }
+    respond_to do |format|
+      format.html {
+        @groups = Group.all.sort
+        render :layout => !request.xhr?
+      }
       format.api
-		end	
+    end	
   end
   
   def show
@@ -77,7 +83,7 @@
     end
     
     # show projects based on current user visibility
-    @memberships = @user.memberships.all(:conditions => Project.visible_by(User.current))
+    @memberships = @user.memberships.all(:conditions => Project.visible_condition(User.current))
     
     events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 10)
     @events_by_day = events.group_by(&:event_date)
--- a/app/controllers/watchers_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/watchers_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -76,21 +76,13 @@
   
   def set_watcher(user, watching)
     @watched.set_watcher(user, watching)
-    if params[:replace].present?
-      if params[:replace].is_a? Array
-        replace_ids = params[:replace]
-      else
-        replace_ids = [params[:replace]]
-      end
-    else
-      replace_ids = ['watcher']
-    end
     respond_to do |format|
       format.html { redirect_to :back }
       format.js do
         render(:update) do |page|
-          replace_ids.each do |replace_id|
-            page.replace_html replace_id, watcher_link(@watched, user, :replace => replace_ids)
+          c = watcher_css(@watched)
+          page.select(".#{c}").each do |item|
+            page.replace_html item, watcher_link(@watched, user)
           end
         end
       end
--- a/app/controllers/wiki_controller.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/controllers/wiki_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -34,23 +34,27 @@
 class WikiController < ApplicationController
   default_search_scope :wiki_pages
   before_filter :find_wiki, :authorize
+  before_filter :find_existing_or_new_page, :only => [:show, :edit, :update]
   before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy]
-  
-  verify :method => :post, :only => [:protect], :redirect_to => { :action => :show }
 
   helper :attachments
-  include AttachmentsHelper   
+  include AttachmentsHelper
   helper :watchers
 
   # List of pages, sorted alphabetically and by parent (hierarchy)
   def index
-    load_pages_grouped_by_date_without_content
+    load_pages_for_index
+    @pages_by_parent_id = @pages.group_by(&:parent_id)
+  end
+
+  # List of page, by last update
+  def date_index
+    load_pages_for_index
+    @pages_by_date = @pages.group_by {|p| p.updated_on.to_date}
   end
 
   # display a page (in editing mode if it doesn't exist)
   def show
-    page_title = params[:id]
-    @page = @wiki.find_or_new_page(page_title)
     if @page.new_record?
       if User.current.allowed_to?(:edit_wiki_pages, @project) && editable?
         edit
@@ -79,13 +83,12 @@
     @editable = editable?
     render :action => 'show'
   end
-  
+
   # edit an existing page or a new one
   def edit
-    @page = @wiki.find_or_new_page(params[:id])    
     return render_403 unless editable?
     @page.content = WikiContent.new(:page => @page) if @page.new_record?
-    
+
     @content = @page.content_for_version(params[:version])
     @content.text = initial_page_content(@page) if @content.text.blank?
     # don't keep previous comment
@@ -93,18 +96,14 @@
 
     # To prevent StaleObjectError exception when reverting to a previous version
     @content.version = @page.content.version
-  rescue ActiveRecord::StaleObjectError
-    # Optimistic locking exception
-    flash[:error] = l(:notice_locking_conflict)
   end
 
   verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
   # Creates a new page or updates an existing one
   def update
-    @page = @wiki.find_or_new_page(params[:id])    
     return render_403 unless editable?
     @page.content = WikiContent.new(:page => @page) if @page.new_record?
-    
+
     @content = @page.content_for_version(params[:version])
     @content.text = initial_page_content(@page) if @content.text.blank?
     # don't keep previous comment
@@ -131,7 +130,8 @@
 
   rescue ActiveRecord::StaleObjectError
     # Optimistic locking exception
-    flash[:error] = l(:notice_locking_conflict)
+    flash.now[:error] = l(:notice_locking_conflict)
+    render :action => 'edit'
   end
 
   # rename a page
@@ -145,7 +145,8 @@
       redirect_to :action => 'show', :project_id => @project, :id => @page.title
     end
   end
-  
+
+  verify :method => :post, :only => :protect, :redirect_to => { :action => :show }
   def protect
     @page.update_attribute :protected, params[:protected]
     redirect_to :action => 'show', :project_id => @project, :id => @page.title
@@ -155,8 +156,8 @@
   def history
     @version_count = @page.content.versions.count
     @version_pages = Paginator.new self, @version_count, per_page_option, params['p']
-    # don't load text    
-    @versions = @page.content.versions.find :all, 
+    # don't load text
+    @versions = @page.content.versions.find :all,
                                             :select => "id, author_id, comments, updated_on, version",
                                             :order => 'version DESC',
                                             :limit  =>  @version_pages.items_per_page + 1,
@@ -164,12 +165,12 @@
 
     render :layout => false if request.xhr?
   end
-  
+
   def diff
     @diff = @page.diff(params[:version], params[:version_from])
     render_404 unless @diff
   end
-  
+
   def annotate
     @annotate = @page.annotate(params[:version])
     render_404 unless @annotate
@@ -180,7 +181,7 @@
   # Children can be either set as root pages, removed or reassigned to another parent page
   def destroy
     return render_403 unless editable?
-    
+
     @descendants_count = @page.descendants.size
     if @descendants_count > 0
       case params[:todo]
@@ -216,10 +217,6 @@
     end
   end
 
-  def date_index
-    load_pages_grouped_by_date_without_content
-  end
-  
   def preview
     page = @wiki.find_page(params[:id])
     # page is nil when previewing a new page
@@ -240,7 +237,7 @@
   end
 
 private
-  
+
   def find_wiki
     @project = Project.find(params[:project_id])
     @wiki = @project.wiki
@@ -248,13 +245,27 @@
   rescue ActiveRecord::RecordNotFound
     render_404
   end
-  
+
+  # Finds the requested page or a new page if it doesn't exist
+  def find_existing_or_new_page
+    @page = @wiki.find_or_new_page(params[:id])
+    if @wiki.page_found_with_redirect?
+      redirect_to params.update(:id => @page.title)
+    end
+  end
+
   # Finds the requested page and returns a 404 error if it doesn't exist
   def find_existing_page
     @page = @wiki.find_page(params[:id])
-    render_404 if @page.nil?
+    if @page.nil?
+      render_404
+      return
+    end
+    if @wiki.page_found_with_redirect?
+      redirect_to params.update(:id => @page.title)
+    end
   end
-  
+
   # Returns true if the current user is allowed to edit the page, otherwise false
   def editable?(page = @page)
     page.editable_by?(User.current)
@@ -267,13 +278,7 @@
     helper.instance_method(:initial_page_content).bind(self).call(page)
   end
 
-  # eager load information about last updates, without loading text
-  def load_pages_grouped_by_date_without_content
-    @pages = @wiki.pages.find :all, :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on",
-                                    :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id",
-                                    :order => 'title'
-    @pages_by_date = @pages.group_by {|p| p.updated_on.to_date}
-    @pages_by_parent_id = @pages.group_by(&:parent_id)
+  def load_pages_for_index
+    @pages = @wiki.pages.with_updated_on.all(:order => 'title', :include => {:wiki => :project})
   end
-  
 end
--- a/app/helpers/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,239 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 36
-/svn/!svn/ver/4990/trunk/app/helpers
-END
-trackers_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/333/trunk/app/helpers/trackers_helper.rb
-END
-groups_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/2869/trunk/app/helpers/groups_helper.rb
-END
-issue_statuses_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/333/trunk/app/helpers/issue_statuses_helper.rb
-END
-roles_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/333/trunk/app/helpers/roles_helper.rb
-END
-sort_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3618/trunk/app/helpers/sort_helper.rb
-END
-repositories_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4990/trunk/app/helpers/repositories_helper.rb
-END
-admin_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4080/trunk/app/helpers/admin_helper.rb
-END
-projects_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3924/trunk/app/helpers/projects_helper.rb
-END
-account_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/333/trunk/app/helpers/account_helper.rb
-END
-calendars_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/4046/trunk/app/helpers/calendars_helper.rb
-END
-issue_categories_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/333/trunk/app/helpers/issue_categories_helper.rb
-END
-documents_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/333/trunk/app/helpers/documents_helper.rb
-END
-wiki_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4952/trunk/app/helpers/wiki_helper.rb
-END
-enumerations_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/333/trunk/app/helpers/enumerations_helper.rb
-END
-issues_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4954/trunk/app/helpers/issues_helper.rb
-END
-queries_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4387/trunk/app/helpers/queries_helper.rb
-END
-gantt_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4283/trunk/app/helpers/gantt_helper.rb
-END
-mail_handler_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/1584/trunk/app/helpers/mail_handler_helper.rb
-END
-watchers_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3579/trunk/app/helpers/watchers_helper.rb
-END
-my_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/333/trunk/app/helpers/my_helper.rb
-END
-members_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/333/trunk/app/helpers/members_helper.rb
-END
-welcome_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/333/trunk/app/helpers/welcome_helper.rb
-END
-journals_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4062/trunk/app/helpers/journals_helper.rb
-END
-workflows_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/1914/trunk/app/helpers/workflows_helper.rb
-END
-reports_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/629/trunk/app/helpers/reports_helper.rb
-END
-timelog_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/3708/trunk/app/helpers/timelog_helper.rb
-END
-settings_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4222/trunk/app/helpers/settings_helper.rb
-END
-custom_fields_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/4480/trunk/app/helpers/custom_fields_helper.rb
-END
-issue_moves_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/3936/trunk/app/helpers/issue_moves_helper.rb
-END
-users_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4497/trunk/app/helpers/users_helper.rb
-END
-application_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4900/trunk/app/helpers/application_helper.rb
-END
-auth_sources_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/333/trunk/app/helpers/auth_sources_helper.rb
-END
-search_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4353/trunk/app/helpers/search_helper.rb
-END
-messages_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4760/trunk/app/helpers/messages_helper.rb
-END
-issue_relations_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/506/trunk/app/helpers/issue_relations_helper.rb
-END
-versions_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/955/trunk/app/helpers/versions_helper.rb
-END
-boards_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/529/trunk/app/helpers/boards_helper.rb
-END
-attachments_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4605/trunk/app/helpers/attachments_helper.rb
-END
-news_helper.rb
 K 25
 svn:wc:ra_dav:version-url
 V 50
-/svn/!svn/ver/333/trunk/app/helpers/news_helper.rb
+/svn/!svn/ver/5961/branches/1.2-stable/app/helpers
 END
--- a/app/helpers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/helpers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/helpers
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-03T03:30:10.954225Z
-4990
-tmaruyama
+2011-05-29T12:06:05.086159Z
+5961
+jplang
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 e1b19c2c81df384b2026001d1d9605fd
 2007-03-12T17:59:02.654744Z
 333
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 ab0af291fb143223852a6edddc64b74b
 2009-09-12T08:36:46.650954Z
 2869
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 0cd3093356b7034ee950ca327fc7aabc
 2007-03-12T17:59:02.654744Z
 333
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 69869e026dc6cbacc618214e4bb13b1b
 2007-03-12T17:59:02.654744Z
 333
@@ -168,10 +168,10 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-491ead5828edb57adcd7333943656c94
-2010-03-27T16:55:20.312262Z
-3618
+2011-06-06T13:18:33.000000Z
+580d9b0753045bc89e5a92dfb9bccc65
+2011-04-03T14:09:22.655792Z
+5303
 jplang
 has-props
 
@@ -194,7 +194,7 @@
 
 
 
-6469
+6246
 
 repositories_helper.rb
 file
@@ -202,10 +202,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-824b766582f7177458a587dcfcf980f5
-2011-03-03T03:30:10.954225Z
-4990
+2011-06-06T13:18:33.000000Z
+bb401adbfcec298b2731e4e1fc4fe652
+2011-05-18T02:45:35.322493Z
+5830
 tmaruyama
 has-props
 
@@ -228,7 +228,7 @@
 
 
 
-9702
+10966
 
 admin_helper.rb
 file
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 258ebc9ad13b3111585e5118ec607d1b
 2010-09-10T23:07:10.817821Z
 4080
@@ -270,11 +270,11 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-19efbd2b30f44f233d5140437e2707a0
-2010-08-08T07:07:20.961363Z
-3924
-jbbarth
+2011-06-06T13:18:33.000000Z
+a0bf71359447b66a404f8911ca669a1c
+2011-05-18T11:13:02.791261Z
+5849
+tmaruyama
 has-props
 
 
@@ -296,7 +296,7 @@
 
 
 
-5204
+5187
 
 account_helper.rb
 file
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 42d20ee00a3c45e3411634dbb09e2447
 2007-03-12T17:59:02.654744Z
 333
@@ -338,33 +338,33 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-c8780c65337211f34097d74a8c3c9f6e
-2010-08-26T16:37:26.575205Z
-4046
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1462
+2011-06-06T13:18:33.000000Z
+3fc9041a6dc70d35c640c38cd1edbbc8
+2011-04-03T14:01:32.419875Z
+5301
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1216
 
 issue_categories_helper.rb
 file
@@ -372,7 +372,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 1257aafe6669c839ab46dac2b2732ae0
 2007-03-12T17:59:02.654744Z
 333
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 ceb0fce7a4c271df3ae182c29caf9c03
 2007-03-12T17:59:02.654744Z
 333
@@ -440,10 +440,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-44832549db555bb9e047a67ae330f34a
-2011-02-27T12:35:31.414622Z
-4952
+2011-06-06T13:18:33.000000Z
+a93e6c0c0834a0700ecd23ba24bf4102
+2011-03-10T19:44:32.117142Z
+5080
 jplang
 has-props
 
@@ -466,7 +466,7 @@
 
 
 
-1315
+1407
 
 enumerations_helper.rb
 file
@@ -474,7 +474,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 fc5ec20dd0ca3ce1d954b219417eff70
 2007-03-12T17:59:02.654744Z
 333
@@ -508,33 +508,67 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-9dfadb196899bf96fdff7c7c34914e8c
-2011-02-27T13:34:41.060565Z
-4954
+2011-06-06T13:18:33.000000Z
+f2465c49d740ce016b80c6035d7df2c4
+2011-05-18T02:45:59.814275Z
+5831
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+12736
+
+gantt_helper.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+65d9a1166814eb63d467373051bf0b62
+2011-04-03T14:01:32.419875Z
+5301
 jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-11599
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1492
 
 queries_helper.rb
 file
@@ -542,10 +576,10 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-6b997d023cc081b101be1949eb18f893
-2010-11-07T15:38:51.908839Z
-4387
+2011-06-06T13:18:33.000000Z
+ce7f38c9a8f2d85ae50a0555b7ec516f
+2011-04-03T14:31:32.940784Z
+5304
 jplang
 has-props
 
@@ -568,41 +602,7 @@
 
 
 
-3722
-
-gantt_helper.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-dfac5226f31c3c232d7dcc9416172071
-2010-10-23T09:08:55.877887Z
-4283
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1988
+3795
 
 mail_handler_helper.rb
 file
@@ -610,7 +610,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 c79faf6237abac40fabce0eacbfbb4cb
 2008-06-25T19:25:28.386590Z
 1584
@@ -644,10 +644,10 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-fc71d3a83fe0178e0c6d9519c7a62dde
-2010-03-13T17:45:41.194736Z
-3579
+2011-06-06T13:18:33.000000Z
+809ed0d1d7e143a2b6f4c695781d4dc0
+2011-04-05T12:09:15.508559Z
+5320
 jplang
 has-props
 
@@ -670,7 +670,7 @@
 
 
 
-2905
+2688
 
 my_helper.rb
 file
@@ -678,7 +678,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 d7134d76eff99aef107d8930903b10e0
 2007-03-12T17:59:02.654744Z
 333
@@ -712,7 +712,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 cc94b2fd5c6a87acac13bbe6e91bd39a
 2007-03-12T17:59:02.654744Z
 333
@@ -746,7 +746,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 2d03eb3683f312ec26736c696319ec76
 2007-03-12T17:59:02.654744Z
 333
@@ -774,13 +774,47 @@
 
 817
 
+workflows_helper.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+4f7bcbe149363ecb18080e3ce6c3f761
+2008-09-28T12:03:17.584169Z
+1914
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+824
+
 journals_helper.rb
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 b64edde44bceed7fb0911f87dba971aa
 2010-09-05T22:57:20.669640Z
 4062
@@ -808,16 +842,50 @@
 
 2266
 
-workflows_helper.rb
+reports_helper.rb
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
-4f7bcbe149363ecb18080e3ce6c3f761
-2008-09-28T12:03:17.584169Z
-1914
+2011-06-06T13:18:33.000000Z
+abbaa87dcc23e906723ca0778128bae4
+2011-05-18T11:13:45.451188Z
+5850
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1262
+
+custom_fields_helper.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+3aab3283e46880f443fed09b975f3d7f
+2011-04-07T20:49:33.971753Z
+5356
 jplang
 has-props
 
@@ -840,18 +908,18 @@
 
 
 
-824
+5840
 
-reports_helper.rb
+settings_helper.rb
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
-9daafcfffa933849b3ee09fe5fd7b0cc
-2007-08-13T17:00:59.400243Z
-629
+2011-06-06T13:18:33.000000Z
+da8c43c261cd527067440f75a242c091
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -874,7 +942,7 @@
 
 
 
-1265
+3937
 
 timelog_helper.rb
 file
@@ -882,7 +950,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 1888fd2d4a1be5fa0d6ad8a63238e2b4
 2010-04-30T12:18:11.536180Z
 3708
@@ -910,115 +978,13 @@
 
 6636
 
-settings_helper.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-868d0dc19e332ae2c817321637a8e31f
-2010-09-28T21:09:06.467392Z
-4222
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3858
-
-custom_fields_helper.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-19a8f1c143030c42136fe167f167db15
-2010-12-10T10:12:19.202442Z
-4480
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5702
-
-issue_moves_helper.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-66e99bd3af036c92a773a91e92a725f9
-2010-08-11T14:42:10.119704Z
-3936
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-28
-
 users_helper.rb
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 1bedb4287035a6f89074da0b37640c28
 2010-12-12T14:25:23.262992Z
 4497
@@ -1046,17 +1012,51 @@
 
 2767
 
+issue_moves_helper.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+66e99bd3af036c92a773a91e92a725f9
+2010-08-11T14:42:10.119704Z
+3936
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+28
+
 application_helper.rb
 file
 
 
 
 
-2011-03-03T11:40:18.000000Z
-9d39fe6e2dd4535f7a006a77150961bc
-2011-02-21T09:53:29.844413Z
-4900
-jplang
+2011-06-06T13:18:33.000000Z
+639bb5f1e90caa8a4d6bb8029ab55905
+2011-05-18T02:46:24.994751Z
+5832
+tmaruyama
 has-props
 
 
@@ -1078,7 +1078,7 @@
 
 
 
-36020
+35515
 
 auth_sources_helper.rb
 file
@@ -1086,7 +1086,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 19759b6e665f9063140da8ac473d9e31
 2007-03-12T17:59:02.654744Z
 333
@@ -1120,7 +1120,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 dedb3c62af67e076703aa2f60c97fb2b
 2010-11-01T12:55:15.292443Z
 4353
@@ -1154,7 +1154,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 d083581ae234853db09e79e4e88d6ad3
 2011-01-23T17:02:10.030897Z
 4760
@@ -1188,7 +1188,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 fef3a97e6644b418b44f9551aa65af95
 2007-05-05T13:22:27.245135Z
 506
@@ -1222,10 +1222,10 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-fd18226266f3e53f6af000ac07a13313
-2007-12-07T10:26:07.864320Z
-955
+2011-06-06T13:18:33.000000Z
+18e0206c3b8a4fb260548f58b75c7fa9
+2011-03-20T21:09:48.299058Z
+5180
 jplang
 has-props
 
@@ -1248,7 +1248,7 @@
 
 
 
-2170
+2151
 
 boards_helper.rb
 file
@@ -1256,7 +1256,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 0ca8f33522734ee0417089366037a7cb
 2007-05-13T17:09:56.765659Z
 529
@@ -1290,11 +1290,11 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-58bc2391be7fedbf3e55ef07454cb04c
-2011-01-01T19:12:35.568700Z
-4605
-jplang
+2011-06-06T13:18:33.000000Z
+a2546fe896ad77351ab052f113afd012
+2011-05-07T05:51:39.224805Z
+5681
+tmaruyama
 has-props
 
 
@@ -1316,7 +1316,7 @@
 
 
 
-1743
+1731
 
 news_helper.rb
 file
@@ -1324,7 +1324,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 d808f6794a2fa7cd059ed56d5c8d1b28
 2007-03-12T17:59:02.654744Z
 333
--- a/app/helpers/.svn/text-base/application_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/application_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -63,7 +63,7 @@
 
   # Displays a link to +issue+ with its subject.
   # Examples:
-  # 
+  #
   #   link_to_issue(issue)                        # => Defect #6: This is the subject
   #   link_to_issue(issue, :truncate => 6)        # => Defect #6: This i...
   #   link_to_issue(issue, :subject => false)     # => Defect #6
@@ -80,7 +80,7 @@
         subject = truncate(subject, :length => options[:truncate])
       end
     end
-    s = link_to "#{issue.tracker} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue}, 
+    s = link_to "#{issue.tracker} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue},
                                                  :class => issue.css_classes,
                                                  :title => title
     s << ": #{h subject}" if subject
@@ -109,7 +109,7 @@
     link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => rev},
             :title => l(:label_revision_id, format_revision(revision)))
   end
-  
+
   # Generates a link to a message
   def link_to_message(message, options={}, html_options = nil)
     link_to(
@@ -126,7 +126,7 @@
 
   # Generates a link to a project if active
   # Examples:
-  # 
+  #
   #   link_to_project(project)                          # => link to the specified project overview
   #   link_to_project(project, :action=>'settings')     # => link to project settings
   #   link_to_project(project, {:only_path => false}, :class => "project") # => 3rd arg adds html options
@@ -160,15 +160,15 @@
     html_options[:onclick] = "promptToRemote('#{text}', '#{param}', '#{url_for(url)}'); return false;"
     link_to name, {}, html_options
   end
-  
+
   def format_activity_title(text)
     h(truncate_single_line(text, :length => 100))
   end
-  
+
   def format_activity_day(date)
     date == Date.today ? l(:label_today).titleize : format_date(date)
   end
-  
+
   def format_activity_description(text)
     h(truncate(text.to_s, :length => 120).gsub(%r{[\r\n]*<(pre|code)>.*$}m, '...')).gsub(/[\r\n]+/, "<br />")
   end
@@ -180,29 +180,29 @@
       h("#{version.project} - #{version}")
     end
   end
-  
+
   def due_date_distance_in_words(date)
     if date
       l((date < Date.today ? :label_roadmap_overdue : :label_roadmap_due_in), distance_of_date_in_words(Date.today, date))
     end
   end
 
-  def render_page_hierarchy(pages, node=nil)
+  def render_page_hierarchy(pages, node=nil, options={})
     content = ''
     if pages[node]
       content << "<ul class=\"pages-hierarchy\">\n"
       pages[node].each do |page|
         content << "<li>"
         content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'show', :project_id => page.project, :id => page.title},
-                           :title => (page.respond_to?(:updated_on) ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil))
-        content << "\n" + render_page_hierarchy(pages, page.id) if pages[page.id]
+                           :title => (options[:timestamp] && page.updated_on ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil))
+        content << "\n" + render_page_hierarchy(pages, page.id, options) if pages[page.id]
         content << "</li>\n"
       end
       content << "</ul>\n"
     end
     content
   end
-  
+
   # Renders flash messages
   def render_flash_messages
     s = ''
@@ -211,7 +211,7 @@
     end
     s
   end
-  
+
   # Renders tabs and their content
   def render_tabs(tabs)
     if tabs.any?
@@ -220,11 +220,11 @@
       content_tag 'p', l(:label_no_data), :class => "nodata"
     end
   end
-  
+
   # Renders the project quick-jump box
   def render_project_jump_box
-    # Retrieve them now to avoid a COUNT query
-    projects = User.current.projects.all
+    return unless User.current.logged?
+    projects = User.current.memberships.collect(&:project).compact.uniq
     if projects.any?
       s = '<select onchange="if (this.value != \'\') { window.location = this.value; }">' +
             "<option value=''>#{ l(:label_jump_to_a_project) }</option>" +
@@ -236,7 +236,7 @@
       s
     end
   end
-  
+
   def project_tree_options_for_select(projects, options = {})
     s = ''
     project_tree(projects) do |project, level|
@@ -252,14 +252,14 @@
     end
     s
   end
-  
+
   # Yields the given block for each project with its level in the tree
   #
   # Wrapper for Project#project_tree
   def project_tree(projects, &block)
     Project.project_tree(projects, &block)
   end
-  
+
   def project_nested_ul(projects, &block)
     s = ''
     if projects.any?
@@ -270,7 +270,7 @@
         else
           ancestors.pop
           s << "</li>"
-          while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) 
+          while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
             ancestors.pop
             s << "</ul></li>\n"
           end
@@ -283,20 +283,20 @@
     end
     s
   end
-  
+
   def principals_check_box_tags(name, principals)
     s = ''
     principals.sort.each do |principal|
       s << "<label>#{ check_box_tag name, principal.id, false } #{h principal}</label>\n"
     end
-    s 
+    s
   end
 
   # Truncates and returns the string as a single line
   def truncate_single_line(string, *args)
     truncate(string.to_s, *args).gsub(%r{[\r\n]+}m, ' ')
   end
-  
+
   # Truncates at line break after 250 characters or options[:length]
   def truncate_lines(string, options={})
     length = options[:length] || 250
@@ -314,7 +314,7 @@
   def authoring(created, author, options={})
     l(options[:label] || :label_added_time_by, :author => link_to_user(author), :age => time_tag(created))
   end
-  
+
   def time_tag(time)
     text = distance_of_time_in_words(Time.now, time)
     if @project
@@ -336,20 +336,18 @@
     page_param = options.delete(:page_param) || :page
     per_page_links = options.delete(:per_page_links)
     url_param = params.dup
-    # don't reuse query params if filters are present
-    url_param.merge!(:fields => nil, :values => nil, :operators => nil) if url_param.delete(:set_filter)
 
     html = ''
     if paginator.current.previous
-      html << link_to_remote_content_update('&#171; ' + l(:label_previous), url_param.merge(page_param => paginator.current.previous)) + ' '
+      html << link_to_content_update('&#171; ' + l(:label_previous), url_param.merge(page_param => paginator.current.previous)) + ' '
     end
 
     html << (pagination_links_each(paginator, options) do |n|
-      link_to_remote_content_update(n.to_s, url_param.merge(page_param => n))
+      link_to_content_update(n.to_s, url_param.merge(page_param => n))
     end || '')
-    
+
     if paginator.current.next
-      html << ' ' + link_to_remote_content_update((l(:label_next) + ' &#187;'), url_param.merge(page_param => paginator.current.next))
+      html << ' ' + link_to_content_update((l(:label_next) + ' &#187;'), url_param.merge(page_param => paginator.current.next))
     end
 
     unless count.nil?
@@ -361,20 +359,14 @@
 
     html
   end
-  
+
   def per_page_links(selected=nil)
-    url_param = params.dup
-    url_param.clear if url_param.has_key?(:set_filter)
-
     links = Setting.per_page_options_array.collect do |n|
-      n == selected ? n : link_to_remote(n, {:update => "content",
-                                             :url => params.dup.merge(:per_page => n),
-                                             :method => :get},
-                                            {:href => url_for(url_param.merge(:per_page => n))})
+      n == selected ? n : link_to_content_update(n, params.merge(:per_page => n))
     end
     links.size > 1 ? l(:label_display_per_page, links.join(', ')) : nil
   end
-  
+
   def reorder_links(name, url)
     link_to(image_tag('2uparrow.png',   :alt => l(:label_sort_highest)), url.merge({"#{name}[move_to]" => 'highest'}), :method => :post, :title => l(:label_sort_highest)) +
     link_to(image_tag('1uparrow.png',   :alt => l(:label_sort_higher)),  url.merge({"#{name}[move_to]" => 'higher'}),  :method => :post, :title => l(:label_sort_higher)) +
@@ -386,19 +378,19 @@
     elements = args.flatten
     elements.any? ? content_tag('p', args.join(' &#187; ') + ' &#187; ', :class => 'breadcrumb') : nil
   end
-  
+
   def other_formats_links(&block)
     concat('<p class="other-formats">' + l(:label_export_to))
     yield Redmine::Views::OtherFormatsBuilder.new(self)
     concat('</p>')
   end
-  
+
   def page_header_title
     if @project.nil? || @project.new_record?
       h(Setting.app_title)
     else
       b = []
-      ancestors = (@project.root? ? [] : @project.ancestors.visible)
+      ancestors = (@project.root? ? [] : @project.ancestors.visible.all)
       if ancestors.any?
         root = ancestors.shift
         b << link_to_project(root, {:jump => current_menu_item}, :class => 'root')
@@ -465,21 +457,21 @@
     only_path = options.delete(:only_path) == false ? false : true
 
     text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr) { |macro, args| exec_macro(macro, obj, args) }
-    
+
     @parsed_headings = []
     text = parse_non_pre_blocks(text) do |text|
       [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_headings].each do |method_name|
         send method_name, text, project, obj, attr, only_path, options
       end
     end
-    
+
     if @parsed_headings.any?
       replace_toc(text, @parsed_headings)
     end
-    
+
     text
   end
-  
+
   def parse_non_pre_blocks(text)
     s = StringScanner.new(text)
     tags = []
@@ -508,13 +500,13 @@
     end
     parsed
   end
-  
+
   def parse_inline_attachments(text, project, obj, attr, only_path, options)
     # when using an image link, try to use an attachment, if possible
     if options[:attachments] || (obj && obj.respond_to?(:attachments))
       attachments = nil
       text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m|
-        filename, ext, alt, alttext = $1.downcase, $2, $3, $4 
+        filename, ext, alt, alttext = $1.downcase, $2, $3, $4
         attachments ||= (options[:attachments] || obj.attachments).sort_by(&:created_on).reverse
         # search for the picture in attachments
         if found = attachments.detect { |att| att.filename.downcase == filename }
@@ -577,7 +569,7 @@
       end
     end
   end
-  
+
   # Redmine links
   #
   # Examples:
@@ -700,25 +692,25 @@
       leading + (link || "#{project_prefix}#{prefix}#{sep}#{identifier}")
     end
   end
-  
+
   HEADING_RE = /<h(1|2|3|4)( [^>]+)?>(.+?)<\/h(1|2|3|4)>/i unless const_defined?(:HEADING_RE)
-  
+
   # Headings and TOC
   # Adds ids and links to headings unless options[:headings] is set to false
   def parse_headings(text, project, obj, attr, only_path, options)
     return if options[:headings] == false
-    
+
     text.gsub!(HEADING_RE) do
       level, attrs, content = $1.to_i, $2, $3
       item = strip_tags(content).strip
       anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
       @parsed_headings << [level, anchor, item]
-      "<h#{level} #{attrs} id=\"#{anchor}\">#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">&para;</a></h#{level}>"
+      "<a name=\"#{anchor}\"></a>\n<h#{level} #{attrs}>#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">&para;</a></h#{level}>"
     end
   end
-          
+
   TOC_RE = /<p>\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE)
-  
+
   # Renders the TOC with given headings
   def replace_toc(text, headings)
     text.gsub!(TOC_RE) do
@@ -801,13 +793,13 @@
       ), :class => 'progress', :style => "width: #{width};") +
       content_tag('p', legend, :class => 'pourcent')
   end
-  
+
   def checked_image(checked=true)
     if checked
       image_tag 'toggle_check.png'
     end
   end
-  
+
   def context_menu(url)
     unless @context_menu_included
       content_for :header_tags do
@@ -855,13 +847,15 @@
           'Calendar._FD = 1;' # Monday
         when 7
           'Calendar._FD = 0;' # Sunday
+        when 6
+          'Calendar._FD = 6;' # Saturday
         else
           '' # use language
         end
-        
+
         javascript_include_tag('calendar/calendar') +
         javascript_include_tag("calendar/lang/calendar-#{current_language.to_s.downcase}.js") +
-        javascript_tag(start_of_week) +  
+        javascript_tag(start_of_week) +
         javascript_include_tag('calendar/calendar-setup') +
         stylesheet_link_tag('calendar')
       end
@@ -894,7 +888,7 @@
       ''
     end
   end
-  
+
   # Returns the javascript tags that are included in the html layout head
   def javascript_heads
     tags = javascript_include_tag(:defaults)
@@ -907,7 +901,11 @@
   def favicon
     "<link rel='shortcut icon' href='#{image_path('/favicon.ico')}' />"
   end
-  
+
+  def robot_exclusion_tag
+    '<meta name="robots" content="noindex,follow,noarchive" />'
+  end
+
   # Returns true if arg is expected in the API response
   def include_in_api_response?(arg)
     unless @included_in_api_response
@@ -929,7 +927,7 @@
       options
     end
   end
-  
+
   private
 
   def wiki_helper
@@ -937,12 +935,8 @@
     extend helper
     return self
   end
-  
-  def link_to_remote_content_update(text, url_params)
-    link_to_remote(text,
-      {:url => url_params, :method => :get, :update => 'content', :complete => 'window.scrollTo(0,0)'},
-      {:href => url_for(:params => url_params)}
-    )
+
+  def link_to_content_update(text, url_params = {}, html_options = {})
+    link_to(text, url_params, html_options)
   end
-  
 end
--- a/app/helpers/.svn/text-base/attachments_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/attachments_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,13 +21,13 @@
   #   :author -- author names are not displayed if set to false
   def link_to_attachments(container, options = {})
     options.assert_valid_keys(:author)
-    
+
     if container.attachments.any?
       options = {:deletable => container.attachments_deletable?, :author => true}.merge(options)
       render :partial => 'attachments/links', :locals => {:attachments => container.attachments, :options => options}
     end
   end
-  
+
   def to_utf8(str)
     if str.respond_to?(:force_encoding)
       str.force_encoding('UTF-8')
@@ -35,7 +35,7 @@
     else
       return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
     end
-    
+
     begin
       Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + '  ')[0..-3]
     rescue Iconv::InvalidEncoding
--- a/app/helpers/.svn/text-base/calendars_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/calendars_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -32,14 +32,6 @@
   end
 
   def link_to_month(link_name, year, month, options={})
-    project_id = options[:project].present? ? options[:project].to_param : nil
-
-    link_target = calendar_path(:year => year, :month => month, :project_id => project_id)
-
-    link_to_remote(link_name,
-                   {:update => "content", :url => link_target, :method => :put},
-                   {:href => link_target})
-
+    link_to_content_update(link_name, params.merge(:year => year, :month => month))
   end
-  
 end
--- a/app/helpers/.svn/text-base/custom_fields_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/custom_fields_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -37,7 +37,7 @@
     field_id = "#{name}_custom_field_values_#{custom_field.id}"
 
     field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
-    case field_format.edit_as
+    case field_format.try(:edit_as)
     when "date"
       text_field_tag(field_name, custom_value.value, :id => field_id, :size => 10) + 
       calendar_for(field_id)
@@ -49,7 +49,7 @@
       blank_option = custom_field.is_required? ?
                        (custom_field.default_value.blank? ? "<option value=\"\">--- #{l(:actionview_instancetag_blank_option)} ---</option>" : '') : 
                        '<option></option>'
-      select_tag(field_name, blank_option + options_for_select(custom_field.possible_values, custom_value.value), :id => field_id)
+      select_tag(field_name, blank_option + options_for_select(custom_field.possible_values_options(custom_value.customized), custom_value.value), :id => field_id)
     else
       text_field_tag(field_name, custom_value.value, :id => field_id)
     end
@@ -68,11 +68,11 @@
     custom_field_label_tag(name, custom_value) + custom_field_tag(name, custom_value)
   end
   
-  def custom_field_tag_for_bulk_edit(name, custom_field)
+  def custom_field_tag_for_bulk_edit(name, custom_field, projects=nil)
     field_name = "#{name}[custom_field_values][#{custom_field.id}]"
     field_id = "#{name}_custom_field_values_#{custom_field.id}"
     field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
-    case field_format.edit_as
+    case field_format.try(:edit_as)
       when "date"
         text_field_tag(field_name, '', :id => field_id, :size => 10) + 
         calendar_for(field_id)
@@ -83,7 +83,7 @@
                                                    [l(:general_text_yes), '1'],
                                                    [l(:general_text_no), '0']]), :id => field_id)
       when "list"
-        select_tag(field_name, options_for_select([[l(:label_no_change_option), '']] + custom_field.possible_values), :id => field_id)
+        select_tag(field_name, options_for_select([[l(:label_no_change_option), '']] + custom_field.possible_values_options(projects)), :id => field_id)
       else
         text_field_tag(field_name, '', :id => field_id)
     end
@@ -101,8 +101,8 @@
   end
 
   # Return an array of custom field formats which can be used in select_tag
-  def custom_field_formats_for_select
-    Redmine::CustomFieldFormat.as_select
+  def custom_field_formats_for_select(custom_field)
+    Redmine::CustomFieldFormat.as_select(custom_field.class.customized_class.name)
   end
   
   # Renders the custom_values in api views
--- a/app/helpers/.svn/text-base/gantt_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/gantt_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -21,29 +21,21 @@
     case in_or_out
     when :in
       if gantt.zoom < 4
-        link_to_remote(l(:text_zoom_in),
-                       {:url => gantt.params.merge(:zoom => (gantt.zoom+1)), :method => :get, :update => 'content'},
-                       {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom+1))),
-                        :class => 'icon icon-zoom-in'})
+        link_to_content_update l(:text_zoom_in),
+          params.merge(gantt.params.merge(:zoom => (gantt.zoom+1))),
+          :class => 'icon icon-zoom-in'
       else
         content_tag('span', l(:text_zoom_in), :class => 'icon icon-zoom-in')
       end
       
     when :out
       if gantt.zoom > 1
-        link_to_remote(l(:text_zoom_out),
-                       {:url => gantt.params.merge(:zoom => (gantt.zoom-1)), :method => :get, :update => 'content'},
-                       {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom-1))),
-                        :class => 'icon icon-zoom-out'})
+        link_to_content_update l(:text_zoom_out),
+          params.merge(gantt.params.merge(:zoom => (gantt.zoom-1))),
+          :class => 'icon icon-zoom-out'
       else
         content_tag('span', l(:text_zoom_out), :class => 'icon icon-zoom-out')
       end
     end
   end
-  
-  def number_of_issues_on_versions(gantt)
-    versions = gantt.events.collect {|event| (event.is_a? Version) ? event : nil}.compact
-
-    versions.sum {|v| v.fixed_issues.for_gantt.with_query(@query).count}
-  end
 end
--- a/app/helpers/.svn/text-base/issues_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/issues_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -5,12 +5,12 @@
 # modify it under the terms of the 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.
@@ -54,20 +54,30 @@
       "<strong>#{@cached_label_assigned_to}</strong>: #{issue.assigned_to}<br />" +
       "<strong>#{@cached_label_priority}</strong>: #{issue.priority.name}"
   end
-    
+
+  def issue_heading(issue)
+    h("#{issue.tracker} ##{issue.id}")
+  end
+
   def render_issue_subject_with_tree(issue)
     s = ''
-    issue.ancestors.each do |ancestor|
+    ancestors = issue.root? ? [] : issue.ancestors.visible.all
+    ancestors.each do |ancestor|
       s << '<div>' + content_tag('p', link_to_issue(ancestor))
     end
-    s << '<div>' + content_tag('h3', h(issue.subject))
-    s << '</div>' * (issue.ancestors.size + 1)
+    s << '<div>'
+    subject = h(issue.subject)
+    if issue.is_private?
+      subject = content_tag('span', l(:field_is_private), :class => 'private') + ' ' + subject
+    end
+    s << content_tag('h3', subject)
+    s << '</div>' * (ancestors.size + 1)
     s
   end
-  
+
   def render_descendants_tree(issue)
     s = '<form><table class="list issues">'
-    issue_list(issue.descendants.sort_by(&:lft)) do |child, level|
+    issue_list(issue.descendants.visible.sort_by(&:lft)) do |child, level|
       s << content_tag('tr',
              content_tag('td', check_box_tag("ids[]", child.id, false, :id => nil), :class => 'checkbox') +
              content_tag('td', link_to_issue(child, :truncate => 60), :class => 'subject') +
@@ -79,7 +89,7 @@
     s << '</form></table>'
     s
   end
-  
+
   def render_custom_fields_rows(issue)
     return if issue.custom_field_values.empty?
     ordered_values = []
@@ -98,14 +108,32 @@
     s << "</tr>\n"
     s
   end
-  
+
+  def issues_destroy_confirmation_message(issues)
+    issues = [issues] unless issues.is_a?(Array)
+    message = l(:text_issues_destroy_confirmation)
+    descendant_count = issues.inject(0) {|memo, i| memo += (i.right - i.left - 1)/2}
+    if descendant_count > 0
+      issues.each do |issue|
+        next if issue.root?
+        issues.each do |other_issue|
+          descendant_count -= 1 if issue.is_descendant_of?(other_issue)
+        end
+      end
+      if descendant_count > 0
+        message << "\n" + l(:text_issues_destroy_descendants_confirmation, :count => descendant_count)
+      end
+    end
+    message
+  end
+
   def sidebar_queries
     unless @sidebar_queries
       # User can see public queries and his own queries
       visible = ARCondition.new(["is_public = ? OR user_id = ?", true, (User.current.logged? ? User.current.id : 0)])
       # Project specific queries and global queries
       visible << (@project.nil? ? ["project_id IS NULL"] : ["project_id IS NULL OR project_id = ?", @project.id])
-      @sidebar_queries = Query.find(:all, 
+      @sidebar_queries = Query.find(:all,
                                     :select => 'id, name, is_public',
                                     :order => "name ASC",
                                     :conditions => visible.conditions)
@@ -116,13 +144,13 @@
   def query_links(title, queries)
     # links to #index on issues/show
     url_params = controller_name == 'issues' ? {:controller => 'issues', :action => 'index', :project_id => @project} : params
-  
+
     content_tag('h3', title) +
       queries.collect {|query|
           link_to(h(query.name), url_params.merge(:query_id => query))
         }.join('<br />')
   end
-  
+
   def render_sidebar_queries
     out = ''
     queries = sidebar_queries.select {|q| !q.is_public?}
@@ -154,6 +182,10 @@
         label = l(:field_parent_issue)
         value = "##{detail.value}" unless detail.value.blank?
         old_value = "##{detail.old_value}" unless detail.old_value.blank?
+
+      when detail.prop_key == 'is_private'
+        value = l(detail.value == "0" ? :general_text_No : :general_text_Yes) unless detail.value.blank?
+        old_value = l(detail.old_value == "0" ? :general_text_No : :general_text_Yes) unless detail.old_value.blank?
       end
     when 'cf'
       custom_field = CustomField.find_by_id(detail.prop_key)
@@ -170,7 +202,7 @@
     label ||= detail.prop_key
     value ||= detail.value
     old_value ||= detail.old_value
-    
+
     unless no_html
       label = content_tag('strong', label)
       old_value = content_tag("i", h(old_value)) if detail.old_value
@@ -182,11 +214,11 @@
         value = content_tag("i", h(value)) if value
       end
     end
-    
+
     if detail.property == 'attr' && detail.prop_key == 'description'
       s = l(:text_journal_changed_no_detail, :label => label)
       unless no_html
-        diff_link = link_to 'diff', 
+        diff_link = link_to 'diff',
           {:controller => 'journals', :action => 'diff', :id => detail.journal_id, :detail_id => detail.id},
           :title => l(:label_view_diff)
         s << " (#{ diff_link })"
@@ -216,7 +248,7 @@
       return record.name if record
     end
   end
-  
+
   # Renders issue children recursively
   def render_api_issue_children(issue, api)
     return if issue.leaf?
@@ -230,14 +262,14 @@
       end
     end
   end
-  
+
   def issues_to_csv(issues, project = nil)
-    ic = Iconv.new(l(:general_csv_encoding), 'UTF-8')    
+    ic = Iconv.new(l(:general_csv_encoding), 'UTF-8')
     decimal_separator = l(:general_csv_decimal_separator)
     export = FCSV.generate(:col_sep => l(:general_csv_separator)) do |csv|
       # csv header fields
       headers = [ "#",
-                  l(:field_status), 
+                  l(:field_status),
                   l(:field_project),
                   l(:field_tracker),
                   l(:field_priority),
@@ -264,9 +296,9 @@
       # csv lines
       issues.each do |issue|
         fields = [issue.id,
-                  issue.status.name, 
+                  issue.status.name,
                   issue.project.name,
-                  issue.tracker.name, 
+                  issue.tracker.name,
                   issue.priority.name,
                   issue.subject,
                   issue.assigned_to,
@@ -278,7 +310,7 @@
                   issue.done_ratio,
                   issue.estimated_hours.to_s.gsub('.', decimal_separator),
                   issue.parent_id,
-                  format_time(issue.created_on),  
+                  format_time(issue.created_on),
                   format_time(issue.updated_on)
                   ]
         custom_fields.each {|f| fields << show_value(issue.custom_value_for(f)) }
--- a/app/helpers/.svn/text-base/projects_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/projects_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,7 +20,7 @@
     return '' unless version && version.is_a?(Version)
     link_to_if version.visible?, format_version_name(version), { :controller => 'versions', :action => 'show', :id => version }, options
   end
-  
+
   def project_settings_tabs
     tabs = [{:name => 'info', :action => :edit_project, :partial => 'projects/edit', :label => :label_information_plural},
             {:name => 'modules', :action => :select_project_modules, :partial => 'projects/settings/modules', :label => :label_module_plural},
@@ -32,9 +32,9 @@
             {:name => 'boards', :action => :manage_boards, :partial => 'projects/settings/boards', :label => :label_board_plural},
             {:name => 'activities', :action => :manage_project_activities, :partial => 'projects/settings/activities', :label => :enumeration_activities}
             ]
-    tabs.select {|tab| User.current.allowed_to?(tab[:action], @project)}     
+    tabs.select {|tab| User.current.allowed_to?(tab[:action], @project)}
   end
-  
+
   def parent_project_select_tag(project)
     selected = project.parent
     # retrieve the requested parent project
@@ -42,13 +42,13 @@
     if parent_id
       selected = (parent_id.blank? ? nil : Project.find(parent_id))
     end
-    
+
     options = ''
     options << "<option value=''></option>" if project.allowed_parents.include?(nil)
     options << project_tree_options_for_select(project.allowed_parents.compact, :selected => selected)
     content_tag('select', options, :name => 'project[parent_id]', :id => 'project_parent_id')
   end
-  
+
   # Renders a tree of projects as a nested set of unordered lists
   # The given collection may be a subset of the whole project tree
   # (eg. some intermediate nodes are private and can not be seen)
@@ -65,7 +65,7 @@
         else
           ancestors.pop
           s << "</li>"
-          while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) 
+          while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
             ancestors.pop
             s << "</ul></li>\n"
           end
@@ -93,7 +93,7 @@
     if selected && !versions.include?(selected)
       grouped[selected.project.name] << [selected.name, selected.id]
     end
-    
+
     if grouped.keys.size > 1
       grouped_options_for_select(grouped, selected && selected.id)
     else
--- a/app/helpers/.svn/text-base/queries_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/queries_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -78,16 +78,16 @@
         # Give it a name, required to be valid
         @query = Query.new(:name => "_")
         @query.project = @project
-        if params[:fields]
+        if params[:fields] || params[:f]
           @query.filters = {}
-          @query.add_filters(params[:fields], params[:operators], params[:values])
+          @query.add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v])
         else
           @query.available_filters.keys.each do |field|
             @query.add_short_filter(field, params[field]) if params[field]
           end
         end
         @query.group_by = params[:group_by]
-        @query.column_names = params[:query] && params[:query][:column_names]
+        @query.column_names = params[:c] || (params[:query] && params[:query][:column_names])
         session[:query] = {:project_id => @query.project_id, :filters => @query.filters, :group_by => @query.group_by, :column_names => @query.column_names}
       else
         @query = Query.find_by_id(session[:query][:id]) if session[:query][:id]
--- a/app/helpers/.svn/text-base/reports_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/reports_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,22 +1,22 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 module ReportsHelper
-  
+
   def aggregate(data, criteria)
     a = 0
     data.each { |row|
@@ -28,9 +28,9 @@
     } unless data.nil?
     a
   end
-  
+
   def aggregate_link(data, criteria, *args)
     a = aggregate data, criteria
     a > 0 ? link_to(a, *args) : '-'
-  end  
+  end
 end
--- a/app/helpers/.svn/text-base/repositories_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/repositories_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,21 +1,22 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 require 'iconv'
+require 'redmine/codeset_util'
 
 module RepositoriesHelper
   def format_revision(revision)
@@ -48,7 +49,8 @@
       when 'A'
         # Detects moved/copied files
         if !change.from_path.blank?
-          change.action = @changeset.changes.detect {|c| c.action == 'D' && c.path == change.from_path} ? 'R' : 'C'
+          change.action =
+             @changeset.changes.detect {|c| c.action == 'D' && c.path == change.from_path} ? 'R' : 'C'
         end
         change
       when 'D'
@@ -56,8 +58,8 @@
       else
         change
       end
-   end.compact
-    
+    end.compact
+
     tree = { }
     changes.each do |change|
       p = tree
@@ -72,13 +74,11 @@
       end
       p[:c] = change
     end
-    
     render_changes_tree(tree[:s])
   end
 
   def render_changes_tree(tree)
     return '' if tree.nil?
-
     output = ''
     output << '<ul>'
     tree.keys.sort.each do |file|
@@ -117,16 +117,24 @@
   end
 
   def to_utf8(str)
-    return str if str.blank?
+    return str if str.nil?
+    str = to_utf8_internal(str)
     if str.respond_to?(:force_encoding)
       str.force_encoding('UTF-8')
-    else
-      # TODO:
-      # Japanese Shift_JIS(CP932) is not compatible with ASCII.
-      # UTF-7 and Japanese ISO-2022-JP are 7bits clean.
-      return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
     end
+    str
+  end
 
+  def to_utf8_internal(str)
+    return str if str.nil?
+    if str.respond_to?(:force_encoding)
+      str.force_encoding('ASCII-8BIT')
+    end
+    return str if str.empty?
+    return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
+    if str.respond_to?(:force_encoding)
+      str.force_encoding('UTF-8')
+    end
     @encodings ||= Setting.repositories_encodings.split(',').collect(&:strip)
     @encodings.each do |encoding|
       begin
@@ -135,19 +143,9 @@
         # do nothing here and try the next encoding
       end
     end
-    str = replace_invalid_utf8(str)
+    str = Redmine::CodesetUtil.replace_invalid_utf8(str)
   end
-
-  def replace_invalid_utf8(str)
-    if str.respond_to?(:force_encoding)
-      str.force_encoding('UTF-8')
-      if ! str.valid_encoding?
-        str = str.encode("US-ASCII", :invalid => :replace,
-              :undef => :replace, :replace => '?').encode("UTF-8")
-      end
-    end
-    str
-  end
+  private :to_utf8_internal
 
   def repository_field_tags(form, repository)
     method = repository.class.name.demodulize.underscore + "_field_tags"
@@ -165,18 +163,18 @@
         scm_options << ["Repository::#{scm}".constantize.scm_name, scm]
       end
     end
-    select_tag('repository_scm', 
+    select_tag('repository_scm',
                options_for_select(scm_options, repository.class.name.demodulize),
                :disabled => (repository && !repository.new_record?),
                :onchange => remote_function(
                   :url => {
                       :controller => 'repositories',
-                      :action => 'edit',
-                      :id => @project
-                        },
+                      :action     => 'edit',
+                      :id         => @project
+                   },
                :method => :get,
-               :with => "Form.serialize(this.form)")
-               )
+               :with   => "Form.serialize(this.form)")
+             )
   end
 
   def with_leading_slash(path)
@@ -200,53 +198,87 @@
   end
 
   def darcs_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Root directory',
-                       :size => 60, :required => true,
-                       :disabled => (repository && !repository.new_record?))) +
-      content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS,
-                                 :label => 'Commit messages encoding', :required => true))
+    content_tag('p', form.text_field(
+                     :url, :label => l(:field_path_to_repository),
+                     :size => 60, :required => true,
+                     :disabled => (repository && !repository.new_record?))) +
+    content_tag('p', form.select(
+                     :log_encoding, [nil] + Setting::ENCODINGS,
+                     :label => l(:field_commit_logs_encoding), :required => true))
   end
 
   def mercurial_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Root directory',
+    content_tag('p', form.text_field(
+                       :url, :label => l(:field_path_to_repository),
                        :size => 60, :required => true,
-                       :disabled => (repository && !repository.root_url.blank?)) +
-                       '<br />local repository (e.g. /hgrepo, c:\hgrepo)' )
+                       :disabled => (repository && !repository.root_url.blank?)
+                         ) +
+                     '<br />' + l(:text_mercurial_repository_note)) +
+    content_tag('p', form.select(
+                        :path_encoding, [nil] + Setting::ENCODINGS,
+                        :label => l(:field_scm_path_encoding)
+                        ) +
+                     '<br />' + l(:text_scm_path_encoding_note))
   end
 
   def git_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Path to repository',
+    content_tag('p', form.text_field(
+                       :url, :label => l(:field_path_to_repository),
                        :size => 60, :required => true,
-                       :disabled => (repository && !repository.root_url.blank?)) +
-                       '<br />a bare and local repository (e.g. /gitrepo, c:\gitrepo)')
+                       :disabled => (repository && !repository.root_url.blank?)
+                         ) +
+                      '<br />' + l(:text_git_repository_note)) +
+    content_tag('p', form.select(
+                        :path_encoding, [nil] + Setting::ENCODINGS,
+                        :label => l(:field_scm_path_encoding)
+                        ) +
+                     '<br />' + l(:text_scm_path_encoding_note)) +
+    content_tag('p', form.check_box(
+                        :extra_report_last_commit,
+                        :label => l(:label_git_report_last_commit)
+                         ))
   end
 
   def cvs_field_tags(form, repository)
-      content_tag('p', form.text_field(:root_url,
-                       :label => 'CVSROOT', :size => 60, :required => true,
-                       :disabled => !repository.new_record?)) +
-      content_tag('p', form.text_field(:url, :label => 'Module',
-                       :size => 30, :required => true,
-                       :disabled => !repository.new_record?)) +
-      content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS,
-                                 :label => 'Commit messages encoding', :required => true))
+    content_tag('p', form.text_field(
+                     :root_url,
+                     :label => l(:field_cvsroot),
+                     :size => 60, :required => true,
+                     :disabled => !repository.new_record?)) +
+    content_tag('p', form.text_field(
+                     :url,
+                     :label => l(:field_cvs_module),
+                     :size => 30, :required => true,
+                     :disabled => !repository.new_record?)) +
+    content_tag('p', form.select(
+                     :log_encoding, [nil] + Setting::ENCODINGS,
+                     :label => l(:field_commit_logs_encoding), :required => true)) +
+    content_tag('p', form.select(
+                        :path_encoding, [nil] + Setting::ENCODINGS,
+                        :label => l(:field_scm_path_encoding)
+                        ) +
+                     '<br />' + l(:text_scm_path_encoding_note))
   end
 
   def bazaar_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Root directory',
-                       :size => 60, :required => true,
-                       :disabled => (repository && !repository.new_record?))) +
-      content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS,
-                                 :label => 'Commit messages encoding', :required => true))
+    content_tag('p', form.text_field(
+                     :url, :label => l(:field_path_to_repository),
+                     :size => 60, :required => true,
+                     :disabled => (repository && !repository.new_record?))) +
+    content_tag('p', form.select(
+                     :log_encoding, [nil] + Setting::ENCODINGS,
+                     :label => l(:field_commit_logs_encoding), :required => true))
   end
 
   def filesystem_field_tags(form, repository)
-    content_tag('p', form.text_field(:url, :label => 'Root directory',
+    content_tag('p', form.text_field(
+                     :url, :label => l(:field_root_directory),
                      :size => 60, :required => true,
                      :disabled => (repository && !repository.root_url.blank?))) +
     content_tag('p', form.select(
                         :path_encoding, [nil] + Setting::ENCODINGS,
-                        :label => 'Path encoding') +
-                        '<br />Default: UTF-8')
+                        :label => l(:field_scm_path_encoding)
+                        ) +
+                     '<br />' + l(:text_scm_path_encoding_note))
   end
 end
--- a/app/helpers/.svn/text-base/settings_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/settings_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -27,46 +27,53 @@
             {:name => 'repositories', :partial => 'settings/repositories', :label => :label_repository_plural}
             ]
   end
-  
+
   def setting_select(setting, choices, options={})
     if blank_text = options.delete(:blank)
       choices = [[blank_text.is_a?(Symbol) ? l(blank_text) : blank_text, '']] + choices
     end
     setting_label(setting, options) +
-      select_tag("settings[#{setting}]", options_for_select(choices, Setting.send(setting).to_s), options)
+      select_tag("settings[#{setting}]",
+                 options_for_select(choices, Setting.send(setting).to_s),
+                 options)
   end
-  
+
   def setting_multiselect(setting, choices, options={})
     setting_values = Setting.send(setting)
     setting_values = [] unless setting_values.is_a?(Array)
-      
+
     setting_label(setting, options) +
       hidden_field_tag("settings[#{setting}][]", '') +
       choices.collect do |choice|
-        text, value = (choice.is_a?(Array) ? choice : [choice, choice]) 
-        content_tag('label',
-          check_box_tag("settings[#{setting}][]", value, Setting.send(setting).include?(value)) + text.to_s,
+        text, value = (choice.is_a?(Array) ? choice : [choice, choice])
+        content_tag(
+          'label',
+          check_box_tag(
+             "settings[#{setting}][]",
+             value,
+             Setting.send(setting).include?(value)
+           ) + text.to_s,
           :class => 'block'
-        )
+         )
       end.join
   end
-  
+
   def setting_text_field(setting, options={})
     setting_label(setting, options) +
       text_field_tag("settings[#{setting}]", Setting.send(setting), options)
   end
-  
+
   def setting_text_area(setting, options={})
     setting_label(setting, options) +
       text_area_tag("settings[#{setting}]", Setting.send(setting), options)
   end
-  
+
   def setting_check_box(setting, options={})
     setting_label(setting, options) +
       hidden_field_tag("settings[#{setting}]", 0) +
-      check_box_tag("settings[#{setting}]", 1, Setting.send("#{setting}?"), options)
+        check_box_tag("settings[#{setting}]", 1, Setting.send("#{setting}?"), options)
   end
-  
+
   def setting_label(setting, options={})
     label = options.delete(:label)
     label != false ? content_tag("label", l(label || "setting_#{setting}")) : ''
--- a/app/helpers/.svn/text-base/sort_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/sort_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -200,16 +200,12 @@
     caption = column.to_s.humanize unless caption
     
     sort_options = { :sort => @sort_criteria.add(column.to_s, order).to_param }
-    # don't reuse params if filters are present
-    url_options = params.has_key?(:set_filter) ? sort_options : params.merge(sort_options)
+    url_options = params.merge(sort_options)
     
      # Add project_id to url_options
     url_options = url_options.merge(:project_id => params[:project_id]) if params.has_key?(:project_id)
 
-    link_to_remote(caption,
-                  {:update => "content", :url => url_options, :method => :get},
-                  {:href => url_for(url_options),
-                   :class => css})
+    link_to_content_update(caption, url_options, :class => css)
   end
 
   # Returns a table header <th> tag with a sort link for the named column
--- a/app/helpers/.svn/text-base/versions_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/versions_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -17,11 +17,10 @@
 
 module VersionsHelper
 
-  STATUS_BY_CRITERIAS = %w(category tracker priority author assigned_to)
+  STATUS_BY_CRITERIAS = %w(category tracker status priority author assigned_to)
   
   def render_issue_status_by(version, criteria)
-    criteria ||= 'category'
-    raise 'Unknown criteria' unless STATUS_BY_CRITERIAS.include?(criteria)
+    criteria = 'category' unless STATUS_BY_CRITERIAS.include?(criteria)
     
     h = Hash.new {|k,v| k[v] = [0, 0]}
     begin
--- a/app/helpers/.svn/text-base/watchers_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/watchers_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -16,28 +16,18 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 module WatchersHelper
-
-  # Valid options
-  # * :id - the element id
-  # * :replace - a string or array of element ids that will be
-  #   replaced
-  def watcher_tag(object, user, options={:replace => 'watcher'})
-    id = options[:id]
-    id ||= options[:replace] if options[:replace].is_a? String
-    content_tag("span", watcher_link(object, user, options), :id => id)
+  
+  def watcher_tag(object, user, options={})
+    content_tag("span", watcher_link(object, user), :class => watcher_css(object))
   end
   
-  # Valid options
-  # * :replace - a string or array of element ids that will be
-  #   replaced
-  def watcher_link(object, user, options={:replace => 'watcher'})
+  def watcher_link(object, user)
     return '' unless user && user.logged? && object.respond_to?('watched_by?')
     watched = object.watched_by?(user)
     url = {:controller => 'watchers',
            :action => (watched ? 'unwatch' : 'watch'),
            :object_type => object.class.to_s.underscore,
-           :object_id => object.id,
-           :replace => options[:replace]}
+           :object_id => object.id}
     link_to_remote((watched ? l(:button_unwatch) : l(:button_watch)),
                    {:url => url},
                    :href => url_for(url),
@@ -45,6 +35,11 @@
   
   end
   
+  # Returns the css class used to identify watch links for a given +object+
+  def watcher_css(object)
+    "#{object.class.to_s.underscore}-#{object.id}-watcher"
+  end
+  
   # Returns a comma separated list of users watching the given object
   def watchers_list(object)
     remove_allowed = User.current.allowed_to?("delete_#{object.class.name.underscore}_watchers".to_sym, object.project)
--- a/app/helpers/.svn/text-base/wiki_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/.svn/text-base/wiki_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -18,14 +18,17 @@
 module WikiHelper
   
   def wiki_page_options_for_select(pages, selected = nil, parent = nil, level = 0)
+    pages = pages.group_by(&:parent) unless pages.is_a?(Hash)
     s = ''
-    pages.select {|p| p.parent == parent}.each do |page|
-      attrs = "value='#{page.id}'"
-      attrs << " selected='selected'" if selected == page
-      indent = (level > 0) ? ('&nbsp;' * level * 2 + '&#187; ') : nil
-      
-      s << "<option #{attrs}>#{indent}#{h page.pretty_title}</option>\n" + 
-             wiki_page_options_for_select(pages, selected, page, level + 1)
+    if pages.has_key?(parent)
+      pages[parent].each do |page|
+        attrs = "value='#{page.id}'"
+        attrs << " selected='selected'" if selected == page
+        indent = (level > 0) ? ('&nbsp;' * level * 2 + '&#187; ') : nil
+        
+        s << "<option #{attrs}>#{indent}#{h page.pretty_title}</option>\n" + 
+               wiki_page_options_for_select(pages, selected, page, level + 1)
+      end
     end
     s
   end
--- a/app/helpers/application_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/application_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -63,7 +63,7 @@
 
   # Displays a link to +issue+ with its subject.
   # Examples:
-  # 
+  #
   #   link_to_issue(issue)                        # => Defect #6: This is the subject
   #   link_to_issue(issue, :truncate => 6)        # => Defect #6: This i...
   #   link_to_issue(issue, :subject => false)     # => Defect #6
@@ -80,7 +80,7 @@
         subject = truncate(subject, :length => options[:truncate])
       end
     end
-    s = link_to "#{issue.tracker} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue}, 
+    s = link_to "#{issue.tracker} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue},
                                                  :class => issue.css_classes,
                                                  :title => title
     s << ": #{h subject}" if subject
@@ -109,7 +109,7 @@
     link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => rev},
             :title => l(:label_revision_id, format_revision(revision)))
   end
-  
+
   # Generates a link to a message
   def link_to_message(message, options={}, html_options = nil)
     link_to(
@@ -126,7 +126,7 @@
 
   # Generates a link to a project if active
   # Examples:
-  # 
+  #
   #   link_to_project(project)                          # => link to the specified project overview
   #   link_to_project(project, :action=>'settings')     # => link to project settings
   #   link_to_project(project, {:only_path => false}, :class => "project") # => 3rd arg adds html options
@@ -160,15 +160,15 @@
     html_options[:onclick] = "promptToRemote('#{text}', '#{param}', '#{url_for(url)}'); return false;"
     link_to name, {}, html_options
   end
-  
+
   def format_activity_title(text)
     h(truncate_single_line(text, :length => 100))
   end
-  
+
   def format_activity_day(date)
     date == Date.today ? l(:label_today).titleize : format_date(date)
   end
-  
+
   def format_activity_description(text)
     h(truncate(text.to_s, :length => 120).gsub(%r{[\r\n]*<(pre|code)>.*$}m, '...')).gsub(/[\r\n]+/, "<br />")
   end
@@ -180,29 +180,29 @@
       h("#{version.project} - #{version}")
     end
   end
-  
+
   def due_date_distance_in_words(date)
     if date
       l((date < Date.today ? :label_roadmap_overdue : :label_roadmap_due_in), distance_of_date_in_words(Date.today, date))
     end
   end
 
-  def render_page_hierarchy(pages, node=nil)
+  def render_page_hierarchy(pages, node=nil, options={})
     content = ''
     if pages[node]
       content << "<ul class=\"pages-hierarchy\">\n"
       pages[node].each do |page|
         content << "<li>"
         content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'show', :project_id => page.project, :id => page.title},
-                           :title => (page.respond_to?(:updated_on) ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil))
-        content << "\n" + render_page_hierarchy(pages, page.id) if pages[page.id]
+                           :title => (options[:timestamp] && page.updated_on ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil))
+        content << "\n" + render_page_hierarchy(pages, page.id, options) if pages[page.id]
         content << "</li>\n"
       end
       content << "</ul>\n"
     end
     content
   end
-  
+
   # Renders flash messages
   def render_flash_messages
     s = ''
@@ -211,7 +211,7 @@
     end
     s
   end
-  
+
   # Renders tabs and their content
   def render_tabs(tabs)
     if tabs.any?
@@ -220,11 +220,11 @@
       content_tag 'p', l(:label_no_data), :class => "nodata"
     end
   end
-  
+
   # Renders the project quick-jump box
   def render_project_jump_box
-    # Retrieve them now to avoid a COUNT query
-    projects = User.current.projects.all
+    return unless User.current.logged?
+    projects = User.current.memberships.collect(&:project).compact.uniq
     if projects.any?
       s = '<select onchange="if (this.value != \'\') { window.location = this.value; }">' +
             "<option value=''>#{ l(:label_jump_to_a_project) }</option>" +
@@ -236,7 +236,7 @@
       s
     end
   end
-  
+
   def project_tree_options_for_select(projects, options = {})
     s = ''
     project_tree(projects) do |project, level|
@@ -252,14 +252,14 @@
     end
     s
   end
-  
+
   # Yields the given block for each project with its level in the tree
   #
   # Wrapper for Project#project_tree
   def project_tree(projects, &block)
     Project.project_tree(projects, &block)
   end
-  
+
   def project_nested_ul(projects, &block)
     s = ''
     if projects.any?
@@ -270,7 +270,7 @@
         else
           ancestors.pop
           s << "</li>"
-          while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) 
+          while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
             ancestors.pop
             s << "</ul></li>\n"
           end
@@ -283,20 +283,20 @@
     end
     s
   end
-  
+
   def principals_check_box_tags(name, principals)
     s = ''
     principals.sort.each do |principal|
       s << "<label>#{ check_box_tag name, principal.id, false } #{link_to_user principal}</label>\n"
     end
-    s 
+    s
   end
 
   # Truncates and returns the string as a single line
   def truncate_single_line(string, *args)
     truncate(string.to_s, *args).gsub(%r{[\r\n]+}m, ' ')
   end
-  
+
   # Truncates at line break after 250 characters or options[:length]
   def truncate_lines(string, options={})
     length = options[:length] || 250
@@ -314,7 +314,7 @@
   def authoring(created, author, options={})
     l(options[:label] || :label_added_time_by, :author => link_to_user(author), :age => time_tag(created))
   end
-  
+
   def time_tag(time)
     text = distance_of_time_in_words(Time.now, time)
     if @project
@@ -336,20 +336,18 @@
     page_param = options.delete(:page_param) || :page
     per_page_links = options.delete(:per_page_links)
     url_param = params.dup
-    # don't reuse query params if filters are present
-    url_param.merge!(:fields => nil, :values => nil, :operators => nil) if url_param.delete(:set_filter)
 
     html = ''
     if paginator.current.previous
-      html << link_to_remote_content_update('&#171; ' + l(:label_previous), url_param.merge(page_param => paginator.current.previous)) + ' '
+      html << link_to_content_update('&#171; ' + l(:label_previous), url_param.merge(page_param => paginator.current.previous)) + ' '
     end
 
     html << (pagination_links_each(paginator, options) do |n|
-      link_to_remote_content_update(n.to_s, url_param.merge(page_param => n))
+      link_to_content_update(n.to_s, url_param.merge(page_param => n))
     end || '')
-    
+
     if paginator.current.next
-      html << ' ' + link_to_remote_content_update((l(:label_next) + ' &#187;'), url_param.merge(page_param => paginator.current.next))
+      html << ' ' + link_to_content_update((l(:label_next) + ' &#187;'), url_param.merge(page_param => paginator.current.next))
     end
 
     unless count.nil?
@@ -361,20 +359,14 @@
 
     html
   end
-  
+
   def per_page_links(selected=nil)
-    url_param = params.dup
-    url_param.clear if url_param.has_key?(:set_filter)
-
     links = Setting.per_page_options_array.collect do |n|
-      n == selected ? n : link_to_remote(n, {:update => "content",
-                                             :url => params.dup.merge(:per_page => n),
-                                             :method => :get},
-                                            {:href => url_for(url_param.merge(:per_page => n))})
+      n == selected ? n : link_to_content_update(n, params.merge(:per_page => n))
     end
     links.size > 1 ? l(:label_display_per_page, links.join(', ')) : nil
   end
-  
+
   def reorder_links(name, url)
     link_to(image_tag('2uparrow.png',   :alt => l(:label_sort_highest)), url.merge({"#{name}[move_to]" => 'highest'}), :method => :post, :title => l(:label_sort_highest)) +
     link_to(image_tag('1uparrow.png',   :alt => l(:label_sort_higher)),  url.merge({"#{name}[move_to]" => 'higher'}),  :method => :post, :title => l(:label_sort_higher)) +
@@ -386,13 +378,13 @@
     elements = args.flatten
     elements.any? ? content_tag('p', args.join(' &#187; ') + ' &#187; ', :class => 'breadcrumb') : nil
   end
-  
+
   def other_formats_links(&block)
     concat('<p class="other-formats">' + l(:label_export_to))
     yield Redmine::Views::OtherFormatsBuilder.new(self)
     concat('</p>')
   end
-  
+
   def page_header_title
     if @project.nil? || @project.new_record?
       a = [h(Setting.app_title), '']
@@ -400,7 +392,7 @@
     else
       pname = []
       b = []
-      ancestors = (@project.root? ? [] : @project.ancestors.visible)
+      ancestors = (@project.root? ? [] : @project.ancestors.visible.all)
       if ancestors.any?
         root = ancestors.shift
         b << link_to_project(root, {:jump => current_menu_item}, :class => 'root')
@@ -472,21 +464,21 @@
     only_path = options.delete(:only_path) == false ? false : true
 
     text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr) { |macro, args| exec_macro(macro, obj, args) }
-    
+
     @parsed_headings = []
     text = parse_non_pre_blocks(text) do |text|
       [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_headings].each do |method_name|
         send method_name, text, project, obj, attr, only_path, options
       end
     end
-    
+
     if @parsed_headings.any?
       replace_toc(text, @parsed_headings)
     end
-    
+
     text
   end
-  
+
   def parse_non_pre_blocks(text)
     s = StringScanner.new(text)
     tags = []
@@ -515,13 +507,13 @@
     end
     parsed
   end
-  
+
   def parse_inline_attachments(text, project, obj, attr, only_path, options)
     # when using an image link, try to use an attachment, if possible
     if options[:attachments] || (obj && obj.respond_to?(:attachments))
       attachments = nil
       text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m|
-        filename, ext, alt, alttext = $1.downcase, $2, $3, $4 
+        filename, ext, alt, alttext = $1.downcase, $2, $3, $4
         attachments ||= (options[:attachments] || obj.attachments).sort_by(&:created_on).reverse
         # search for the picture in attachments
         if found = attachments.detect { |att| att.filename.downcase == filename }
@@ -584,7 +576,7 @@
       end
     end
   end
-  
+
   # Redmine links
   #
   # Examples:
@@ -707,25 +699,25 @@
       leading + (link || "#{project_prefix}#{prefix}#{sep}#{identifier}")
     end
   end
-  
+
   HEADING_RE = /<h(1|2|3|4)( [^>]+)?>(.+?)<\/h(1|2|3|4)>/i unless const_defined?(:HEADING_RE)
-  
+
   # Headings and TOC
   # Adds ids and links to headings unless options[:headings] is set to false
   def parse_headings(text, project, obj, attr, only_path, options)
     return if options[:headings] == false
-    
+
     text.gsub!(HEADING_RE) do
       level, attrs, content = $1.to_i, $2, $3
       item = strip_tags(content).strip
       anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
       @parsed_headings << [level, anchor, item]
-      "<h#{level} #{attrs} id=\"#{anchor}\">#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">&para;</a></h#{level}>"
+      "<a name=\"#{anchor}\"></a>\n<h#{level} #{attrs}>#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">&para;</a></h#{level}>"
     end
   end
-          
+
   TOC_RE = /<p>\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE)
-  
+
   # Renders the TOC with given headings
   def replace_toc(text, headings)
     text.gsub!(TOC_RE) do
@@ -808,13 +800,13 @@
       ), :class => 'progress', :style => "width: #{width};") +
       content_tag('p', legend, :class => 'pourcent')
   end
-  
+
   def checked_image(checked=true)
     if checked
       image_tag 'toggle_check.png'
     end
   end
-  
+
   def context_menu(url)
     unless @context_menu_included
       content_for :header_tags do
@@ -862,13 +854,15 @@
           'Calendar._FD = 1;' # Monday
         when 7
           'Calendar._FD = 0;' # Sunday
+        when 6
+          'Calendar._FD = 6;' # Saturday
         else
           '' # use language
         end
-        
+
         javascript_include_tag('calendar/calendar') +
         javascript_include_tag("calendar/lang/calendar-#{current_language.to_s.downcase}.js") +
-        javascript_tag(start_of_week) +  
+        javascript_tag(start_of_week) +
         javascript_include_tag('calendar/calendar-setup') +
         stylesheet_link_tag('calendar')
       end
@@ -901,7 +895,7 @@
       ''
     end
   end
-  
+
   # Returns the javascript tags that are included in the html layout head
   def javascript_heads
     tags = javascript_include_tag(:defaults)
@@ -914,7 +908,11 @@
   def favicon
     "<link rel='shortcut icon' href='#{image_path('/favicon.ico')}' />"
   end
-  
+
+  def robot_exclusion_tag
+    '<meta name="robots" content="noindex,follow,noarchive" />'
+  end
+
   # Returns true if arg is expected in the API response
   def include_in_api_response?(arg)
     unless @included_in_api_response
@@ -936,7 +934,7 @@
       options
     end
   end
-  
+
   private
 
   def wiki_helper
@@ -944,12 +942,8 @@
     extend helper
     return self
   end
-  
-  def link_to_remote_content_update(text, url_params)
-    link_to_remote(text,
-      {:url => url_params, :method => :get, :update => 'content', :complete => 'window.scrollTo(0,0)'},
-      {:href => url_for(:params => url_params)}
-    )
+
+  def link_to_content_update(text, url_params = {}, html_options = {})
+    link_to(text, url_params, html_options)
   end
-  
 end
--- a/app/helpers/attachments_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/attachments_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,13 +21,13 @@
   #   :author -- author names are not displayed if set to false
   def link_to_attachments(container, options = {})
     options.assert_valid_keys(:author)
-    
+
     if container.attachments.any?
       options = {:deletable => container.attachments_deletable?, :author => true}.merge(options)
       render :partial => 'attachments/links', :locals => {:attachments => container.attachments, :options => options}
     end
   end
-  
+
   def to_utf8(str)
     if str.respond_to?(:force_encoding)
       str.force_encoding('UTF-8')
@@ -35,7 +35,7 @@
     else
       return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
     end
-    
+
     begin
       Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + '  ')[0..-3]
     rescue Iconv::InvalidEncoding
--- a/app/helpers/calendars_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/calendars_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -32,14 +32,6 @@
   end
 
   def link_to_month(link_name, year, month, options={})
-    project_id = options[:project].present? ? options[:project].to_param : nil
-
-    link_target = calendar_path(:year => year, :month => month, :project_id => project_id)
-
-    link_to_remote(link_name,
-                   {:update => "content", :url => link_target, :method => :put},
-                   {:href => link_target})
-
+    link_to_content_update(link_name, params.merge(:year => year, :month => month))
   end
-  
 end
--- a/app/helpers/custom_fields_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/custom_fields_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -37,7 +37,7 @@
     field_id = "#{name}_custom_field_values_#{custom_field.id}"
 
     field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
-    case field_format.edit_as
+    case field_format.try(:edit_as)
     when "date"
       text_field_tag(field_name, custom_value.value, :id => field_id, :size => 10) + 
       calendar_for(field_id)
@@ -49,7 +49,7 @@
       blank_option = custom_field.is_required? ?
                        (custom_field.default_value.blank? ? "<option value=\"\">--- #{l(:actionview_instancetag_blank_option)} ---</option>" : '') : 
                        '<option></option>'
-      select_tag(field_name, blank_option + options_for_select(custom_field.possible_values, custom_value.value), :id => field_id)
+      select_tag(field_name, blank_option + options_for_select(custom_field.possible_values_options(custom_value.customized), custom_value.value), :id => field_id)
     else
       text_field_tag(field_name, custom_value.value, :id => field_id)
     end
@@ -68,11 +68,11 @@
     custom_field_label_tag(name, custom_value) + custom_field_tag(name, custom_value)
   end
   
-  def custom_field_tag_for_bulk_edit(name, custom_field)
+  def custom_field_tag_for_bulk_edit(name, custom_field, projects=nil)
     field_name = "#{name}[custom_field_values][#{custom_field.id}]"
     field_id = "#{name}_custom_field_values_#{custom_field.id}"
     field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
-    case field_format.edit_as
+    case field_format.try(:edit_as)
       when "date"
         text_field_tag(field_name, '', :id => field_id, :size => 10) + 
         calendar_for(field_id)
@@ -83,7 +83,7 @@
                                                    [l(:general_text_yes), '1'],
                                                    [l(:general_text_no), '0']]), :id => field_id)
       when "list"
-        select_tag(field_name, options_for_select([[l(:label_no_change_option), '']] + custom_field.possible_values), :id => field_id)
+        select_tag(field_name, options_for_select([[l(:label_no_change_option), '']] + custom_field.possible_values_options(projects)), :id => field_id)
       else
         text_field_tag(field_name, '', :id => field_id)
     end
@@ -101,8 +101,8 @@
   end
 
   # Return an array of custom field formats which can be used in select_tag
-  def custom_field_formats_for_select
-    Redmine::CustomFieldFormat.as_select
+  def custom_field_formats_for_select(custom_field)
+    Redmine::CustomFieldFormat.as_select(custom_field.class.customized_class.name)
   end
   
   # Renders the custom_values in api views
--- a/app/helpers/gantt_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/gantt_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -21,29 +21,21 @@
     case in_or_out
     when :in
       if gantt.zoom < 4
-        link_to_remote(l(:text_zoom_in),
-                       {:url => gantt.params.merge(:zoom => (gantt.zoom+1)), :method => :get, :update => 'content'},
-                       {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom+1))),
-                        :class => 'icon icon-zoom-in'})
+        link_to_content_update l(:text_zoom_in),
+          params.merge(gantt.params.merge(:zoom => (gantt.zoom+1))),
+          :class => 'icon icon-zoom-in'
       else
         content_tag('span', l(:text_zoom_in), :class => 'icon icon-zoom-in')
       end
       
     when :out
       if gantt.zoom > 1
-        link_to_remote(l(:text_zoom_out),
-                       {:url => gantt.params.merge(:zoom => (gantt.zoom-1)), :method => :get, :update => 'content'},
-                       {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom-1))),
-                        :class => 'icon icon-zoom-out'})
+        link_to_content_update l(:text_zoom_out),
+          params.merge(gantt.params.merge(:zoom => (gantt.zoom-1))),
+          :class => 'icon icon-zoom-out'
       else
         content_tag('span', l(:text_zoom_out), :class => 'icon icon-zoom-out')
       end
     end
   end
-  
-  def number_of_issues_on_versions(gantt)
-    versions = gantt.events.collect {|event| (event.is_a? Version) ? event : nil}.compact
-
-    versions.sum {|v| v.fixed_issues.for_gantt.with_query(@query).count}
-  end
 end
--- a/app/helpers/issues_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/issues_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -5,12 +5,12 @@
 # modify it under the terms of the 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.
@@ -54,20 +54,30 @@
       "<strong>#{@cached_label_assigned_to}</strong>: #{issue.assigned_to}<br />" +
       "<strong>#{@cached_label_priority}</strong>: #{issue.priority.name}"
   end
-    
+
+  def issue_heading(issue)
+    h("#{issue.tracker} ##{issue.id}")
+  end
+
   def render_issue_subject_with_tree(issue)
     s = ''
-    issue.ancestors.each do |ancestor|
+    ancestors = issue.root? ? [] : issue.ancestors.visible.all
+    ancestors.each do |ancestor|
       s << '<div>' + content_tag('p', link_to_issue(ancestor))
     end
-    s << '<div>' + content_tag('h3', h(issue.subject))
-    s << '</div>' * (issue.ancestors.size + 1)
+    s << '<div>'
+    subject = h(issue.subject)
+    if issue.is_private?
+      subject = content_tag('span', l(:field_is_private), :class => 'private') + ' ' + subject
+    end
+    s << content_tag('h3', subject)
+    s << '</div>' * (ancestors.size + 1)
     s
   end
-  
+
   def render_descendants_tree(issue)
     s = '<form><table class="list issues">'
-    issue_list(issue.descendants.sort_by(&:lft)) do |child, level|
+    issue_list(issue.descendants.visible.sort_by(&:lft)) do |child, level|
       s << content_tag('tr',
              content_tag('td', check_box_tag("ids[]", child.id, false, :id => nil), :class => 'checkbox') +
              content_tag('td', link_to_issue(child, :truncate => 60), :class => 'subject') +
@@ -79,7 +89,7 @@
     s << '</form></table>'
     s
   end
-  
+
   def render_custom_fields_rows(issue)
     return if issue.custom_field_values.empty?
     ordered_values = []
@@ -98,14 +108,32 @@
     s << "</tr>\n"
     s
   end
-  
+
+  def issues_destroy_confirmation_message(issues)
+    issues = [issues] unless issues.is_a?(Array)
+    message = l(:text_issues_destroy_confirmation)
+    descendant_count = issues.inject(0) {|memo, i| memo += (i.right - i.left - 1)/2}
+    if descendant_count > 0
+      issues.each do |issue|
+        next if issue.root?
+        issues.each do |other_issue|
+          descendant_count -= 1 if issue.is_descendant_of?(other_issue)
+        end
+      end
+      if descendant_count > 0
+        message << "\n" + l(:text_issues_destroy_descendants_confirmation, :count => descendant_count)
+      end
+    end
+    message
+  end
+
   def sidebar_queries
     unless @sidebar_queries
       # User can see public queries and his own queries
       visible = ARCondition.new(["is_public = ? OR user_id = ?", true, (User.current.logged? ? User.current.id : 0)])
       # Project specific queries and global queries
       visible << (@project.nil? ? ["project_id IS NULL"] : ["project_id IS NULL OR project_id = ?", @project.id])
-      @sidebar_queries = Query.find(:all, 
+      @sidebar_queries = Query.find(:all,
                                     :select => 'id, name, is_public',
                                     :order => "name ASC",
                                     :conditions => visible.conditions)
@@ -116,13 +144,13 @@
   def query_links(title, queries)
     # links to #index on issues/show
     url_params = controller_name == 'issues' ? {:controller => 'issues', :action => 'index', :project_id => @project} : params
-  
+
     content_tag('h3', title) +
       queries.collect {|query|
           link_to(h(query.name), url_params.merge(:query_id => query))
         }.join('<br />')
   end
-  
+
   def render_sidebar_queries
     out = ''
     queries = sidebar_queries.select {|q| !q.is_public?}
@@ -154,6 +182,10 @@
         label = l(:field_parent_issue)
         value = "##{detail.value}" unless detail.value.blank?
         old_value = "##{detail.old_value}" unless detail.old_value.blank?
+
+      when detail.prop_key == 'is_private'
+        value = l(detail.value == "0" ? :general_text_No : :general_text_Yes) unless detail.value.blank?
+        old_value = l(detail.old_value == "0" ? :general_text_No : :general_text_Yes) unless detail.old_value.blank?
       end
     when 'cf'
       custom_field = CustomField.find_by_id(detail.prop_key)
@@ -170,7 +202,7 @@
     label ||= detail.prop_key
     value ||= detail.value
     old_value ||= detail.old_value
-    
+
     unless no_html
       label = content_tag('strong', label)
       old_value = content_tag("i", h(old_value)) if detail.old_value
@@ -182,11 +214,11 @@
         value = content_tag("i", h(value)) if value
       end
     end
-    
+
     if detail.property == 'attr' && detail.prop_key == 'description'
       s = l(:text_journal_changed_no_detail, :label => label)
       unless no_html
-        diff_link = link_to 'diff', 
+        diff_link = link_to 'diff',
           {:controller => 'journals', :action => 'diff', :id => detail.journal_id, :detail_id => detail.id},
           :title => l(:label_view_diff)
         s << " (#{ diff_link })"
@@ -216,7 +248,7 @@
       return record.name if record
     end
   end
-  
+
   # Renders issue children recursively
   def render_api_issue_children(issue, api)
     return if issue.leaf?
@@ -230,14 +262,14 @@
       end
     end
   end
-  
+
   def issues_to_csv(issues, project = nil)
-    ic = Iconv.new(l(:general_csv_encoding), 'UTF-8')    
+    ic = Iconv.new(l(:general_csv_encoding), 'UTF-8')
     decimal_separator = l(:general_csv_decimal_separator)
     export = FCSV.generate(:col_sep => l(:general_csv_separator)) do |csv|
       # csv header fields
       headers = [ "#",
-                  l(:field_status), 
+                  l(:field_status),
                   l(:field_project),
                   l(:field_tracker),
                   l(:field_priority),
@@ -264,9 +296,9 @@
       # csv lines
       issues.each do |issue|
         fields = [issue.id,
-                  issue.status.name, 
+                  issue.status.name,
                   issue.project.name,
-                  issue.tracker.name, 
+                  issue.tracker.name,
                   issue.priority.name,
                   issue.subject,
                   issue.assigned_to,
@@ -278,7 +310,7 @@
                   issue.done_ratio,
                   issue.estimated_hours.to_s.gsub('.', decimal_separator),
                   issue.parent_id,
-                  format_time(issue.created_on),  
+                  format_time(issue.created_on),
                   format_time(issue.updated_on)
                   ]
         custom_fields.each {|f| fields << show_value(issue.custom_value_for(f)) }
--- a/app/helpers/projects_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/projects_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,7 +20,7 @@
     return '' unless version && version.is_a?(Version)
     link_to_if version.visible?, format_version_name(version), { :controller => 'versions', :action => 'show', :id => version }, options
   end
-  
+
   def project_settings_tabs
     tabs = [{:name => 'info', :action => :edit_project, :partial => 'projects/edit', :label => :label_information_plural},
             {:name => 'modules', :action => :select_project_modules, :partial => 'projects/settings/modules', :label => :label_module_plural},
@@ -32,9 +32,9 @@
             {:name => 'boards', :action => :manage_boards, :partial => 'projects/settings/boards', :label => :label_board_plural},
             {:name => 'activities', :action => :manage_project_activities, :partial => 'projects/settings/activities', :label => :enumeration_activities}
             ]
-    tabs.select {|tab| User.current.allowed_to?(tab[:action], @project)}     
+    tabs.select {|tab| User.current.allowed_to?(tab[:action], @project)}
   end
-  
+
   def parent_project_select_tag(project)
     selected = project.parent
     # retrieve the requested parent project
@@ -42,13 +42,13 @@
     if parent_id
       selected = (parent_id.blank? ? nil : Project.find(parent_id))
     end
-    
+
     options = ''
     options << "<option value=''></option>" if project.allowed_parents.include?(nil)
     options << project_tree_options_for_select(project.allowed_parents.compact, :selected => selected)
     content_tag('select', options, :name => 'project[parent_id]', :id => 'project_parent_id')
   end
-  
+
   # Renders a tree of projects as a nested set of unordered lists
   # The given collection may be a subset of the whole project tree
   # (eg. some intermediate nodes are private and can not be seen)
@@ -65,7 +65,7 @@
         else
           ancestors.pop
           s << "</li>"
-          while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) 
+          while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
             ancestors.pop
             s << "</ul></li>\n"
           end
@@ -247,7 +247,7 @@
     if selected && !versions.include?(selected)
       grouped[selected.project.name] << [selected.name, selected.id]
     end
-    
+
     if grouped.keys.size > 1
       grouped_options_for_select(grouped, selected && selected.id)
     else
--- a/app/helpers/queries_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/queries_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -78,16 +78,16 @@
         # Give it a name, required to be valid
         @query = Query.new(:name => "_")
         @query.project = @project
-        if params[:fields]
+        if params[:fields] || params[:f]
           @query.filters = {}
-          @query.add_filters(params[:fields], params[:operators], params[:values])
+          @query.add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v])
         else
           @query.available_filters.keys.each do |field|
             @query.add_short_filter(field, params[field]) if params[field]
           end
         end
         @query.group_by = params[:group_by]
-        @query.column_names = params[:query] && params[:query][:column_names]
+        @query.column_names = params[:c] || (params[:query] && params[:query][:column_names])
         session[:query] = {:project_id => @query.project_id, :filters => @query.filters, :group_by => @query.group_by, :column_names => @query.column_names}
       else
         @query = Query.find_by_id(session[:query][:id]) if session[:query][:id]
--- a/app/helpers/reports_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/reports_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,22 +1,22 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 module ReportsHelper
-  
+
   def aggregate(data, criteria)
     a = 0
     data.each { |row|
@@ -28,9 +28,9 @@
     } unless data.nil?
     a
   end
-  
+
   def aggregate_link(data, criteria, *args)
     a = aggregate data, criteria
     a > 0 ? link_to(a, *args) : '-'
-  end  
+  end
 end
--- a/app/helpers/repositories_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/repositories_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,21 +1,22 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 require 'iconv'
+require 'redmine/codeset_util'
 
 module RepositoriesHelper
   def format_revision(revision)
@@ -48,7 +49,8 @@
       when 'A'
         # Detects moved/copied files
         if !change.from_path.blank?
-          change.action = @changeset.changes.detect {|c| c.action == 'D' && c.path == change.from_path} ? 'R' : 'C'
+          change.action =
+             @changeset.changes.detect {|c| c.action == 'D' && c.path == change.from_path} ? 'R' : 'C'
         end
         change
       when 'D'
@@ -56,8 +58,8 @@
       else
         change
       end
-   end.compact
-    
+    end.compact
+
     tree = { }
     changes.each do |change|
       p = tree
@@ -72,13 +74,11 @@
       end
       p[:c] = change
     end
-    
     render_changes_tree(tree[:s])
   end
 
   def render_changes_tree(tree)
     return '' if tree.nil?
-
     output = ''
     output << '<ul>'
     tree.keys.sort.each do |file|
@@ -117,16 +117,24 @@
   end
 
   def to_utf8(str)
-    return str if str.blank?
+    return str if str.nil?
+    str = to_utf8_internal(str)
     if str.respond_to?(:force_encoding)
       str.force_encoding('UTF-8')
-    else
-      # TODO:
-      # Japanese Shift_JIS(CP932) is not compatible with ASCII.
-      # UTF-7 and Japanese ISO-2022-JP are 7bits clean.
-      return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
     end
+    str
+  end
 
+  def to_utf8_internal(str)
+    return str if str.nil?
+    if str.respond_to?(:force_encoding)
+      str.force_encoding('ASCII-8BIT')
+    end
+    return str if str.empty?
+    return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
+    if str.respond_to?(:force_encoding)
+      str.force_encoding('UTF-8')
+    end
     @encodings ||= Setting.repositories_encodings.split(',').collect(&:strip)
     @encodings.each do |encoding|
       begin
@@ -135,19 +143,9 @@
         # do nothing here and try the next encoding
       end
     end
-    str = replace_invalid_utf8(str)
+    str = Redmine::CodesetUtil.replace_invalid_utf8(str)
   end
-
-  def replace_invalid_utf8(str)
-    if str.respond_to?(:force_encoding)
-      str.force_encoding('UTF-8')
-      if ! str.valid_encoding?
-        str = str.encode("US-ASCII", :invalid => :replace,
-              :undef => :replace, :replace => '?').encode("UTF-8")
-      end
-    end
-    str
-  end
+  private :to_utf8_internal
 
   def repository_field_tags(form, repository)
     method = repository.class.name.demodulize.underscore + "_field_tags"
@@ -165,18 +163,18 @@
         scm_options << ["Repository::#{scm}".constantize.scm_name, scm]
       end
     end
-    select_tag('repository_scm', 
+    select_tag('repository_scm',
                options_for_select(scm_options, repository.class.name.demodulize),
                :disabled => (repository && !repository.new_record?),
                :onchange => remote_function(
                   :url => {
                       :controller => 'repositories',
-                      :action => 'edit',
-                      :id => @project
-                        },
+                      :action     => 'edit',
+                      :id         => @project
+                   },
                :method => :get,
-               :with => "Form.serialize(this.form)")
-               )
+               :with   => "Form.serialize(this.form)")
+             )
   end
 
   def with_leading_slash(path)
@@ -200,53 +198,87 @@
   end
 
   def darcs_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Root directory',
-                       :size => 60, :required => true,
-                       :disabled => (repository && !repository.new_record?))) +
-      content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS,
-                                 :label => 'Commit messages encoding', :required => true))
+    content_tag('p', form.text_field(
+                     :url, :label => l(:field_path_to_repository),
+                     :size => 60, :required => true,
+                     :disabled => (repository && !repository.new_record?))) +
+    content_tag('p', form.select(
+                     :log_encoding, [nil] + Setting::ENCODINGS,
+                     :label => l(:field_commit_logs_encoding), :required => true))
   end
 
   def mercurial_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Root directory',
+    content_tag('p', form.text_field(
+                       :url, :label => l(:field_path_to_repository),
                        :size => 60, :required => true,
-                       :disabled => (repository && !repository.root_url.blank?)) +
-                       '<br />local repository (e.g. /hgrepo, c:\hgrepo)' )
+                       :disabled => (repository && !repository.root_url.blank?)
+                         ) +
+                     '<br />' + l(:text_mercurial_repository_note)) +
+    content_tag('p', form.select(
+                        :path_encoding, [nil] + Setting::ENCODINGS,
+                        :label => l(:field_scm_path_encoding)
+                        ) +
+                     '<br />' + l(:text_scm_path_encoding_note))
   end
 
   def git_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Path to repository',
+    content_tag('p', form.text_field(
+                       :url, :label => l(:field_path_to_repository),
                        :size => 60, :required => true,
-                       :disabled => (repository && !repository.root_url.blank?)) +
-                       '<br />a bare and local repository (e.g. /gitrepo, c:\gitrepo)')
+                       :disabled => (repository && !repository.root_url.blank?)
+                         ) +
+                      '<br />' + l(:text_git_repository_note)) +
+    content_tag('p', form.select(
+                        :path_encoding, [nil] + Setting::ENCODINGS,
+                        :label => l(:field_scm_path_encoding)
+                        ) +
+                     '<br />' + l(:text_scm_path_encoding_note)) +
+    content_tag('p', form.check_box(
+                        :extra_report_last_commit,
+                        :label => l(:label_git_report_last_commit)
+                         ))
   end
 
   def cvs_field_tags(form, repository)
-      content_tag('p', form.text_field(:root_url,
-                       :label => 'CVSROOT', :size => 60, :required => true,
-                       :disabled => !repository.new_record?)) +
-      content_tag('p', form.text_field(:url, :label => 'Module',
-                       :size => 30, :required => true,
-                       :disabled => !repository.new_record?)) +
-      content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS,
-                                 :label => 'Commit messages encoding', :required => true))
+    content_tag('p', form.text_field(
+                     :root_url,
+                     :label => l(:field_cvsroot),
+                     :size => 60, :required => true,
+                     :disabled => !repository.new_record?)) +
+    content_tag('p', form.text_field(
+                     :url,
+                     :label => l(:field_cvs_module),
+                     :size => 30, :required => true,
+                     :disabled => !repository.new_record?)) +
+    content_tag('p', form.select(
+                     :log_encoding, [nil] + Setting::ENCODINGS,
+                     :label => l(:field_commit_logs_encoding), :required => true)) +
+    content_tag('p', form.select(
+                        :path_encoding, [nil] + Setting::ENCODINGS,
+                        :label => l(:field_scm_path_encoding)
+                        ) +
+                     '<br />' + l(:text_scm_path_encoding_note))
   end
 
   def bazaar_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Root directory',
-                       :size => 60, :required => true,
-                       :disabled => (repository && !repository.new_record?))) +
-      content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS,
-                                 :label => 'Commit messages encoding', :required => true))
+    content_tag('p', form.text_field(
+                     :url, :label => l(:field_path_to_repository),
+                     :size => 60, :required => true,
+                     :disabled => (repository && !repository.new_record?))) +
+    content_tag('p', form.select(
+                     :log_encoding, [nil] + Setting::ENCODINGS,
+                     :label => l(:field_commit_logs_encoding), :required => true))
   end
 
   def filesystem_field_tags(form, repository)
-    content_tag('p', form.text_field(:url, :label => 'Root directory',
+    content_tag('p', form.text_field(
+                     :url, :label => l(:field_root_directory),
                      :size => 60, :required => true,
                      :disabled => (repository && !repository.root_url.blank?))) +
     content_tag('p', form.select(
                         :path_encoding, [nil] + Setting::ENCODINGS,
-                        :label => 'Path encoding') +
-                        '<br />Default: UTF-8')
+                        :label => l(:field_scm_path_encoding)
+                        ) +
+                     '<br />' + l(:text_scm_path_encoding_note))
   end
 end
--- a/app/helpers/settings_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/settings_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -27,46 +27,53 @@
             {:name => 'repositories', :partial => 'settings/repositories', :label => :label_repository_plural}
             ]
   end
-  
+
   def setting_select(setting, choices, options={})
     if blank_text = options.delete(:blank)
       choices = [[blank_text.is_a?(Symbol) ? l(blank_text) : blank_text, '']] + choices
     end
     setting_label(setting, options) +
-      select_tag("settings[#{setting}]", options_for_select(choices, Setting.send(setting).to_s), options)
+      select_tag("settings[#{setting}]",
+                 options_for_select(choices, Setting.send(setting).to_s),
+                 options)
   end
-  
+
   def setting_multiselect(setting, choices, options={})
     setting_values = Setting.send(setting)
     setting_values = [] unless setting_values.is_a?(Array)
-      
+
     setting_label(setting, options) +
       hidden_field_tag("settings[#{setting}][]", '') +
       choices.collect do |choice|
-        text, value = (choice.is_a?(Array) ? choice : [choice, choice]) 
-        content_tag('label',
-          check_box_tag("settings[#{setting}][]", value, Setting.send(setting).include?(value)) + text.to_s,
+        text, value = (choice.is_a?(Array) ? choice : [choice, choice])
+        content_tag(
+          'label',
+          check_box_tag(
+             "settings[#{setting}][]",
+             value,
+             Setting.send(setting).include?(value)
+           ) + text.to_s,
           :class => 'block'
-        )
+         )
       end.join
   end
-  
+
   def setting_text_field(setting, options={})
     setting_label(setting, options) +
       text_field_tag("settings[#{setting}]", Setting.send(setting), options)
   end
-  
+
   def setting_text_area(setting, options={})
     setting_label(setting, options) +
       text_area_tag("settings[#{setting}]", Setting.send(setting), options)
   end
-  
+
   def setting_check_box(setting, options={})
     setting_label(setting, options) +
       hidden_field_tag("settings[#{setting}]", 0) +
-      check_box_tag("settings[#{setting}]", 1, Setting.send("#{setting}?"), options)
+        check_box_tag("settings[#{setting}]", 1, Setting.send("#{setting}?"), options)
   end
-  
+
   def setting_label(setting, options={})
     label = options.delete(:label)
     label != false ? content_tag("label", l(label || "setting_#{setting}")) : ''
--- a/app/helpers/sort_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/sort_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -200,16 +200,12 @@
     caption = column.to_s.humanize unless caption
     
     sort_options = { :sort => @sort_criteria.add(column.to_s, order).to_param }
-    # don't reuse params if filters are present
-    url_options = params.has_key?(:set_filter) ? sort_options : params.merge(sort_options)
+    url_options = params.merge(sort_options)
     
      # Add project_id to url_options
     url_options = url_options.merge(:project_id => params[:project_id]) if params.has_key?(:project_id)
 
-    link_to_remote(caption,
-                  {:update => "content", :url => url_options, :method => :get},
-                  {:href => url_for(url_options),
-                   :class => css})
+    link_to_content_update(caption, url_options, :class => css)
   end
 
   # Returns a table header <th> tag with a sort link for the named column
--- a/app/helpers/versions_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/versions_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -17,11 +17,10 @@
 
 module VersionsHelper
 
-  STATUS_BY_CRITERIAS = %w(category tracker priority author assigned_to)
+  STATUS_BY_CRITERIAS = %w(category tracker status priority author assigned_to)
   
   def render_issue_status_by(version, criteria)
-    criteria ||= 'category'
-    raise 'Unknown criteria' unless STATUS_BY_CRITERIAS.include?(criteria)
+    criteria = 'category' unless STATUS_BY_CRITERIAS.include?(criteria)
     
     h = Hash.new {|k,v| k[v] = [0, 0]}
     begin
--- a/app/helpers/watchers_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/watchers_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -16,28 +16,18 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 module WatchersHelper
-
-  # Valid options
-  # * :id - the element id
-  # * :replace - a string or array of element ids that will be
-  #   replaced
-  def watcher_tag(object, user, options={:replace => 'watcher'})
-    id = options[:id]
-    id ||= options[:replace] if options[:replace].is_a? String
-    content_tag("span", watcher_link(object, user, options), :id => id)
+  
+  def watcher_tag(object, user, options={})
+    content_tag("span", watcher_link(object, user), :class => watcher_css(object))
   end
   
-  # Valid options
-  # * :replace - a string or array of element ids that will be
-  #   replaced
-  def watcher_link(object, user, options={:replace => 'watcher'})
+  def watcher_link(object, user)
     return '' unless user && user.logged? && object.respond_to?('watched_by?')
     watched = object.watched_by?(user)
     url = {:controller => 'watchers',
            :action => (watched ? 'unwatch' : 'watch'),
            :object_type => object.class.to_s.underscore,
-           :object_id => object.id,
-           :replace => options[:replace]}
+           :object_id => object.id}
     link_to_remote((watched ? l(:button_unwatch) : l(:button_watch)),
                    {:url => url},
                    :href => url_for(url),
@@ -45,6 +35,11 @@
   
   end
   
+  # Returns the css class used to identify watch links for a given +object+
+  def watcher_css(object)
+    "#{object.class.to_s.underscore}-#{object.id}-watcher"
+  end
+  
   # Returns a comma separated list of users watching the given object
   def watchers_list(object)
     remove_allowed = User.current.allowed_to?("delete_#{object.class.name.underscore}_watchers".to_sym, object.project)
--- a/app/helpers/wiki_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/helpers/wiki_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -18,14 +18,17 @@
 module WikiHelper
   
   def wiki_page_options_for_select(pages, selected = nil, parent = nil, level = 0)
+    pages = pages.group_by(&:parent) unless pages.is_a?(Hash)
     s = ''
-    pages.select {|p| p.parent == parent}.each do |page|
-      attrs = "value='#{page.id}'"
-      attrs << " selected='selected'" if selected == page
-      indent = (level > 0) ? ('&nbsp;' * level * 2 + '&#187; ') : nil
-      
-      s << "<option #{attrs}>#{indent}#{h page.pretty_title}</option>\n" + 
-             wiki_page_options_for_select(pages, selected, page, level + 1)
+    if pages.has_key?(parent)
+      pages[parent].each do |page|
+        attrs = "value='#{page.id}'"
+        attrs << " selected='selected'" if selected == page
+        indent = (level > 0) ? ('&nbsp;' * level * 2 + '&#187; ') : nil
+        
+        s << "<option #{attrs}>#{indent}#{h page.pretty_title}</option>\n" + 
+               wiki_page_options_for_select(pages, selected, page, level + 1)
+      end
     end
     s
   end
--- a/app/models/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,371 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 35
-/svn/!svn/ver/4982/trunk/app/models
-END
-document.rb
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/4759/trunk/app/models/document.rb
-END
-mail_handler.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4820/trunk/app/models/mail_handler.rb
-END
-repository.rb
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4982/trunk/app/models/repository.rb
+/svn/!svn/ver/6000/branches/1.2-stable/app/models
 END
-time_entry.rb
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4708/trunk/app/models/time_entry.rb
-END
-token.rb
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/2778/trunk/app/models/token.rb
-END
-journal_observer.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4221/trunk/app/models/journal_observer.rb
-END
-auth_source_ldap.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4950/trunk/app/models/auth_source_ldap.rb
-END
-principal.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/4076/trunk/app/models/principal.rb
-END
-version_custom_field.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/3064/trunk/app/models/version_custom_field.rb
-END
-issue_custom_field.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/337/trunk/app/models/issue_custom_field.rb
-END
-issue_category.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/955/trunk/app/models/issue_category.rb
-END
-change.rb
-K 25
-svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/3860/trunk/app/models/change.rb
-END
-enumeration.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/3240/trunk/app/models/enumeration.rb
-END
-member_role.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/3250/trunk/app/models/member_role.rb
-END
-issue.rb
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4954/trunk/app/models/issue.rb
-END
-time_entry_activity_custom_field.rb
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/2952/trunk/app/models/time_entry_activity_custom_field.rb
-END
-issue_priority.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/3240/trunk/app/models/issue_priority.rb
-END
-message_observer.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3169/trunk/app/models/message_observer.rb
-END
-watcher.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/3167/trunk/app/models/watcher.rb
-END
-wiki_content.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4296/trunk/app/models/wiki_content.rb
-END
-enabled_module.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/2970/trunk/app/models/enabled_module.rb
-END
-wiki_page.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/4952/trunk/app/models/wiki_page.rb
-END
-comment.rb
-K 25
-svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/479/trunk/app/models/comment.rb
-END
-wiki_content_observer.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/2749/trunk/app/models/wiki_content_observer.rb
-END
-query.rb
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4888/trunk/app/models/query.rb
-END
-member.rb
-K 25
-svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/3929/trunk/app/models/member.rb
-END
-document_category_custom_field.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/2945/trunk/app/models/document_category_custom_field.rb
-END
-mailer.rb
-K 25
-svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/4752/trunk/app/models/mailer.rb
-END
-journal.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4062/trunk/app/models/journal.rb
-END
-workflow.rb
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/3709/trunk/app/models/workflow.rb
-END
-user_custom_field.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/333/trunk/app/models/user_custom_field.rb
-END
-time_entry_custom_field.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/1689/trunk/app/models/time_entry_custom_field.rb
-END
-custom_field.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4599/trunk/app/models/custom_field.rb
-END
-setting.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4899/trunk/app/models/setting.rb
-END
-user.rb
-K 25
-svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/4936/trunk/app/models/user.rb
-END
-auth_source.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4950/trunk/app/models/auth_source.rb
-END
-news_observer.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/2637/trunk/app/models/news_observer.rb
-END
-message.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4759/trunk/app/models/message.rb
-END
-wiki_redirect.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/720/trunk/app/models/wiki_redirect.rb
-END
-issue_relation.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4467/trunk/app/models/issue_relation.rb
-END
-document_observer.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/2637/trunk/app/models/document_observer.rb
-END
-version.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4574/trunk/app/models/version.rb
-END
-issue_priority_custom_field.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/2945/trunk/app/models/issue_priority_custom_field.rb
-END
-board.rb
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4431/trunk/app/models/board.rb
-END
-attachment.rb
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4755/trunk/app/models/attachment.rb
-END
-group_custom_field.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/2869/trunk/app/models/group_custom_field.rb
-END
-issue_status.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4895/trunk/app/models/issue_status.rb
-END
-time_entry_activity.rb
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/3240/trunk/app/models/time_entry_activity.rb
-END
-tracker.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4599/trunk/app/models/tracker.rb
-END
-journal_detail.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4954/trunk/app/models/journal_detail.rb
-END
-group.rb
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4437/trunk/app/models/group.rb
-END
-issue_observer.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/2637/trunk/app/models/issue_observer.rb
-END
-changeset.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/4962/trunk/app/models/changeset.rb
-END
-role.rb
-K 25
-svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/4599/trunk/app/models/role.rb
-END
-project_custom_field.rb
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/333/trunk/app/models/project_custom_field.rb
-END
-wiki.rb
-K 25
-svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/4680/trunk/app/models/wiki.rb
-END
-custom_value.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4382/trunk/app/models/custom_value.rb
-END
-project.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4645/trunk/app/models/project.rb
-END
-document_category.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/3240/trunk/app/models/document_category.rb
-END
-news.rb
-K 25
-svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/4505/trunk/app/models/news.rb
-END
-user_preference.rb
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4900/trunk/app/models/user_preference.rb
-END
--- a/app/models/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/models
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/models
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-01T10:27:30.170724Z
-4982
+2011-06-03T11:41:34.837596Z
+6000
 tmaruyama
 
 
@@ -26,6 +26,1026 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
+repository.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+09e3a625218b292da0cfdd475a9bae06
+2011-06-03T11:41:34.837596Z
+6000
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8896
+
+time_entry.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+12b308b5edbf61bfcdd8f08bf9395214
+2011-05-17T03:58:41.797610Z
+5820
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4502
+
+principal.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+01332c0957f952b76c01e7c7ebd112f0
+2010-09-10T18:46:23.747988Z
+4076
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2265
+
+version_custom_field.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+6bf31c0491d87fff1481a91519f66363
+2009-11-15T15:22:55.021661Z
+3064
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+888
+
+issue_category.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+da42817b3f290549a03ada82a93dc5d0
+2007-12-07T10:26:07.864320Z
+955
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1626
+
+change.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+63c76383012ca1095d47a65c4bfc919f
+2011-04-16T06:44:35.992296Z
+5475
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1237
+
+enumeration.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+90ec955317994a58df9a5a7f85b810e7
+2009-12-25T17:13:58.090736Z
+3240
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3856
+
+message_observer.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+b14eaf5e829e101bc0b94269cbeaaaec
+2011-05-17T03:57:57.454158Z
+5818
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+977
+
+watcher.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+c72443f206052fafae720378fba40163
+2009-12-13T12:39:22.716082Z
+3167
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2093
+
+wiki_content.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+d554de7cd31404d9850f440ce635c3bf
+2011-05-16T00:00:26.956449Z
+5795
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4445
+
+enabled_module.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+befbf6b5cdeb72008933c729fd7bcfeb
+2011-05-18T07:52:23.784155Z
+5841
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1286
+
+wiki_content_observer.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+a6804cb0c0abc6de72a184e7384ed36d
+2009-05-17T09:55:13.601447Z
+2749
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1201
+
+query.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+03ef89183d79228726c89118c3c0ef34
+2011-05-17T04:33:19.941719Z
+5822
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+26356
+
+document_category_custom_field.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+1f419244916f9cab432c1a3bd2816abc
+2011-05-18T07:51:51.105764Z
+5840
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+901
+
+mailer.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+1370642e04670edfef01626bded416c9
+2011-05-17T03:57:10.939223Z
+5816
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+19152
+
+workflow.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+4561dfcb12b3fa066a9516c59a9eef94
+2010-04-30T12:19:51.238583Z
+3709
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4028
+
+journal.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+0d261b572288d4b000e3f92126c649f2
+2011-05-29T07:47:25.955545Z
+5947
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3418
+
+user_custom_field.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+47067c42f4d6607335adf75d11c3323b
+2007-03-12T17:59:02.654744Z
+333
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+878
+
+custom_field.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+3216923159aac3e5956fc6f0c3641d39
+2011-04-07T16:34:58.239484Z
+5354
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5175
+
+news_observer.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+b98015db4679606ee5f8d75e55574745
+2009-03-28T00:38:57.780983Z
+2637
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+962
+
+wiki_redirect.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+4e4c64bab677a9e081fc1230ff6a3773
+2007-09-09T17:05:38.846724Z
+720
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+970
+
+message.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+357609c3b9eb9dd7d1bd0b60aba41fc0
+2011-05-17T03:57:34.529054Z
+5817
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3784
+
+issue_relation.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+e79f69fb89a7015471e190050ba97847
+2010-12-04T18:10:02.635321Z
+4467
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4580
+
+issue_observer.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+d4026d660fcb2601834d26268468aec2
+2009-03-28T00:38:57.780983Z
+2637
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+965
+
+role.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+b10288b80932bec34cf0ebc3d96b60bd
+2011-04-15T13:23:13.506236Z
+5466
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5656
+
+wiki.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+c212affb4fc544749b3b14f4da6df9d3
+2011-04-11T19:21:57.549455Z
+5423
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3329
+
+project_custom_field.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+926ef98901f13ba13688fdc3ab0184fc
+2007-03-12T17:59:02.654744Z
+333
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+883
+
+document_category.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+972f4850db81506f13ca23cc5f42a7dd
+2011-05-18T07:51:15.237937Z
+5839
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1107
+
+user_preference.rb
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+feac9af79af67a78c767bd3def262255
+2011-02-21T09:53:29.844413Z
+4900
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1671
+
+news.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+5e1ef51f660c5013b9caec211bbe49e4
+2011-05-17T03:58:19.720730Z
+5819
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2207
+
 repository
 dir
 
@@ -35,11 +1055,11 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-190c117fe2ccfc4b1ebe70ae94e0d779
-2011-01-23T16:47:59.732003Z
-4759
-jplang
+2011-06-06T13:18:33.000000Z
+8b3723a0f7c7b5927aa3d96d69d4c4ae
+2011-05-15T23:52:48.954705Z
+5794
+tmaruyama
 has-props
 
 
@@ -69,44 +1089,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-ed655ccb5c306f548b3997d2dd3e3d60
-2011-02-12T10:08:11.630366Z
-4820
-jbbarth
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-13778
-
-repository.rb
-file
-
-
-
-
-2011-03-03T11:40:18.000000Z
-a3fb46324c320aab8869e523c2a35d2a
-2011-03-01T10:27:30.170724Z
-4982
+2011-06-06T13:18:33.000000Z
+fd5e7d6776011a867040c70dd1bb8622
+2011-05-17T03:56:45.906600Z
+5815
 tmaruyama
 has-props
 
@@ -129,41 +1115,7 @@
 
 
 
-8497
-
-time_entry.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-db327d70b8e3bcf04992bf7c69522467
-2011-01-14T18:04:16.470040Z
-4708
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4162
+13693
 
 token.rb
 file
@@ -171,7 +1123,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 441a5648e149e471c91928dc7f3f29a6
 2009-06-02T17:24:50.360628Z
 2778
@@ -205,11 +1157,11 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-7d895b3a013ce8f4e63dd4e7aab7eb20
-2010-09-28T20:20:00.843023Z
-4221
-edavis10
+2011-06-06T13:18:33.000000Z
+7936a5cd938361b60174d282035d7178
+2011-04-29T13:27:50.025194Z
+5602
+jplang
 has-props
 
 
@@ -231,7 +1183,7 @@
 
 
 
-1302
+1346
 
 auth_source_ldap.rb
 file
@@ -239,7 +1191,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 82898965a0c07d8fa25a52cfced3139f
 2011-02-26T13:09:25.657748Z
 4950
@@ -267,81 +1219,13 @@
 
 4381
 
-principal.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-01332c0957f952b76c01e7c7ebd112f0
-2010-09-10T18:46:23.747988Z
-4076
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2265
-
-version_custom_field.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-6bf31c0491d87fff1481a91519f66363
-2009-11-15T15:22:55.021661Z
-3064
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-888
-
 issue_custom_field.rb
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 cd405a055651d29541f2ebcf4e22f8dc
 2007-03-15T22:11:02.843262Z
 337
@@ -369,119 +1253,17 @@
 
 1242
 
-issue_category.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-da42817b3f290549a03ada82a93dc5d0
-2007-12-07T10:26:07.864320Z
-955
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1626
-
-change.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-622826f16c01373c631876eb1e480a65
-2010-07-24T00:19:32.307471Z
-3860
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1061
-
-enumeration.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-90ec955317994a58df9a5a7f85b810e7
-2009-12-25T17:13:58.090736Z
-3240
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3856
-
 issue.rb
 file
 
 
 
 
-2011-03-03T11:40:18.000000Z
-de5e44263227d075bddb23d8f478e24d
-2011-02-27T13:34:41.060565Z
-4954
-jplang
+2011-06-06T13:18:33.000000Z
+ac372c3f938fe106bea1ec059d8e0dad
+2011-05-17T02:14:06.530833Z
+5810
+tmaruyama
 has-props
 
 
@@ -503,7 +1285,7 @@
 
 
 
-32300
+33982
 
 member_role.rb
 file
@@ -511,7 +1293,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 95caba31fc55fea2d5ff257e70cf14b2
 2009-12-26T16:14:55.591181Z
 3250
@@ -545,7 +1327,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 d5549b2847a255d4bdd7185a670988b5
 2009-10-21T22:35:03.091600Z
 2952
@@ -579,7 +1361,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 028b9a9be35e74573921f9865f953439
 2009-12-25T17:13:58.090736Z
 3240
@@ -607,16 +1389,16 @@
 
 1094
 
-message_observer.rb
+wiki_page.rb
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
-50c2305c38ffecfb2138cd437e1c255c
-2009-12-13T14:26:54.396245Z
-3169
+2011-06-06T13:18:33.000000Z
+4c1f8fef6af22b9d5eeecbea8b0d6f2e
+2011-04-05T12:52:57.625449Z
+5326
 jplang
 has-props
 
@@ -639,143 +1421,7 @@
 
 
 
-979
-
-watcher.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-c72443f206052fafae720378fba40163
-2009-12-13T12:39:22.716082Z
-3167
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2093
-
-wiki_content.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-3cac6a9c934a472fcbdf99cd00e5bfbb
-2010-10-27T16:27:06.240747Z
-4296
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4480
-
-enabled_module.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-56631baa5560f63cbb213855761c8fcc
-2009-10-25T10:31:01.135799Z
-2970
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1296
-
-wiki_page.rb
-file
-
-
-
-
-2011-03-03T11:40:18.000000Z
-f95a3be2b4090d0bd5b7d74b9e1d0a7c
-2011-02-27T12:35:31.414622Z
-4952
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-6539
+7200
 
 comment.rb
 file
@@ -783,7 +1429,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 0ca314834c39ddc12f2993caf5722e79
 2007-04-25T15:06:20.062636Z
 479
@@ -811,81 +1457,13 @@
 
 1030
 
-wiki_content_observer.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-a6804cb0c0abc6de72a184e7384ed36d
-2009-05-17T09:55:13.601447Z
-2749
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1201
-
-query.rb
-file
-
-
-
-
-2011-03-03T11:40:18.000000Z
-886a34f5ef28f29a9eadb6e24dee89d6
-2011-02-20T13:03:32.835478Z
-4888
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-26359
-
 member.rb
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 84d28844bbac90dab2c56a27ed58db18
 2010-08-09T05:10:00.803890Z
 3929
@@ -913,183 +1491,13 @@
 
 3067
 
-document_category_custom_field.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-60dadf29c4da2a4e97f463a647b8e98d
-2009-10-21T22:34:22.740755Z
-2945
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-899
-
-mailer.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-f7340d6a500dabc6fa0aae801539d5e5
-2011-01-23T10:22:00.456857Z
-4752
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-18498
-
-journal.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-f3797cd6a4b7e4d256aba15e317e98b1
-2010-09-05T22:57:20.669640Z
-4062
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3214
-
-workflow.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-4561dfcb12b3fa066a9516c59a9eef94
-2010-04-30T12:19:51.238583Z
-3709
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4028
-
-user_custom_field.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-47067c42f4d6607335adf75d11c3323b
-2007-03-12T17:59:02.654744Z
-333
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-878
-
 time_entry_custom_field.rb
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 7dbc4f88d9fcd8f1057ea6d5982a1099
 2008-07-22T18:52:00.008047Z
 1689
@@ -1117,50 +1525,16 @@
 
 882
 
-custom_field.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-a81e0b41100d375e6327075ab1f59242
-2010-12-31T15:30:50.544770Z
-4599
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4287
-
 setting.rb
 file
 
 
 
 
-2011-03-03T11:40:18.000000Z
-2815413f18c2ff6c015f0742ac28710a
-2011-02-21T09:41:34.953350Z
-4899
+2011-06-06T13:18:33.000000Z
+5f33e04c6e81693296f542dcfc16e9af
+2011-05-18T02:19:08.103742Z
+5828
 tmaruyama
 has-props
 
@@ -1183,7 +1557,7 @@
 
 
 
-5188
+5146
 
 user.rb
 file
@@ -1191,10 +1565,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-8616fc89354fef549fdfc741600c1118
-2011-02-23T17:27:31.762248Z
-4936
+2011-06-06T13:18:33.000000Z
+38e55360ed5e55fd5404731ea0d392af
+2011-04-11T17:53:15.908614Z
+5416
 jplang
 has-props
 
@@ -1217,7 +1591,7 @@
 
 
 
-19152
+20338
 
 auth_source.rb
 file
@@ -1225,7 +1599,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 f746a9534698bb8db5abf4bb7c9dd5ef
 2011-02-26T13:09:25.657748Z
 4950
@@ -1253,153 +1627,17 @@
 
 2013
 
-news_observer.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-b98015db4679606ee5f8d75e55574745
-2009-03-28T00:38:57.780983Z
-2637
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-962
-
-message.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-82f0a68c26f05f4ed6aa94418a447a00
-2011-01-23T16:47:59.732003Z
-4759
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3789
-
-wiki_redirect.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-4e4c64bab677a9e081fc1230ff6a3773
-2007-09-09T17:05:38.846724Z
-720
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-970
-
-issue_relation.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-e79f69fb89a7015471e190050ba97847
-2010-12-04T18:10:02.635321Z
-4467
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4580
-
 document_observer.rb
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
-b76852d33bcfab19bb6c4e3e727da0ed
-2009-03-28T00:38:57.780983Z
-2637
-edavis10
+2011-06-06T13:18:33.000000Z
+8059f8ff823265efb44ba8f96b6e3b6d
+2011-05-18T07:52:48.342965Z
+5842
+tmaruyama
 has-props
 
 
@@ -1421,7 +1659,7 @@
 
 
 
-982
+980
 
 version.rb
 file
@@ -1429,7 +1667,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 9fdcb569734799b2fface5b9c6207856
 2010-12-23T14:58:52.304263Z
 4574
@@ -1463,7 +1701,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 478dceec50480a17a7f2c321fc59e794
 2009-10-21T22:34:22.740755Z
 2945
@@ -1497,7 +1735,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 aaa3cd558c500d4db3bb506878e12fc1
 2010-11-27T12:42:11.793330Z
 4431
@@ -1531,11 +1769,11 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-527c189ff333588f46ed31db163dcc5c
-2011-01-23T10:41:43.320139Z
-4755
-jplang
+2011-06-06T13:18:33.000000Z
+f116eb338c40b4c30c60816b7803166e
+2011-05-15T23:45:13.564217Z
+5793
+tmaruyama
 has-props
 
 
@@ -1557,7 +1795,7 @@
 
 
 
-6756
+6724
 
 group_custom_field.rb
 file
@@ -1565,7 +1803,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 2c07c440361210f71d2eb821ce95ce12
 2009-09-12T08:36:46.650954Z
 2869
@@ -1599,7 +1837,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 4670d7c2c9ef9e23b0812e79c84c02de
 2011-02-20T15:38:07.840581Z
 4895
@@ -1633,7 +1871,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 2508e3911e5bb016a9925502244b358f
 2009-12-25T17:13:58.090736Z
 3240
@@ -1667,7 +1905,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 e7d08a30fb7e14fd7486a7d7e04efccb
 2010-12-31T15:30:50.544770Z
 4599
@@ -1701,10 +1939,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-5f341c076b3e061541111187994969c8
-2011-02-27T13:34:41.060565Z
-4954
+2011-06-06T13:18:33.000000Z
+52a4a2060b161bbccca63be620b732d6
+2011-04-15T13:23:13.506236Z
+5466
 jplang
 has-props
 
@@ -1727,7 +1965,7 @@
 
 
 
-864
+1128
 
 group.rb
 file
@@ -1735,7 +1973,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 a6be23c5316bf4e17cd5601624202b18
 2010-11-27T14:46:51.426568Z
 4437
@@ -1763,50 +2001,16 @@
 
 1918
 
-issue_observer.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-d4026d660fcb2601834d26268468aec2
-2009-03-28T00:38:57.780983Z
-2637
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-965
-
 changeset.rb
 file
 
 
 
 
-2011-03-03T11:40:18.000000Z
-949462e61d78ec8bd5afc1af77363985
-2011-02-28T12:09:32.515358Z
-4962
+2011-06-06T13:18:33.000000Z
+631fd8d7b1924a1afbc925c80fd18f7c
+2011-05-15T23:01:21.719915Z
+5792
 tmaruyama
 has-props
 
@@ -1829,109 +2033,7 @@
 
 
 
-9103
-
-role.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-15c62eb20c0904d6061c427984ea5ad6
-2010-12-31T15:30:50.544770Z
-4599
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5088
-
-project_custom_field.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-926ef98901f13ba13688fdc3ab0184fc
-2007-03-12T17:59:02.654744Z
-333
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-883
-
-wiki.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-c1467b11ffdf01173add19cbdcbecccd
-2011-01-10T18:32:04.408692Z
-4680
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3109
+9547
 
 custom_value.rb
 file
@@ -1939,7 +2041,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:14:59.000000Z
 6938d61d0f9e1fc190bb1d0e6c05546e
 2010-11-07T14:15:01.891476Z
 4382
@@ -1973,10 +2075,10 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-85527d6304192255d188255b78b10fb5
-2011-01-06T20:36:31.826591Z
-4645
+2011-06-06T13:18:33.000000Z
+a77f4809a3bb9aee31347c749be42d94
+2011-04-14T17:49:20.360158Z
+5459
 jplang
 has-props
 
@@ -1999,18 +2101,18 @@
 
 
 
-31594
+32092
 
-document_category.rb
+comment_observer.rb
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
-aeaf540cf9f940cbec4ddfc984dd6af5
-2009-12-25T17:13:58.090736Z
-3240
+2011-06-06T13:18:33.000000Z
+6084f181d9e7de5535ff3ecc53fcf924
+2011-03-04T14:32:58.878627Z
+5003
 jplang
 has-props
 
@@ -2033,73 +2135,5 @@
 
 
 
-1104
+1034
 
-news.rb
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-ce0648ce457209d4a582b3076287bf01
-2010-12-12T17:00:52.100205Z
-4505
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2051
-
-user_preference.rb
-file
-
-
-
-
-2011-03-03T11:40:18.000000Z
-feac9af79af67a78c767bd3def262255
-2011-02-21T09:53:29.844413Z
-4900
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1671
-
--- a/app/models/.svn/text-base/attachment.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/attachment.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,7 +20,7 @@
 class Attachment < ActiveRecord::Base
   belongs_to :container, :polymorphic => true
   belongs_to :author, :class_name => "User", :foreign_key => "author_id"
-  
+
   validates_presence_of :container, :filename, :author
   validates_length_of :filename, :maximum => 255
   validates_length_of :disk_filename, :maximum => 255
@@ -31,20 +31,20 @@
   acts_as_activity_provider :type => 'files',
                             :permission => :view_files,
                             :author_key => :author_id,
-                            :find_options => {:select => "#{Attachment.table_name}.*", 
+                            :find_options => {:select => "#{Attachment.table_name}.*",
                                               :joins => "LEFT JOIN #{Version.table_name} ON #{Attachment.table_name}.container_type='Version' AND #{Version.table_name}.id = #{Attachment.table_name}.container_id " +
                                                         "LEFT JOIN #{Project.table_name} ON #{Version.table_name}.project_id = #{Project.table_name}.id OR ( #{Attachment.table_name}.container_type='Project' AND #{Attachment.table_name}.container_id = #{Project.table_name}.id )"}
-  
+
   acts_as_activity_provider :type => 'documents',
                             :permission => :view_documents,
                             :author_key => :author_id,
-                            :find_options => {:select => "#{Attachment.table_name}.*", 
+                            :find_options => {:select => "#{Attachment.table_name}.*",
                                               :joins => "LEFT JOIN #{Document.table_name} ON #{Attachment.table_name}.container_type='Document' AND #{Document.table_name}.id = #{Attachment.table_name}.container_id " +
                                                         "LEFT JOIN #{Project.table_name} ON #{Document.table_name}.project_id = #{Project.table_name}.id"}
 
   cattr_accessor :storage_path
   @@storage_path = Redmine::Configuration['attachments_storage_path'] || "#{RAILS_ROOT}/files"
-  
+
   def validate
     if self.filesize > Setting.attachment_max_size.to_i.kilobytes
       errors.add(:base, :too_long, :count => Setting.attachment_max_size.to_i.kilobytes)
@@ -76,7 +76,7 @@
     if @temp_file && (@temp_file.size > 0)
       logger.debug("saving '#{self.diskfile}'")
       md5 = Digest::MD5.new
-      File.open(diskfile, "wb") do |f| 
+      File.open(diskfile, "wb") do |f|
         buffer = ""
         while (buffer = @temp_file.read(8192))
           f.write(buffer)
@@ -100,7 +100,7 @@
   def diskfile
     "#{@@storage_path}/#{self.disk_filename}"
   end
-  
+
   def increment_download
     increment!(:downloads)
   end
@@ -108,27 +108,27 @@
   def project
     container.project
   end
-  
+
   def visible?(user=User.current)
     container.attachments_visible?(user)
   end
-  
+
   def deletable?(user=User.current)
     container.attachments_deletable?(user)
   end
-  
+
   def image?
     self.filename =~ /\.(jpe?g|gif|png)$/i
   end
-  
+
   def is_text?
     Redmine::MimeType.is_type?('text', filename)
   end
-  
+
   def is_diff?
     self.filename =~ /\.(patch|diff)$/i
   end
-  
+
   # Returns true if the file is readable
   def readable?
     File.readable?(diskfile)
@@ -145,7 +145,7 @@
       attachments.each_value do |attachment|
         file = attachment['file']
         next unless file && file.size > 0
-        a = Attachment.create(:container => obj, 
+        a = Attachment.create(:container => obj,
                               :file => file,
                               :description => attachment['description'].to_s.strip,
                               :author => User.current)
@@ -160,18 +160,18 @@
     end
     {:files => attached, :unsaved => obj.unsaved_attachments}
   end
-  
+
 private
   def sanitize_filename(value)
     # get only the filename, not the whole path
     just_filename = value.gsub(/^.*(\\|\/)/, '')
     # NOTE: File.basename doesn't work right with Windows paths on Unix
-    # INCORRECT: just_filename = File.basename(value.gsub('\\\\', '/')) 
+    # INCORRECT: just_filename = File.basename(value.gsub('\\\\', '/'))
 
     # Finally, replace all non alphanumeric, hyphens or periods with underscore
-    @filename = just_filename.gsub(/[^\w\.\-]/,'_') 
+    @filename = just_filename.gsub(/[^\w\.\-]/,'_')
   end
-  
+
   # Returns an ASCII or hashed filename
   def self.disk_filename(filename)
     timestamp = DateTime.now.strftime("%y%m%d%H%M%S")
--- a/app/models/.svn/text-base/change.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/change.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,30 +1,35 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 class Change < ActiveRecord::Base
   belongs_to :changeset
-  
+
   validates_presence_of :changeset_id, :action, :path
   before_save :init_path
-  
+
   def relative_path
     changeset.repository.relative_path(path)
   end
-  
+
+  def before_validation
+    self.path      = Redmine::CodesetUtil.replace_invalid_utf8(self.path)
+    self.from_path = Redmine::CodesetUtil.replace_invalid_utf8(self.from_path)
+  end
+
   def init_path
     self.path ||= ""
   end
--- a/app/models/.svn/text-base/changeset.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/changeset.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -27,23 +27,23 @@
                 :description => :long_comments,
                 :datetime => :committed_on,
                 :url => Proc.new {|o| {:controller => 'repositories', :action => 'revision', :id => o.repository.project, :rev => o.identifier}}
-                
+
   acts_as_searchable :columns => 'comments',
                      :include => {:repository => :project},
                      :project_key => "#{Repository.table_name}.project_id",
                      :date_column => 'committed_on'
-                     
+
   acts_as_activity_provider :timestamp => "#{table_name}.committed_on",
                             :author_key => :user_id,
                             :find_options => {:include => [:user, {:repository => :project}]}
-  
+
   validates_presence_of :repository_id, :revision, :committed_on, :commit_date
   validates_uniqueness_of :revision, :scope => :repository_id
   validates_uniqueness_of :scmid, :scope => :repository_id, :allow_nil => true
-  
+
   named_scope :visible, lambda {|*args| { :include => {:repository => :project},
-                                          :conditions => Project.allowed_to_condition(args.first || User.current, :view_changesets) } }
-                                          
+                                          :conditions => Project.allowed_to_condition(args.shift || User.current, :view_changesets, *args) } }
+
   def revision=(r)
     write_attribute :revision, (r.nil? ? nil : r.to_s)
   end
@@ -70,25 +70,26 @@
       identifier
     end
   end
-  
+
   def project
     repository.project
   end
-  
+
   def author
     user || committer.to_s.split('<').first
   end
-  
+
   def before_create
     self.committer = self.class.to_utf8(self.committer, repository.repo_log_encoding)
-    self.comments  = self.class.normalize_comments(self.comments, repository.repo_log_encoding)
+    self.comments  = self.class.normalize_comments(
+                       self.comments, repository.repo_log_encoding)
     self.user = repository.find_committer_user(self.committer)
   end
 
   def after_create
     scan_comment_for_issue_ids
   end
-  
+
   TIMELOG_RE = /
     (
     ((\d+)(h|hours?))((\d+)(m|min)?)?
@@ -100,7 +101,7 @@
     (\d+([\.,]\d+)?)h?
     )
     /x
-  
+
   def scan_comment_for_issue_ids
     return if comments.blank?
     # keywords used to reference issues
@@ -108,15 +109,15 @@
     ref_keywords_any = ref_keywords.delete('*')
     # keywords used to fix issues
     fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip)
-    
+
     kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|")
-    
+
     referenced_issues = []
-    
+
     comments.scan(/([\s\(\[,-]|^)((#{kw_regexp})[\s:]+)?(#\d+(\s+@#{TIMELOG_RE})?([\s,;&]+#\d+(\s+@#{TIMELOG_RE})?)*)(?=[[:punct:]]|\s|<|$)/i) do |match|
       action, refs = match[2], match[3]
       next unless action.present? || ref_keywords_any
-      
+
       refs.scan(/#(\d+)(\s+@#{TIMELOG_RE})?/).each do |m|
         issue, hours = find_referenced_issue_by_id(m[0].to_i), m[2]
         if issue
@@ -126,15 +127,15 @@
         end
       end
     end
-    
+
     referenced_issues.uniq!
     self.issues = referenced_issues unless referenced_issues.empty?
   end
-  
+
   def short_comments
     @short_comments || split_comments.first
   end
-  
+
   def long_comments
     @long_comments || split_comments.last
   end
@@ -146,23 +147,29 @@
       "r#{revision}"
     end
   end
-  
+
   # Returns the previous changeset
   def previous
-    @previous ||= Changeset.find(:first, :conditions => ['id < ? AND repository_id = ?', self.id, self.repository_id], :order => 'id DESC')
+    @previous ||= Changeset.find(:first,
+                    :conditions => ['id < ? AND repository_id = ?',
+                                    self.id, self.repository_id],
+                    :order => 'id DESC')
   end
 
   # Returns the next changeset
   def next
-    @next ||= Changeset.find(:first, :conditions => ['id > ? AND repository_id = ?', self.id, self.repository_id], :order => 'id ASC')
+    @next ||= Changeset.find(:first,
+                    :conditions => ['id > ? AND repository_id = ?',
+                                    self.id, self.repository_id],
+                    :order => 'id ASC')
   end
-  
+
   # Creates a new Change from it's common parameters
   def create_change(change)
-    Change.create(:changeset => self,
-                  :action => change[:action],
-                  :path => change[:path],
-                  :from_path => change[:from_path],
+    Change.create(:changeset     => self,
+                  :action        => change[:action],
+                  :path          => change[:path],
+                  :from_path     => change[:from_path],
                   :from_revision => change[:from_revision])
   end
 
@@ -174,25 +181,27 @@
     return nil if id.blank?
     issue = Issue.find_by_id(id.to_i, :include => :project)
     if issue
-      unless project == issue.project || project.is_ancestor_of?(issue.project) || project.is_descendant_of?(issue.project)
+      unless issue.project &&
+                (project == issue.project || project.is_ancestor_of?(issue.project) ||
+                 project.is_descendant_of?(issue.project))
         issue = nil
       end
     end
     issue
   end
-  
+
   def fix_issue(issue)
     status = IssueStatus.find_by_id(Setting.commit_fix_status_id.to_i)
     if status.nil?
       logger.warn("No status macthes commit_fix_status_id setting (#{Setting.commit_fix_status_id})") if logger
       return issue
     end
-    
+
     # the issue may have been updated by the closure of another one (eg. duplicate)
     issue.reload
     # don't change the status is the issue is closed
     return if issue.status && issue.status.is_closed?
-    
+
     journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, text_tag))
     issue.status = status
     unless Setting.commit_fix_done_ratio.blank?
@@ -205,29 +214,30 @@
     end
     issue
   end
-  
+
   def log_time(issue, hours)
     time_entry = TimeEntry.new(
       :user => user,
       :hours => hours,
       :issue => issue,
       :spent_on => commit_date,
-      :comments => l(:text_time_logged_by_changeset, :value => text_tag, :locale => Setting.default_language)
+      :comments => l(:text_time_logged_by_changeset, :value => text_tag,
+                     :locale => Setting.default_language)
       )
     time_entry.activity = log_time_activity unless log_time_activity.nil?
-    
+
     unless time_entry.save
       logger.warn("TimeEntry could not be created by changeset #{id}: #{time_entry.errors.full_messages}") if logger
     end
     time_entry
   end
-  
+
   def log_time_activity
     if Setting.commit_logtime_activity_id.to_i > 0
       TimeEntryActivity.find_by_id(Setting.commit_logtime_activity_id.to_i)
     end
   end
-  
+
   def split_comments
     comments =~ /\A(.+?)\r?\n(.*)$/m
     @short_comments = $1 || comments
@@ -242,30 +252,39 @@
     Changeset.to_utf8(str.to_s.strip, encoding)
   end
 
-  private
-
   def self.to_utf8(str, encoding)
-    return str if str.blank?
-    unless encoding.blank? || encoding == 'UTF-8'
-      begin
-        str = Iconv.conv('UTF-8', encoding, str)
-      rescue Iconv::Failure
-        # do nothing here
-      end
+    return str if str.nil?
+    str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding)
+    if str.empty?
+      str.force_encoding("UTF-8") if str.respond_to?(:force_encoding)
+      return str
     end
+    enc = encoding.blank? ? "UTF-8" : encoding
     if str.respond_to?(:force_encoding)
-      str.force_encoding('UTF-8')
-      if ! str.valid_encoding?
-        str = str.encode("US-ASCII", :invalid => :replace,
-              :undef => :replace, :replace => '?').encode("UTF-8")
+      if enc.upcase != "UTF-8"
+        str.force_encoding(enc)
+        str = str.encode("UTF-8", :invalid => :replace,
+              :undef => :replace, :replace => '?')
+      else
+        str.force_encoding("UTF-8")
+        if ! str.valid_encoding?
+          str = str.encode("US-ASCII", :invalid => :replace,
+                :undef => :replace, :replace => '?').encode("UTF-8")
+        end
       end
     else
-      # removes invalid UTF8 sequences
+      ic = Iconv.new('UTF-8', enc)
+      txtar = ""
       begin
-        str = Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + '  ')[0..-3]
-      rescue Iconv::InvalidEncoding
-        # "UTF-8//IGNORE" is not supported on some OS
+        txtar += ic.iconv(str)
+      rescue Iconv::IllegalSequence
+        txtar += $!.success
+        str = '?' + $!.failed[1,$!.failed.length]
+        retry
+      rescue
+        txtar += $!.success
       end
+      str = txtar
     end
     str
   end
--- a/app/models/.svn/text-base/custom_field.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/custom_field.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -48,6 +48,35 @@
     errors.add(:default_value, :invalid) unless v.valid?
   end
   
+  def possible_values_options(obj=nil)
+    case field_format
+    when 'user', 'version'
+      if obj.respond_to?(:project) && obj.project
+        case field_format
+        when 'user'
+          obj.project.users.sort.collect {|u| [u.to_s, u.id.to_s]}
+        when 'version'
+          obj.project.versions.sort.collect {|u| [u.to_s, u.id.to_s]}
+        end
+      elsif obj.is_a?(Array)
+        obj.collect {|o| possible_values_options(o)}.inject {|memo, v| memo & v}
+      else
+        []
+      end
+    else
+      read_attribute :possible_values
+    end
+  end
+  
+  def possible_values(obj=nil)
+    case field_format
+    when 'user', 'version'
+      possible_values_options(obj).collect(&:last)
+    else
+      read_attribute :possible_values
+    end
+  end
+  
   # Makes possible_values accept a multiline string
   def possible_values=(arg)
     if arg.is_a?(Array)
@@ -71,6 +100,8 @@
         casted = value.to_i
       when 'float'
         casted = value.to_f
+      when 'user', 'version'
+        casted = (value.blank? ? nil : field_format.classify.constantize.find_by_id(value.to_i))
       end
     end
     casted
--- a/app/models/.svn/text-base/document.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/document.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# RedMine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -25,23 +25,23 @@
                 :author => Proc.new {|o| (a = o.attachments.find(:first, :order => "#{Attachment.table_name}.created_on ASC")) ? a.author : nil },
                 :url => Proc.new {|o| {:controller => 'documents', :action => 'show', :id => o.id}}
   acts_as_activity_provider :find_options => {:include => :project}
-  
+
   validates_presence_of :project, :title, :category
   validates_length_of :title, :maximum => 60
-  
+
   named_scope :visible, lambda {|*args| { :include => :project,
-                                          :conditions => Project.allowed_to_condition(args.first || User.current, :view_documents) } }
-  
+                                          :conditions => Project.allowed_to_condition(args.shift || User.current, :view_documents, *args) } }
+
   def visible?(user=User.current)
     !user.nil? && user.allowed_to?(:view_documents, project)
   end
-  
+
   def after_initialize
     if new_record?
       self.category ||= DocumentCategory.default
     end
   end
-  
+
   def updated_on
     unless @updated_on
       a = attachments.find(:first, :order => 'created_on DESC')
--- a/app/models/.svn/text-base/document_category.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/document_category.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
--- a/app/models/.svn/text-base/document_category_custom_field.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/document_category_custom_field.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,4 +20,3 @@
     :enumeration_doc_categories
   end
 end
-
--- a/app/models/.svn/text-base/document_observer.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/document_observer.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
--- a/app/models/.svn/text-base/enabled_module.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/enabled_module.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,30 +1,30 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 class EnabledModule < ActiveRecord::Base
   belongs_to :project
-  
+
   validates_presence_of :name
   validates_uniqueness_of :name, :scope => :project_id
-  
+
   after_create :module_enabled
-  
+
   private
-  
+
   # after_create callback used to do things when a module is enabled
   def module_enabled
     case name
--- a/app/models/.svn/text-base/issue.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/issue.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -5,19 +5,19 @@
 # modify it under the terms of the 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.
 
 class Issue < ActiveRecord::Base
   include Redmine::SafeAttributes
-  
+
   belongs_to :project
   belongs_to :tracker
   belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id'
@@ -30,10 +30,10 @@
   has_many :journals, :as => :journalized, :dependent => :destroy
   has_many :time_entries, :dependent => :delete_all
   has_and_belongs_to_many :changesets, :order => "#{Changeset.table_name}.committed_on ASC, #{Changeset.table_name}.id ASC"
-  
+
   has_many :relations_from, :class_name => 'IssueRelation', :foreign_key => 'issue_from_id', :dependent => :delete_all
   has_many :relations_to, :class_name => 'IssueRelation', :foreign_key => 'issue_to_id', :dependent => :delete_all
-  
+
   acts_as_nested_set :scope => 'root_id', :dependent => :destroy
   acts_as_attachable :after_remove => :attachment_removed
   acts_as_customizable
@@ -45,7 +45,7 @@
   acts_as_event :title => Proc.new {|o| "#{o.tracker.name} ##{o.id} (#{o.status}): #{o.subject}"},
                 :url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o.id}},
                 :type => Proc.new {|o| 'issue' + (o.closed? ? ' closed' : '') }
-  
+
   acts_as_activity_provider :find_options => {:include => [:project, :author, :tracker]},
                             :author_key => :author_id
 
@@ -60,19 +60,14 @@
   validates_numericality_of :estimated_hours, :allow_nil => true
 
   named_scope :visible, lambda {|*args| { :include => :project,
-                                          :conditions => Project.allowed_to_condition(args.first || User.current, :view_issues) } }
-  
+                                          :conditions => Issue.visible_condition(args.shift || User.current, *args) } }
+
   named_scope :open, :conditions => ["#{IssueStatus.table_name}.is_closed = ?", false], :include => :status
 
   named_scope :recently_updated, :order => "#{Issue.table_name}.updated_on DESC"
   named_scope :with_limit, lambda { |limit| { :limit => limit} }
   named_scope :on_active_project, :include => [:status, :project, :tracker],
                                   :conditions => ["#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"]
-  named_scope :for_gantt, lambda {
-    {
-      :include => [:tracker, :status, :assigned_to, :priority, :project, :fixed_version]
-    }
-  }
 
   named_scope :without_version, lambda {
     {
@@ -90,12 +85,39 @@
   before_save :close_duplicates, :update_done_ratio_from_issue_status
   after_save :reschedule_following_issues, :update_nested_set_attributes, :update_parent_attributes, :create_journal
   after_destroy :update_parent_attributes
-  
+
+  # Returns a SQL conditions string used to find all issues visible by the specified user
+  def self.visible_condition(user, options={})
+    Project.allowed_to_condition(user, :view_issues, options) do |role, user|
+      case role.issues_visibility
+      when 'all'
+        nil
+      when 'default'
+        "(#{table_name}.is_private = #{connection.quoted_false} OR #{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id = #{user.id})"
+      when 'own'
+        "(#{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id = #{user.id})"
+      else
+        '1=0'
+      end
+    end
+  end
+
   # Returns true if usr or current user is allowed to view the issue
   def visible?(usr=nil)
-    (usr || User.current).allowed_to?(:view_issues, self.project)
+    (usr || User.current).allowed_to?(:view_issues, self.project) do |role, user|
+      case role.issues_visibility
+      when 'all'
+        true
+      when 'default'
+        !self.is_private? || self.author == user || self.assigned_to == user
+      when 'own'
+        self.author == user || self.assigned_to == user
+      else
+        false
+      end
+    end
   end
-  
+
   def after_initialize
     if new_record?
       # set default values for new records only
@@ -103,12 +125,12 @@
       self.priority ||= IssuePriority.default
     end
   end
-  
+
   # Overrides Redmine::Acts::Customizable::InstanceMethods#available_custom_fields
   def available_custom_fields
-    (project && tracker) ? project.all_issue_custom_fields.select {|c| tracker.custom_fields.include? c } : []
+    (project && tracker) ? (project.all_issue_custom_fields & tracker.custom_fields.all) : []
   end
-  
+
   def copy_from(arg)
     issue = arg.is_a?(Issue) ? arg : Issue.visible.find(arg)
     self.attributes = issue.attributes.dup.except("id", "root_id", "parent_id", "lft", "rgt", "created_on", "updated_on")
@@ -116,7 +138,7 @@
     self.status = issue.status
     self
   end
-  
+
   # Moves/copies an issue to a new project and tracker
   # Returns the moved/copied issue on success, false on failure
   def move_to_project(*args)
@@ -124,11 +146,11 @@
       move_to_project_without_transaction(*args) || raise(ActiveRecord::Rollback)
     end || false
   end
-  
+
   def move_to_project_without_transaction(new_project, new_tracker = nil, options = {})
     options ||= {}
     issue = options[:copy] ? self.class.new.copy_from(self) : self
-    
+
     if new_project && issue.project_id != new_project.id
       # delete issue relations
       unless Setting.cross_project_issue_relations?
@@ -153,6 +175,7 @@
       issue.reset_custom_values!
     end
     if options[:copy]
+      issue.author = User.current
       issue.custom_field_values = self.custom_field_values.inject({}) {|h,v| h[v.custom_field_id] = v.value; h}
       issue.status = if options[:attributes] && options[:attributes][:status_id]
                        IssueStatus.find_by_id(options[:attributes][:status_id])
@@ -165,10 +188,16 @@
       issue.attributes = options[:attributes]
     end
     if issue.save
-      unless options[:copy]
+      if options[:copy]
+        if current_journal && current_journal.notes.present?
+          issue.init_journal(current_journal.user, current_journal.notes)
+          issue.current_journal.notify = false
+          issue.save
+        end
+      else
         # Manually update project_id on related time entries
         TimeEntry.update_all("project_id = #{new_project.id}", {:issue_id => id})
-        
+
         issue.children.each do |child|
           unless child.move_to_project_without_transaction(new_project)
             # Move failed and transaction was rollback'd
@@ -186,7 +215,7 @@
     self.status = nil
     write_attribute(:status_id, sid)
   end
-  
+
   def priority_id=(pid)
     self.priority = nil
     write_attribute(:priority_id, pid)
@@ -198,7 +227,7 @@
     @custom_field_values = nil
     result
   end
-  
+
   # Overrides attributes= so that tracker_id gets assigned first
   def attributes_with_tracker_first=(new_attributes, *args)
     return if new_attributes.nil?
@@ -210,11 +239,11 @@
   end
   # Do not redefine alias chain on reload (see #4838)
   alias_method_chain(:attributes=, :tracker_first) unless method_defined?(:attributes_without_tracker_first=)
-  
+
   def estimated_hours=(h)
     write_attribute :estimated_hours, (h.is_a?(String) ? h.to_hours : h)
   end
-  
+
   safe_attributes 'tracker_id',
     'status_id',
     'parent_issue_id',
@@ -232,13 +261,19 @@
     'custom_fields',
     'lock_version',
     :if => lambda {|issue, user| issue.new_record? || user.allowed_to?(:edit_issues, issue.project) }
-  
+
   safe_attributes 'status_id',
     'assigned_to_id',
     'fixed_version_id',
     'done_ratio',
     :if => lambda {|issue, user| issue.new_statuses_allowed_to(user).any? }
 
+  safe_attributes 'is_private',
+    :if => lambda {|issue, user|
+      user.allowed_to?(:set_issues_private, issue.project) ||
+        (issue.author == user && user.allowed_to?(:set_own_issues_private, issue.project))
+    }
+
   # Safely sets attributes
   # Should be called from controllers instead of #attributes=
   # attr_accessible is too rough because we still want things like
@@ -246,26 +281,26 @@
   # TODO: move workflow/permission checks from controllers to here
   def safe_attributes=(attrs, user=User.current)
     return unless attrs.is_a?(Hash)
-    
+
     # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed
     attrs = delete_unsafe_attributes(attrs, user)
-    return if attrs.empty? 
-    
+    return if attrs.empty?
+
     # Tracker must be set before since new_statuses_allowed_to depends on it.
     if t = attrs.delete('tracker_id')
       self.tracker_id = t
     end
-    
+
     if attrs['status_id']
       unless new_statuses_allowed_to(user).collect(&:id).include?(attrs['status_id'].to_i)
         attrs.delete('status_id')
       end
     end
-    
+
     unless leaf?
       attrs.reject! {|k,v| %w(priority_id done_ratio start_date due_date estimated_hours).include?(k)}
     end
-    
+
     if attrs.has_key?('parent_issue_id')
       if !user.allowed_to?(:manage_subtasks, project)
         attrs.delete('parent_issue_id')
@@ -273,10 +308,10 @@
         attrs.delete('parent_issue_id') unless Issue.visible(user).exists?(attrs['parent_issue_id'].to_i)
       end
     end
-    
+
     self.attributes = attrs
   end
-  
+
   def done_ratio
     if Issue.use_status_for_done_ratio? && status && status.default_done_ratio
       status.default_done_ratio
@@ -292,20 +327,20 @@
   def self.use_field_for_done_ratio?
     Setting.issue_done_ratio == 'issue_field'
   end
-  
+
   def validate
     if self.due_date.nil? && @attributes['due_date'] && !@attributes['due_date'].empty?
       errors.add :due_date, :not_a_date
     end
-    
+
     if self.due_date and self.start_date and self.due_date < self.start_date
       errors.add :due_date, :greater_than_start_date
     end
-    
+
     if start_date && soonest_start && start_date < soonest_start
       errors.add :start_date, :invalid
     end
-    
+
     if fixed_version
       if !assignable_versions.include?(fixed_version)
         errors.add :fixed_version_id, :inclusion
@@ -313,14 +348,14 @@
         errors.add_to_base I18n.t(:error_can_not_reopen_issue_on_closed_version)
       end
     end
-    
+
     # Checks that the issue can not be added/moved to a disabled tracker
     if project && (tracker_id_changed? || project_id_changed?)
       unless project.trackers.include?(tracker)
         errors.add :tracker_id, :inclusion
       end
     end
-    
+
     # Checks parent issue assignment
     if @parent_issue
       if @parent_issue.project_id != project_id
@@ -337,7 +372,7 @@
       end
     end
   end
-  
+
   # Set the done_ratio using the status if that setting is set.  This will keep the done_ratios
   # even if the user turns off the setting later
   def update_done_ratio_from_issue_status
@@ -345,7 +380,7 @@
       self.done_ratio = status.default_done_ratio
     end
   end
-  
+
   def init_journal(user, notes = "")
     @current_journal ||= Journal.new(:journalized => self, :user => user, :notes => notes)
     @issue_before_change = self.clone
@@ -356,12 +391,12 @@
     updated_on_will_change!
     @current_journal
   end
-  
+
   # Return true if the issue is closed, otherwise false
   def closed?
     self.status.is_closed?
   end
-  
+
   # Return true if the issue is being reopened
   def reopened?
     if !new_record? && status_id_changed?
@@ -385,7 +420,7 @@
     end
     false
   end
-  
+
   # Returns true if the issue is overdue
   def overdue?
     !due_date.nil? && (due_date < Date.today) && !status.is_closed?
@@ -402,24 +437,24 @@
   def children?
     !leaf?
   end
-  
+
   # Users the issue can be assigned to
   def assignable_users
     users = project.assignable_users
     users << author if author
     users.uniq.sort
   end
-  
+
   # Versions that the issue can be assigned to
   def assignable_versions
     @assignable_versions ||= (project.shared_versions.open + [Version.find_by_id(fixed_version_id_was)]).compact.uniq.sort
   end
-  
+
   # Returns true if this issue is blocked by another issue that is still open
   def blocked?
     !relations_to.detect {|ir| ir.relation_type == 'blocks' && !ir.issue_from.closed?}.nil?
   end
-  
+
   # Returns an array of status that user is able to apply
   def new_statuses_allowed_to(user, include_default=false)
     statuses = status.find_new_statuses_allowed_to(
@@ -433,7 +468,7 @@
     statuses = statuses.uniq.sort
     blocked? ? statuses.reject {|s| s.is_closed?} : statuses
   end
-  
+
   # Returns the mail adresses of users that should be notified
   def recipients
     notified = project.notified_users
@@ -446,7 +481,7 @@
     notified.reject! {|user| !visible?(user)}
     notified.collect(&:mail)
   end
-  
+
   # Returns the total number of hours spent on this issue and its descendants
   #
   # Example:
@@ -455,50 +490,50 @@
   def spent_hours
     @spent_hours ||= self_and_descendants.sum("#{TimeEntry.table_name}.hours", :include => :time_entries).to_f || 0.0
   end
-  
+
   def relations
     (relations_from + relations_to).sort
   end
-  
-  def all_dependent_issues(except=nil)
-    except ||= self
+
+  def all_dependent_issues(except=[])
+    except << self
     dependencies = []
     relations_from.each do |relation|
-      if relation.issue_to && relation.issue_to != except
+      if relation.issue_to && !except.include?(relation.issue_to)
         dependencies << relation.issue_to
         dependencies += relation.issue_to.all_dependent_issues(except)
       end
     end
     dependencies
   end
-  
+
   # Returns an array of issues that duplicate this one
   def duplicates
     relations_to.select {|r| r.relation_type == IssueRelation::TYPE_DUPLICATES}.collect {|r| r.issue_from}
   end
-  
+
   # Returns the due date or the target due date if any
   # Used on gantt chart
   def due_before
     due_date || (fixed_version ? fixed_version.effective_date : nil)
   end
-  
+
   # Returns the time scheduled for this issue.
-  # 
+  #
   # Example:
   #   Start Date: 2/26/09, End Date: 3/04/09
   #   duration => 6
   def duration
     (start_date && due_date) ? due_date - start_date : 0
   end
-  
+
   def soonest_start
     @soonest_start ||= (
         relations_to.collect{|relation| relation.successor_soonest_start} +
         ancestors.collect(&:soonest_start)
       ).compact.max
   end
-  
+
   def reschedule_after(date)
     return if date.nil?
     if leaf?
@@ -512,7 +547,7 @@
       end
     end
   end
-  
+
   def <=>(issue)
     if issue.nil?
       -1
@@ -522,16 +557,19 @@
       (lft || 0) <=> (issue.lft || 0)
     end
   end
-  
+
   def to_s
     "#{tracker} ##{id}: #{subject}"
   end
-  
+
   # Returns a string of css classes that apply to the issue
   def css_classes
     s = "issue status-#{status.position} priority-#{priority.position}"
     s << ' closed' if closed?
     s << ' overdue' if overdue?
+    s << ' child' if child?
+    s << ' parent' unless leaf?
+    s << ' private' if is_private?
     s << ' created-by-me' if User.current.logged? && author_id == User.current.id
     s << ' assigned-to-me' if User.current.logged? && assigned_to_id == User.current.id
     s
@@ -541,7 +579,7 @@
   # Returns false if save fails
   def save_issue_with_child_records(params, existing_time_entry=nil)
     Issue.transaction do
-      if params[:time_entry] && params[:time_entry][:hours].present? && User.current.allowed_to?(:log_time, project)
+      if params[:time_entry] && (params[:time_entry][:hours].present? || params[:time_entry][:comments].present?) && User.current.allowed_to?(:log_time, project)
         @time_entry = existing_time_entry || TimeEntry.new
         @time_entry.project = project
         @time_entry.issue = self
@@ -550,10 +588,10 @@
         @time_entry.attributes = params[:time_entry]
         self.time_entries << @time_entry
       end
-  
+
       if valid?
         attachments = Attachment.attach_files(self, params[:attachments])
-  
+
         attachments[:files].each {|a| @current_journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)}
         # TODO: Rename hook
         Redmine::Hook.call_hook(:controller_issues_edit_before_save, { :params => params, :issue => self, :time_entry => @time_entry, :journal => @current_journal})
@@ -578,7 +616,7 @@
     # Update issues assigned to the version
     update_versions(["#{Issue.table_name}.fixed_version_id = ?", version.id])
   end
-  
+
   # Unassigns issues from versions that are no longer shared
   # after +project+ was moved
   def self.update_versions_from_hierarchy_change(project)
@@ -596,7 +634,7 @@
       nil
     end
   end
-  
+
   def parent_issue_id
     if instance_variable_defined? :@parent_issue
       @parent_issue.nil? ? nil : @parent_issue.id
@@ -645,17 +683,19 @@
   def self.by_subproject(project)
     ActiveRecord::Base.connection.select_all("select    s.id as status_id, 
                                                 s.is_closed as closed, 
-                                                i.project_id as project_id,
-                                                count(i.id) as total 
+                                                #{Issue.table_name}.project_id as project_id,
+                                                count(#{Issue.table_name}.id) as total 
                                               from 
-                                                #{Issue.table_name} i, #{IssueStatus.table_name} s
+                                                #{Issue.table_name}, #{Project.table_name}, #{IssueStatus.table_name} s
                                               where 
-                                                i.status_id=s.id 
-                                                and i.project_id IN (#{project.descendants.active.collect{|p| p.id}.join(',')})
-                                              group by s.id, s.is_closed, i.project_id") if project.descendants.active.any?
+                                                #{Issue.table_name}.status_id=s.id
+                                                and #{Issue.table_name}.project_id = #{Project.table_name}.id
+                                                and #{visible_condition(User.current, :project => project, :with_subprojects => true)}
+                                                and #{Issue.table_name}.project_id <> #{project.id}
+                                              group by s.id, s.is_closed, #{Issue.table_name}.project_id") if project.descendants.active.any?
   end
   # End ReportsController extraction
-  
+
   # Returns an array of projects that current user can move issues to
   def self.allowed_target_projects_on_move
     projects = []
@@ -671,9 +711,9 @@
     end
     projects
   end
-   
+
   private
-  
+
   def update_nested_set_attributes
     if root_id.nil?
       # issue was just created
@@ -720,7 +760,7 @@
     end
     remove_instance_variable(:@parent_issue) if instance_variable_defined?(:@parent_issue)
   end
-  
+
   def update_parent_attributes
     recalculate_attributes_for(parent_id) if parent_id
   end
@@ -731,14 +771,14 @@
       if priority_position = p.children.maximum("#{IssuePriority.table_name}.position", :include => :priority)
         p.priority = IssuePriority.find_by_position(priority_position)
       end
-      
+
       # start/due dates = lowest/highest dates of children
       p.start_date = p.children.minimum(:start_date)
       p.due_date = p.children.maximum(:due_date)
       if p.start_date && p.due_date && p.due_date < p.start_date
         p.start_date, p.due_date = p.due_date, p.start_date
       end
-      
+
       # done ratio = weighted average ratio of leaves
       unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio
         leaves_count = p.leaves.count
@@ -752,16 +792,16 @@
           p.done_ratio = progress.round
         end
       end
-      
+
       # estimate = sum of leaves estimates
       p.estimated_hours = p.leaves.sum(:estimated_hours).to_f
       p.estimated_hours = nil if p.estimated_hours == 0.0
-      
+
       # ancestors will be recursively updated
       p.save(false)
     end
   end
-  
+
   # Update issues so their versions are not pointing to a
   # fixed_version that is not shared with the issue's project
   def self.update_versions(conditions=nil)
@@ -781,7 +821,7 @@
       end
     end
   end
-  
+
   # Callback on attachment deletion
   def attachment_removed(obj)
     journal = init_journal(User.current)
@@ -790,7 +830,7 @@
                                          :old_value => obj.filename)
     journal.save
   end
-  
+
   # Default assignment based on category
   def default_assign
     if assigned_to.nil? && category && category.assigned_to
@@ -823,7 +863,7 @@
       end
     end
   end
-  
+
   # Saves the changes in a Journal
   # Called after_save
   def create_journal
@@ -839,11 +879,11 @@
       custom_values.each {|c|
         next if (@custom_values_before_change[c.custom_field_id]==c.value ||
                   (@custom_values_before_change[c.custom_field_id].blank? && c.value.blank?))
-        @current_journal.details << JournalDetail.new(:property => 'cf', 
+        @current_journal.details << JournalDetail.new(:property => 'cf',
                                                       :prop_key => c.custom_field_id,
                                                       :old_value => @custom_values_before_change[c.custom_field_id],
                                                       :value => c.value)
-      }      
+      }
       @current_journal.save
       # reset current journal
       init_journal @current_journal.user, @current_journal.notes
@@ -862,20 +902,19 @@
     select_field = options.delete(:field)
     joins = options.delete(:joins)
 
-    where = "i.#{select_field}=j.id"
-    
+    where = "#{Issue.table_name}.#{select_field}=j.id"
+
     ActiveRecord::Base.connection.select_all("select    s.id as status_id, 
                                                 s.is_closed as closed, 
                                                 j.id as #{select_field},
-                                                count(i.id) as total 
+                                                count(#{Issue.table_name}.id) as total 
                                               from 
-                                                  #{Issue.table_name} i, #{IssueStatus.table_name} s, #{joins} j
+                                                  #{Issue.table_name}, #{Project.table_name}, #{IssueStatus.table_name} s, #{joins} j
                                               where 
-                                                i.status_id=s.id 
+                                                #{Issue.table_name}.status_id=s.id 
                                                 and #{where}
-                                                and i.project_id=#{project.id}
+                                                and #{Issue.table_name}.project_id=#{Project.table_name}.id
+                                                and #{visible_condition(User.current, :project => project)}
                                               group by s.id, s.is_closed, j.id")
   end
-  
-
 end
--- a/app/models/.svn/text-base/journal.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/journal.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -32,12 +32,16 @@
                 :url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o.issue.id, :anchor => "change-#{o.id}"}}
 
   acts_as_activity_provider :type => 'issues',
-                            :permission => :view_issues,
                             :author_key => :user_id,
                             :find_options => {:include => [{:issue => :project}, :details, :user],
                                               :conditions => "#{Journal.table_name}.journalized_type = 'Issue' AND" +
                                                              " (#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> '')"}
   
+  named_scope :visible, lambda {|*args| {
+    :include => {:issue => :project},
+    :conditions => Issue.visible_condition(args.shift || User.current, *args)
+  }}
+  
   def save(*args)
     # Do not save an empty journal
     (details.empty? && notes.blank?) ? false : super
@@ -73,4 +77,12 @@
     s << ' has-details' unless details.blank?
     s
   end
+  
+  def notify?
+    @notify != false
+  end
+  
+  def notify=(arg)
+    @notify = arg
+  end
 end
--- a/app/models/.svn/text-base/journal_detail.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/journal_detail.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -17,4 +17,22 @@
 
 class JournalDetail < ActiveRecord::Base
   belongs_to :journal
+  before_save :normalize_values
+  
+  private
+  
+  def normalize_values
+    self.value = normalize(value)
+    self.old_value = normalize(old_value)
+  end
+  
+  def normalize(v)
+    if v == true
+      "1"
+    elsif v == false
+      "0"
+    else
+      v
+    end
+  end
 end
--- a/app/models/.svn/text-base/journal_observer.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/journal_observer.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -17,10 +17,12 @@
 
 class JournalObserver < ActiveRecord::Observer
   def after_create(journal)
-    if Setting.notified_events.include?('issue_updated') ||
-        (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) ||
-        (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) ||
-        (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
+    if journal.notify? &&
+        (Setting.notified_events.include?('issue_updated') ||
+          (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) ||
+          (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) ||
+          (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
+        )
       Mailer.deliver_issue_edit(journal)
     end
   end
--- a/app/models/.svn/text-base/mail_handler.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/mail_handler.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,25 +21,25 @@
 
   class UnauthorizedAction < StandardError; end
   class MissingInformation < StandardError; end
-  
+
   attr_reader :email, :user
 
   def self.receive(email, options={})
     @@handler_options = options.dup
-    
+
     @@handler_options[:issue] ||= {}
-    
+
     @@handler_options[:allow_override] = @@handler_options[:allow_override].split(',').collect(&:strip) if @@handler_options[:allow_override].is_a?(String)
     @@handler_options[:allow_override] ||= []
     # Project needs to be overridable if not specified
     @@handler_options[:allow_override] << 'project' unless @@handler_options[:issue].has_key?(:project)
     # Status overridable by default
-    @@handler_options[:allow_override] << 'status' unless @@handler_options[:issue].has_key?(:status)    
-    
+    @@handler_options[:allow_override] << 'status' unless @@handler_options[:issue].has_key?(:status)
+
     @@handler_options[:no_permission_check] = (@@handler_options[:no_permission_check].to_s == '1' ? true : false)
     super email
   end
-  
+
   # Processes incoming emails
   # Returns the created object (eg. an issue, a message) or false
   def receive(email)
@@ -78,13 +78,13 @@
     User.current = @user
     dispatch
   end
-  
+
   private
 
   MESSAGE_ID_RE = %r{^<redmine\.([a-z0-9_]+)\-(\d+)\.\d+@}
   ISSUE_REPLY_SUBJECT_RE = %r{\[[^\]]*#(\d+)\]}
   MESSAGE_REPLY_SUBJECT_RE = %r{\[[^\]]*msg(\d+)\]}
-  
+
   def dispatch
     headers = [email.in_reply_to, email.references].flatten.compact
     if headers.detect {|h| h.to_s =~ MESSAGE_ID_RE}
@@ -117,7 +117,7 @@
   def dispatch_to_default
     receive_issue
   end
-  
+
   # Creates a new issue
   def receive_issue
     project = target_project
@@ -134,7 +134,7 @@
       issue.subject = '(no subject)'
     end
     issue.description = cleaned_up_text_body
-    
+
     # add To and Cc as watchers before saving so the watchers can reply to Redmine
     add_watchers(issue)
     issue.save!
@@ -142,7 +142,7 @@
     logger.info "MailHandler: issue ##{issue.id} created by #{user}" if logger && logger.info
     issue
   end
-  
+
   # Adds a note to an existing issue
   def receive_issue_reply(issue_id)
     issue = Issue.find_by_id(issue_id)
@@ -151,19 +151,20 @@
     unless @@handler_options[:no_permission_check]
       raise UnauthorizedAction unless user.allowed_to?(:add_issue_notes, issue.project) || user.allowed_to?(:edit_issues, issue.project)
     end
-    
+
     # ignore CLI-supplied defaults for new issues
     @@handler_options[:issue].clear
-    
-    journal = issue.init_journal(user, cleaned_up_text_body)
+
+    journal = issue.init_journal(user)
     issue.safe_attributes = issue_attributes_from_keywords(issue)
     issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)}
+    journal.notes = cleaned_up_text_body
     add_attachments(issue)
     issue.save!
     logger.info "MailHandler: issue ##{issue.id} updated by #{user}" if logger && logger.info
     journal
   end
-  
+
   # Reply will be added to the issue
   def receive_journal_reply(journal_id)
     journal = Journal.find_by_id(journal_id)
@@ -171,17 +172,17 @@
       receive_issue_reply(journal.journalized_id)
     end
   end
-  
+
   # Receives a reply to a forum message
   def receive_message_reply(message_id)
     message = Message.find_by_id(message_id)
     if message
       message = message.root
-      
+
       unless @@handler_options[:no_permission_check]
         raise UnauthorizedAction unless user.allowed_to?(:add_messages, message.project)
       end
-      
+
       if !message.locked?
         reply = Message.new(:subject => email.subject.gsub(%r{^.*msg\d+\]}, '').strip,
                             :content => cleaned_up_text_body)
@@ -195,7 +196,7 @@
       end
     end
   end
-  
+
   def add_attachments(obj)
     if email.has_attachments?
       email.attachments.each do |attachment|
@@ -206,7 +207,7 @@
       end
     end
   end
-  
+
   # Adds To and Cc as watchers of the given object if the sender has the
   # appropriate permission
   def add_watchers(obj)
@@ -218,7 +219,7 @@
       end
     end
   end
-  
+
   def get_keyword(attr, options={})
     @keywords ||= {}
     if @keywords.has_key?(attr)
@@ -233,7 +234,7 @@
       end
     end
   end
-  
+
   # Destructively extracts the value for +attr+ in +text+
   # Returns nil if no matching keyword found
   def extract_keyword!(text, attr, format=nil)
@@ -257,12 +258,12 @@
     raise MissingInformation.new('Unable to determine target project') if target.nil?
     target
   end
-  
+
   # Returns a Hash of issue attributes extracted from keywords in the email body
   def issue_attributes_from_keywords(issue)
     assigned_to = (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k)
     assigned_to = nil if assigned_to && !issue.assignable_users.include?(assigned_to)
-    
+
     attrs = {
       'tracker_id' => (k = get_keyword(:tracker)) && issue.project.trackers.find_by_name(k).try(:id),
       'status_id' =>  (k = get_keyword(:status)) && IssueStatus.find_by_name(k).try(:id),
@@ -275,16 +276,16 @@
       'estimated_hours' => get_keyword(:estimated_hours, :override => true),
       'done_ratio' => get_keyword(:done_ratio, :override => true, :format => '(\d|10)?0')
     }.delete_if {|k, v| v.blank? }
-    
+
     if issue.new_record? && attrs['tracker_id'].nil?
       attrs['tracker_id'] = issue.project.trackers.find(:first).try(:id)
     end
-    
+
     attrs
   end
-  
+
   # Returns a Hash of issue custom field values extracted from keywords in the email body
-  def custom_field_values_from_keywords(customized)  
+  def custom_field_values_from_keywords(customized)
     customized.custom_field_values.inject({}) do |h, v|
       if value = get_keyword(v.custom_field.name, :override => true)
         h[v.custom_field.id.to_s] = value
@@ -292,7 +293,7 @@
       h
     end
   end
-  
+
   # Returns the text/plain part of the email
   # If not found (eg. HTML-only email), returns the body with tags removed
   def plain_text_body
@@ -313,7 +314,7 @@
     @plain_text_body.strip!
     @plain_text_body
   end
-  
+
   def cleaned_up_text_body
     cleanup_body(plain_text_body)
   end
@@ -321,19 +322,19 @@
   def self.full_sanitizer
     @full_sanitizer ||= HTML::FullSanitizer.new
   end
-  
+
   # Creates a user account for the +email+ sender
   def self.create_user_from_email(email)
     addr = email.from_addrs.to_a.first
     if addr && !addr.spec.blank?
       user = User.new
       user.mail = addr.spec
-      
+
       names = addr.name.blank? ? addr.spec.gsub(/@.*$/, '').split('.') : addr.name.split
       user.firstname = names.shift
       user.lastname = names.join(' ')
       user.lastname = '-' if user.lastname.blank?
-      
+
       user.login = user.mail
       user.password = ActiveSupport::SecureRandom.hex(5)
       user.language = Setting.default_language
@@ -342,7 +343,7 @@
   end
 
   private
-  
+
   # Removes the email body of text after the truncation configurations.
   def cleanup_body(body)
     delimiters = Setting.mail_handler_body_delimiters.to_s.split(/[\r\n]+/).reject(&:blank?).map {|s| Regexp.escape(s)}
--- a/app/models/.svn/text-base/mailer.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/mailer.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -31,7 +31,7 @@
     h = h.to_s.gsub(%r{\/.*$}, '') unless Redmine::Utils.relative_url_root.blank?
     { :host => h, :protocol => Setting.protocol }
   end
-  
+
   # Builds a tmail object used to email recipients of the added issue.
   #
   # Example:
@@ -85,7 +85,7 @@
     subject l(:mail_subject_reminder, :count => issues.size, :days => days)
     body :issues => issues,
          :days => days,
-         :issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort_key => 'due_date', :sort_order => 'asc')
+         :issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort => 'due_date:asc')
     render_multipart('reminder', body)
   end
 
@@ -114,11 +114,11 @@
     added_to_url = ''
     case container.class.name
     when 'Project'
-      added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container)
+      added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container)
       added_to = "#{l(:label_project)}: #{container}"
       recipients container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect  {|u| u.mail}
     when 'Version'
-      added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container.project_id)
+      added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project)
       added_to = "#{l(:label_version)}: #{container.name}"
       recipients container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect  {|u| u.mail}
     when 'Document'
@@ -133,7 +133,7 @@
          :added_to_url => added_to_url
     render_multipart('attachments_added', body)
   end
-  
+
   # Builds a tmail object used to email recipients of a news' project when a news item is added.
   #
   # Example:
@@ -149,7 +149,25 @@
     render_multipart('news_added', body)
   end
 
-  # Builds a tmail object used to email the recipients of the specified message that was posted. 
+  # Builds a tmail object used to email recipients of a news' project when a news comment is added.
+  #
+  # Example:
+  #   news_comment_added(comment) => tmail object
+  #   Mailer.news_comment_added(comment) => sends an email to the news' project recipients
+  def news_comment_added(comment)
+    news = comment.commented
+    redmine_headers 'Project' => news.project.identifier
+    message_id comment
+    recipients news.recipients
+    cc news.watcher_recipients
+    subject "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}"
+    body :news => news,
+         :comment => comment,
+         :news_url => url_for(:controller => 'news', :action => 'show', :id => news)
+    render_multipart('news_comment_added', body)
+  end
+
+  # Builds a tmail object used to email the recipients of the specified message that was posted.
   #
   # Example:
   #   message_posted(message) => tmail object
@@ -166,8 +184,8 @@
          :message_url => url_for(message.event_url)
     render_multipart('message_posted', body)
   end
-  
-  # Builds a tmail object used to email the recipients of a project of the specified wiki content was added. 
+
+  # Builds a tmail object used to email the recipients of a project of the specified wiki content was added.
   #
   # Example:
   #   wiki_content_added(wiki_content) => tmail object
@@ -183,8 +201,8 @@
          :wiki_content_url => url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title)
     render_multipart('wiki_content_added', body)
   end
-  
-  # Builds a tmail object used to email the recipients of a project of the specified wiki content was updated. 
+
+  # Builds a tmail object used to email the recipients of a project of the specified wiki content was updated.
   #
   # Example:
   #   wiki_content_updated(wiki_content) => tmail object
@@ -278,7 +296,7 @@
     return false if (recipients.nil? || recipients.empty?) &&
                     (cc.nil? || cc.empty?) &&
                     (bcc.nil? || bcc.empty?)
-                    
+
     # Set Message-Id and References
     if @message_id_object
       mail.message_id = self.class.message_id_for(@message_id_object)
@@ -286,7 +304,7 @@
     if @references_objects
       mail.references = @references_objects.collect {|o| self.class.message_id_for(o)}
     end
-    
+
     # Log errors when raise_delivery_errors is set to false, Rails does not
     raise_errors = self.class.raise_delivery_errors
     self.class.raise_delivery_errors = true
@@ -326,10 +344,10 @@
                                           :conditions => s.conditions
                                     ).group_by(&:assigned_to)
     issues_by_assignee.each do |assignee, issues|
-      deliver_reminder(assignee, issues, days) unless assignee.nil?
+      deliver_reminder(assignee, issues, days) if assignee && assignee.active?
     end
   end
-  
+
   # Activates/desactivates email deliveries during +block+
   def self.with_deliveries(enabled = true, &block)
     was_enabled = ActionMailer::Base.perform_deliveries
@@ -345,7 +363,7 @@
     @initial_language = current_language
     set_language_if_valid Setting.default_language
     from Setting.mail_from
-    
+
     # Common headers
     headers 'X-Mailer' => 'Redmine',
             'X-Redmine-Host' => Setting.host_name,
@@ -368,11 +386,11 @@
       recipients.delete(@author.mail) if recipients
       cc.delete(@author.mail) if cc
     end
-    
+
     notified_users = [recipients, cc].flatten.compact.uniq
     # Rails would log recipients only, not cc and bcc
     mylogger.info "Sending email notification to: #{notified_users.join(', ')}" if mylogger
-    
+
     # Blind carbon copy recipients
     if Setting.bcc_recipients?
       bcc(notified_users)
@@ -388,7 +406,7 @@
   #
   # https://rails.lighthouseapp.com/projects/8994/tickets/2338-actionmailer-mailer-views-and-content-type
   # https://rails.lighthouseapp.com/projects/8994/tickets/1799-actionmailer-doesnt-set-template_format-when-rendering-layouts
-  
+
   def render_multipart(method_name, body)
     if Setting.plain_text_mail?
       content_type "text/plain"
@@ -404,29 +422,29 @@
   def self.controller_path
     ''
   end unless respond_to?('controller_path')
-  
+
   # Returns a predictable Message-Id for the given object
   def self.message_id_for(object)
     # id + timestamp should reduce the odds of a collision
     # as far as we don't send multiple emails for the same object
-    timestamp = object.send(object.respond_to?(:created_on) ? :created_on : :updated_on) 
+    timestamp = object.send(object.respond_to?(:created_on) ? :created_on : :updated_on)
     hash = "redmine.#{object.class.name.demodulize.underscore}-#{object.id}.#{timestamp.strftime("%Y%m%d%H%M%S")}"
     host = Setting.mail_from.to_s.gsub(%r{^.*@}, '')
     host = "#{::Socket.gethostname}.redmine" if host.empty?
     "<#{hash}@#{host}>"
   end
-  
+
   private
-  
+
   def message_id(object)
     @message_id_object = object
   end
-  
+
   def references(object)
     @references_objects ||= []
     @references_objects << object
   end
-    
+
   def mylogger
     RAILS_DEFAULT_LOGGER
   end
--- a/app/models/.svn/text-base/message.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/message.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,10 +21,10 @@
   acts_as_tree :counter_cache => :replies_count, :order => "#{Message.table_name}.created_on ASC"
   acts_as_attachable
   belongs_to :last_reply, :class_name => 'Message', :foreign_key => 'last_reply_id'
-  
+
   acts_as_searchable :columns => ['subject', 'content'],
                      :include => {:board => :project},
-                     :project_key => 'project_id',
+                     :project_key => "#{Board.table_name}.project_id",
                      :date_column => "#{table_name}.created_on"
   acts_as_event :title => Proc.new {|o| "#{o.board.name}: #{o.subject}"},
                 :description => :content,
@@ -35,32 +35,32 @@
   acts_as_activity_provider :find_options => {:include => [{:board => :project}, :author]},
                             :author_key => :author_id
   acts_as_watchable
-    
+
   attr_protected :locked, :sticky
   validates_presence_of :board, :subject, :content
   validates_length_of :subject, :maximum => 255
-  
+
   after_create :add_author_as_watcher
-  
+
   named_scope :visible, lambda {|*args| { :include => {:board => :project},
-                                          :conditions => Project.allowed_to_condition(args.first || User.current, :view_messages) } }
-  
+                                          :conditions => Project.allowed_to_condition(args.shift || User.current, :view_messages, *args) } }
+
   def visible?(user=User.current)
     !user.nil? && user.allowed_to?(:view_messages, project)
   end
-  
+
   def validate_on_create
     # Can not reply to a locked topic
     errors.add_to_base 'Topic is locked' if root.locked? && self != root
   end
-  
+
   def after_create
     if parent
       parent.reload.update_attribute(:last_reply_id, self.id)
     end
     board.reset_counters!
   end
-  
+
   def after_update
     if board_id_changed?
       Message.update_all("board_id = #{board_id}", ["id = ? OR parent_id = ?", root.id, root.id])
@@ -68,19 +68,19 @@
       Board.reset_counters!(board_id)
     end
   end
-  
+
   def after_destroy
     board.reset_counters!
   end
-  
+
   def sticky=(arg)
     write_attribute :sticky, (arg == true || arg.to_s == '1' ? 1 : 0)
   end
-  
+
   def sticky?
     sticky == 1
   end
-  
+
   def project
     board.project
   end
@@ -92,9 +92,9 @@
   def destroyable_by?(usr)
     usr && usr.logged? && (usr.allowed_to?(:delete_messages, project) || (self.author == usr && usr.allowed_to?(:delete_own_messages, project)))
   end
-  
+
   private
-  
+
   def add_author_as_watcher
     Watcher.create(:watchable => self.root, :user => author)
   end
--- a/app/models/.svn/text-base/message_observer.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/message_observer.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
--- a/app/models/.svn/text-base/news.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/news.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,7 +19,7 @@
   belongs_to :project
   belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
   has_many :comments, :as => :commented, :dependent => :delete_all, :order => "created_on"
-  
+
   validates_presence_of :title, :description
   validates_length_of :title, :maximum => 60
   validates_length_of :summary, :maximum => 255
@@ -28,18 +28,27 @@
   acts_as_event :url => Proc.new {|o| {:controller => 'news', :action => 'show', :id => o.id}}
   acts_as_activity_provider :find_options => {:include => [:project, :author]},
                             :author_key => :author_id
-  
-  named_scope :visible, lambda {|*args| { 
+  acts_as_watchable
+
+  after_create :add_author_as_watcher
+
+  named_scope :visible, lambda {|*args| {
     :include => :project,
-    :conditions => Project.allowed_to_condition(args.first || User.current, :view_news) 
+    :conditions => Project.allowed_to_condition(args.shift || User.current, :view_news, *args)
   }}
-  
+
   def visible?(user=User.current)
     !user.nil? && user.allowed_to?(:view_news, project)
   end
-  
+
   # returns latest news for projects visible by user
   def self.latest(user = User.current, count = 5)
     find(:all, :limit => count, :conditions => Project.allowed_to_condition(user, :view_news), :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC")	
   end
+
+  private
+
+  def add_author_as_watcher
+    Watcher.create(:watchable => self, :user => author)
+  end
 end
--- a/app/models/.svn/text-base/project.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/project.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -43,7 +43,7 @@
   has_many :time_entries, :dependent => :delete_all
   has_many :queries, :dependent => :delete_all
   has_many :documents, :dependent => :destroy
-  has_many :news, :dependent => :delete_all, :include => :author
+  has_many :news, :dependent => :destroy, :include => :author
   has_many :issue_categories, :dependent => :delete_all, :order => "#{IssueCategory.table_name}.name"
   has_many :boards, :dependent => :destroy, :order => "position ASC"
   has_one :repository, :dependent => :destroy
@@ -56,7 +56,7 @@
                           :join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}",
                           :association_foreign_key => 'custom_field_id'
                           
-  acts_as_nested_set :order => 'name'
+  acts_as_nested_set :order => 'name', :dependent => :destroy
   acts_as_attachable :view_permission => :view_files,
                      :delete_permission => :manage_files
 
@@ -79,12 +79,12 @@
   # reserved words
   validates_exclusion_of :identifier, :in => %w( new )
 
-  before_destroy :delete_all_members, :destroy_children
+  before_destroy :delete_all_members
 
   named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } }
   named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"}
   named_scope :all_public, { :conditions => { :is_public => true } }
-  named_scope :visible, lambda { { :conditions => Project.visible_by(User.current) } }
+  named_scope :visible, lambda {|*args| {:conditions => Project.visible_condition(args.shift || User.current, *args) }}
   
   def initialize(attributes = nil)
     super
@@ -115,27 +115,31 @@
   # returns latest created projects
   # non public projects will be returned only if user is a member of those
   def self.latest(user=nil, count=5)
-    find(:all, :limit => count, :conditions => visible_by(user), :order => "created_on DESC")	
+    visible(user).find(:all, :limit => count, :order => "created_on DESC")	
   end	
 
-  # Returns a SQL :conditions string used to find all active projects for the specified user.
+  def self.visible_by(user=nil)
+    ActiveSupport::Deprecation.warn "Project.visible_by is deprecated and will be removed in Redmine 1.3.0. Use Project.visible_condition instead."
+    visible_condition(user || User.current)
+  end
+  
+  # Returns a SQL conditions string used to find all projects visible by the specified user.
   #
   # Examples:
-  #     Projects.visible_by(admin)        => "projects.status = 1"
-  #     Projects.visible_by(normal_user)  => "projects.status = 1 AND projects.is_public = 1"
-  def self.visible_by(user=nil)
-    user ||= User.current
-    if user && user.admin?
-      return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
-    elsif user && user.memberships.any?
-      return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND (#{Project.table_name}.is_public = #{connection.quoted_true} or #{Project.table_name}.id IN (#{user.memberships.collect{|m| m.project_id}.join(',')}))"
-    else
-      return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND #{Project.table_name}.is_public = #{connection.quoted_true}"
-    end
+  #   Project.visible_condition(admin)        => "projects.status = 1"
+  #   Project.visible_condition(normal_user)  => "((projects.status = 1) AND (projects.is_public = 1 OR projects.id IN (1,3,4)))"
+  #   Project.visible_condition(anonymous)    => "((projects.status = 1) AND (projects.is_public = 1))"
+  def self.visible_condition(user, options={})
+    allowed_to_condition(user, :view_project, options)
   end
   
+  # Returns a SQL conditions string used to find all projects for which +user+ has the given +permission+
+  #
+  # Valid options:
+  # * :project => limit the condition to project
+  # * :with_subprojects => limit the condition to project and its subprojects
+  # * :member => limit the condition to the user projects
   def self.allowed_to_condition(user, permission, options={})
-    statements = []
     base_statement = "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
     if perm = Redmine::AccessControl.permission(permission)
       unless perm.project_module.nil?
@@ -148,24 +152,37 @@
       project_statement << " OR (#{Project.table_name}.lft > #{options[:project].lft} AND #{Project.table_name}.rgt < #{options[:project].rgt})" if options[:with_subprojects]
       base_statement = "(#{project_statement}) AND (#{base_statement})"
     end
+    
     if user.admin?
-      # no restriction
+      base_statement
     else
-      statements << "1=0"
+      statement_by_role = {}
+      unless options[:member]
+        role = user.logged? ? Role.non_member : Role.anonymous
+        if role.allowed_to?(permission)
+          statement_by_role[role] = "#{Project.table_name}.is_public = #{connection.quoted_true}"
+        end
+      end
       if user.logged?
-        if Role.non_member.allowed_to?(permission) && !options[:member]
-          statements << "#{Project.table_name}.is_public = #{connection.quoted_true}"
+        user.projects_by_role.each do |role, projects|
+          if role.allowed_to?(permission)
+            statement_by_role[role] = "#{Project.table_name}.id IN (#{projects.collect(&:id).join(',')})"
+          end
         end
-        allowed_project_ids = user.memberships.select {|m| m.roles.detect {|role| role.allowed_to?(permission)}}.collect {|m| m.project_id}
-        statements << "#{Project.table_name}.id IN (#{allowed_project_ids.join(',')})" if allowed_project_ids.any?
+      end
+      if statement_by_role.empty?
+        "1=0"
       else
-        if Role.anonymous.allowed_to?(permission) && !options[:member]
-          # anonymous user allowed on public project
-          statements << "#{Project.table_name}.is_public = #{connection.quoted_true}"
-        end 
+        if block_given?
+          statement_by_role.each do |role, statement|
+            if s = yield(role, user)
+              statement_by_role[role] = "(#{statement} AND (#{s}))"
+            end
+          end
+        end
+        "((#{base_statement}) AND (#{statement_by_role.values.join(' OR ')}))"
       end
     end
-    statements.empty? ? base_statement : "((#{base_statement}) AND (#{statements.join(' OR ')}))"
   end
 
   # Returns the Systemwide and project specific activities
@@ -347,7 +364,7 @@
   # Returns an array of the trackers used by the project and its active sub projects
   def rolled_up_trackers
     @rolled_up_trackers ||=
-      Tracker.find(:all, :include => :projects,
+      Tracker.find(:all, :joins => :projects,
                          :select => "DISTINCT #{Tracker.table_name}.*",
                          :conditions => ["#{Project.table_name}.lft >= ? AND #{Project.table_name}.rgt <= ? AND #{Project.table_name}.status = #{STATUS_ACTIVE}", lft, rgt],
                          :order => "#{Tracker.table_name}.position")
@@ -373,15 +390,17 @@
   
   # Returns a scope of the Versions used by the project
   def shared_versions
-    @shared_versions ||= 
+    @shared_versions ||= begin
+      r = root? ? self : root
       Version.scoped(:include => :project,
                      :conditions => "#{Project.table_name}.id = #{id}" +
                                     " OR (#{Project.table_name}.status = #{Project::STATUS_ACTIVE} AND (" +
                                           " #{Version.table_name}.sharing = 'system'" +
-                                          " OR (#{Project.table_name}.lft >= #{root.lft} AND #{Project.table_name}.rgt <= #{root.rgt} AND #{Version.table_name}.sharing = 'tree')" +
+                                          " OR (#{Project.table_name}.lft >= #{r.lft} AND #{Project.table_name}.rgt <= #{r.rgt} AND #{Version.table_name}.sharing = 'tree')" +
                                           " OR (#{Project.table_name}.lft < #{lft} AND #{Project.table_name}.rgt > #{rgt} AND #{Version.table_name}.sharing IN ('hierarchy', 'descendants'))" +
                                           " OR (#{Project.table_name}.lft > #{lft} AND #{Project.table_name}.rgt < #{rgt} AND #{Version.table_name}.sharing = 'hierarchy')" +
                                           "))")
+    end
   end
 
   # Returns a hash of project users grouped by role
@@ -423,6 +442,12 @@
   def all_issue_custom_fields
     @all_issue_custom_fields ||= (IssueCustomField.for_all + issue_custom_fields).uniq.sort
   end
+
+  # Returns an array of all custom fields enabled for project time entries
+  # (explictly associated custom fields and custom fields enabled for all projects)
+  def all_time_entry_custom_fields
+    @all_time_entry_custom_fields ||= (TimeEntryCustomField.for_all + time_entry_custom_fields).uniq.sort
+  end
   
   def project
     self
@@ -509,10 +534,7 @@
   def enabled_module_names=(module_names)
     if module_names && module_names.is_a?(Array)
       module_names = module_names.collect(&:to_s).reject(&:blank?)
-      # remove disabled modules
-      enabled_modules.each {|mod| mod.destroy unless module_names.include?(mod.name)}
-      # add new modules
-      module_names.reject {|name| module_enabled?(name)}.each {|name| enabled_modules << EnabledModule.new(:name => name)}
+      self.enabled_modules = module_names.collect {|name| enabled_modules.detect {|mod| mod.name == name} || EnabledModule.new(:name => name)}
     else
       enabled_modules.clear
     end
@@ -621,13 +643,6 @@
   
   private
   
-  # Destroys children before destroying self
-  def destroy_children
-    children.each do |child|
-      child.destroy
-    end
-  end
-  
   # Copies wiki from +project+
   def copy_wiki(project)
     # Check that the source project has a wiki first
@@ -674,6 +689,7 @@
   end
   
   # Copies issues from +project+
+  # Note: issues assigned to a closed version won't be copied due to validation rules
   def copy_issues(project)
     # Stores the source issue id as a key and the copied issues as the
     # value.  Used to map the two togeather for issue relations.
--- a/app/models/.svn/text-base/query.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/query.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,24 +1,24 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
-class QueryColumn  
+class QueryColumn
   attr_accessor :name, :sortable, :groupable, :default_order
   include Redmine::I18n
-  
+
   def initialize(name, options={})
     self.name = name
     self.sortable = options[:sortable]
@@ -29,19 +29,23 @@
     self.default_order = options[:default_order]
     @caption_key = options[:caption] || "field_#{name}"
   end
-  
+
   def caption
     l(@caption_key)
   end
-  
+
   # Returns true if the column is sortable, otherwise false
   def sortable?
     !sortable.nil?
   end
-  
+
   def value(issue)
     issue.send name
   end
+
+  def css_classes
+    name
+  end
 end
 
 class QueryCustomFieldColumn < QueryColumn
@@ -55,37 +59,41 @@
     self.groupable ||= false
     @cf = custom_field
   end
-  
+
   def caption
     @cf.name
   end
-  
+
   def custom_field
     @cf
   end
-  
+
   def value(issue)
     cv = issue.custom_values.detect {|v| v.custom_field_id == @cf.id}
     cv && @cf.cast_value(cv.value)
   end
+
+  def css_classes
+    @css_classes ||= "#{name} #{@cf.field_format}"
+  end
 end
 
 class Query < ActiveRecord::Base
   class StatementInvalid < ::ActiveRecord::StatementInvalid
   end
-  
+
   belongs_to :project
   belongs_to :user
   serialize :filters
   serialize :column_names
   serialize :sort_criteria, Array
-  
+
   attr_protected :project_id, :user_id
-  
+
   validates_presence_of :name, :on => :save
   validates_length_of :name, :maximum => 255
-    
-  @@operators = { "="   => :label_equals, 
+
+  @@operators = { "="   => :label_equals,
                   "!"   => :label_not_equals,
                   "o"   => :label_open_issues,
                   "c"   => :label_closed_issues,
@@ -105,7 +113,7 @@
                   "!~"  => :label_not_contains }
 
   cattr_reader :operators
-    
+
   @@operators_by_filter_type = { :list => [ "=", "!" ],
                                  :list_status => [ "o", "=", "!", "c", "*" ],
                                  :list_optional => [ "=", "!", "!*", "*" ],
@@ -137,27 +145,27 @@
     QueryColumn.new(:created_on, :sortable => "#{Issue.table_name}.created_on", :default_order => 'desc'),
   ]
   cattr_reader :available_columns
-  
+
   def initialize(attributes = nil)
     super attributes
     self.filters ||= { 'status_id' => {:operator => "o", :values => [""]} }
   end
-  
+
   def after_initialize
     # Store the fact that project is nil (used in #editable_by?)
     @is_for_all = project.nil?
   end
-  
+
   def validate
     filters.each_key do |field|
-      errors.add label_for(field), :blank unless 
+      errors.add label_for(field), :blank unless
           # filter requires one or more values
-          (values_for(field) and !values_for(field).first.blank?) or 
+          (values_for(field) and !values_for(field).first.blank?) or
           # filter doesn't require any value
           ["o", "c", "!*", "*", "t", "w"].include? operator_for(field)
     end if filters
   end
-  
+
   def editable_by?(user)
     return false unless user
     # Admin can edit them all and regular users can edit their private queries
@@ -165,23 +173,23 @@
     # Members can not edit public queries that are for all project (only admin is allowed to)
     is_public && !@is_for_all && user.allowed_to?(:manage_public_queries, project)
   end
-  
+
   def available_filters
     return @available_filters if @available_filters
-    
+
     trackers = project.nil? ? Tracker.find(:all, :order => 'position') : project.rolled_up_trackers
-    
-    @available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } },       
-                           "tracker_id" => { :type => :list, :order => 2, :values => trackers.collect{|s| [s.name, s.id.to_s] } },                                                                                                                
+
+    @available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } },
+                           "tracker_id" => { :type => :list, :order => 2, :values => trackers.collect{|s| [s.name, s.id.to_s] } },
                            "priority_id" => { :type => :list, :order => 3, :values => IssuePriority.all.collect{|s| [s.name, s.id.to_s] } },
-                           "subject" => { :type => :text, :order => 8 },  
-                           "created_on" => { :type => :date_past, :order => 9 },                        
+                           "subject" => { :type => :text, :order => 8 },
+                           "created_on" => { :type => :date_past, :order => 9 },
                            "updated_on" => { :type => :date_past, :order => 10 },
                            "start_date" => { :type => :date, :order => 11 },
                            "due_date" => { :type => :date, :order => 12 },
                            "estimated_hours" => { :type => :integer, :order => 13 },
                            "done_ratio" =>  { :type => :integer, :order => 14 }}
-    
+
     user_values = []
     user_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
     if project
@@ -191,7 +199,7 @@
       if all_projects.any?
         # members of visible projects
         user_values += User.active.find(:all, :conditions => ["#{User.table_name}.id IN (SELECT DISTINCT user_id FROM members WHERE project_id IN (?))", all_projects.collect(&:id)]).sort.collect{|s| [s.name, s.id.to_s] }
-          
+
         # project filter
         project_values = []
         Project.project_tree(all_projects) do |p, level|
@@ -209,21 +217,26 @@
 
     role_values = Role.givable.collect {|r| [r.name, r.id.to_s] }
     @available_filters["assigned_to_role"] = { :type => :list_optional, :order => 7, :values => role_values } unless role_values.empty?
-    
+
     if User.current.logged?
       @available_filters["watcher_id"] = { :type => :list, :order => 15, :values => [["<< #{l(:label_me)} >>", "me"]] }
     end
-  
+
     if project
       # project specific filters
-      unless @project.issue_categories.empty?
-        @available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => @project.issue_categories.collect{|s| [s.name, s.id.to_s] } }
+      categories = @project.issue_categories.all
+      unless categories.empty?
+        @available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => categories.collect{|s| [s.name, s.id.to_s] } }
       end
-      unless @project.shared_versions.empty?
-        @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => @project.shared_versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } }
+      versions = @project.shared_versions.all
+      unless versions.empty?
+        @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } }
       end
-      unless @project.descendants.active.empty?
-        @available_filters["subproject_id"] = { :type => :list_subprojects, :order => 13, :values => @project.descendants.visible.collect{|s| [s.name, s.id.to_s] } }
+      unless @project.leaf?
+        subprojects = @project.descendants.visible.all
+        unless subprojects.empty?
+          @available_filters["subproject_id"] = { :type => :list_subprojects, :order => 13, :values => subprojects.collect{|s| [s.name, s.id.to_s] } }
+        end
       end
       add_custom_fields_filters(@project.all_issue_custom_fields)
     else
@@ -236,7 +249,7 @@
     end
     @available_filters
   end
-  
+
   def add_filter(field, operator, values)
     # values must be an array
     return unless values and values.is_a? Array # and !values.first.empty?
@@ -251,7 +264,7 @@
       filters[field] = {:operator => operator, :values => values }
     end
   end
-  
+
   def add_short_filter(field, expression)
     return unless expression
     parms = expression.scan(/^(o|c|!\*|!|\*)?(.*)$/).first
@@ -266,19 +279,19 @@
       end
     end
   end
-  
+
   def has_filter?(field)
     filters and filters[field]
   end
-  
+
   def operator_for(field)
     has_filter?(field) ? filters[field][:operator] : nil
   end
-  
+
   def values_for(field)
     has_filter?(field) ? filters[field][:values] : nil
   end
-  
+
   def label_for(field)
     label = available_filters[field][:name] if available_filters.has_key?(field)
     label ||= field.gsub(/\_id$/, "")
@@ -290,17 +303,17 @@
     @available_columns += (project ? 
                             project.all_issue_custom_fields :
                             IssueCustomField.find(:all)
-                           ).collect {|cf| QueryCustomFieldColumn.new(cf) }      
+                           ).collect {|cf| QueryCustomFieldColumn.new(cf) }
   end
 
   def self.available_columns=(v)
     self.available_columns = (v)
   end
-  
+
   def self.add_available_column(column)
     self.available_columns << (column) if column.is_a?(QueryColumn)
   end
-  
+
   # Returns an array of columns that can be used to group the results
   def groupable_columns
     available_columns.select {|c| c.groupable}
@@ -313,7 +326,7 @@
                                                h
                                              })
   end
-  
+
   def columns
     if has_default_columns?
       available_columns.select do |c|
@@ -325,7 +338,7 @@
       column_names.collect {|name| available_columns.find {|col| col.name == name}}.compact
     end
   end
-  
+
   def column_names=(names)
     if names
       names = names.select {|n| n.is_a?(Symbol) || !n.blank? }
@@ -337,15 +350,15 @@
     end
     write_attribute(:column_names, names)
   end
-  
+
   def has_column?(column)
     column_names && column_names.include?(column.name)
   end
-  
+
   def has_default_columns?
     column_names.nil? || column_names.empty?
   end
-  
+
   def sort_criteria=(arg)
     c = []
     if arg.is_a?(Hash)
@@ -354,19 +367,19 @@
     c = arg.select {|k,o| !k.to_s.blank?}.slice(0,3).collect {|k,o| [k.to_s, o == 'desc' ? o : 'asc']}
     write_attribute(:sort_criteria, c)
   end
-  
+
   def sort_criteria
     read_attribute(:sort_criteria) || []
   end
-  
+
   def sort_criteria_key(arg)
     sort_criteria && sort_criteria[arg] && sort_criteria[arg].first
   end
-  
+
   def sort_criteria_order(arg)
     sort_criteria && sort_criteria[arg] && sort_criteria[arg].last
   end
-  
+
   # Returns the SQL sort order that should be prepended for grouping
   def group_by_sort_order
     if grouped? && (column = group_by_column)
@@ -375,20 +388,20 @@
         "#{column.sortable} #{column.default_order}"
     end
   end
-  
+
   # Returns true if the query is a grouped query
   def grouped?
     !group_by_column.nil?
   end
-  
+
   def group_by_column
     groupable_columns.detect {|c| c.groupable && c.name.to_s == group_by}
   end
-  
+
   def group_by_statement
     group_by_column.try(:groupable)
   end
-  
+
   def project_statement
     project_clauses = []
     if project && !@project.descendants.active.empty?
@@ -411,8 +424,7 @@
     elsif project
       project_clauses << "#{Project.table_name}.id = %d" % project.id
     end
-    project_clauses <<  Project.allowed_to_condition(User.current, :view_issues)
-    project_clauses.join(' AND ')
+    project_clauses.any? ? project_clauses.join(' AND ') : nil
   end
 
   def statement
@@ -423,12 +435,12 @@
       v = values_for(field).clone
       next unless v and !v.empty?
       operator = operator_for(field)
-      
+
       # "me" value subsitution
       if %w(assigned_to_id author_id watcher_id).include?(field)
         v.push(User.current.logged? ? User.current.id.to_s : "0") if v.delete("me")
       end
-      
+
       sql = ''
       if field =~ /^cf_(\d+)$/
         # custom field
@@ -460,7 +472,7 @@
           end
           user_ids.flatten.uniq.compact
         }.sort.collect(&:to_s)
-        
+
         sql << '(' + sql_for_field("assigned_to_id", operator, members_of_groups, Issue.table_name, "assigned_to_id", false) + ')'
 
       elsif field == "assigned_to_role" # named field
@@ -474,14 +486,14 @@
           roles = Role.givable.find_all_by_id(v)
         end
         roles ||= []
-        
+
         members_of_roles = roles.inject([]) {|user_ids, role|
           if role && role.members
             user_ids << role.members.collect(&:user_id)
           end
           user_ids.flatten.uniq.compact
         }.sort.collect(&:to_s)
-        
+
         sql << '(' + sql_for_field("assigned_to_id", operator, members_of_roles, Issue.table_name, "assigned_to_id", false) + ')'
       else
         # regular field
@@ -490,26 +502,29 @@
         sql << '(' + sql_for_field(field, operator, v, db_table, db_field) + ')'
       end
       filters_clauses << sql
-      
+
     end if filters and valid?
-    
-    (filters_clauses << project_statement).join(' AND ')
+
+    filters_clauses << project_statement
+    filters_clauses.reject!(&:blank?)
+
+    filters_clauses.any? ? filters_clauses.join(' AND ') : nil
   end
-  
+
   # Returns the issue count
   def issue_count
     Issue.count(:include => [:status, :project], :conditions => statement)
   rescue ::ActiveRecord::StatementInvalid => e
     raise StatementInvalid.new(e.message)
   end
-  
+
   # Returns the issue count by group or nil if query is not grouped
   def issue_count_by_group
     r = nil
     if grouped?
       begin
         # Rails will raise an (unexpected) RecordNotFound if there's only a nil group value
-        r = Issue.count(:group => group_by_statement, :include => [:status, :project], :conditions => statement)
+        r = Issue.visible.count(:group => group_by_statement, :include => [:status, :project], :conditions => statement)
       rescue ActiveRecord::RecordNotFound
         r = {nil => issue_count}
       end
@@ -522,14 +537,14 @@
   rescue ::ActiveRecord::StatementInvalid => e
     raise StatementInvalid.new(e.message)
   end
-  
+
   # Returns the issues
   # Valid options are :order, :offset, :limit, :include, :conditions
   def issues(options={})
     order_option = [group_by_sort_order, options[:order]].reject {|s| s.blank?}.join(',')
     order_option = nil if order_option.blank?
-    
-    Issue.find :all, :include => ([:status, :project] + (options[:include] || [])).uniq,
+
+    Issue.visible.find :all, :include => ([:status, :project] + (options[:include] || [])).uniq,
                      :conditions => Query.merge_conditions(statement, options[:conditions]),
                      :order => order_option,
                      :limit  => options[:limit],
@@ -541,7 +556,7 @@
   # Returns the journals
   # Valid options are :order, :offset, :limit
   def journals(options={})
-    Journal.find :all, :include => [:details, :user, {:issue => [:project, :author, :tracker, :status]}],
+    Journal.visible.find :all, :include => [:details, :user, {:issue => [:project, :author, :tracker, :status]}],
                        :conditions => statement,
                        :order => options[:order],
                        :limit => options[:limit],
@@ -549,18 +564,18 @@
   rescue ::ActiveRecord::StatementInvalid => e
     raise StatementInvalid.new(e.message)
   end
-  
+
   # Returns the versions
   # Valid options are :conditions
   def versions(options={})
-    Version.find :all, :include => :project,
+    Version.visible.find :all, :include => :project,
                        :conditions => Query.merge_conditions(project_statement, options[:conditions])
   rescue ::ActiveRecord::StatementInvalid => e
     raise StatementInvalid.new(e.message)
   end
-  
+
   private
-  
+
   # Helper method to generate the WHERE sql for a +field+, +operator+ and a +value+
   def sql_for_field(field, operator, value, db_table, db_field, is_custom_filter=false)
     sql = ''
@@ -608,24 +623,22 @@
     when "t"
       sql = date_range_clause(db_table, db_field, 0, 0)
     when "w"
-      from = l(:general_first_day_of_week) == '7' ?
-      # week starts on sunday
-      ((Date.today.cwday == 7) ? Time.now.at_beginning_of_day : Time.now.at_beginning_of_week - 1.day) :
-        # week starts on monday (Rails default)
-        Time.now.at_beginning_of_week
-      sql = "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(from), connection.quoted_date(from + 7.days)]
+      first_day_of_week = l(:general_first_day_of_week).to_i
+      day_of_week = Date.today.cwday
+      days_ago = (day_of_week >= first_day_of_week ? day_of_week - first_day_of_week : day_of_week + 7 - first_day_of_week)
+      sql = date_range_clause(db_table, db_field, - days_ago, - days_ago + 6)
     when "~"
       sql = "LOWER(#{db_table}.#{db_field}) LIKE '%#{connection.quote_string(value.first.to_s.downcase)}%'"
     when "!~"
       sql = "LOWER(#{db_table}.#{db_field}) NOT LIKE '%#{connection.quote_string(value.first.to_s.downcase)}%'"
     end
-    
+
     return sql
   end
-  
+
   def add_custom_fields_filters(custom_fields)
     @available_filters ||= {}
-    
+
     custom_fields.select(&:is_filter?).each do |field|
       case field.field_format
       when "text"
@@ -636,13 +649,16 @@
         options = { :type => :date, :order => 20 }
       when "bool"
         options = { :type => :list, :values => [[l(:general_text_yes), "1"], [l(:general_text_no), "0"]], :order => 20 }
+      when "user", "version"
+        next unless project
+        options = { :type => :list_optional, :values => field.possible_values_options(project), :order => 20}
       else
         options = { :type => :string, :order => 20 }
       end
       @available_filters["cf_#{field.id}"] = options.merge({ :name => field.name })
     end
   end
-  
+
   # Returns a SQL clause for a date or datetime field.
   def date_range_clause(table, field, from, to)
     s = []
--- a/app/models/.svn/text-base/repository.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/repository.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,35 +1,45 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 class Repository < ActiveRecord::Base
   include Redmine::Ciphering
-  
+
   belongs_to :project
   has_many :changesets, :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC"
   has_many :changes, :through => :changesets
-  
+
+  serialize :extra_info
+
   # Raw SQL to delete changesets and changes in the database
   # has_many :changesets, :dependent => :destroy is too slow for big repositories
   before_destroy :clear_changesets
-  
+
   validates_length_of :password, :maximum => 255, :allow_nil => true
   # Checks if the SCM is enabled when creating a repository
   validate_on_create { |r| r.errors.add(:type, :invalid) unless Setting.enabled_scm.include?(r.class.name.demodulize) }
 
+  def self.human_attribute_name(attribute_key_name)
+    attr_name = attribute_key_name
+    if attr_name == "log_encoding"
+      attr_name = "commit_logs_encoding"
+    end
+    super(attr_name)
+  end
+
   # Removes leading and trailing whitespace
   def url=(arg)
     write_attribute(:url, arg ? arg.to_s.strip : nil)
@@ -39,11 +49,11 @@
   def root_url=(arg)
     write_attribute(:root_url, arg ? arg.to_s.strip : nil)
   end
-  
+
   def password
     read_ciphered_attribute(:password)
   end
-  
+
   def password=(arg)
     write_ciphered_attribute(:password, arg)
   end
@@ -63,6 +73,17 @@
     self.class.scm_name
   end
 
+  def merge_extra_info(arg)
+    h = extra_info || {}
+    return h if arg.nil?
+    h.merge!(arg)
+    write_attribute(:extra_info, h)
+  end
+
+  def report_last_commit
+    true
+  end
+
   def supports_cat?
     scm.supports_cat?
   end
@@ -70,11 +91,19 @@
   def supports_annotate?
     scm.supports_annotate?
   end
-  
+
+  def supports_all_revisions?
+    true
+  end
+
+  def supports_directory_revisions?
+    false
+  end
+
   def entry(path=nil, identifier=nil)
     scm.entry(path, identifier)
   end
-  
+
   def entries(path=nil, identifier=nil)
     scm.entries(path, identifier)
   end
@@ -90,15 +119,15 @@
   def default_branch
     scm.default_branch
   end
-  
+
   def properties(path, identifier=nil)
     scm.properties(path, identifier)
   end
-  
+
   def cat(path, identifier=nil)
     scm.cat(path, identifier)
   end
-  
+
   def diff(path, rev, rev_to)
     scm.diff(path, rev, rev_to)
   end
@@ -118,7 +147,8 @@
   # Finds and returns a revision with a number or the beginning of a hash
   def find_changeset_by_name(name)
     return nil if name.blank?
-    changesets.find(:first, :conditions => (name.match(/^\d*$/) ? ["revision = ?", name.to_s] : ["revision LIKE ?", name + '%']))
+    changesets.find(:first, :conditions => (name.match(/^\d*$/) ?
+          ["revision = ?", name.to_s] : ["revision LIKE ?", name + '%']))
   end
 
   def latest_changeset
@@ -129,26 +159,32 @@
   # Default behaviour is to search in cached changesets
   def latest_changesets(path, rev, limit=10)
     if path.blank?
-      changesets.find(:all, :include => :user,
-                            :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC",
-                            :limit => limit)
+      changesets.find(
+         :all,
+         :include => :user,
+         :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC",
+         :limit => limit)
     else
-      changes.find(:all, :include => {:changeset => :user}, 
-                         :conditions => ["path = ?", path.with_leading_slash],
-                         :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC",
-                         :limit => limit).collect(&:changeset)
+      changes.find(
+         :all,
+         :include => {:changeset => :user},
+         :conditions => ["path = ?", path.with_leading_slash],
+         :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC",
+         :limit => limit
+       ).collect(&:changeset)
     end
   end
-    
+
   def scan_changesets_for_issue_ids
     self.changesets.each(&:scan_comment_for_issue_ids)
   end
 
   # Returns an array of committers usernames and associated user_id
   def committers
-    @committers ||= Changeset.connection.select_rows("SELECT DISTINCT committer, user_id FROM #{Changeset.table_name} WHERE repository_id = #{id}")
+    @committers ||= Changeset.connection.select_rows(
+         "SELECT DISTINCT committer, user_id FROM #{Changeset.table_name} WHERE repository_id = #{id}")
   end
-  
+
   # Maps committers username to a user ids
   def committer_ids=(h)
     if h.is_a?(Hash)
@@ -156,17 +192,19 @@
         new_user_id = h[committer]
         if new_user_id && (new_user_id.to_i != user_id.to_i)
           new_user_id = (new_user_id.to_i > 0 ? new_user_id.to_i : nil)
-          Changeset.update_all("user_id = #{ new_user_id.nil? ? 'NULL' : new_user_id }", ["repository_id = ? AND committer = ?", id, committer])
+          Changeset.update_all(
+               "user_id = #{ new_user_id.nil? ? 'NULL' : new_user_id }",
+               ["repository_id = ? AND committer = ?", id, committer])
         end
       end
-      @committers = nil
+      @committers            = nil
       @found_committer_users = nil
       true
     else
       false
     end
   end
-  
+
   # Returns the Redmine User corresponding to the given +committer+
   # It will return nil if the committer is not yet mapped and if no User
   # with the same username or email was found
@@ -174,7 +212,7 @@
     unless committer.blank?
       @found_committer_users ||= {}
       return @found_committer_users[committer] if @found_committer_users.has_key?(committer)
-      
+
       user = nil
       c = changesets.find(:first, :conditions => {:committer => committer}, :include => :user)
       if c && c.user
@@ -218,7 +256,7 @@
   def self.scm_name
     'Abstract'
   end
-  
+
   def self.available_scm
     subclasses.collect {|klass| [klass.scm_name, klass.name]}
   end
@@ -238,7 +276,7 @@
     ret = ""
     begin
       ret = self.scm_adapter_class.client_command if self.scm_adapter_class
-    rescue Redmine::Scm::Adapters::CommandFailed => e
+    rescue Exception => e
       logger.error "scm: error during get command: #{e.message}"
     end
     ret
@@ -248,7 +286,7 @@
     ret = ""
     begin
       ret = self.scm_adapter_class.client_version_string if self.scm_adapter_class
-    rescue Redmine::Scm::Adapters::CommandFailed => e
+    rescue Exception => e
       logger.error "scm: error during get version string: #{e.message}"
     end
     ret
@@ -257,8 +295,8 @@
   def self.scm_available
     ret = false
     begin
-      ret = self.scm_adapter_class.client_available if self.scm_adapter_class 
-    rescue Redmine::Scm::Adapters::CommandFailed => e
+      ret = self.scm_adapter_class.client_available if self.scm_adapter_class
+    rescue Exception => e
       logger.error "scm: error during get scm available: #{e.message}"
     end
     ret
@@ -272,7 +310,7 @@
     root_url.strip!
     true
   end
-  
+
   def clear_changesets
     cs, ch, ci = Changeset.table_name, Change.table_name, "#{table_name_prefix}changesets_issues#{table_name_suffix}"
     connection.delete("DELETE FROM #{ch} WHERE #{ch}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})")
--- a/app/models/.svn/text-base/role.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/role.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -19,6 +19,12 @@
   # Built-in roles
   BUILTIN_NON_MEMBER = 1
   BUILTIN_ANONYMOUS  = 2
+  
+  ISSUES_VISIBILITY_OPTIONS = [
+    ['all', :label_issues_visibility_all],
+    ['default', :label_issues_visibility_public],
+    ['own', :label_issues_visibility_own]
+  ]
 
   named_scope :givable, { :conditions => "builtin = 0", :order => 'position' }
   named_scope :builtin, lambda { |*args|
@@ -43,7 +49,10 @@
   validates_presence_of :name
   validates_uniqueness_of :name
   validates_length_of :name, :maximum => 30
-
+  validates_inclusion_of :issues_visibility,
+    :in => ISSUES_VISIBILITY_OPTIONS.collect(&:first),
+    :if => lambda {|role| role.respond_to?(:issues_visibility)}
+  
   def permissions
     read_attribute(:permissions) || []
   end
@@ -84,6 +93,14 @@
     name
   end
   
+  def name
+    case builtin
+    when 1; l(:label_role_non_member, :default => read_attribute(:name))
+    when 2; l(:label_role_anonymous,  :default => read_attribute(:name))
+    else; read_attribute(:name)
+    end
+  end
+  
   # Return true if the role is a builtin role
   def builtin?
     self.builtin != 0
--- a/app/models/.svn/text-base/setting.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/setting.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -28,12 +28,12 @@
 	'%b %d, %Y',
 	'%B %d, %Y'
     ]
-    
+
   TIME_FORMATS = [
     '%H:%M',
     '%I:%M %p'
     ]
-    
+
   ENCODINGS = %w(US-ASCII
                   windows-1250
                   windows-1251
@@ -73,22 +73,22 @@
                   Big5
                   Big5-HKSCS
                   TIS-620)
-  
+
   cattr_accessor :available_settings
   @@available_settings = YAML::load(File.open("#{RAILS_ROOT}/config/settings.yml"))
   Redmine::Plugin.all.each do |plugin|
     next unless plugin.settings
-    @@available_settings["plugin_#{plugin.id}"] = {'default' => plugin.settings[:default], 'serialized' => true}    
+    @@available_settings["plugin_#{plugin.id}"] = {'default' => plugin.settings[:default], 'serialized' => true}
   end
-  
+
   validates_uniqueness_of :name
   validates_inclusion_of :name, :in => @@available_settings.keys
-  validates_numericality_of :value, :only_integer => true, :if => Proc.new { |setting| @@available_settings[setting.name]['format'] == 'int' }  
+  validates_numericality_of :value, :only_integer => true, :if => Proc.new { |setting| @@available_settings[setting.name]['format'] == 'int' }
 
   # Hash used to cache setting values
   @cached_settings = {}
   @cached_cleared_on = Time.now
-  
+
   def value
     v = read_attribute(:value)
     # Unserialize serialized settings
@@ -96,18 +96,18 @@
     v = v.to_sym if @@available_settings[name]['format'] == 'symbol' && !v.blank?
     v
   end
-  
+
   def value=(v)
     v = v.to_yaml if v && @@available_settings[name] && @@available_settings[name]['serialized']
     write_attribute(:value, v.to_s)
   end
-  
+
   # Returns the value of the setting named name
   def self.[](name)
     v = @cached_settings[name]
     v ? v : (@cached_settings[name] = find_or_default(name).value)
   end
-  
+
   def self.[]=(name, v)
     setting = find_or_default(name)
     setting.value = (v ? v : "")
@@ -115,7 +115,7 @@
     setting.save
     setting.value
   end
-  
+
   # Defines getter and setter for each setting
   # Then setting values can be read using: Setting.some_setting_name
   # or set using Setting.some_setting_name = "some value"
@@ -135,16 +135,16 @@
     END_SRC
     class_eval src, __FILE__, __LINE__
   end
-  
+
   # Helper that returns an array based on per_page_options setting
   def self.per_page_options_array
     per_page_options.split(%r{[\s,]}).collect(&:to_i).select {|n| n > 0}.sort
   end
-  
+
   def self.openid?
     Object.const_defined?(:OpenID) && self[:openid].to_i > 0
   end
-  
+
   # Checks if settings have changed since the values were read
   # and clears the cache hash if it's the case
   # Called once per request
@@ -156,13 +156,13 @@
       logger.info "Settings cache cleared." if logger
     end
   end
-  
+
 private
   # Returns the Setting instance for the setting named name
   # (record found in database or new record with default value)
   def self.find_or_default(name)
     name = name.to_s
-    raise "There's no setting named #{name}" unless @@available_settings.has_key?(name)    
+    raise "There's no setting named #{name}" unless @@available_settings.has_key?(name)
     setting = find_by_name(name)
     setting ||= new(:name => name, :value => @@available_settings[name]['default']) if @@available_settings.has_key? name
   end
--- a/app/models/.svn/text-base/time_entry.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/time_entry.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -22,7 +22,7 @@
   belongs_to :issue
   belongs_to :user
   belongs_to :activity, :class_name => 'TimeEntryActivity', :foreign_key => 'activity_id'
-  
+
   attr_protected :project_id, :user_id, :tyear, :tmonth, :tweek
 
   acts_as_customizable
@@ -33,12 +33,17 @@
 
   acts_as_activity_provider :timestamp => "#{table_name}.created_on",
                             :author_key => :user_id,
-                            :find_options => {:include => :project} 
+                            :find_options => {:include => :project}
 
   validates_presence_of :user_id, :activity_id, :project_id, :hours, :spent_on
   validates_numericality_of :hours, :allow_nil => true, :message => :invalid
   validates_length_of :comments, :maximum => 255, :allow_nil => true
 
+  named_scope :visible, lambda {|*args| {
+    :include => :project,
+    :conditions => Project.allowed_to_condition(args.shift || User.current, :view_time_entries, *args)
+  }}
+
   def after_initialize
     if new_record? && self.activity.nil?
       if default_activity = TimeEntryActivity.default
@@ -47,21 +52,21 @@
       self.hours = nil if hours == 0
     end
   end
-  
+
   def before_validation
     self.project = issue.project if issue && project.nil?
   end
-  
+
   def validate
     errors.add :hours, :invalid if hours && (hours < 0 || hours >= 1000)
     errors.add :project_id, :invalid if project.nil?
     errors.add :issue_id, :invalid if (issue_id && !issue) || (issue && project!=issue.project)
   end
-  
+
   def hours=(h)
     write_attribute :hours, (h.is_a?(String) ? (h.to_hours || h) : h)
   end
-  
+
   # tyear, tmonth, tweek assigned where setting spent_on attributes
   # these attributes make time aggregations easier
   def spent_on=(date)
@@ -73,13 +78,15 @@
     self.tmonth = spent_on ? spent_on.month : nil
     self.tweek = spent_on ? Date.civil(spent_on.year, spent_on.month, spent_on.day).cweek : nil
   end
-  
+
   # Returns true if the time entry can be edited by usr, otherwise false
   def editable_by?(usr)
     (usr == user && usr.allowed_to?(:edit_own_time_entries, project)) || usr.allowed_to?(:edit_time_entries, project)
   end
-  
+
+  # TODO: remove this method in 1.3.0
   def self.visible_by(usr)
+    ActiveSupport::Deprecation.warn "TimeEntry.visible_by is deprecated and will be removed in Redmine 1.3.0. Use the visible scope instead."
     with_scope(:find => { :conditions => Project.allowed_to_condition(usr, :view_time_entries) }) do
       yield
     end
--- a/app/models/.svn/text-base/user.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/user.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -76,6 +76,15 @@
 
   before_destroy :remove_references_before_destroy
   
+  named_scope :in_group, lambda {|group|
+    group_id = group.is_a?(Group) ? group.id : group.to_i
+    { :conditions => ["#{User.table_name}.id IN (SELECT gu.user_id FROM #{table_name_prefix}groups_users#{table_name_suffix} gu WHERE gu.group_id = ?)", group_id] }
+  }
+  named_scope :not_in_group, lambda {|group|
+    group_id = group.is_a?(Group) ? group.id : group.to_i
+    { :conditions => ["#{User.table_name}.id NOT IN (SELECT gu.user_id FROM #{table_name_prefix}groups_users#{table_name_suffix} gu WHERE gu.group_id = ?)", group_id] }
+  }
+  
   def before_create
     self.mail_notification = Setting.default_notification_option if self.mail_notification.blank?
     true
@@ -90,6 +99,7 @@
   
   def reload(*args)
     @name = nil
+    @projects_by_role = nil
     super
   end
   
@@ -361,16 +371,33 @@
     !roles_for_project(project).detect {|role| role.member?}.nil?
   end
   
+  # Returns a hash of user's projects grouped by roles
+  def projects_by_role
+    return @projects_by_role if @projects_by_role
+    
+    @projects_by_role = Hash.new {|h,k| h[k]=[]}
+    memberships.each do |membership|
+      membership.roles.each do |role|
+        @projects_by_role[role] << membership.project if membership.project
+      end
+    end
+    @projects_by_role.each do |role, projects|
+      projects.uniq!
+    end
+  
+    @projects_by_role
+  end
+  
   # Return true if the user is allowed to do the specified action on a specific context
   # Action can be:
   # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit')
   # * a permission Symbol (eg. :edit_project)
   # Context can be:
   # * a project : returns true if user is allowed to do the specified action on this project
-  # * a group of projects : returns true if user is allowed on every project
+  # * an array of projects : returns true if user is allowed on every project
   # * nil with options[:global] set : check if user has at least one role allowed for this action, 
   #   or falls back to Non Member / Anonymous permissions depending if the user is logged
-  def allowed_to?(action, context, options={})
+  def allowed_to?(action, context, options={}, &block)
     if context && context.is_a?(Project)
       # No action allowed on archived projects
       return false unless context.active?
@@ -381,12 +408,15 @@
       
       roles = roles_for_project(context)
       return false unless roles
-      roles.detect {|role| (context.is_public? || role.member?) && role.allowed_to?(action)}
-      
+      roles.detect {|role|
+        (context.is_public? || role.member?) &&
+        role.allowed_to?(action) &&
+        (block_given? ? yield(role, self) : true)
+      }
     elsif context && context.is_a?(Array)
       # Authorize if user is authorized on every element of the array
       context.map do |project|
-        allowed_to?(action,project,options)
+        allowed_to?(action, project, options, &block)
       end.inject do |memo,allowed|
         memo && allowed
       end
@@ -396,7 +426,11 @@
       
       # authorize if user has at least one role that has this permission
       roles = memberships.collect {|m| m.roles}.flatten.uniq
-      roles.detect {|r| r.allowed_to?(action)} || (self.logged? ? Role.non_member.allowed_to?(action) : Role.anonymous.allowed_to?(action))
+      roles << (self.logged? ? Role.non_member : Role.anonymous)
+      roles.detect {|role|
+        role.allowed_to?(action) &&
+        (block_given? ? yield(role, self) : true)
+      }
     else
       false
     end
@@ -404,8 +438,8 @@
 
   # Is the user allowed to do the specified action on any project?
   # See allowed_to? for the actions and valid options.
-  def allowed_to_globally?(action, options)
-    allowed_to?(action, nil, options.reverse_merge(:global => true))
+  def allowed_to_globally?(action, options, &block)
+    allowed_to?(action, nil, options.reverse_merge(:global => true), &block)
   end
 
   safe_attributes 'login',
--- a/app/models/.svn/text-base/wiki.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/wiki.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -44,17 +44,26 @@
   
   # find the page with the given title
   def find_page(title, options = {})
+    @page_found_with_redirect = false
     title = start_page if title.blank?
     title = Wiki.titleize(title)
-    page = pages.first(:conditions => ["LOWER(title) LIKE LOWER(?)", title])
+    page = pages.first(:conditions => ["LOWER(title) = LOWER(?)", title])
     if !page && !(options[:with_redirect] == false)
       # search for a redirect
-      redirect = redirects.first(:conditions => ["LOWER(title) LIKE LOWER(?)", title])
-      page = find_page(redirect.redirects_to, :with_redirect => false) if redirect
+      redirect = redirects.first(:conditions => ["LOWER(title) = LOWER(?)", title])
+      if redirect
+        page = find_page(redirect.redirects_to, :with_redirect => false)
+        @page_found_with_redirect = true
+      end
     end
     page
   end
   
+  # Returns true if the last page was found with a redirect
+  def page_found_with_redirect?
+    @page_found_with_redirect
+  end
+
   # Finds a page by title
   # The given string can be of one of the forms: "title" or "project:title"
   # Examples:
--- a/app/models/.svn/text-base/wiki_content.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/wiki_content.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# RedMine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -23,28 +23,28 @@
   belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
   validates_presence_of :text
   validates_length_of :comments, :maximum => 255, :allow_nil => true
-  
+
   acts_as_versioned
-  
+
   def visible?(user=User.current)
     page.visible?(user)
   end
-    
+
   def project
     page.project
   end
-  
+
   def attachments
     page.nil? ? [] : page.attachments
   end
-  
+
   # Returns the mail adresses of users that should be notified
   def recipients
     notified = project.notified_users
     notified.reject! {|user| !visible?(user)}
     notified.collect(&:mail)
   end
-  
+
   class Version
     belongs_to :page, :class_name => '::WikiPage', :foreign_key => 'page_id'
     belongs_to :author, :class_name => '::User', :foreign_key => 'author_id'
@@ -84,7 +84,7 @@
       end
       plain
     end
-    
+
     def text
       @text ||= case compression
       when 'gzip'
@@ -92,16 +92,16 @@
       else
         # uncompressed data
         data
-      end      
+      end
     end
-    
+
     def project
       page.project
     end
-    
+
     # Returns the previous version or nil
     def previous
-      @previous ||= WikiContent::Version.find(:first, 
+      @previous ||= WikiContent::Version.find(:first,
                                               :order => 'version DESC',
                                               :include => :author,
                                               :conditions => ["wiki_content_id = ? AND version < ?", wiki_content_id, version])
--- a/app/models/.svn/text-base/wiki_page.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/.svn/text-base/wiki_page.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -32,6 +32,7 @@
 
   acts_as_searchable :columns => ['title', 'text'],
                      :include => [{:wiki => :project}, :content],
+                     :permission => :view_wiki_pages,
                      :project_key => "#{Wiki.table_name}.project_id"
 
   attr_accessor :redirect_existing_links
@@ -41,6 +42,12 @@
   validates_uniqueness_of :title, :scope => :wiki_id, :case_sensitive => false
   validates_associated :content
   
+  # eager load information about last updates, without loading text
+  named_scope :with_updated_on, {
+    :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on",
+    :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id"
+  }
+  
   # Wiki pages that are protected by default
   DEFAULT_PROTECTED_PAGES = %w(sidebar)
   
@@ -121,6 +128,18 @@
     content.text if content
   end
   
+  def updated_on
+    unless @updated_on
+      if time = read_attribute(:updated_on)
+        # content updated_on was eager loaded with the page
+        @updated_on = Time.parse(time) rescue nil
+      else
+        @updated_on = content && content.updated_on
+      end
+    end
+    @updated_on
+  end
+  
   # Returns true if usr is allowed to edit the page, otherwise false
   def editable_by?(usr)
     !protected? || usr.allowed_to?(:protect_wiki_pages, wiki.project)
--- a/app/models/attachment.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/attachment.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,7 +20,7 @@
 class Attachment < ActiveRecord::Base
   belongs_to :container, :polymorphic => true
   belongs_to :author, :class_name => "User", :foreign_key => "author_id"
-  
+
   validates_presence_of :container, :filename, :author
   validates_length_of :filename, :maximum => 255
   validates_length_of :disk_filename, :maximum => 255
@@ -31,20 +31,20 @@
   acts_as_activity_provider :type => 'files',
                             :permission => :view_files,
                             :author_key => :author_id,
-                            :find_options => {:select => "#{Attachment.table_name}.*", 
+                            :find_options => {:select => "#{Attachment.table_name}.*",
                                               :joins => "LEFT JOIN #{Version.table_name} ON #{Attachment.table_name}.container_type='Version' AND #{Version.table_name}.id = #{Attachment.table_name}.container_id " +
                                                         "LEFT JOIN #{Project.table_name} ON #{Version.table_name}.project_id = #{Project.table_name}.id OR ( #{Attachment.table_name}.container_type='Project' AND #{Attachment.table_name}.container_id = #{Project.table_name}.id )"}
-  
+
   acts_as_activity_provider :type => 'documents',
                             :permission => :view_documents,
                             :author_key => :author_id,
-                            :find_options => {:select => "#{Attachment.table_name}.*", 
+                            :find_options => {:select => "#{Attachment.table_name}.*",
                                               :joins => "LEFT JOIN #{Document.table_name} ON #{Attachment.table_name}.container_type='Document' AND #{Document.table_name}.id = #{Attachment.table_name}.container_id " +
                                                         "LEFT JOIN #{Project.table_name} ON #{Document.table_name}.project_id = #{Project.table_name}.id"}
 
   cattr_accessor :storage_path
   @@storage_path = Redmine::Configuration['attachments_storage_path'] || "#{RAILS_ROOT}/files"
-  
+
   def validate
     if self.filesize > Setting.attachment_max_size.to_i.kilobytes
       errors.add(:base, :too_long, :count => Setting.attachment_max_size.to_i.kilobytes)
@@ -76,7 +76,7 @@
     if @temp_file && (@temp_file.size > 0)
       logger.debug("saving '#{self.diskfile}'")
       md5 = Digest::MD5.new
-      File.open(diskfile, "wb") do |f| 
+      File.open(diskfile, "wb") do |f|
         buffer = ""
         while (buffer = @temp_file.read(8192))
           f.write(buffer)
@@ -100,7 +100,7 @@
   def diskfile
     "#{@@storage_path}/#{self.disk_filename}"
   end
-  
+
   def increment_download
     increment!(:downloads)
   end
@@ -108,27 +108,27 @@
   def project
     container.project
   end
-  
+
   def visible?(user=User.current)
     container.attachments_visible?(user)
   end
-  
+
   def deletable?(user=User.current)
     container.attachments_deletable?(user)
   end
-  
+
   def image?
     self.filename =~ /\.(jpe?g|gif|png)$/i
   end
-  
+
   def is_text?
     Redmine::MimeType.is_type?('text', filename)
   end
-  
+
   def is_diff?
     self.filename =~ /\.(patch|diff)$/i
   end
-  
+
   # Returns true if the file is readable
   def readable?
     File.readable?(diskfile)
@@ -145,7 +145,7 @@
       attachments.each_value do |attachment|
         file = attachment['file']
         next unless file && file.size > 0
-        a = Attachment.create(:container => obj, 
+        a = Attachment.create(:container => obj,
                               :file => file,
                               :description => attachment['description'].to_s.strip,
                               :author => User.current)
@@ -160,18 +160,18 @@
     end
     {:files => attached, :unsaved => obj.unsaved_attachments}
   end
-  
+
 private
   def sanitize_filename(value)
     # get only the filename, not the whole path
     just_filename = value.gsub(/^.*(\\|\/)/, '')
     # NOTE: File.basename doesn't work right with Windows paths on Unix
-    # INCORRECT: just_filename = File.basename(value.gsub('\\\\', '/')) 
+    # INCORRECT: just_filename = File.basename(value.gsub('\\\\', '/'))
 
     # Finally, replace all non alphanumeric, hyphens or periods with underscore
-    @filename = just_filename.gsub(/[^\w\.\-]/,'_') 
+    @filename = just_filename.gsub(/[^\w\.\-]/,'_')
   end
-  
+
   # Returns an ASCII or hashed filename
   def self.disk_filename(filename)
     timestamp = DateTime.now.strftime("%y%m%d%H%M%S")
--- a/app/models/change.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/change.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,30 +1,35 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 class Change < ActiveRecord::Base
   belongs_to :changeset
-  
+
   validates_presence_of :changeset_id, :action, :path
   before_save :init_path
-  
+
   def relative_path
     changeset.repository.relative_path(path)
   end
-  
+
+  def before_validation
+    self.path      = Redmine::CodesetUtil.replace_invalid_utf8(self.path)
+    self.from_path = Redmine::CodesetUtil.replace_invalid_utf8(self.from_path)
+  end
+
   def init_path
     self.path ||= ""
   end
--- a/app/models/changeset.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/changeset.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -27,23 +27,23 @@
                 :description => :long_comments,
                 :datetime => :committed_on,
                 :url => Proc.new {|o| {:controller => 'repositories', :action => 'revision', :id => o.repository.project, :rev => o.identifier}}
-                
+
   acts_as_searchable :columns => 'comments',
                      :include => {:repository => :project},
                      :project_key => "#{Repository.table_name}.project_id",
                      :date_column => 'committed_on'
-                     
+
   acts_as_activity_provider :timestamp => "#{table_name}.committed_on",
                             :author_key => :user_id,
                             :find_options => {:include => [:user, {:repository => :project}]}
-  
+
   validates_presence_of :repository_id, :revision, :committed_on, :commit_date
   validates_uniqueness_of :revision, :scope => :repository_id
   validates_uniqueness_of :scmid, :scope => :repository_id, :allow_nil => true
-  
+
   named_scope :visible, lambda {|*args| { :include => {:repository => :project},
-                                          :conditions => Project.allowed_to_condition(args.first || User.current, :view_changesets) } }
-                                          
+                                          :conditions => Project.allowed_to_condition(args.shift || User.current, :view_changesets, *args) } }
+
   def revision=(r)
     write_attribute :revision, (r.nil? ? nil : r.to_s)
   end
@@ -70,25 +70,26 @@
       identifier
     end
   end
-  
+
   def project
     repository.project
   end
-  
+
   def author
     user || committer.to_s.split('<').first
   end
-  
+
   def before_create
     self.committer = self.class.to_utf8(self.committer, repository.repo_log_encoding)
-    self.comments  = self.class.normalize_comments(self.comments, repository.repo_log_encoding)
+    self.comments  = self.class.normalize_comments(
+                       self.comments, repository.repo_log_encoding)
     self.user = repository.find_committer_user(self.committer)
   end
 
   def after_create
     scan_comment_for_issue_ids
   end
-  
+
   TIMELOG_RE = /
     (
     ((\d+)(h|hours?))((\d+)(m|min)?)?
@@ -100,7 +101,7 @@
     (\d+([\.,]\d+)?)h?
     )
     /x
-  
+
   def scan_comment_for_issue_ids
     return if comments.blank?
     # keywords used to reference issues
@@ -108,15 +109,15 @@
     ref_keywords_any = ref_keywords.delete('*')
     # keywords used to fix issues
     fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip)
-    
+
     kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|")
-    
+
     referenced_issues = []
-    
+
     comments.scan(/([\s\(\[,-]|^)((#{kw_regexp})[\s:]+)?(#\d+(\s+@#{TIMELOG_RE})?([\s,;&]+#\d+(\s+@#{TIMELOG_RE})?)*)(?=[[:punct:]]|\s|<|$)/i) do |match|
       action, refs = match[2], match[3]
       next unless action.present? || ref_keywords_any
-      
+
       refs.scan(/#(\d+)(\s+@#{TIMELOG_RE})?/).each do |m|
         issue, hours = find_referenced_issue_by_id(m[0].to_i), m[2]
         if issue
@@ -126,15 +127,15 @@
         end
       end
     end
-    
+
     referenced_issues.uniq!
     self.issues = referenced_issues unless referenced_issues.empty?
   end
-  
+
   def short_comments
     @short_comments || split_comments.first
   end
-  
+
   def long_comments
     @long_comments || split_comments.last
   end
@@ -146,23 +147,29 @@
       "r#{revision}"
     end
   end
-  
+
   # Returns the previous changeset
   def previous
-    @previous ||= Changeset.find(:first, :conditions => ['id < ? AND repository_id = ?', self.id, self.repository_id], :order => 'id DESC')
+    @previous ||= Changeset.find(:first,
+                    :conditions => ['id < ? AND repository_id = ?',
+                                    self.id, self.repository_id],
+                    :order => 'id DESC')
   end
 
   # Returns the next changeset
   def next
-    @next ||= Changeset.find(:first, :conditions => ['id > ? AND repository_id = ?', self.id, self.repository_id], :order => 'id ASC')
+    @next ||= Changeset.find(:first,
+                    :conditions => ['id > ? AND repository_id = ?',
+                                    self.id, self.repository_id],
+                    :order => 'id ASC')
   end
-  
+
   # Creates a new Change from it's common parameters
   def create_change(change)
-    Change.create(:changeset => self,
-                  :action => change[:action],
-                  :path => change[:path],
-                  :from_path => change[:from_path],
+    Change.create(:changeset     => self,
+                  :action        => change[:action],
+                  :path          => change[:path],
+                  :from_path     => change[:from_path],
                   :from_revision => change[:from_revision])
   end
 
@@ -174,25 +181,27 @@
     return nil if id.blank?
     issue = Issue.find_by_id(id.to_i, :include => :project)
     if issue
-      unless project == issue.project || project.is_ancestor_of?(issue.project) || project.is_descendant_of?(issue.project)
+      unless issue.project &&
+                (project == issue.project || project.is_ancestor_of?(issue.project) ||
+                 project.is_descendant_of?(issue.project))
         issue = nil
       end
     end
     issue
   end
-  
+
   def fix_issue(issue)
     status = IssueStatus.find_by_id(Setting.commit_fix_status_id.to_i)
     if status.nil?
       logger.warn("No status macthes commit_fix_status_id setting (#{Setting.commit_fix_status_id})") if logger
       return issue
     end
-    
+
     # the issue may have been updated by the closure of another one (eg. duplicate)
     issue.reload
     # don't change the status is the issue is closed
     return if issue.status && issue.status.is_closed?
-    
+
     journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, text_tag))
     issue.status = status
     unless Setting.commit_fix_done_ratio.blank?
@@ -205,29 +214,30 @@
     end
     issue
   end
-  
+
   def log_time(issue, hours)
     time_entry = TimeEntry.new(
       :user => user,
       :hours => hours,
       :issue => issue,
       :spent_on => commit_date,
-      :comments => l(:text_time_logged_by_changeset, :value => text_tag, :locale => Setting.default_language)
+      :comments => l(:text_time_logged_by_changeset, :value => text_tag,
+                     :locale => Setting.default_language)
       )
     time_entry.activity = log_time_activity unless log_time_activity.nil?
-    
+
     unless time_entry.save
       logger.warn("TimeEntry could not be created by changeset #{id}: #{time_entry.errors.full_messages}") if logger
     end
     time_entry
   end
-  
+
   def log_time_activity
     if Setting.commit_logtime_activity_id.to_i > 0
       TimeEntryActivity.find_by_id(Setting.commit_logtime_activity_id.to_i)
     end
   end
-  
+
   def split_comments
     comments =~ /\A(.+?)\r?\n(.*)$/m
     @short_comments = $1 || comments
@@ -242,30 +252,39 @@
     Changeset.to_utf8(str.to_s.strip, encoding)
   end
 
-  private
-
   def self.to_utf8(str, encoding)
-    return str if str.blank?
-    unless encoding.blank? || encoding == 'UTF-8'
-      begin
-        str = Iconv.conv('UTF-8', encoding, str)
-      rescue Iconv::Failure
-        # do nothing here
-      end
+    return str if str.nil?
+    str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding)
+    if str.empty?
+      str.force_encoding("UTF-8") if str.respond_to?(:force_encoding)
+      return str
     end
+    enc = encoding.blank? ? "UTF-8" : encoding
     if str.respond_to?(:force_encoding)
-      str.force_encoding('UTF-8')
-      if ! str.valid_encoding?
-        str = str.encode("US-ASCII", :invalid => :replace,
-              :undef => :replace, :replace => '?').encode("UTF-8")
+      if enc.upcase != "UTF-8"
+        str.force_encoding(enc)
+        str = str.encode("UTF-8", :invalid => :replace,
+              :undef => :replace, :replace => '?')
+      else
+        str.force_encoding("UTF-8")
+        if ! str.valid_encoding?
+          str = str.encode("US-ASCII", :invalid => :replace,
+                :undef => :replace, :replace => '?').encode("UTF-8")
+        end
       end
     else
-      # removes invalid UTF8 sequences
+      ic = Iconv.new('UTF-8', enc)
+      txtar = ""
       begin
-        str = Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + '  ')[0..-3]
-      rescue Iconv::InvalidEncoding
-        # "UTF-8//IGNORE" is not supported on some OS
+        txtar += ic.iconv(str)
+      rescue Iconv::IllegalSequence
+        txtar += $!.success
+        str = '?' + $!.failed[1,$!.failed.length]
+        retry
+      rescue
+        txtar += $!.success
       end
+      str = txtar
     end
     str
   end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/models/comment_observer.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,24 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
+class CommentObserver < ActiveRecord::Observer
+  def after_create(comment)
+    if comment.commented.is_a?(News) && Setting.notified_events.include?('news_comment_added')
+      Mailer.deliver_news_comment_added(comment)
+    end
+  end
+end
--- a/app/models/custom_field.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/custom_field.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -48,6 +48,35 @@
     errors.add(:default_value, :invalid) unless v.valid?
   end
   
+  def possible_values_options(obj=nil)
+    case field_format
+    when 'user', 'version'
+      if obj.respond_to?(:project) && obj.project
+        case field_format
+        when 'user'
+          obj.project.users.sort.collect {|u| [u.to_s, u.id.to_s]}
+        when 'version'
+          obj.project.versions.sort.collect {|u| [u.to_s, u.id.to_s]}
+        end
+      elsif obj.is_a?(Array)
+        obj.collect {|o| possible_values_options(o)}.inject {|memo, v| memo & v}
+      else
+        []
+      end
+    else
+      read_attribute :possible_values
+    end
+  end
+  
+  def possible_values(obj=nil)
+    case field_format
+    when 'user', 'version'
+      possible_values_options(obj).collect(&:last)
+    else
+      read_attribute :possible_values
+    end
+  end
+  
   # Makes possible_values accept a multiline string
   def possible_values=(arg)
     if arg.is_a?(Array)
@@ -71,6 +100,8 @@
         casted = value.to_i
       when 'float'
         casted = value.to_f
+      when 'user', 'version'
+        casted = (value.blank? ? nil : field_format.classify.constantize.find_by_id(value.to_i))
       end
     end
     casted
--- a/app/models/document.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/document.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# RedMine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -25,23 +25,23 @@
                 :author => Proc.new {|o| (a = o.attachments.find(:first, :order => "#{Attachment.table_name}.created_on ASC")) ? a.author : nil },
                 :url => Proc.new {|o| {:controller => 'documents', :action => 'show', :id => o.id}}
   acts_as_activity_provider :find_options => {:include => :project}
-  
+
   validates_presence_of :project, :title, :category
   validates_length_of :title, :maximum => 60
-  
+
   named_scope :visible, lambda {|*args| { :include => :project,
-                                          :conditions => Project.allowed_to_condition(args.first || User.current, :view_documents) } }
-  
+                                          :conditions => Project.allowed_to_condition(args.shift || User.current, :view_documents, *args) } }
+
   def visible?(user=User.current)
     !user.nil? && user.allowed_to?(:view_documents, project)
   end
-  
+
   def after_initialize
     if new_record?
       self.category ||= DocumentCategory.default
     end
   end
-  
+
   def updated_on
     unless @updated_on
       a = attachments.find(:first, :order => 'created_on DESC')
--- a/app/models/document_category.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/document_category.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
--- a/app/models/document_category_custom_field.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/document_category_custom_field.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,4 +20,3 @@
     :enumeration_doc_categories
   end
 end
-
--- a/app/models/document_observer.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/document_observer.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
--- a/app/models/enabled_module.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/enabled_module.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,30 +1,30 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 class EnabledModule < ActiveRecord::Base
   belongs_to :project
-  
+
   validates_presence_of :name
   validates_uniqueness_of :name, :scope => :project_id
-  
+
   after_create :module_enabled
-  
+
   private
-  
+
   # after_create callback used to do things when a module is enabled
   def module_enabled
     case name
--- a/app/models/issue.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/issue.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -5,19 +5,19 @@
 # modify it under the terms of the 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.
 
 class Issue < ActiveRecord::Base
   include Redmine::SafeAttributes
-  
+
   belongs_to :project
   belongs_to :tracker
   belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id'
@@ -30,10 +30,10 @@
   has_many :journals, :as => :journalized, :dependent => :destroy
   has_many :time_entries, :dependent => :delete_all
   has_and_belongs_to_many :changesets, :order => "#{Changeset.table_name}.committed_on ASC, #{Changeset.table_name}.id ASC"
-  
+
   has_many :relations_from, :class_name => 'IssueRelation', :foreign_key => 'issue_from_id', :dependent => :delete_all
   has_many :relations_to, :class_name => 'IssueRelation', :foreign_key => 'issue_to_id', :dependent => :delete_all
-  
+
   acts_as_nested_set :scope => 'root_id', :dependent => :destroy
   acts_as_attachable :after_remove => :attachment_removed
   acts_as_customizable
@@ -45,7 +45,7 @@
   acts_as_event :title => Proc.new {|o| "#{o.tracker.name} ##{o.id} (#{o.status}): #{o.subject}"},
                 :url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o.id}},
                 :type => Proc.new {|o| 'issue' + (o.closed? ? ' closed' : '') }
-  
+
   acts_as_activity_provider :find_options => {:include => [:project, :author, :tracker]},
                             :author_key => :author_id
 
@@ -60,19 +60,14 @@
   validates_numericality_of :estimated_hours, :allow_nil => true
 
   named_scope :visible, lambda {|*args| { :include => :project,
-                                          :conditions => Project.allowed_to_condition(args.first || User.current, :view_issues) } }
-  
+                                          :conditions => Issue.visible_condition(args.shift || User.current, *args) } }
+
   named_scope :open, :conditions => ["#{IssueStatus.table_name}.is_closed = ?", false], :include => :status
 
   named_scope :recently_updated, :order => "#{Issue.table_name}.updated_on DESC"
   named_scope :with_limit, lambda { |limit| { :limit => limit} }
   named_scope :on_active_project, :include => [:status, :project, :tracker],
                                   :conditions => ["#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"]
-  named_scope :for_gantt, lambda {
-    {
-      :include => [:tracker, :status, :assigned_to, :priority, :project, :fixed_version]
-    }
-  }
 
   named_scope :without_version, lambda {
     {
@@ -91,11 +86,38 @@
   after_save :reschedule_following_issues, :update_nested_set_attributes, :update_parent_attributes, :create_journal
   after_destroy :update_parent_attributes
 
+  # Returns a SQL conditions string used to find all issues visible by the specified user
+  def self.visible_condition(user, options={})
+    Project.allowed_to_condition(user, :view_issues, options) do |role, user|
+      case role.issues_visibility
+      when 'all'
+        nil
+      when 'default'
+        "(#{table_name}.is_private = #{connection.quoted_false} OR #{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id = #{user.id})"
+      when 'own'
+        "(#{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id = #{user.id})"
+      else
+        '1=0'
+      end
+    end
+  end
+
   # Returns true if usr or current user is allowed to view the issue
   def visible?(usr=nil)
-    (usr || User.current).allowed_to?(:view_issues, self.project)
+    (usr || User.current).allowed_to?(:view_issues, self.project) do |role, user|
+      case role.issues_visibility
+      when 'all'
+        true
+      when 'default'
+        !self.is_private? || self.author == user || self.assigned_to == user
+      when 'own'
+        self.author == user || self.assigned_to == user
+      else
+        false
+      end
+    end
   end
-  
+
   def after_initialize
     if new_record?
       # set default values for new records only
@@ -103,12 +125,12 @@
       self.priority ||= IssuePriority.default
     end
   end
-  
+
   # Overrides Redmine::Acts::Customizable::InstanceMethods#available_custom_fields
   def available_custom_fields
-    (project && tracker) ? project.all_issue_custom_fields.select {|c| tracker.custom_fields.include? c } : []
+    (project && tracker) ? (project.all_issue_custom_fields & tracker.custom_fields.all) : []
   end
-  
+
   def copy_from(arg)
     issue = arg.is_a?(Issue) ? arg : Issue.visible.find(arg)
     self.attributes = issue.attributes.dup.except("id", "root_id", "parent_id", "lft", "rgt", "created_on", "updated_on")
@@ -116,7 +138,7 @@
     self.status = issue.status
     self
   end
-  
+
   # Moves/copies an issue to a new project and tracker
   # Returns the moved/copied issue on success, false on failure
   def move_to_project(*args)
@@ -124,11 +146,11 @@
       move_to_project_without_transaction(*args) || raise(ActiveRecord::Rollback)
     end || false
   end
-  
+
   def move_to_project_without_transaction(new_project, new_tracker = nil, options = {})
     options ||= {}
     issue = options[:copy] ? self.class.new.copy_from(self) : self
-    
+
     if new_project && issue.project_id != new_project.id
       # delete issue relations
       unless Setting.cross_project_issue_relations?
@@ -153,6 +175,7 @@
       issue.reset_custom_values!
     end
     if options[:copy]
+      issue.author = User.current
       issue.custom_field_values = self.custom_field_values.inject({}) {|h,v| h[v.custom_field_id] = v.value; h}
       issue.status = if options[:attributes] && options[:attributes][:status_id]
                        IssueStatus.find_by_id(options[:attributes][:status_id])
@@ -165,10 +188,16 @@
       issue.attributes = options[:attributes]
     end
     if issue.save
-      unless options[:copy]
+      if options[:copy]
+        if current_journal && current_journal.notes.present?
+          issue.init_journal(current_journal.user, current_journal.notes)
+          issue.current_journal.notify = false
+          issue.save
+        end
+      else
         # Manually update project_id on related time entries
         TimeEntry.update_all("project_id = #{new_project.id}", {:issue_id => id})
-        
+
         issue.children.each do |child|
           unless child.move_to_project_without_transaction(new_project)
             # Move failed and transaction was rollback'd
@@ -186,7 +215,7 @@
     self.status = nil
     write_attribute(:status_id, sid)
   end
-  
+
   def priority_id=(pid)
     self.priority = nil
     write_attribute(:priority_id, pid)
@@ -198,7 +227,7 @@
     @custom_field_values = nil
     result
   end
-  
+
   # Overrides attributes= so that tracker_id gets assigned first
   def attributes_with_tracker_first=(new_attributes, *args)
     return if new_attributes.nil?
@@ -210,11 +239,11 @@
   end
   # Do not redefine alias chain on reload (see #4838)
   alias_method_chain(:attributes=, :tracker_first) unless method_defined?(:attributes_without_tracker_first=)
-  
+
   def estimated_hours=(h)
     write_attribute :estimated_hours, (h.is_a?(String) ? h.to_hours : h)
   end
-  
+
   safe_attributes 'tracker_id',
     'status_id',
     'parent_issue_id',
@@ -232,13 +261,19 @@
     'custom_fields',
     'lock_version',
     :if => lambda {|issue, user| issue.new_record? || user.allowed_to?(:edit_issues, issue.project) }
-  
+
   safe_attributes 'status_id',
     'assigned_to_id',
     'fixed_version_id',
     'done_ratio',
     :if => lambda {|issue, user| issue.new_statuses_allowed_to(user).any? }
 
+  safe_attributes 'is_private',
+    :if => lambda {|issue, user|
+      user.allowed_to?(:set_issues_private, issue.project) ||
+        (issue.author == user && user.allowed_to?(:set_own_issues_private, issue.project))
+    }
+
   # Safely sets attributes
   # Should be called from controllers instead of #attributes=
   # attr_accessible is too rough because we still want things like
@@ -246,26 +281,26 @@
   # TODO: move workflow/permission checks from controllers to here
   def safe_attributes=(attrs, user=User.current)
     return unless attrs.is_a?(Hash)
-    
+
     # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed
     attrs = delete_unsafe_attributes(attrs, user)
-    return if attrs.empty? 
-    
+    return if attrs.empty?
+
     # Tracker must be set before since new_statuses_allowed_to depends on it.
     if t = attrs.delete('tracker_id')
       self.tracker_id = t
     end
-    
+
     if attrs['status_id']
       unless new_statuses_allowed_to(user).collect(&:id).include?(attrs['status_id'].to_i)
         attrs.delete('status_id')
       end
     end
-    
+
     unless leaf?
       attrs.reject! {|k,v| %w(priority_id done_ratio start_date due_date estimated_hours).include?(k)}
     end
-    
+
     if attrs.has_key?('parent_issue_id')
       if !user.allowed_to?(:manage_subtasks, project)
         attrs.delete('parent_issue_id')
@@ -273,10 +308,10 @@
         attrs.delete('parent_issue_id') unless Issue.visible(user).exists?(attrs['parent_issue_id'].to_i)
       end
     end
-    
+
     self.attributes = attrs
   end
-  
+
   def done_ratio
     if Issue.use_status_for_done_ratio? && status && status.default_done_ratio
       status.default_done_ratio
@@ -292,20 +327,20 @@
   def self.use_field_for_done_ratio?
     Setting.issue_done_ratio == 'issue_field'
   end
-  
+
   def validate
     if self.due_date.nil? && @attributes['due_date'] && !@attributes['due_date'].empty?
       errors.add :due_date, :not_a_date
     end
-    
+
     if self.due_date and self.start_date and self.due_date < self.start_date
       errors.add :due_date, :greater_than_start_date
     end
-    
+
     if start_date && soonest_start && start_date < soonest_start
       errors.add :start_date, :invalid
     end
-    
+
     if fixed_version
       if !assignable_versions.include?(fixed_version)
         errors.add :fixed_version_id, :inclusion
@@ -313,14 +348,14 @@
         errors.add_to_base I18n.t(:error_can_not_reopen_issue_on_closed_version)
       end
     end
-    
+
     # Checks that the issue can not be added/moved to a disabled tracker
     if project && (tracker_id_changed? || project_id_changed?)
       unless project.trackers.include?(tracker)
         errors.add :tracker_id, :inclusion
       end
     end
-    
+
     # Checks parent issue assignment
     if @parent_issue
       if @parent_issue.project_id != project_id
@@ -337,7 +372,7 @@
       end
     end
   end
-  
+
   # Set the done_ratio using the status if that setting is set.  This will keep the done_ratios
   # even if the user turns off the setting later
   def update_done_ratio_from_issue_status
@@ -345,7 +380,7 @@
       self.done_ratio = status.default_done_ratio
     end
   end
-  
+
   def init_journal(user, notes = "")
     @current_journal ||= Journal.new(:journalized => self, :user => user, :notes => notes)
     @issue_before_change = self.clone
@@ -356,12 +391,12 @@
     updated_on_will_change!
     @current_journal
   end
-  
+
   # Return true if the issue is closed, otherwise false
   def closed?
     self.status.is_closed?
   end
-  
+
   # Return true if the issue is being reopened
   def reopened?
     if !new_record? && status_id_changed?
@@ -385,7 +420,7 @@
     end
     false
   end
-  
+
   # Returns true if the issue is overdue
   def overdue?
     !due_date.nil? && (due_date < Date.today) && !status.is_closed?
@@ -402,24 +437,24 @@
   def children?
     !leaf?
   end
-  
+
   # Users the issue can be assigned to
   def assignable_users
     users = project.assignable_users
     users << author if author
     users.uniq.sort
   end
-  
+
   # Versions that the issue can be assigned to
   def assignable_versions
     @assignable_versions ||= (project.shared_versions.open + [Version.find_by_id(fixed_version_id_was)]).compact.uniq.sort
   end
-  
+
   # Returns true if this issue is blocked by another issue that is still open
   def blocked?
     !relations_to.detect {|ir| ir.relation_type == 'blocks' && !ir.issue_from.closed?}.nil?
   end
-  
+
   # Returns an array of status that user is able to apply
   def new_statuses_allowed_to(user, include_default=false)
     statuses = status.find_new_statuses_allowed_to(
@@ -433,7 +468,7 @@
     statuses = statuses.uniq.sort
     blocked? ? statuses.reject {|s| s.is_closed?} : statuses
   end
-  
+
   # Returns the mail adresses of users that should be notified
   def recipients
     notified = project.notified_users
@@ -446,7 +481,7 @@
     notified.reject! {|user| !visible?(user)}
     notified.collect(&:mail)
   end
-  
+
   # Returns the total number of hours spent on this issue and its descendants
   #
   # Example:
@@ -455,50 +490,50 @@
   def spent_hours
     @spent_hours ||= self_and_descendants.sum("#{TimeEntry.table_name}.hours", :include => :time_entries).to_f || 0.0
   end
-  
+
   def relations
     (relations_from + relations_to).sort
   end
-  
-  def all_dependent_issues(except=nil)
-    except ||= self
+
+  def all_dependent_issues(except=[])
+    except << self
     dependencies = []
     relations_from.each do |relation|
-      if relation.issue_to && relation.issue_to != except
+      if relation.issue_to && !except.include?(relation.issue_to)
         dependencies << relation.issue_to
         dependencies += relation.issue_to.all_dependent_issues(except)
       end
     end
     dependencies
   end
-  
+
   # Returns an array of issues that duplicate this one
   def duplicates
     relations_to.select {|r| r.relation_type == IssueRelation::TYPE_DUPLICATES}.collect {|r| r.issue_from}
   end
-  
+
   # Returns the due date or the target due date if any
   # Used on gantt chart
   def due_before
     due_date || (fixed_version ? fixed_version.effective_date : nil)
   end
-  
+
   # Returns the time scheduled for this issue.
-  # 
+  #
   # Example:
   #   Start Date: 2/26/09, End Date: 3/04/09
   #   duration => 6
   def duration
     (start_date && due_date) ? due_date - start_date : 0
   end
-  
+
   def soonest_start
     @soonest_start ||= (
         relations_to.collect{|relation| relation.successor_soonest_start} +
         ancestors.collect(&:soonest_start)
       ).compact.max
   end
-  
+
   def reschedule_after(date)
     return if date.nil?
     if leaf?
@@ -512,7 +547,7 @@
       end
     end
   end
-  
+
   def <=>(issue)
     if issue.nil?
       -1
@@ -522,17 +557,20 @@
       (lft || 0) <=> (issue.lft || 0)
     end
   end
-  
+
   def to_s
     "#{tracker} ##{id}: #{subject}"
   end
-  
+
   # Returns a string of css classes that apply to the issue
   def css_classes
     s = "issue status-#{status.position} "
     s << "priority-#{priority.position}"
     s << ' closed' if closed?
     s << ' overdue' if overdue?
+    s << ' child' if child?
+    s << ' parent' unless leaf?
+    s << ' private' if is_private?
     s << ' created-by-me' if User.current.logged? && author_id == User.current.id
     s << ' assigned-to-me' if User.current.logged? && assigned_to_id == User.current.id
     s
@@ -542,7 +580,7 @@
   # Returns false if save fails
   def save_issue_with_child_records(params, existing_time_entry=nil)
     Issue.transaction do
-      if params[:time_entry] && params[:time_entry][:hours].present? && User.current.allowed_to?(:log_time, project)
+      if params[:time_entry] && (params[:time_entry][:hours].present? || params[:time_entry][:comments].present?) && User.current.allowed_to?(:log_time, project)
         @time_entry = existing_time_entry || TimeEntry.new
         @time_entry.project = project
         @time_entry.issue = self
@@ -551,10 +589,10 @@
         @time_entry.attributes = params[:time_entry]
         self.time_entries << @time_entry
       end
-  
+
       if valid?
         attachments = Attachment.attach_files(self, params[:attachments])
-  
+
         attachments[:files].each {|a| @current_journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)}
         # TODO: Rename hook
         Redmine::Hook.call_hook(:controller_issues_edit_before_save, { :params => params, :issue => self, :time_entry => @time_entry, :journal => @current_journal})
@@ -579,7 +617,7 @@
     # Update issues assigned to the version
     update_versions(["#{Issue.table_name}.fixed_version_id = ?", version.id])
   end
-  
+
   # Unassigns issues from versions that are no longer shared
   # after +project+ was moved
   def self.update_versions_from_hierarchy_change(project)
@@ -597,7 +635,7 @@
       nil
     end
   end
-  
+
   def parent_issue_id
     if instance_variable_defined? :@parent_issue
       @parent_issue.nil? ? nil : @parent_issue.id
@@ -646,17 +684,19 @@
   def self.by_subproject(project)
     ActiveRecord::Base.connection.select_all("select    s.id as status_id, 
                                                 s.is_closed as closed, 
-                                                i.project_id as project_id,
-                                                count(i.id) as total 
+                                                #{Issue.table_name}.project_id as project_id,
+                                                count(#{Issue.table_name}.id) as total 
                                               from 
-                                                #{Issue.table_name} i, #{IssueStatus.table_name} s
+                                                #{Issue.table_name}, #{Project.table_name}, #{IssueStatus.table_name} s
                                               where 
-                                                i.status_id=s.id 
-                                                and i.project_id IN (#{project.descendants.active.collect{|p| p.id}.join(',')})
-                                              group by s.id, s.is_closed, i.project_id") if project.descendants.active.any?
+                                                #{Issue.table_name}.status_id=s.id
+                                                and #{Issue.table_name}.project_id = #{Project.table_name}.id
+                                                and #{visible_condition(User.current, :project => project, :with_subprojects => true)}
+                                                and #{Issue.table_name}.project_id <> #{project.id}
+                                              group by s.id, s.is_closed, #{Issue.table_name}.project_id") if project.descendants.active.any?
   end
   # End ReportsController extraction
-  
+
   # Returns an array of projects that current user can move issues to
   def self.allowed_target_projects_on_move
     projects = []
@@ -672,9 +712,9 @@
     end
     projects
   end
-   
+
   private
-  
+
   def update_nested_set_attributes
     if root_id.nil?
       # issue was just created
@@ -721,7 +761,7 @@
     end
     remove_instance_variable(:@parent_issue) if instance_variable_defined?(:@parent_issue)
   end
-  
+
   def update_parent_attributes
     recalculate_attributes_for(parent_id) if parent_id
   end
@@ -732,14 +772,14 @@
       if priority_position = p.children.maximum("#{IssuePriority.table_name}.position", :include => :priority)
         p.priority = IssuePriority.find_by_position(priority_position)
       end
-      
+
       # start/due dates = lowest/highest dates of children
       p.start_date = p.children.minimum(:start_date)
       p.due_date = p.children.maximum(:due_date)
       if p.start_date && p.due_date && p.due_date < p.start_date
         p.start_date, p.due_date = p.due_date, p.start_date
       end
-      
+
       # done ratio = weighted average ratio of leaves
       unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio
         leaves_count = p.leaves.count
@@ -753,16 +793,16 @@
           p.done_ratio = progress.round
         end
       end
-      
+
       # estimate = sum of leaves estimates
       p.estimated_hours = p.leaves.sum(:estimated_hours).to_f
       p.estimated_hours = nil if p.estimated_hours == 0.0
-      
+
       # ancestors will be recursively updated
       p.save(false)
     end
   end
-  
+
   # Update issues so their versions are not pointing to a
   # fixed_version that is not shared with the issue's project
   def self.update_versions(conditions=nil)
@@ -782,7 +822,7 @@
       end
     end
   end
-  
+
   # Callback on attachment deletion
   def attachment_removed(obj)
     journal = init_journal(User.current)
@@ -791,7 +831,7 @@
                                          :old_value => obj.filename)
     journal.save
   end
-  
+
   # Default assignment based on category
   def default_assign
     if assigned_to.nil? && category && category.assigned_to
@@ -824,7 +864,7 @@
       end
     end
   end
-  
+
   # Saves the changes in a Journal
   # Called after_save
   def create_journal
@@ -840,11 +880,11 @@
       custom_values.each {|c|
         next if (@custom_values_before_change[c.custom_field_id]==c.value ||
                   (@custom_values_before_change[c.custom_field_id].blank? && c.value.blank?))
-        @current_journal.details << JournalDetail.new(:property => 'cf', 
+        @current_journal.details << JournalDetail.new(:property => 'cf',
                                                       :prop_key => c.custom_field_id,
                                                       :old_value => @custom_values_before_change[c.custom_field_id],
                                                       :value => c.value)
-      }      
+      }
       @current_journal.save
       # reset current journal
       init_journal @current_journal.user, @current_journal.notes
@@ -863,20 +903,19 @@
     select_field = options.delete(:field)
     joins = options.delete(:joins)
 
-    where = "i.#{select_field}=j.id"
-    
+    where = "#{Issue.table_name}.#{select_field}=j.id"
+
     ActiveRecord::Base.connection.select_all("select    s.id as status_id, 
                                                 s.is_closed as closed, 
                                                 j.id as #{select_field},
-                                                count(i.id) as total 
+                                                count(#{Issue.table_name}.id) as total 
                                               from 
-                                                  #{Issue.table_name} i, #{IssueStatus.table_name} s, #{joins} j
+                                                  #{Issue.table_name}, #{Project.table_name}, #{IssueStatus.table_name} s, #{joins} j
                                               where 
-                                                i.status_id=s.id 
+                                                #{Issue.table_name}.status_id=s.id 
                                                 and #{where}
-                                                and i.project_id=#{project.id}
+                                                and #{Issue.table_name}.project_id=#{Project.table_name}.id
+                                                and #{visible_condition(User.current, :project => project)}
                                               group by s.id, s.is_closed, j.id")
   end
-  
-
 end
--- a/app/models/journal.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/journal.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -32,12 +32,16 @@
                 :url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o.issue.id, :anchor => "change-#{o.id}"}}
 
   acts_as_activity_provider :type => 'issues',
-                            :permission => :view_issues,
                             :author_key => :user_id,
                             :find_options => {:include => [{:issue => :project}, :details, :user],
                                               :conditions => "#{Journal.table_name}.journalized_type = 'Issue' AND" +
                                                              " (#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> '')"}
   
+  named_scope :visible, lambda {|*args| {
+    :include => {:issue => :project},
+    :conditions => Issue.visible_condition(args.shift || User.current, *args)
+  }}
+  
   def save(*args)
     # Do not save an empty journal
     (details.empty? && notes.blank?) ? false : super
@@ -73,4 +77,12 @@
     s << ' has-details' unless details.blank?
     s
   end
+  
+  def notify?
+    @notify != false
+  end
+  
+  def notify=(arg)
+    @notify = arg
+  end
 end
--- a/app/models/journal_detail.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/journal_detail.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -17,4 +17,22 @@
 
 class JournalDetail < ActiveRecord::Base
   belongs_to :journal
+  before_save :normalize_values
+  
+  private
+  
+  def normalize_values
+    self.value = normalize(value)
+    self.old_value = normalize(old_value)
+  end
+  
+  def normalize(v)
+    if v == true
+      "1"
+    elsif v == false
+      "0"
+    else
+      v
+    end
+  end
 end
--- a/app/models/journal_observer.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/journal_observer.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -17,10 +17,12 @@
 
 class JournalObserver < ActiveRecord::Observer
   def after_create(journal)
-    if Setting.notified_events.include?('issue_updated') ||
-        (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) ||
-        (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) ||
-        (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
+    if journal.notify? &&
+        (Setting.notified_events.include?('issue_updated') ||
+          (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) ||
+          (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) ||
+          (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
+        )
       Mailer.deliver_issue_edit(journal)
     end
   end
--- a/app/models/mail_handler.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/mail_handler.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,25 +21,25 @@
 
   class UnauthorizedAction < StandardError; end
   class MissingInformation < StandardError; end
-  
+
   attr_reader :email, :user
 
   def self.receive(email, options={})
     @@handler_options = options.dup
-    
+
     @@handler_options[:issue] ||= {}
-    
+
     @@handler_options[:allow_override] = @@handler_options[:allow_override].split(',').collect(&:strip) if @@handler_options[:allow_override].is_a?(String)
     @@handler_options[:allow_override] ||= []
     # Project needs to be overridable if not specified
     @@handler_options[:allow_override] << 'project' unless @@handler_options[:issue].has_key?(:project)
     # Status overridable by default
-    @@handler_options[:allow_override] << 'status' unless @@handler_options[:issue].has_key?(:status)    
-    
+    @@handler_options[:allow_override] << 'status' unless @@handler_options[:issue].has_key?(:status)
+
     @@handler_options[:no_permission_check] = (@@handler_options[:no_permission_check].to_s == '1' ? true : false)
     super email
   end
-  
+
   # Processes incoming emails
   # Returns the created object (eg. an issue, a message) or false
   def receive(email)
@@ -78,13 +78,13 @@
     User.current = @user
     dispatch
   end
-  
+
   private
 
   MESSAGE_ID_RE = %r{^<redmine\.([a-z0-9_]+)\-(\d+)\.\d+@}
   ISSUE_REPLY_SUBJECT_RE = %r{\[[^\]]*#(\d+)\]}
   MESSAGE_REPLY_SUBJECT_RE = %r{\[[^\]]*msg(\d+)\]}
-  
+
   def dispatch
     headers = [email.in_reply_to, email.references].flatten.compact
     if headers.detect {|h| h.to_s =~ MESSAGE_ID_RE}
@@ -117,7 +117,7 @@
   def dispatch_to_default
     receive_issue
   end
-  
+
   # Creates a new issue
   def receive_issue
     project = target_project
@@ -134,7 +134,7 @@
       issue.subject = '(no subject)'
     end
     issue.description = cleaned_up_text_body
-    
+
     # add To and Cc as watchers before saving so the watchers can reply to Redmine
     add_watchers(issue)
     issue.save!
@@ -142,7 +142,7 @@
     logger.info "MailHandler: issue ##{issue.id} created by #{user}" if logger && logger.info
     issue
   end
-  
+
   # Adds a note to an existing issue
   def receive_issue_reply(issue_id)
     issue = Issue.find_by_id(issue_id)
@@ -151,19 +151,20 @@
     unless @@handler_options[:no_permission_check]
       raise UnauthorizedAction unless user.allowed_to?(:add_issue_notes, issue.project) || user.allowed_to?(:edit_issues, issue.project)
     end
-    
+
     # ignore CLI-supplied defaults for new issues
     @@handler_options[:issue].clear
-    
-    journal = issue.init_journal(user, cleaned_up_text_body)
+
+    journal = issue.init_journal(user)
     issue.safe_attributes = issue_attributes_from_keywords(issue)
     issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)}
+    journal.notes = cleaned_up_text_body
     add_attachments(issue)
     issue.save!
     logger.info "MailHandler: issue ##{issue.id} updated by #{user}" if logger && logger.info
     journal
   end
-  
+
   # Reply will be added to the issue
   def receive_journal_reply(journal_id)
     journal = Journal.find_by_id(journal_id)
@@ -171,17 +172,17 @@
       receive_issue_reply(journal.journalized_id)
     end
   end
-  
+
   # Receives a reply to a forum message
   def receive_message_reply(message_id)
     message = Message.find_by_id(message_id)
     if message
       message = message.root
-      
+
       unless @@handler_options[:no_permission_check]
         raise UnauthorizedAction unless user.allowed_to?(:add_messages, message.project)
       end
-      
+
       if !message.locked?
         reply = Message.new(:subject => email.subject.gsub(%r{^.*msg\d+\]}, '').strip,
                             :content => cleaned_up_text_body)
@@ -195,7 +196,7 @@
       end
     end
   end
-  
+
   def add_attachments(obj)
     if email.has_attachments?
       email.attachments.each do |attachment|
@@ -206,7 +207,7 @@
       end
     end
   end
-  
+
   # Adds To and Cc as watchers of the given object if the sender has the
   # appropriate permission
   def add_watchers(obj)
@@ -218,7 +219,7 @@
       end
     end
   end
-  
+
   def get_keyword(attr, options={})
     @keywords ||= {}
     if @keywords.has_key?(attr)
@@ -233,7 +234,7 @@
       end
     end
   end
-  
+
   # Destructively extracts the value for +attr+ in +text+
   # Returns nil if no matching keyword found
   def extract_keyword!(text, attr, format=nil)
@@ -257,12 +258,12 @@
     raise MissingInformation.new('Unable to determine target project') if target.nil?
     target
   end
-  
+
   # Returns a Hash of issue attributes extracted from keywords in the email body
   def issue_attributes_from_keywords(issue)
     assigned_to = (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k)
     assigned_to = nil if assigned_to && !issue.assignable_users.include?(assigned_to)
-    
+
     attrs = {
       'tracker_id' => (k = get_keyword(:tracker)) && issue.project.trackers.find_by_name(k).try(:id),
       'status_id' =>  (k = get_keyword(:status)) && IssueStatus.find_by_name(k).try(:id),
@@ -275,16 +276,16 @@
       'estimated_hours' => get_keyword(:estimated_hours, :override => true),
       'done_ratio' => get_keyword(:done_ratio, :override => true, :format => '(\d|10)?0')
     }.delete_if {|k, v| v.blank? }
-    
+
     if issue.new_record? && attrs['tracker_id'].nil?
       attrs['tracker_id'] = issue.project.trackers.find(:first).try(:id)
     end
-    
+
     attrs
   end
-  
+
   # Returns a Hash of issue custom field values extracted from keywords in the email body
-  def custom_field_values_from_keywords(customized)  
+  def custom_field_values_from_keywords(customized)
     customized.custom_field_values.inject({}) do |h, v|
       if value = get_keyword(v.custom_field.name, :override => true)
         h[v.custom_field.id.to_s] = value
@@ -292,7 +293,7 @@
       h
     end
   end
-  
+
   # Returns the text/plain part of the email
   # If not found (eg. HTML-only email), returns the body with tags removed
   def plain_text_body
@@ -313,7 +314,7 @@
     @plain_text_body.strip!
     @plain_text_body
   end
-  
+
   def cleaned_up_text_body
     cleanup_body(plain_text_body)
   end
@@ -321,19 +322,19 @@
   def self.full_sanitizer
     @full_sanitizer ||= HTML::FullSanitizer.new
   end
-  
+
   # Creates a user account for the +email+ sender
   def self.create_user_from_email(email)
     addr = email.from_addrs.to_a.first
     if addr && !addr.spec.blank?
       user = User.new
       user.mail = addr.spec
-      
+
       names = addr.name.blank? ? addr.spec.gsub(/@.*$/, '').split('.') : addr.name.split
       user.firstname = names.shift
       user.lastname = names.join(' ')
       user.lastname = '-' if user.lastname.blank?
-      
+
       user.login = user.mail
       user.password = ActiveSupport::SecureRandom.hex(5)
       user.language = Setting.default_language
@@ -342,7 +343,7 @@
   end
 
   private
-  
+
   # Removes the email body of text after the truncation configurations.
   def cleanup_body(body)
     delimiters = Setting.mail_handler_body_delimiters.to_s.split(/[\r\n]+/).reject(&:blank?).map {|s| Regexp.escape(s)}
--- a/app/models/mailer.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/mailer.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -31,7 +31,7 @@
     h = h.to_s.gsub(%r{\/.*$}, '') unless Redmine::Utils.relative_url_root.blank?
     { :host => h, :protocol => Setting.protocol }
   end
-  
+
   # Builds a tmail object used to email recipients of the added issue.
   #
   # Example:
@@ -85,7 +85,7 @@
     subject l(:mail_subject_reminder, :count => issues.size, :days => days)
     body :issues => issues,
          :days => days,
-         :issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort_key => 'due_date', :sort_order => 'asc')
+         :issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort => 'due_date:asc')
     render_multipart('reminder', body)
   end
 
@@ -114,11 +114,11 @@
     added_to_url = ''
     case container.class.name
     when 'Project'
-      added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container)
+      added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container)
       added_to = "#{l(:label_project)}: #{container}"
       recipients container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect  {|u| u.mail}
     when 'Version'
-      added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container.project_id)
+      added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project)
       added_to = "#{l(:label_version)}: #{container.name}"
       recipients container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect  {|u| u.mail}
     when 'Document'
@@ -133,7 +133,7 @@
          :added_to_url => added_to_url
     render_multipart('attachments_added', body)
   end
-  
+
   # Builds a tmail object used to email recipients of a news' project when a news item is added.
   #
   # Example:
@@ -149,7 +149,25 @@
     render_multipart('news_added', body)
   end
 
-  # Builds a tmail object used to email the recipients of the specified message that was posted. 
+  # Builds a tmail object used to email recipients of a news' project when a news comment is added.
+  #
+  # Example:
+  #   news_comment_added(comment) => tmail object
+  #   Mailer.news_comment_added(comment) => sends an email to the news' project recipients
+  def news_comment_added(comment)
+    news = comment.commented
+    redmine_headers 'Project' => news.project.identifier
+    message_id comment
+    recipients news.recipients
+    cc news.watcher_recipients
+    subject "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}"
+    body :news => news,
+         :comment => comment,
+         :news_url => url_for(:controller => 'news', :action => 'show', :id => news)
+    render_multipart('news_comment_added', body)
+  end
+
+  # Builds a tmail object used to email the recipients of the specified message that was posted.
   #
   # Example:
   #   message_posted(message) => tmail object
@@ -166,8 +184,8 @@
          :message_url => url_for(message.event_url)
     render_multipart('message_posted', body)
   end
-  
-  # Builds a tmail object used to email the recipients of a project of the specified wiki content was added. 
+
+  # Builds a tmail object used to email the recipients of a project of the specified wiki content was added.
   #
   # Example:
   #   wiki_content_added(wiki_content) => tmail object
@@ -183,8 +201,8 @@
          :wiki_content_url => url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title)
     render_multipart('wiki_content_added', body)
   end
-  
-  # Builds a tmail object used to email the recipients of a project of the specified wiki content was updated. 
+
+  # Builds a tmail object used to email the recipients of a project of the specified wiki content was updated.
   #
   # Example:
   #   wiki_content_updated(wiki_content) => tmail object
@@ -278,7 +296,7 @@
     return false if (recipients.nil? || recipients.empty?) &&
                     (cc.nil? || cc.empty?) &&
                     (bcc.nil? || bcc.empty?)
-                    
+
     # Set Message-Id and References
     if @message_id_object
       mail.message_id = self.class.message_id_for(@message_id_object)
@@ -286,7 +304,7 @@
     if @references_objects
       mail.references = @references_objects.collect {|o| self.class.message_id_for(o)}
     end
-    
+
     # Log errors when raise_delivery_errors is set to false, Rails does not
     raise_errors = self.class.raise_delivery_errors
     self.class.raise_delivery_errors = true
@@ -326,10 +344,10 @@
                                           :conditions => s.conditions
                                     ).group_by(&:assigned_to)
     issues_by_assignee.each do |assignee, issues|
-      deliver_reminder(assignee, issues, days) unless assignee.nil?
+      deliver_reminder(assignee, issues, days) if assignee && assignee.active?
     end
   end
-  
+
   # Activates/desactivates email deliveries during +block+
   def self.with_deliveries(enabled = true, &block)
     was_enabled = ActionMailer::Base.perform_deliveries
@@ -345,7 +363,7 @@
     @initial_language = current_language
     set_language_if_valid Setting.default_language
     from Setting.mail_from
-    
+
     # Common headers
     headers 'X-Mailer' => 'Redmine',
             'X-Redmine-Host' => Setting.host_name,
@@ -368,11 +386,11 @@
       recipients.delete(@author.mail) if recipients
       cc.delete(@author.mail) if cc
     end
-    
+
     notified_users = [recipients, cc].flatten.compact.uniq
     # Rails would log recipients only, not cc and bcc
     mylogger.info "Sending email notification to: #{notified_users.join(', ')}" if mylogger
-    
+
     # Blind carbon copy recipients
     if Setting.bcc_recipients?
       bcc(notified_users)
@@ -388,7 +406,7 @@
   #
   # https://rails.lighthouseapp.com/projects/8994/tickets/2338-actionmailer-mailer-views-and-content-type
   # https://rails.lighthouseapp.com/projects/8994/tickets/1799-actionmailer-doesnt-set-template_format-when-rendering-layouts
-  
+
   def render_multipart(method_name, body)
     if Setting.plain_text_mail?
       content_type "text/plain"
@@ -404,29 +422,29 @@
   def self.controller_path
     ''
   end unless respond_to?('controller_path')
-  
+
   # Returns a predictable Message-Id for the given object
   def self.message_id_for(object)
     # id + timestamp should reduce the odds of a collision
     # as far as we don't send multiple emails for the same object
-    timestamp = object.send(object.respond_to?(:created_on) ? :created_on : :updated_on) 
+    timestamp = object.send(object.respond_to?(:created_on) ? :created_on : :updated_on)
     hash = "redmine.#{object.class.name.demodulize.underscore}-#{object.id}.#{timestamp.strftime("%Y%m%d%H%M%S")}"
     host = Setting.mail_from.to_s.gsub(%r{^.*@}, '')
     host = "#{::Socket.gethostname}.redmine" if host.empty?
     "<#{hash}@#{host}>"
   end
-  
+
   private
-  
+
   def message_id(object)
     @message_id_object = object
   end
-  
+
   def references(object)
     @references_objects ||= []
     @references_objects << object
   end
-    
+
   def mylogger
     RAILS_DEFAULT_LOGGER
   end
--- a/app/models/message.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/message.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,10 +21,10 @@
   acts_as_tree :counter_cache => :replies_count, :order => "#{Message.table_name}.created_on ASC"
   acts_as_attachable
   belongs_to :last_reply, :class_name => 'Message', :foreign_key => 'last_reply_id'
-  
+
   acts_as_searchable :columns => ['subject', 'content'],
                      :include => {:board => :project},
-                     :project_key => 'project_id',
+                     :project_key => "#{Board.table_name}.project_id",
                      :date_column => "#{table_name}.created_on"
   acts_as_event :title => Proc.new {|o| "#{o.board.name}: #{o.subject}"},
                 :description => :content,
@@ -35,32 +35,32 @@
   acts_as_activity_provider :find_options => {:include => [{:board => :project}, :author]},
                             :author_key => :author_id
   acts_as_watchable
-    
+
   attr_protected :locked, :sticky
   validates_presence_of :board, :subject, :content
   validates_length_of :subject, :maximum => 255
-  
+
   after_create :add_author_as_watcher
-  
+
   named_scope :visible, lambda {|*args| { :include => {:board => :project},
-                                          :conditions => Project.allowed_to_condition(args.first || User.current, :view_messages) } }
-  
+                                          :conditions => Project.allowed_to_condition(args.shift || User.current, :view_messages, *args) } }
+
   def visible?(user=User.current)
     !user.nil? && user.allowed_to?(:view_messages, project)
   end
-  
+
   def validate_on_create
     # Can not reply to a locked topic
     errors.add_to_base 'Topic is locked' if root.locked? && self != root
   end
-  
+
   def after_create
     if parent
       parent.reload.update_attribute(:last_reply_id, self.id)
     end
     board.reset_counters!
   end
-  
+
   def after_update
     if board_id_changed?
       Message.update_all("board_id = #{board_id}", ["id = ? OR parent_id = ?", root.id, root.id])
@@ -68,19 +68,19 @@
       Board.reset_counters!(board_id)
     end
   end
-  
+
   def after_destroy
     board.reset_counters!
   end
-  
+
   def sticky=(arg)
     write_attribute :sticky, (arg == true || arg.to_s == '1' ? 1 : 0)
   end
-  
+
   def sticky?
     sticky == 1
   end
-  
+
   def project
     board.project
   end
@@ -92,9 +92,9 @@
   def destroyable_by?(usr)
     usr && usr.logged? && (usr.allowed_to?(:delete_messages, project) || (self.author == usr && usr.allowed_to?(:delete_own_messages, project)))
   end
-  
+
   private
-  
+
   def add_author_as_watcher
     Watcher.create(:watchable => self.root, :user => author)
   end
--- a/app/models/message_observer.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/message_observer.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
--- a/app/models/news.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/news.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,7 +19,7 @@
   belongs_to :project
   belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
   has_many :comments, :as => :commented, :dependent => :delete_all, :order => "created_on"
-  
+
   validates_presence_of :title, :description
   validates_length_of :title, :maximum => 60
   validates_length_of :summary, :maximum => 255
@@ -28,18 +28,27 @@
   acts_as_event :url => Proc.new {|o| {:controller => 'news', :action => 'show', :id => o.id}}
   acts_as_activity_provider :find_options => {:include => [:project, :author]},
                             :author_key => :author_id
-  
-  named_scope :visible, lambda {|*args| { 
+  acts_as_watchable
+
+  after_create :add_author_as_watcher
+
+  named_scope :visible, lambda {|*args| {
     :include => :project,
-    :conditions => Project.allowed_to_condition(args.first || User.current, :view_news) 
+    :conditions => Project.allowed_to_condition(args.shift || User.current, :view_news, *args)
   }}
-  
+
   def visible?(user=User.current)
     !user.nil? && user.allowed_to?(:view_news, project)
   end
-  
+
   # returns latest news for projects visible by user
   def self.latest(user = User.current, count = 5)
     find(:all, :limit => count, :conditions => Project.allowed_to_condition(user, :view_news), :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC")	
   end
+
+  private
+
+  def add_author_as_watcher
+    Watcher.create(:watchable => self, :user => author)
+  end
 end
--- a/app/models/project.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/project.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -43,7 +43,7 @@
   has_many :time_entries, :dependent => :delete_all
   has_many :queries, :dependent => :delete_all
   has_many :documents, :dependent => :destroy
-  has_many :news, :dependent => :delete_all, :include => :author
+  has_many :news, :dependent => :destroy, :include => :author
   has_many :issue_categories, :dependent => :delete_all, :order => "#{IssueCategory.table_name}.name"
   has_many :boards, :dependent => :destroy, :order => "position ASC"
   has_one :repository, :dependent => :destroy
@@ -56,7 +56,7 @@
                           :join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}",
                           :association_foreign_key => 'custom_field_id'
                           
-  acts_as_nested_set :order => 'name'
+  acts_as_nested_set :order => 'name', :dependent => :destroy
   acts_as_attachable :view_permission => :view_files,
                      :delete_permission => :manage_files
 
@@ -79,12 +79,12 @@
   # reserved words
   validates_exclusion_of :identifier, :in => %w( new )
 
-  before_destroy :delete_all_members, :destroy_children
+  before_destroy :delete_all_members
 
   named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } }
   named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"}
   named_scope :all_public, { :conditions => { :is_public => true } }
-  named_scope :visible, lambda { { :conditions => Project.visible_by(User.current) } }
+  named_scope :visible, lambda {|*args| {:conditions => Project.visible_condition(args.shift || User.current, *args) }}
   named_scope :visible_roots, lambda { { :conditions => Project.root_visible_by(User.current) } }
   
   def initialize(attributes = nil)
@@ -116,31 +116,35 @@
   # returns latest created projects
   # non public projects will be returned only if user is a member of those
   def self.latest(user=nil, count=5)
-    find(:all, :limit => count, :conditions => visible_by(user), :order => "created_on DESC")	
+    visible(user).find(:all, :limit => count, :order => "created_on DESC")	
   end	
 
-  # Returns a SQL :conditions string used to find all active projects for the specified user.
+  def self.visible_by(user=nil)
+    ActiveSupport::Deprecation.warn "Project.visible_by is deprecated and will be removed in Redmine 1.3.0. Use Project.visible_condition instead."
+    visible_condition(user || User.current)
+  end
+  
+  # Returns a SQL conditions string used to find all projects visible by the specified user.
   #
   # Examples:
-  #     Projects.visible_by(admin)        => "projects.status = 1"
-  #     Projects.visible_by(normal_user)  => "projects.status = 1 AND projects.is_public = 1"
-  def self.visible_by(user=nil)
-    user ||= User.current
-    if user && user.admin?
-      return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
-    elsif user && user.memberships.any?
-      return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND (#{Project.table_name}.is_public = #{connection.quoted_true} or #{Project.table_name}.id IN (#{user.memberships.collect{|m| m.project_id}.join(',')}))"
-    else
-      return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND #{Project.table_name}.is_public = #{connection.quoted_true}"
-    end
+  #   Project.visible_condition(admin)        => "projects.status = 1"
+  #   Project.visible_condition(normal_user)  => "((projects.status = 1) AND (projects.is_public = 1 OR projects.id IN (1,3,4)))"
+  #   Project.visible_condition(anonymous)    => "((projects.status = 1) AND (projects.is_public = 1))"
+  def self.visible_condition(user, options={})
+    allowed_to_condition(user, :view_project, options)
   end
   
   def self.root_visible_by(user=nil)
     return "#{Project.table_name}.parent_id IS NULL AND " + visible_by(user)
   end
   
+  # Returns a SQL conditions string used to find all projects for which +user+ has the given +permission+
+  #
+  # Valid options:
+  # * :project => limit the condition to project
+  # * :with_subprojects => limit the condition to project and its subprojects
+  # * :member => limit the condition to the user projects
   def self.allowed_to_condition(user, permission, options={})
-    statements = []
     base_statement = "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
     if perm = Redmine::AccessControl.permission(permission)
       unless perm.project_module.nil?
@@ -153,24 +157,37 @@
       project_statement << " OR (#{Project.table_name}.lft > #{options[:project].lft} AND #{Project.table_name}.rgt < #{options[:project].rgt})" if options[:with_subprojects]
       base_statement = "(#{project_statement}) AND (#{base_statement})"
     end
+    
     if user.admin?
-      # no restriction
+      base_statement
     else
-      statements << "1=0"
+      statement_by_role = {}
+      unless options[:member]
+        role = user.logged? ? Role.non_member : Role.anonymous
+        if role.allowed_to?(permission)
+          statement_by_role[role] = "#{Project.table_name}.is_public = #{connection.quoted_true}"
+        end
+      end
       if user.logged?
-        if Role.non_member.allowed_to?(permission) && !options[:member]
-          statements << "#{Project.table_name}.is_public = #{connection.quoted_true}"
+        user.projects_by_role.each do |role, projects|
+          if role.allowed_to?(permission)
+            statement_by_role[role] = "#{Project.table_name}.id IN (#{projects.collect(&:id).join(',')})"
+          end
         end
-        allowed_project_ids = user.memberships.select {|m| m.roles.detect {|role| role.allowed_to?(permission)}}.collect {|m| m.project_id}
-        statements << "#{Project.table_name}.id IN (#{allowed_project_ids.join(',')})" if allowed_project_ids.any?
+      end
+      if statement_by_role.empty?
+        "1=0"
       else
-        if Role.anonymous.allowed_to?(permission) && !options[:member]
-          # anonymous user allowed on public project
-          statements << "#{Project.table_name}.is_public = #{connection.quoted_true}"
-        end 
+        if block_given?
+          statement_by_role.each do |role, statement|
+            if s = yield(role, user)
+              statement_by_role[role] = "(#{statement} AND (#{s}))"
+            end
+          end
+        end
+        "((#{base_statement}) AND (#{statement_by_role.values.join(' OR ')}))"
       end
     end
-    statements.empty? ? base_statement : "((#{base_statement}) AND (#{statements.join(' OR ')}))"
   end
 
   # Returns the Systemwide and project specific activities
@@ -352,7 +369,7 @@
   # Returns an array of the trackers used by the project and its active sub projects
   def rolled_up_trackers
     @rolled_up_trackers ||=
-      Tracker.find(:all, :include => :projects,
+      Tracker.find(:all, :joins => :projects,
                          :select => "DISTINCT #{Tracker.table_name}.*",
                          :conditions => ["#{Project.table_name}.lft >= ? AND #{Project.table_name}.rgt <= ? AND #{Project.table_name}.status = #{STATUS_ACTIVE}", lft, rgt],
                          :order => "#{Tracker.table_name}.position")
@@ -378,15 +395,17 @@
   
   # Returns a scope of the Versions used by the project
   def shared_versions
-    @shared_versions ||= 
+    @shared_versions ||= begin
+      r = root? ? self : root
       Version.scoped(:include => :project,
                      :conditions => "#{Project.table_name}.id = #{id}" +
                                     " OR (#{Project.table_name}.status = #{Project::STATUS_ACTIVE} AND (" +
                                           " #{Version.table_name}.sharing = 'system'" +
-                                          " OR (#{Project.table_name}.lft >= #{root.lft} AND #{Project.table_name}.rgt <= #{root.rgt} AND #{Version.table_name}.sharing = 'tree')" +
+                                          " OR (#{Project.table_name}.lft >= #{r.lft} AND #{Project.table_name}.rgt <= #{r.rgt} AND #{Version.table_name}.sharing = 'tree')" +
                                           " OR (#{Project.table_name}.lft < #{lft} AND #{Project.table_name}.rgt > #{rgt} AND #{Version.table_name}.sharing IN ('hierarchy', 'descendants'))" +
                                           " OR (#{Project.table_name}.lft > #{lft} AND #{Project.table_name}.rgt < #{rgt} AND #{Version.table_name}.sharing = 'hierarchy')" +
                                           "))")
+    end
   end
 
   # Returns a hash of project users grouped by role
@@ -428,6 +447,12 @@
   def all_issue_custom_fields
     @all_issue_custom_fields ||= (IssueCustomField.for_all + issue_custom_fields).uniq.sort
   end
+
+  # Returns an array of all custom fields enabled for project time entries
+  # (explictly associated custom fields and custom fields enabled for all projects)
+  def all_time_entry_custom_fields
+    @all_time_entry_custom_fields ||= (TimeEntryCustomField.for_all + time_entry_custom_fields).uniq.sort
+  end
   
   def project
     self
@@ -521,10 +546,7 @@
   def enabled_module_names=(module_names)
     if module_names && module_names.is_a?(Array)
       module_names = module_names.collect(&:to_s).reject(&:blank?)
-      # remove disabled modules
-      enabled_modules.each {|mod| mod.destroy unless module_names.include?(mod.name)}
-      # add new modules
-      module_names.reject {|name| module_enabled?(name)}.each {|name| enabled_modules << EnabledModule.new(:name => name)}
+      self.enabled_modules = module_names.collect {|name| enabled_modules.detect {|mod| mod.name == name} || EnabledModule.new(:name => name)}
     else
       enabled_modules.clear
     end
@@ -633,13 +655,6 @@
   
   private
   
-  # Destroys children before destroying self
-  def destroy_children
-    children.each do |child|
-      child.destroy
-    end
-  end
-  
   # Copies wiki from +project+
   def copy_wiki(project)
     # Check that the source project has a wiki first
@@ -686,6 +701,7 @@
   end
   
   # Copies issues from +project+
+  # Note: issues assigned to a closed version won't be copied due to validation rules
   def copy_issues(project)
     # Stores the source issue id as a key and the copied issues as the
     # value.  Used to map the two togeather for issue relations.
--- a/app/models/query.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/query.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,24 +1,24 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
-class QueryColumn  
+class QueryColumn
   attr_accessor :name, :sortable, :groupable, :default_order
   include Redmine::I18n
-  
+
   def initialize(name, options={})
     self.name = name
     self.sortable = options[:sortable]
@@ -29,19 +29,23 @@
     self.default_order = options[:default_order]
     @caption_key = options[:caption] || "field_#{name}"
   end
-  
+
   def caption
     l(@caption_key)
   end
-  
+
   # Returns true if the column is sortable, otherwise false
   def sortable?
     !sortable.nil?
   end
-  
+
   def value(issue)
     issue.send name
   end
+
+  def css_classes
+    name
+  end
 end
 
 class QueryCustomFieldColumn < QueryColumn
@@ -55,37 +59,41 @@
     self.groupable ||= false
     @cf = custom_field
   end
-  
+
   def caption
     @cf.name
   end
-  
+
   def custom_field
     @cf
   end
-  
+
   def value(issue)
     cv = issue.custom_values.detect {|v| v.custom_field_id == @cf.id}
     cv && @cf.cast_value(cv.value)
   end
+
+  def css_classes
+    @css_classes ||= "#{name} #{@cf.field_format}"
+  end
 end
 
 class Query < ActiveRecord::Base
   class StatementInvalid < ::ActiveRecord::StatementInvalid
   end
-  
+
   belongs_to :project
   belongs_to :user
   serialize :filters
   serialize :column_names
   serialize :sort_criteria, Array
-  
+
   attr_protected :project_id, :user_id
-  
+
   validates_presence_of :name, :on => :save
   validates_length_of :name, :maximum => 255
-    
-  @@operators = { "="   => :label_equals, 
+
+  @@operators = { "="   => :label_equals,
                   "!"   => :label_not_equals,
                   "o"   => :label_open_issues,
                   "c"   => :label_closed_issues,
@@ -105,7 +113,7 @@
                   "!~"  => :label_not_contains }
 
   cattr_reader :operators
-    
+
   @@operators_by_filter_type = { :list => [ "=", "!" ],
                                  :list_status => [ "o", "=", "!", "c", "*" ],
                                  :list_optional => [ "=", "!", "!*", "*" ],
@@ -137,27 +145,27 @@
     QueryColumn.new(:created_on, :sortable => "#{Issue.table_name}.created_on", :default_order => 'desc'),
   ]
   cattr_reader :available_columns
-  
+
   def initialize(attributes = nil)
     super attributes
     self.filters ||= { 'status_id' => {:operator => "o", :values => [""]} }
   end
-  
+
   def after_initialize
     # Store the fact that project is nil (used in #editable_by?)
     @is_for_all = project.nil?
   end
-  
+
   def validate
     filters.each_key do |field|
-      errors.add label_for(field), :blank unless 
+      errors.add label_for(field), :blank unless
           # filter requires one or more values
-          (values_for(field) and !values_for(field).first.blank?) or 
+          (values_for(field) and !values_for(field).first.blank?) or
           # filter doesn't require any value
           ["o", "c", "!*", "*", "t", "w"].include? operator_for(field)
     end if filters
   end
-  
+
   def editable_by?(user)
     return false unless user
     # Admin can edit them all and regular users can edit their private queries
@@ -165,23 +173,23 @@
     # Members can not edit public queries that are for all project (only admin is allowed to)
     is_public && !@is_for_all && user.allowed_to?(:manage_public_queries, project)
   end
-  
+
   def available_filters
     return @available_filters if @available_filters
-    
+
     trackers = project.nil? ? Tracker.find(:all, :order => 'position') : project.rolled_up_trackers
-    
-    @available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } },       
-                           "tracker_id" => { :type => :list, :order => 2, :values => trackers.collect{|s| [s.name, s.id.to_s] } },                                                                                                                
+
+    @available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } },
+                           "tracker_id" => { :type => :list, :order => 2, :values => trackers.collect{|s| [s.name, s.id.to_s] } },
                            "priority_id" => { :type => :list, :order => 3, :values => IssuePriority.all.collect{|s| [s.name, s.id.to_s] } },
-                           "subject" => { :type => :text, :order => 8 },  
-                           "created_on" => { :type => :date_past, :order => 9 },                        
+                           "subject" => { :type => :text, :order => 8 },
+                           "created_on" => { :type => :date_past, :order => 9 },
                            "updated_on" => { :type => :date_past, :order => 10 },
                            "start_date" => { :type => :date, :order => 11 },
                            "due_date" => { :type => :date, :order => 12 },
                            "estimated_hours" => { :type => :integer, :order => 13 },
                            "done_ratio" =>  { :type => :integer, :order => 14 }}
-    
+
     user_values = []
     user_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
     if project
@@ -191,7 +199,7 @@
       if all_projects.any?
         # members of visible projects
         user_values += User.active.find(:all, :conditions => ["#{User.table_name}.id IN (SELECT DISTINCT user_id FROM members WHERE project_id IN (?))", all_projects.collect(&:id)]).sort.collect{|s| [s.name, s.id.to_s] }
-          
+
         # project filter
         project_values = []
         Project.project_tree(all_projects) do |p, level|
@@ -209,21 +217,26 @@
 
     role_values = Role.givable.collect {|r| [r.name, r.id.to_s] }
     @available_filters["assigned_to_role"] = { :type => :list_optional, :order => 7, :values => role_values } unless role_values.empty?
-    
+
     if User.current.logged?
       @available_filters["watcher_id"] = { :type => :list, :order => 15, :values => [["<< #{l(:label_me)} >>", "me"]] }
     end
-  
+
     if project
       # project specific filters
-      unless @project.issue_categories.empty?
-        @available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => @project.issue_categories.collect{|s| [s.name, s.id.to_s] } }
+      categories = @project.issue_categories.all
+      unless categories.empty?
+        @available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => categories.collect{|s| [s.name, s.id.to_s] } }
       end
-      unless @project.shared_versions.empty?
-        @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => @project.shared_versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } }
+      versions = @project.shared_versions.all
+      unless versions.empty?
+        @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } }
       end
-      unless @project.descendants.active.empty?
-        @available_filters["subproject_id"] = { :type => :list_subprojects, :order => 13, :values => @project.descendants.visible.collect{|s| [s.name, s.id.to_s] } }
+      unless @project.leaf?
+        subprojects = @project.descendants.visible.all
+        unless subprojects.empty?
+          @available_filters["subproject_id"] = { :type => :list_subprojects, :order => 13, :values => subprojects.collect{|s| [s.name, s.id.to_s] } }
+        end
       end
       add_custom_fields_filters(@project.all_issue_custom_fields)
     else
@@ -236,7 +249,7 @@
     end
     @available_filters
   end
-  
+
   def add_filter(field, operator, values)
     # values must be an array
     return unless values and values.is_a? Array # and !values.first.empty?
@@ -251,7 +264,7 @@
       filters[field] = {:operator => operator, :values => values }
     end
   end
-  
+
   def add_short_filter(field, expression)
     return unless expression
     parms = expression.scan(/^(o|c|!\*|!|\*)?(.*)$/).first
@@ -266,19 +279,19 @@
       end
     end
   end
-  
+
   def has_filter?(field)
     filters and filters[field]
   end
-  
+
   def operator_for(field)
     has_filter?(field) ? filters[field][:operator] : nil
   end
-  
+
   def values_for(field)
     has_filter?(field) ? filters[field][:values] : nil
   end
-  
+
   def label_for(field)
     label = available_filters[field][:name] if available_filters.has_key?(field)
     label ||= field.gsub(/\_id$/, "")
@@ -290,17 +303,17 @@
     @available_columns += (project ? 
                             project.all_issue_custom_fields :
                             IssueCustomField.find(:all)
-                           ).collect {|cf| QueryCustomFieldColumn.new(cf) }      
+                           ).collect {|cf| QueryCustomFieldColumn.new(cf) }
   end
 
   def self.available_columns=(v)
     self.available_columns = (v)
   end
-  
+
   def self.add_available_column(column)
     self.available_columns << (column) if column.is_a?(QueryColumn)
   end
-  
+
   # Returns an array of columns that can be used to group the results
   def groupable_columns
     available_columns.select {|c| c.groupable}
@@ -313,7 +326,7 @@
                                                h
                                              })
   end
-  
+
   def columns
     if has_default_columns?
       available_columns.select do |c|
@@ -325,7 +338,7 @@
       column_names.collect {|name| available_columns.find {|col| col.name == name}}.compact
     end
   end
-  
+
   def column_names=(names)
     if names
       names = names.select {|n| n.is_a?(Symbol) || !n.blank? }
@@ -337,15 +350,15 @@
     end
     write_attribute(:column_names, names)
   end
-  
+
   def has_column?(column)
     column_names && column_names.include?(column.name)
   end
-  
+
   def has_default_columns?
     column_names.nil? || column_names.empty?
   end
-  
+
   def sort_criteria=(arg)
     c = []
     if arg.is_a?(Hash)
@@ -354,19 +367,19 @@
     c = arg.select {|k,o| !k.to_s.blank?}.slice(0,3).collect {|k,o| [k.to_s, o == 'desc' ? o : 'asc']}
     write_attribute(:sort_criteria, c)
   end
-  
+
   def sort_criteria
     read_attribute(:sort_criteria) || []
   end
-  
+
   def sort_criteria_key(arg)
     sort_criteria && sort_criteria[arg] && sort_criteria[arg].first
   end
-  
+
   def sort_criteria_order(arg)
     sort_criteria && sort_criteria[arg] && sort_criteria[arg].last
   end
-  
+
   # Returns the SQL sort order that should be prepended for grouping
   def group_by_sort_order
     if grouped? && (column = group_by_column)
@@ -375,20 +388,20 @@
         "#{column.sortable} #{column.default_order}"
     end
   end
-  
+
   # Returns true if the query is a grouped query
   def grouped?
     !group_by_column.nil?
   end
-  
+
   def group_by_column
     groupable_columns.detect {|c| c.groupable && c.name.to_s == group_by}
   end
-  
+
   def group_by_statement
     group_by_column.try(:groupable)
   end
-  
+
   def project_statement
     project_clauses = []
     if project && !@project.descendants.active.empty?
@@ -411,8 +424,7 @@
     elsif project
       project_clauses << "#{Project.table_name}.id = %d" % project.id
     end
-    project_clauses <<  Project.allowed_to_condition(User.current, :view_issues)
-    project_clauses.join(' AND ')
+    project_clauses.any? ? project_clauses.join(' AND ') : nil
   end
 
   def statement
@@ -423,12 +435,12 @@
       v = values_for(field).clone
       next unless v and !v.empty?
       operator = operator_for(field)
-      
+
       # "me" value subsitution
       if %w(assigned_to_id author_id watcher_id).include?(field)
         v.push(User.current.logged? ? User.current.id.to_s : "0") if v.delete("me")
       end
-      
+
       sql = ''
       if field =~ /^cf_(\d+)$/
         # custom field
@@ -460,7 +472,7 @@
           end
           user_ids.flatten.uniq.compact
         }.sort.collect(&:to_s)
-        
+
         sql << '(' + sql_for_field("assigned_to_id", operator, members_of_groups, Issue.table_name, "assigned_to_id", false) + ')'
 
       elsif field == "assigned_to_role" # named field
@@ -474,14 +486,14 @@
           roles = Role.givable.find_all_by_id(v)
         end
         roles ||= []
-        
+
         members_of_roles = roles.inject([]) {|user_ids, role|
           if role && role.members
             user_ids << role.members.collect(&:user_id)
           end
           user_ids.flatten.uniq.compact
         }.sort.collect(&:to_s)
-        
+
         sql << '(' + sql_for_field("assigned_to_id", operator, members_of_roles, Issue.table_name, "assigned_to_id", false) + ')'
       else
         # regular field
@@ -490,26 +502,29 @@
         sql << '(' + sql_for_field(field, operator, v, db_table, db_field) + ')'
       end
       filters_clauses << sql
-      
+
     end if filters and valid?
-    
-    (filters_clauses << project_statement).join(' AND ')
+
+    filters_clauses << project_statement
+    filters_clauses.reject!(&:blank?)
+
+    filters_clauses.any? ? filters_clauses.join(' AND ') : nil
   end
-  
+
   # Returns the issue count
   def issue_count
     Issue.count(:include => [:status, :project], :conditions => statement)
   rescue ::ActiveRecord::StatementInvalid => e
     raise StatementInvalid.new(e.message)
   end
-  
+
   # Returns the issue count by group or nil if query is not grouped
   def issue_count_by_group
     r = nil
     if grouped?
       begin
         # Rails will raise an (unexpected) RecordNotFound if there's only a nil group value
-        r = Issue.count(:group => group_by_statement, :include => [:status, :project], :conditions => statement)
+        r = Issue.visible.count(:group => group_by_statement, :include => [:status, :project], :conditions => statement)
       rescue ActiveRecord::RecordNotFound
         r = {nil => issue_count}
       end
@@ -522,14 +537,14 @@
   rescue ::ActiveRecord::StatementInvalid => e
     raise StatementInvalid.new(e.message)
   end
-  
+
   # Returns the issues
   # Valid options are :order, :offset, :limit, :include, :conditions
   def issues(options={})
     order_option = [group_by_sort_order, options[:order]].reject {|s| s.blank?}.join(',')
     order_option = nil if order_option.blank?
-    
-    Issue.find :all, :include => ([:status, :project] + (options[:include] || [])).uniq,
+
+    Issue.visible.find :all, :include => ([:status, :project] + (options[:include] || [])).uniq,
                      :conditions => Query.merge_conditions(statement, options[:conditions]),
                      :order => order_option,
                      :limit  => options[:limit],
@@ -541,7 +556,7 @@
   # Returns the journals
   # Valid options are :order, :offset, :limit
   def journals(options={})
-    Journal.find :all, :include => [:details, :user, {:issue => [:project, :author, :tracker, :status]}],
+    Journal.visible.find :all, :include => [:details, :user, {:issue => [:project, :author, :tracker, :status]}],
                        :conditions => statement,
                        :order => options[:order],
                        :limit => options[:limit],
@@ -549,18 +564,18 @@
   rescue ::ActiveRecord::StatementInvalid => e
     raise StatementInvalid.new(e.message)
   end
-  
+
   # Returns the versions
   # Valid options are :conditions
   def versions(options={})
-    Version.find :all, :include => :project,
+    Version.visible.find :all, :include => :project,
                        :conditions => Query.merge_conditions(project_statement, options[:conditions])
   rescue ::ActiveRecord::StatementInvalid => e
     raise StatementInvalid.new(e.message)
   end
-  
+
   private
-  
+
   # Helper method to generate the WHERE sql for a +field+, +operator+ and a +value+
   def sql_for_field(field, operator, value, db_table, db_field, is_custom_filter=false)
     sql = ''
@@ -608,24 +623,22 @@
     when "t"
       sql = date_range_clause(db_table, db_field, 0, 0)
     when "w"
-      from = l(:general_first_day_of_week) == '7' ?
-      # week starts on sunday
-      ((Date.today.cwday == 7) ? Time.now.at_beginning_of_day : Time.now.at_beginning_of_week - 1.day) :
-        # week starts on monday (Rails default)
-        Time.now.at_beginning_of_week
-      sql = "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(from), connection.quoted_date(from + 7.days)]
+      first_day_of_week = l(:general_first_day_of_week).to_i
+      day_of_week = Date.today.cwday
+      days_ago = (day_of_week >= first_day_of_week ? day_of_week - first_day_of_week : day_of_week + 7 - first_day_of_week)
+      sql = date_range_clause(db_table, db_field, - days_ago, - days_ago + 6)
     when "~"
       sql = "LOWER(#{db_table}.#{db_field}) LIKE '%#{connection.quote_string(value.first.to_s.downcase)}%'"
     when "!~"
       sql = "LOWER(#{db_table}.#{db_field}) NOT LIKE '%#{connection.quote_string(value.first.to_s.downcase)}%'"
     end
-    
+
     return sql
   end
-  
+
   def add_custom_fields_filters(custom_fields)
     @available_filters ||= {}
-    
+
     custom_fields.select(&:is_filter?).each do |field|
       case field.field_format
       when "text"
@@ -636,13 +649,16 @@
         options = { :type => :date, :order => 20 }
       when "bool"
         options = { :type => :list, :values => [[l(:general_text_yes), "1"], [l(:general_text_no), "0"]], :order => 20 }
+      when "user", "version"
+        next unless project
+        options = { :type => :list_optional, :values => field.possible_values_options(project), :order => 20}
       else
         options = { :type => :string, :order => 20 }
       end
       @available_filters["cf_#{field.id}"] = options.merge({ :name => field.name })
     end
   end
-  
+
   # Returns a SQL clause for a date or datetime field.
   def date_range_clause(table, field, from, to)
     s = []
--- a/app/models/repository.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,35 +1,45 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 class Repository < ActiveRecord::Base
   include Redmine::Ciphering
-  
+
   belongs_to :project
   has_many :changesets, :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC"
   has_many :changes, :through => :changesets
-  
+
+  serialize :extra_info
+
   # Raw SQL to delete changesets and changes in the database
   # has_many :changesets, :dependent => :destroy is too slow for big repositories
   before_destroy :clear_changesets
-  
+
   validates_length_of :password, :maximum => 255, :allow_nil => true
   # Checks if the SCM is enabled when creating a repository
   validate_on_create { |r| r.errors.add(:type, :invalid) unless Setting.enabled_scm.include?(r.class.name.demodulize) }
 
+  def self.human_attribute_name(attribute_key_name)
+    attr_name = attribute_key_name
+    if attr_name == "log_encoding"
+      attr_name = "commit_logs_encoding"
+    end
+    super(attr_name)
+  end
+
   # Removes leading and trailing whitespace
   def url=(arg)
     write_attribute(:url, arg ? arg.to_s.strip : nil)
@@ -39,11 +49,11 @@
   def root_url=(arg)
     write_attribute(:root_url, arg ? arg.to_s.strip : nil)
   end
-  
+
   def password
     read_ciphered_attribute(:password)
   end
-  
+
   def password=(arg)
     write_ciphered_attribute(:password, arg)
   end
@@ -63,6 +73,17 @@
     self.class.scm_name
   end
 
+  def merge_extra_info(arg)
+    h = extra_info || {}
+    return h if arg.nil?
+    h.merge!(arg)
+    write_attribute(:extra_info, h)
+  end
+
+  def report_last_commit
+    true
+  end
+
   def supports_cat?
     scm.supports_cat?
   end
@@ -70,11 +91,19 @@
   def supports_annotate?
     scm.supports_annotate?
   end
-  
+
+  def supports_all_revisions?
+    true
+  end
+
+  def supports_directory_revisions?
+    false
+  end
+
   def entry(path=nil, identifier=nil)
     scm.entry(path, identifier)
   end
-  
+
   def entries(path=nil, identifier=nil)
     scm.entries(path, identifier)
   end
@@ -90,15 +119,15 @@
   def default_branch
     scm.default_branch
   end
-  
+
   def properties(path, identifier=nil)
     scm.properties(path, identifier)
   end
-  
+
   def cat(path, identifier=nil)
     scm.cat(path, identifier)
   end
-  
+
   def diff(path, rev, rev_to)
     scm.diff(path, rev, rev_to)
   end
@@ -118,7 +147,8 @@
   # Finds and returns a revision with a number or the beginning of a hash
   def find_changeset_by_name(name)
     return nil if name.blank?
-    changesets.find(:first, :conditions => (name.match(/^\d*$/) ? ["revision = ?", name.to_s] : ["revision LIKE ?", name + '%']))
+    changesets.find(:first, :conditions => (name.match(/^\d*$/) ?
+          ["revision = ?", name.to_s] : ["revision LIKE ?", name + '%']))
   end
 
   def latest_changeset
@@ -129,26 +159,32 @@
   # Default behaviour is to search in cached changesets
   def latest_changesets(path, rev, limit=10)
     if path.blank?
-      changesets.find(:all, :include => :user,
-                            :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC",
-                            :limit => limit)
+      changesets.find(
+         :all,
+         :include => :user,
+         :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC",
+         :limit => limit)
     else
-      changes.find(:all, :include => {:changeset => :user}, 
-                         :conditions => ["path = ?", path.with_leading_slash],
-                         :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC",
-                         :limit => limit).collect(&:changeset)
+      changes.find(
+         :all,
+         :include => {:changeset => :user},
+         :conditions => ["path = ?", path.with_leading_slash],
+         :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC",
+         :limit => limit
+       ).collect(&:changeset)
     end
   end
-    
+
   def scan_changesets_for_issue_ids
     self.changesets.each(&:scan_comment_for_issue_ids)
   end
 
   # Returns an array of committers usernames and associated user_id
   def committers
-    @committers ||= Changeset.connection.select_rows("SELECT DISTINCT committer, user_id FROM #{Changeset.table_name} WHERE repository_id = #{id}")
+    @committers ||= Changeset.connection.select_rows(
+         "SELECT DISTINCT committer, user_id FROM #{Changeset.table_name} WHERE repository_id = #{id}")
   end
-  
+
   # Maps committers username to a user ids
   def committer_ids=(h)
     if h.is_a?(Hash)
@@ -156,17 +192,19 @@
         new_user_id = h[committer]
         if new_user_id && (new_user_id.to_i != user_id.to_i)
           new_user_id = (new_user_id.to_i > 0 ? new_user_id.to_i : nil)
-          Changeset.update_all("user_id = #{ new_user_id.nil? ? 'NULL' : new_user_id }", ["repository_id = ? AND committer = ?", id, committer])
+          Changeset.update_all(
+               "user_id = #{ new_user_id.nil? ? 'NULL' : new_user_id }",
+               ["repository_id = ? AND committer = ?", id, committer])
         end
       end
-      @committers = nil
+      @committers            = nil
       @found_committer_users = nil
       true
     else
       false
     end
   end
-  
+
   # Returns the Redmine User corresponding to the given +committer+
   # It will return nil if the committer is not yet mapped and if no User
   # with the same username or email was found
@@ -174,7 +212,7 @@
     unless committer.blank?
       @found_committer_users ||= {}
       return @found_committer_users[committer] if @found_committer_users.has_key?(committer)
-      
+
       user = nil
       c = changesets.find(:first, :conditions => {:committer => committer}, :include => :user)
       if c && c.user
@@ -218,7 +256,7 @@
   def self.scm_name
     'Abstract'
   end
-  
+
   def self.available_scm
     subclasses.collect {|klass| [klass.scm_name, klass.name]}
   end
@@ -238,7 +276,7 @@
     ret = ""
     begin
       ret = self.scm_adapter_class.client_command if self.scm_adapter_class
-    rescue Redmine::Scm::Adapters::CommandFailed => e
+    rescue Exception => e
       logger.error "scm: error during get command: #{e.message}"
     end
     ret
@@ -248,7 +286,7 @@
     ret = ""
     begin
       ret = self.scm_adapter_class.client_version_string if self.scm_adapter_class
-    rescue Redmine::Scm::Adapters::CommandFailed => e
+    rescue Exception => e
       logger.error "scm: error during get version string: #{e.message}"
     end
     ret
@@ -257,8 +295,8 @@
   def self.scm_available
     ret = false
     begin
-      ret = self.scm_adapter_class.client_available if self.scm_adapter_class 
-    rescue Redmine::Scm::Adapters::CommandFailed => e
+      ret = self.scm_adapter_class.client_available if self.scm_adapter_class
+    rescue Exception => e
       logger.error "scm: error during get scm available: #{e.message}"
     end
     ret
@@ -272,7 +310,7 @@
     root_url.strip!
     true
   end
-  
+
   def clear_changesets
     cs, ch, ci = Changeset.table_name, Change.table_name, "#{table_name_prefix}changesets_issues#{table_name_suffix}"
     connection.delete("DELETE FROM #{ch} WHERE #{ch}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})")
--- a/app/models/repository/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/models/repository
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/models/repository
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-01T10:27:30.170724Z
-4982
+2011-05-19T22:58:38.288878Z
+5858
 tmaruyama
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-b9f366b3f38bd42149e09e6ed0ed8755
-2011-02-28T12:09:32.515358Z
-4962
+2011-06-06T13:18:33.000000Z
+2950b88e98eed34048c7f007a8f7fb21
+2011-05-12T07:15:39.740135Z
+5751
 tmaruyama
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-3358
+3397
 
 bazaar.rb
 file
@@ -66,10 +66,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-d6a230859a110341c0d64865248db51c
-2011-03-01T10:27:30.170724Z
-4982
+2011-06-06T13:18:33.000000Z
+d4568bac22baf6121a7ea8883b59c58c
+2011-05-18T07:11:41.584755Z
+5834
 tmaruyama
 has-props
 
@@ -92,7 +92,7 @@
 
 
 
-3877
+3916
 
 git.rb
 file
@@ -100,10 +100,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-dfce133f28c5c85af0740865903d5320
-2011-03-01T05:14:03.146872Z
-4975
+2011-06-06T13:18:33.000000Z
+b12b4b9bf012b30d430ddabf73eb4962
+2011-05-19T22:58:38.288878Z
+5858
 tmaruyama
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-4245
+5213
 
 mercurial.rb
 file
@@ -134,10 +134,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-d659744391dfa02d54481d4dd8752930
-2011-03-01T05:14:03.146872Z
-4975
+2011-06-06T13:18:33.000000Z
+c02be7ffad5bb78d0cc096a7f88c45fc
+2011-05-12T07:52:14.217350Z
+5756
 tmaruyama
 has-props
 
@@ -160,7 +160,7 @@
 
 
 
-4022
+5217
 
 filesystem.rb
 file
@@ -168,10 +168,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-994276556c2feac05d149117eea01413
-2011-03-01T05:14:03.146872Z
-4975
+2011-06-06T13:18:33.000000Z
+a2170e3cb1161b0ea016414b724438f0
+2011-05-12T07:41:08.517774Z
+5754
 tmaruyama
 has-props
 
@@ -194,7 +194,7 @@
 
 
 
-1451
+1491
 
 cvs.rb
 file
@@ -202,10 +202,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-5eecf7abe1216489c4d1c2f6a107c36b
-2011-03-01T10:27:30.170724Z
-4982
+2011-06-06T13:18:33.000000Z
+a5f74e302ec1d5d5d4a0677b6537c399
+2011-05-12T07:16:20.564757Z
+5753
 tmaruyama
 has-props
 
@@ -228,7 +228,7 @@
 
 
 
-6952
+7651
 
 darcs.rb
 file
@@ -236,10 +236,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-03bf9128aa09528266cabb76ff0808a9
-2011-03-01T10:27:30.170724Z
-4982
+2011-06-06T13:18:33.000000Z
+5fa94193e544a8c9d94a2cb501a273de
+2011-05-12T07:41:29.099665Z
+5755
 tmaruyama
 has-props
 
@@ -262,5 +262,5 @@
 
 
 
-3826
+3881
 
--- a/app/models/repository/.svn/text-base/bazaar.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/.svn/text-base/bazaar.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,12 +21,12 @@
   attr_protected :root_url
   validates_presence_of :url, :log_encoding
 
-  ATTRIBUTE_KEY_NAMES = {
-      "url"          => "Root directory",
-      "log_encoding" => "Commit messages encoding",
-    }
   def self.human_attribute_name(attribute_key_name)
-    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+    attr_name = attribute_key_name
+    if attr_name == "url"
+      attr_name = "path_to_repository"
+    end
+    super(attr_name)
   end
 
   def self.scm_adapter_class
@@ -47,19 +47,24 @@
           full_path = File.join(root_url, e.path)
           e.size = File.stat(full_path).size if File.file?(full_path)
         end
-        c = Change.find(:first,
-                        :include => :changeset,
-                        :conditions => ["#{Change.table_name}.revision = ? and #{Changeset.table_name}.repository_id = ?", e.lastrev.revision, id],
-                        :order => "#{Changeset.table_name}.revision DESC")
+        c = Change.find(
+               :first,
+               :include    => :changeset,
+               :conditions => [
+                   "#{Change.table_name}.revision = ? and #{Changeset.table_name}.repository_id = ?",
+                   e.lastrev.revision,
+                   id
+                   ],
+               :order => "#{Changeset.table_name}.revision DESC")
         if c
           e.lastrev.identifier = c.changeset.revision
-          e.lastrev.name = c.changeset.revision
-          e.lastrev.author = c.changeset.committer
+          e.lastrev.name       = c.changeset.revision
+          e.lastrev.author     = c.changeset.committer
         end
       end
     end
   end
-  
+
   def fetch_changesets
     scm_info = scm.info
     if scm_info
@@ -76,18 +81,18 @@
           revisions = scm.revisions('', identifier_to, identifier_from, :with_paths => true)
           transaction do
             revisions.reverse_each do |revision|
-              changeset = Changeset.create(:repository => self,
-                                           :revision => revision.identifier, 
-                                           :committer => revision.author, 
+              changeset = Changeset.create(:repository   => self,
+                                           :revision     => revision.identifier,
+                                           :committer    => revision.author,
                                            :committed_on => revision.time,
-                                           :scmid => revision.scmid,
-                                           :comments => revision.message)
-              
+                                           :scmid        => revision.scmid,
+                                           :comments     => revision.message)
+
               revision.paths.each do |change|
                 Change.create(:changeset => changeset,
-                              :action => change[:action],
-                              :path => change[:path],
-                              :revision => change[:revision])
+                              :action    => change[:action],
+                              :path      => change[:path],
+                              :revision  => change[:revision])
               end
             end
           end unless revisions.nil?
--- a/app/models/repository/.svn/text-base/cvs.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/.svn/text-base/cvs.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,13 +21,14 @@
 class Repository::Cvs < Repository
   validates_presence_of :url, :root_url, :log_encoding
 
-  ATTRIBUTE_KEY_NAMES = {
-      "url"          => "CVSROOT",
-      "root_url"     => "Module",
-      "log_encoding" => "Commit messages encoding",
-    }
   def self.human_attribute_name(attribute_key_name)
-    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+    attr_name = attribute_key_name
+    if attr_name == "root_url"
+      attr_name = "cvsroot"
+    elsif attr_name == "url"
+      attr_name = "cvs_module"
+    end
+    super(attr_name)
   end
 
   def self.scm_adapter_class
@@ -42,53 +43,71 @@
     rev = identifier.nil? ? nil : changesets.find_by_revision(identifier)
     scm.entry(path, rev.nil? ? nil : rev.committed_on)
   end
-  
+
   def entries(path=nil, identifier=nil)
-    rev = identifier.nil? ? nil : changesets.find_by_revision(identifier)
+    rev = nil
+    if ! identifier.nil?
+      rev = changesets.find_by_revision(identifier)
+      return nil if rev.nil?
+    end
     entries = scm.entries(path, rev.nil? ? nil : rev.committed_on)
     if entries
       entries.each() do |entry|
-        unless entry.lastrev.nil? || entry.lastrev.identifier
-          change=changes.find_by_revision_and_path( entry.lastrev.revision, scm.with_leading_slash(entry.path) )
+        if ( ! entry.lastrev.nil? ) && ( ! entry.lastrev.revision.nil? )
+          change=changes.find_by_revision_and_path(
+                     entry.lastrev.revision,
+                     scm.with_leading_slash(entry.path) )
           if change
-            entry.lastrev.identifier=change.changeset.revision
-            entry.lastrev.author=change.changeset.committer
-            entry.lastrev.revision=change.revision
-            entry.lastrev.branch=change.branch
+            entry.lastrev.identifier = change.changeset.revision
+            entry.lastrev.revision   = change.changeset.revision
+            entry.lastrev.author     = change.changeset.committer
+            # entry.lastrev.branch     = change.branch
           end
         end
       end
     end
     entries
   end
-  
+
   def cat(path, identifier=nil)
-    rev = identifier.nil? ? nil : changesets.find_by_revision(identifier)
+    rev = nil
+    if ! identifier.nil?
+      rev = changesets.find_by_revision(identifier)
+      return nil if rev.nil?
+    end
     scm.cat(path, rev.nil? ? nil : rev.committed_on)
   end
-  
+
+  def annotate(path, identifier=nil)
+    rev = nil
+    if ! identifier.nil?
+      rev = changesets.find_by_revision(identifier)
+      return nil if rev.nil?
+    end
+    scm.annotate(path, rev.nil? ? nil : rev.committed_on)
+  end
+
   def diff(path, rev, rev_to)
-    #convert rev to revision. CVS can't handle changesets here
+    # convert rev to revision. CVS can't handle changesets here
     diff=[]
-    changeset_from=changesets.find_by_revision(rev)
-    if rev_to.to_i > 0 
-      changeset_to=changesets.find_by_revision(rev_to)
+    changeset_from = changesets.find_by_revision(rev)
+    if rev_to.to_i > 0
+      changeset_to = changesets.find_by_revision(rev_to)
     end
     changeset_from.changes.each() do |change_from|
-      
-      revision_from=nil
-      revision_to=nil      
-      
-      revision_from=change_from.revision if path.nil? || (change_from.path.starts_with? scm.with_leading_slash(path))
-      
+      revision_from = nil
+      revision_to   = nil
+      if path.nil? || (change_from.path.starts_with? scm.with_leading_slash(path))
+        revision_from = change_from.revision
+      end
       if revision_from
         if changeset_to
           changeset_to.changes.each() do |change_to|
-            revision_to=change_to.revision if change_to.path==change_from.path 
+            revision_to = change_to.revision if change_to.path == change_from.path
           end
         end
         unless revision_to
-          revision_to=scm.get_previous_revision(revision_from)
+          revision_to = scm.get_previous_revision(revision_from)
         end
         file_diff = scm.diff(change_from.path, revision_from, revision_to)
         diff = diff + file_diff unless file_diff.nil?
@@ -96,79 +115,85 @@
     end
     return diff
   end
-  
+
   def fetch_changesets
     # some nifty bits to introduce a commit-id with cvs
-    # natively cvs doesn't provide any kind of changesets, there is only a revision per file.
+    # natively cvs doesn't provide any kind of changesets,
+    # there is only a revision per file.
     # we now take a guess using the author, the commitlog and the commit-date.
-    
-    # last one is the next step to take. the commit-date is not equal for all 
+
+    # last one is the next step to take. the commit-date is not equal for all
     # commits in one changeset. cvs update the commit-date when the *,v file was touched. so
     # we use a small delta here, to merge all changes belonging to _one_ changeset
-    time_delta=10.seconds
-    
+    time_delta  = 10.seconds
     fetch_since = latest_changeset ? latest_changeset.committed_on : nil
     transaction do
       tmp_rev_num = 1
-      scm.revisions('', fetch_since, nil, :with_paths => true) do |revision|
+      scm.revisions('', fetch_since, nil, :log_encoding => repo_log_encoding) do |revision|
         # only add the change to the database, if it doen't exists. the cvs log
-        # is not exclusive at all. 
+        # is not exclusive at all.
         tmp_time = revision.time.clone
         unless changes.find_by_path_and_revision(
-	           scm.with_leading_slash(revision.paths[0][:path]), revision.paths[0][:revision])
+	                         scm.with_leading_slash(revision.paths[0][:path]),
+	                         revision.paths[0][:revision]
+	                           )
           cmt = Changeset.normalize_comments(revision.message, repo_log_encoding)
-          cs = changesets.find(:first, :conditions=>{
-            :committed_on=>tmp_time - time_delta .. tmp_time + time_delta,
-            :committer=>revision.author,
-            :comments=>cmt
-          })
-        
-          # create a new changeset.... 
+          author_utf8 = Changeset.to_utf8(revision.author, repo_log_encoding)
+          cs  = changesets.find(
+            :first,
+            :conditions => {
+                :committed_on => tmp_time - time_delta .. tmp_time + time_delta,
+                :committer    => author_utf8,
+                :comments     => cmt
+                }
+             )
+          # create a new changeset....
           unless cs
             # we use a temporaray revision number here (just for inserting)
             # later on, we calculate a continous positive number
             tmp_time2 = tmp_time.clone.gmtime
-            branch = revision.paths[0][:branch]
-            scmid = branch + "-" + tmp_time2.strftime("%Y%m%d-%H%M%S")
-            cs = Changeset.create(:repository => self,
-                                  :revision => "tmp#{tmp_rev_num}",
-                                  :scmid => scmid,
-                                  :committer => revision.author, 
+            branch    = revision.paths[0][:branch]
+            scmid     = branch + "-" + tmp_time2.strftime("%Y%m%d-%H%M%S")
+            cs = Changeset.create(:repository   => self,
+                                  :revision     => "tmp#{tmp_rev_num}",
+                                  :scmid        => scmid,
+                                  :committer    => revision.author,
                                   :committed_on => tmp_time,
-                                  :comments => revision.message)
+                                  :comments     => revision.message)
             tmp_rev_num += 1
           end
-        
-          #convert CVS-File-States to internal Action-abbrevations
-          #default action is (M)odified
-          action="M"
-          if revision.paths[0][:action]=="Exp" && revision.paths[0][:revision]=="1.1"
-            action="A" #add-action always at first revision (= 1.1)
-          elsif revision.paths[0][:action]=="dead"
-            action="D" #dead-state is similar to Delete
+          # convert CVS-File-States to internal Action-abbrevations
+          # default action is (M)odified
+          action = "M"
+          if revision.paths[0][:action] == "Exp" && revision.paths[0][:revision] == "1.1"
+            action = "A" # add-action always at first revision (= 1.1)
+          elsif revision.paths[0][:action] == "dead"
+            action = "D" # dead-state is similar to Delete
           end
-        
-          Change.create(:changeset => cs,
-          :action => action,
-          :path => scm.with_leading_slash(revision.paths[0][:path]),
-          :revision => revision.paths[0][:revision],
-          :branch => revision.paths[0][:branch]
-          )
+          Change.create(
+             :changeset => cs,
+             :action    => action,
+             :path      => scm.with_leading_slash(revision.paths[0][:path]),
+             :revision  => revision.paths[0][:revision],
+             :branch    => revision.paths[0][:branch]
+              )
         end
       end
-      
+
       # Renumber new changesets in chronological order
       changesets.find(
-              :all, :order => 'committed_on ASC, id ASC', :conditions => "revision LIKE 'tmp%'"
+              :all,
+              :order => 'committed_on ASC, id ASC',
+              :conditions => "revision LIKE 'tmp%'"
            ).each do |changeset|
         changeset.update_attribute :revision, next_revision_number
       end
     end # transaction
     @current_revision_number = nil
   end
-  
+
   private
-  
+
   # Returns the next revision number to assign to a CVS changeset
   def next_revision_number
     # Need to retrieve existing revision numbers to sort them as integers
--- a/app/models/repository/.svn/text-base/darcs.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/.svn/text-base/darcs.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,12 +20,12 @@
 class Repository::Darcs < Repository
   validates_presence_of :url, :log_encoding
 
-  ATTRIBUTE_KEY_NAMES = {
-      "url"          => "Root directory",
-      "log_encoding" => "Commit messages encoding",
-    }
   def self.human_attribute_name(attribute_key_name)
-    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+    attr_name = attribute_key_name
+    if attr_name == "url"
+      attr_name = "path_to_repository"
+    end
+    super(attr_name)
   end
 
   def self.scm_adapter_class
@@ -36,34 +36,44 @@
     'Darcs'
   end
 
+  def supports_directory_revisions?
+    true
+  end
+
   def entry(path=nil, identifier=nil)
     patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)
     scm.entry(path, patch.nil? ? nil : patch.scmid)
   end
-  
+
   def entries(path=nil, identifier=nil)
-    patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)
+    patch = nil
+    if ! identifier.nil?
+      patch = changesets.find_by_revision(identifier)
+      return nil if patch.nil?
+    end
     entries = scm.entries(path, patch.nil? ? nil : patch.scmid)
     if entries
       entries.each do |entry|
         # Search the DB for the entry's last change
-        changeset = changesets.find_by_scmid(entry.lastrev.scmid) if entry.lastrev && !entry.lastrev.scmid.blank?
+        if entry.lastrev && !entry.lastrev.scmid.blank?
+          changeset = changesets.find_by_scmid(entry.lastrev.scmid)
+        end
         if changeset
           entry.lastrev.identifier = changeset.revision
-          entry.lastrev.name = changeset.revision
-          entry.lastrev.time = changeset.committed_on
-          entry.lastrev.author = changeset.committer
+          entry.lastrev.name       = changeset.revision
+          entry.lastrev.time       = changeset.committed_on
+          entry.lastrev.author     = changeset.committer
         end
       end
     end
     entries
   end
-  
+
   def cat(path, identifier=nil)
     patch = identifier.nil? ? nil : changesets.find_by_revision(identifier.to_s)
     scm.cat(path, patch.nil? ? nil : patch.scmid)
   end
-  
+
   def diff(path, rev, rev_to)
     patch_from = changesets.find_by_revision(rev)
     return nil if patch_from.nil?
@@ -73,25 +83,24 @@
     end
     patch_from ? scm.diff(path, patch_from.scmid, patch_to ? patch_to.scmid : nil) : nil
   end
-  
+
   def fetch_changesets
     scm_info = scm.info
     if scm_info
       db_last_id = latest_changeset ? latest_changeset.scmid : nil
-      next_rev = latest_changeset ? latest_changeset.revision.to_i + 1 : 1      
+      next_rev   = latest_changeset ? latest_changeset.revision.to_i + 1 : 1
       # latest revision in the repository
-      scm_revision = scm_info.lastrev.scmid      
+      scm_revision = scm_info.lastrev.scmid
       unless changesets.find_by_scmid(scm_revision)
         revisions = scm.revisions('', db_last_id, nil, :with_path => true)
         transaction do
           revisions.reverse_each do |revision|
-            changeset = Changeset.create(:repository => self,
-                                         :revision => next_rev,
-                                         :scmid => revision.scmid,
-                                         :committer => revision.author, 
+            changeset = Changeset.create(:repository   => self,
+                                         :revision     => next_rev,
+                                         :scmid        => revision.scmid,
+                                         :committer    => revision.author,
                                          :committed_on => revision.time,
-                                         :comments => revision.message)
-                                         
+                                         :comments     => revision.message)
             revision.paths.each do |change|
               changeset.create_change(change)
             end
--- a/app/models/repository/.svn/text-base/filesystem.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/.svn/text-base/filesystem.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # FileSystem adapter
 # File written by Paul Rivier, at Demotera.
@@ -8,12 +8,12 @@
 # modify it under the terms of the 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.
@@ -24,11 +24,12 @@
   attr_protected :root_url
   validates_presence_of :url
 
-  ATTRIBUTE_KEY_NAMES = {
-      "url"          => "Root directory",
-    }
   def self.human_attribute_name(attribute_key_name)
-    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+    attr_name = attribute_key_name
+    if attr_name == "url"
+      attr_name = "root_directory"
+    end
+    super(attr_name)
   end
 
   def self.scm_adapter_class
@@ -39,6 +40,10 @@
     'Filesystem'
   end
 
+  def supports_all_revisions?
+    false
+  end
+
   def entries(path=nil, identifier=nil)
     scm.entries(path, identifier)
   end
@@ -46,5 +51,4 @@
   def fetch_changesets
     nil
   end
-  
 end
--- a/app/models/repository/.svn/text-base/git.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/.svn/text-base/git.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,17 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 # Copyright (C) 2007  Patrick Aljord patcito@ŋmail.com
+#
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
 # of the License, or (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,11 +22,12 @@
   attr_protected :root_url
   validates_presence_of :url
 
-  ATTRIBUTE_KEY_NAMES = {
-      "url"          => "Path to repository",
-    }
   def self.human_attribute_name(attribute_key_name)
-    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+    attr_name = attribute_key_name
+    if attr_name == "url"
+      attr_name = "path_to_repository"
+    end
+    super(attr_name)
   end
 
   def self.scm_adapter_class
@@ -36,6 +38,21 @@
     'Git'
   end
 
+  def report_last_commit
+    extra_report_last_commit
+  end
+
+  def extra_report_last_commit
+    return false if extra_info.nil?
+    v = extra_info["extra_report_last_commit"]
+    return false if v.nil?
+    v.to_s != '0'
+  end
+
+  def supports_directory_revisions?
+    true
+  end
+
   def repo_log_encoding
     'UTF-8'
   end
@@ -65,63 +82,92 @@
     changesets.find(:first, :conditions => ['scmid LIKE ?', "#{name}%"])
   end
 
-  # With SCM's that have a sequential commit numbering, redmine is able to be
-  # clever and only fetch changesets going forward from the most recent one
-  # it knows about.  However, with git, you never know if people have merged
-  # commits into the middle of the repository history, so we should parse
-  # the entire log. Since it's way too slow for large repositories, we only
-  # parse 1 week before the last known commit.
+  def entries(path=nil, identifier=nil)
+    scm.entries(path,
+                identifier,
+                options = {:report_last_commit => extra_report_last_commit})
+  end
+
+  # In Git and Mercurial, revisions are not in date order.
+  # Redmine Mercurial fixed issues.
+  #    * Redmine Takes Too Long On Large Mercurial Repository
+  #      http://www.redmine.org/issues/3449
+  #    * Sorting for changesets might go wrong on Mercurial repos
+  #      http://www.redmine.org/issues/3567
+  #
+  # Database revision column is text, so Redmine can not sort by revision.
+  # Mercurial has revision number, and revision number guarantees revision order.
+  # Redmine Mercurial model stored revisions ordered by database id to database.
+  # So, Redmine Mercurial model can use correct ordering revisions.
+  #
+  # Redmine Mercurial adapter uses "hg log -r 0:tip --limit 10"
+  # to get limited revisions from old to new.
+  # But, Git 1.7.3.4 does not support --reverse with -n or --skip.
+  #
   # The repository can still be fully reloaded by calling #clear_changesets
   # before fetching changesets (eg. for offline resync)
   def fetch_changesets
-    c = changesets.find(:first, :order => 'committed_on DESC')
-    since = (c ? c.committed_on - 7.days : nil)
-
-    revisions = scm.revisions('', nil, nil, :all => true, :since => since)
-    return if revisions.nil? || revisions.empty?
-
-    recent_changesets = changesets.find(:all, :conditions => ['committed_on >= ?', since])
-
-    # Clean out revisions that are no longer in git
-    recent_changesets.each {|c| c.destroy unless revisions.detect {|r| r.scmid.to_s == c.scmid.to_s }}
-
-    # Subtract revisions that redmine already knows about
-    recent_revisions = recent_changesets.map{|c| c.scmid}
-    revisions.reject!{|r| recent_revisions.include?(r.scmid)}
-
-    # Save the remaining ones to the database
-    unless revisions.nil?
-      revisions.each do |rev|
+    scm_brs = branches
+    return if scm_brs.nil? || scm_brs.empty?
+    h1 = extra_info || {}
+    h  = h1.dup
+    h["branches"]       ||= {}
+    h["db_consistent"]  ||= {}
+    if changesets.count == 0
+      h["db_consistent"]["ordering"] = 1
+      merge_extra_info(h)
+      self.save
+    elsif ! h["db_consistent"].has_key?("ordering")
+      h["db_consistent"]["ordering"] = 0
+      merge_extra_info(h)
+      self.save
+    end
+    scm_brs.each do |br|
+      from_scmid = nil
+      from_scmid = h["branches"][br]["last_scmid"] if h["branches"][br]
+      h["branches"][br] ||= {}
+      scm.revisions('', from_scmid, br, {:reverse => true}) do |rev|
+        db_rev = find_changeset_by_name(rev.revision)
         transaction do
-          changeset = Changeset.new(
-              :repository => self,
-              :revision   => rev.identifier,
-              :scmid      => rev.scmid,
-              :committer  => rev.author, 
-              :committed_on => rev.time,
-              :comments   => rev.message)
-            
-          if changeset.save
-            rev.paths.each do |file|
-              Change.create(
-                  :changeset => changeset,
-                  :action    => file[:action],
-                  :path      => file[:path])
-            end
+          if db_rev.nil?
+            save_revision(rev)
           end
+          h["branches"][br]["last_scmid"] = rev.scmid
+          merge_extra_info(h)
+          self.save
         end
       end
     end
   end
 
+  def save_revision(rev)
+    changeset = Changeset.new(
+              :repository   => self,
+              :revision     => rev.identifier,
+              :scmid        => rev.scmid,
+              :committer    => rev.author,
+              :committed_on => rev.time,
+              :comments     => rev.message
+              )
+    if changeset.save
+      rev.paths.each do |file|
+        Change.create(
+                  :changeset => changeset,
+                  :action    => file[:action],
+                  :path      => file[:path])
+      end
+    end
+  end
+  private :save_revision
+
   def latest_changesets(path,rev,limit=10)
     revisions = scm.revisions(path, nil, rev, :limit => limit, :all => false)
     return [] if revisions.nil? || revisions.empty?
 
     changesets.find(
-      :all, 
+      :all,
       :conditions => [
-        "scmid IN (?)", 
+        "scmid IN (?)",
         revisions.map!{|c| c.scmid}
       ],
       :order => 'committed_on DESC'
--- a/app/models/repository/.svn/text-base/mercurial.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/.svn/text-base/mercurial.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -26,11 +26,12 @@
 
   FETCH_AT_ONCE = 100  # number of changesets to fetch at once
 
-  ATTRIBUTE_KEY_NAMES = {
-      "url"          => "Root directory",
-    }
   def self.human_attribute_name(attribute_key_name)
-    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+    attr_name = attribute_key_name
+    if attr_name == "url"
+      attr_name = "path_to_repository"
+    end
+    super(attr_name)
   end
 
   def self.scm_adapter_class
@@ -41,6 +42,10 @@
     'Mercurial'
   end
 
+  def supports_directory_revisions?
+    true
+  end
+
   def repo_log_encoding
     'UTF-8'
   end
@@ -55,14 +60,6 @@
     changeset.scmid
   end
 
-  def branches
-    nil
-  end
-
-  def tags
-    nil
-  end
-
   def diff_format_revisions(cs, cs_to, sep=':')
     super(cs, cs_to, ' ')
   end
@@ -80,19 +77,50 @@
   end
 
   # Returns the latest changesets for +path+; sorted by revision number
-  # Default behavior is to search in cached changesets
+  #
+  # Because :order => 'id DESC' is defined at 'has_many',
+  # there is no need to set 'order'.
+  # But, MySQL test fails.
+  # Sqlite3 and PostgreSQL pass.
+  # Is this MySQL bug?
   def latest_changesets(path, rev, limit=10)
-    if path.blank?
-      changesets.find(:all, :include => :user, :limit => limit)
-    else
-      changesets.find(:all, :select => "DISTINCT #{Changeset.table_name}.*",
-                      :joins => :changes,
-                      :conditions => ["#{Change.table_name}.path = ? OR #{Change.table_name}.path LIKE ? ESCAPE ?",
-                                      path.with_leading_slash,
-                                      "#{path.with_leading_slash.gsub(/[%_\\]/) { |s| "\\#{s}" }}/%", '\\'],
-                      :include => :user, :limit => limit)
+    changesets.find(:all, :include => :user,
+                    :conditions => latest_changesets_cond(path, rev, limit),
+                    :limit => limit, :order => "#{Changeset.table_name}.id DESC")
+  end
+
+  def latest_changesets_cond(path, rev, limit)
+    cond, args = [], []
+    if scm.branchmap.member? rev
+      # Mercurial named branch is *stable* in each revision.
+      # So, named branch can be stored in database.
+      # Mercurial provides *bookmark* which is equivalent with git branch.
+      # But, bookmark is not implemented.
+      cond << "#{Changeset.table_name}.scmid IN (?)"
+      # Revisions in root directory and sub directory are not equal.
+      # So, in order to get correct limit, we need to get all revisions.
+      # But, it is very heavy.
+      # Mercurial does not treat direcotry.
+      # So, "hg log DIR" is very heavy.
+      branch_limit = path.blank? ? limit : ( limit * 5 )
+      args << scm.nodes_in_branch(rev, :limit => branch_limit)
+    elsif last = rev ? find_changeset_by_name(scm.tagmap[rev] || rev) : nil
+      cond << "#{Changeset.table_name}.id <= ?"
+      args << last.id
     end
+
+    unless path.blank?
+      cond << "EXISTS (SELECT * FROM #{Change.table_name}
+                 WHERE #{Change.table_name}.changeset_id = #{Changeset.table_name}.id
+                 AND (#{Change.table_name}.path = ?
+                       OR #{Change.table_name}.path LIKE ? ESCAPE ?))"
+      args << path.with_leading_slash
+      args << "#{path.with_leading_slash.gsub(/[%_\\]/) { |s| "\\#{s}" }}/%" << '\\'
+    end
+
+    [cond.join(' AND '), *args] unless cond.empty?
   end
+  private :latest_changesets_cond
 
   def fetch_changesets
     scm_rev = scm.info.lastrev.revision.to_i
--- a/app/models/repository/.svn/text-base/subversion.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/.svn/text-base/subversion.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -30,6 +30,10 @@
     'Subversion'
   end
 
+  def supports_directory_revisions?
+    true
+  end
+
   def repo_log_encoding
     'UTF-8'
   end
@@ -38,12 +42,12 @@
     revisions = scm.revisions(path, rev, nil, :limit => limit)
     revisions ? changesets.find_all_by_revision(revisions.collect(&:identifier), :order => "committed_on DESC", :include => :user) : []
   end
-  
+
   # Returns a path relative to the url of the repository
   def relative_path(path)
     path.gsub(Regexp.new("^\/?#{Regexp.escape(relative_url)}"), '')
   end
-  
+
   def fetch_changesets
     scm_info = scm.info
     if scm_info
@@ -60,12 +64,12 @@
           revisions = scm.revisions('', identifier_to, identifier_from, :with_paths => true)
           revisions.reverse_each do |revision|
             transaction do
-              changeset = Changeset.create(:repository => self,
-                                           :revision => revision.identifier, 
-                                           :committer => revision.author, 
+              changeset = Changeset.create(:repository   => self,
+                                           :revision     => revision.identifier,
+                                           :committer    => revision.author,
                                            :committed_on => revision.time,
-                                           :comments => revision.message)
-              
+                                           :comments     => revision.message)
+
               revision.paths.each do |change|
                 changeset.create_change(change)
               end unless changeset.new_record?
@@ -76,9 +80,9 @@
       end
     end
   end
-  
+
   private
-  
+
   # Returns the relative url of the repository
   # Eg: root_url = file:///var/svn/foo
   #     url      = file:///var/svn/foo/bar
--- a/app/models/repository/bazaar.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/bazaar.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,12 +21,12 @@
   attr_protected :root_url
   validates_presence_of :url, :log_encoding
 
-  ATTRIBUTE_KEY_NAMES = {
-      "url"          => "Root directory",
-      "log_encoding" => "Commit messages encoding",
-    }
   def self.human_attribute_name(attribute_key_name)
-    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+    attr_name = attribute_key_name
+    if attr_name == "url"
+      attr_name = "path_to_repository"
+    end
+    super(attr_name)
   end
 
   def self.scm_adapter_class
@@ -47,19 +47,24 @@
           full_path = File.join(root_url, e.path)
           e.size = File.stat(full_path).size if File.file?(full_path)
         end
-        c = Change.find(:first,
-                        :include => :changeset,
-                        :conditions => ["#{Change.table_name}.revision = ? and #{Changeset.table_name}.repository_id = ?", e.lastrev.revision, id],
-                        :order => "#{Changeset.table_name}.revision DESC")
+        c = Change.find(
+               :first,
+               :include    => :changeset,
+               :conditions => [
+                   "#{Change.table_name}.revision = ? and #{Changeset.table_name}.repository_id = ?",
+                   e.lastrev.revision,
+                   id
+                   ],
+               :order => "#{Changeset.table_name}.revision DESC")
         if c
           e.lastrev.identifier = c.changeset.revision
-          e.lastrev.name = c.changeset.revision
-          e.lastrev.author = c.changeset.committer
+          e.lastrev.name       = c.changeset.revision
+          e.lastrev.author     = c.changeset.committer
         end
       end
     end
   end
-  
+
   def fetch_changesets
     scm_info = scm.info
     if scm_info
@@ -76,18 +81,18 @@
           revisions = scm.revisions('', identifier_to, identifier_from, :with_paths => true)
           transaction do
             revisions.reverse_each do |revision|
-              changeset = Changeset.create(:repository => self,
-                                           :revision => revision.identifier, 
-                                           :committer => revision.author, 
+              changeset = Changeset.create(:repository   => self,
+                                           :revision     => revision.identifier,
+                                           :committer    => revision.author,
                                            :committed_on => revision.time,
-                                           :scmid => revision.scmid,
-                                           :comments => revision.message)
-              
+                                           :scmid        => revision.scmid,
+                                           :comments     => revision.message)
+
               revision.paths.each do |change|
                 Change.create(:changeset => changeset,
-                              :action => change[:action],
-                              :path => change[:path],
-                              :revision => change[:revision])
+                              :action    => change[:action],
+                              :path      => change[:path],
+                              :revision  => change[:revision])
               end
             end
           end unless revisions.nil?
--- a/app/models/repository/cvs.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/cvs.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,13 +21,14 @@
 class Repository::Cvs < Repository
   validates_presence_of :url, :root_url, :log_encoding
 
-  ATTRIBUTE_KEY_NAMES = {
-      "url"          => "CVSROOT",
-      "root_url"     => "Module",
-      "log_encoding" => "Commit messages encoding",
-    }
   def self.human_attribute_name(attribute_key_name)
-    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+    attr_name = attribute_key_name
+    if attr_name == "root_url"
+      attr_name = "cvsroot"
+    elsif attr_name == "url"
+      attr_name = "cvs_module"
+    end
+    super(attr_name)
   end
 
   def self.scm_adapter_class
@@ -42,53 +43,71 @@
     rev = identifier.nil? ? nil : changesets.find_by_revision(identifier)
     scm.entry(path, rev.nil? ? nil : rev.committed_on)
   end
-  
+
   def entries(path=nil, identifier=nil)
-    rev = identifier.nil? ? nil : changesets.find_by_revision(identifier)
+    rev = nil
+    if ! identifier.nil?
+      rev = changesets.find_by_revision(identifier)
+      return nil if rev.nil?
+    end
     entries = scm.entries(path, rev.nil? ? nil : rev.committed_on)
     if entries
       entries.each() do |entry|
-        unless entry.lastrev.nil? || entry.lastrev.identifier
-          change=changes.find_by_revision_and_path( entry.lastrev.revision, scm.with_leading_slash(entry.path) )
+        if ( ! entry.lastrev.nil? ) && ( ! entry.lastrev.revision.nil? )
+          change=changes.find_by_revision_and_path(
+                     entry.lastrev.revision,
+                     scm.with_leading_slash(entry.path) )
           if change
-            entry.lastrev.identifier=change.changeset.revision
-            entry.lastrev.author=change.changeset.committer
-            entry.lastrev.revision=change.revision
-            entry.lastrev.branch=change.branch
+            entry.lastrev.identifier = change.changeset.revision
+            entry.lastrev.revision   = change.changeset.revision
+            entry.lastrev.author     = change.changeset.committer
+            # entry.lastrev.branch     = change.branch
           end
         end
       end
     end
     entries
   end
-  
+
   def cat(path, identifier=nil)
-    rev = identifier.nil? ? nil : changesets.find_by_revision(identifier)
+    rev = nil
+    if ! identifier.nil?
+      rev = changesets.find_by_revision(identifier)
+      return nil if rev.nil?
+    end
     scm.cat(path, rev.nil? ? nil : rev.committed_on)
   end
-  
+
+  def annotate(path, identifier=nil)
+    rev = nil
+    if ! identifier.nil?
+      rev = changesets.find_by_revision(identifier)
+      return nil if rev.nil?
+    end
+    scm.annotate(path, rev.nil? ? nil : rev.committed_on)
+  end
+
   def diff(path, rev, rev_to)
-    #convert rev to revision. CVS can't handle changesets here
+    # convert rev to revision. CVS can't handle changesets here
     diff=[]
-    changeset_from=changesets.find_by_revision(rev)
-    if rev_to.to_i > 0 
-      changeset_to=changesets.find_by_revision(rev_to)
+    changeset_from = changesets.find_by_revision(rev)
+    if rev_to.to_i > 0
+      changeset_to = changesets.find_by_revision(rev_to)
     end
     changeset_from.changes.each() do |change_from|
-      
-      revision_from=nil
-      revision_to=nil      
-      
-      revision_from=change_from.revision if path.nil? || (change_from.path.starts_with? scm.with_leading_slash(path))
-      
+      revision_from = nil
+      revision_to   = nil
+      if path.nil? || (change_from.path.starts_with? scm.with_leading_slash(path))
+        revision_from = change_from.revision
+      end
       if revision_from
         if changeset_to
           changeset_to.changes.each() do |change_to|
-            revision_to=change_to.revision if change_to.path==change_from.path 
+            revision_to = change_to.revision if change_to.path == change_from.path
           end
         end
         unless revision_to
-          revision_to=scm.get_previous_revision(revision_from)
+          revision_to = scm.get_previous_revision(revision_from)
         end
         file_diff = scm.diff(change_from.path, revision_from, revision_to)
         diff = diff + file_diff unless file_diff.nil?
@@ -96,79 +115,85 @@
     end
     return diff
   end
-  
+
   def fetch_changesets
     # some nifty bits to introduce a commit-id with cvs
-    # natively cvs doesn't provide any kind of changesets, there is only a revision per file.
+    # natively cvs doesn't provide any kind of changesets,
+    # there is only a revision per file.
     # we now take a guess using the author, the commitlog and the commit-date.
-    
-    # last one is the next step to take. the commit-date is not equal for all 
+
+    # last one is the next step to take. the commit-date is not equal for all
     # commits in one changeset. cvs update the commit-date when the *,v file was touched. so
     # we use a small delta here, to merge all changes belonging to _one_ changeset
-    time_delta=10.seconds
-    
+    time_delta  = 10.seconds
     fetch_since = latest_changeset ? latest_changeset.committed_on : nil
     transaction do
       tmp_rev_num = 1
-      scm.revisions('', fetch_since, nil, :with_paths => true) do |revision|
+      scm.revisions('', fetch_since, nil, :log_encoding => repo_log_encoding) do |revision|
         # only add the change to the database, if it doen't exists. the cvs log
-        # is not exclusive at all. 
+        # is not exclusive at all.
         tmp_time = revision.time.clone
         unless changes.find_by_path_and_revision(
-	           scm.with_leading_slash(revision.paths[0][:path]), revision.paths[0][:revision])
+	                         scm.with_leading_slash(revision.paths[0][:path]),
+	                         revision.paths[0][:revision]
+	                           )
           cmt = Changeset.normalize_comments(revision.message, repo_log_encoding)
-          cs = changesets.find(:first, :conditions=>{
-            :committed_on=>tmp_time - time_delta .. tmp_time + time_delta,
-            :committer=>revision.author,
-            :comments=>cmt
-          })
-        
-          # create a new changeset.... 
+          author_utf8 = Changeset.to_utf8(revision.author, repo_log_encoding)
+          cs  = changesets.find(
+            :first,
+            :conditions => {
+                :committed_on => tmp_time - time_delta .. tmp_time + time_delta,
+                :committer    => author_utf8,
+                :comments     => cmt
+                }
+             )
+          # create a new changeset....
           unless cs
             # we use a temporaray revision number here (just for inserting)
             # later on, we calculate a continous positive number
             tmp_time2 = tmp_time.clone.gmtime
-            branch = revision.paths[0][:branch]
-            scmid = branch + "-" + tmp_time2.strftime("%Y%m%d-%H%M%S")
-            cs = Changeset.create(:repository => self,
-                                  :revision => "tmp#{tmp_rev_num}",
-                                  :scmid => scmid,
-                                  :committer => revision.author, 
+            branch    = revision.paths[0][:branch]
+            scmid     = branch + "-" + tmp_time2.strftime("%Y%m%d-%H%M%S")
+            cs = Changeset.create(:repository   => self,
+                                  :revision     => "tmp#{tmp_rev_num}",
+                                  :scmid        => scmid,
+                                  :committer    => revision.author,
                                   :committed_on => tmp_time,
-                                  :comments => revision.message)
+                                  :comments     => revision.message)
             tmp_rev_num += 1
           end
-        
-          #convert CVS-File-States to internal Action-abbrevations
-          #default action is (M)odified
-          action="M"
-          if revision.paths[0][:action]=="Exp" && revision.paths[0][:revision]=="1.1"
-            action="A" #add-action always at first revision (= 1.1)
-          elsif revision.paths[0][:action]=="dead"
-            action="D" #dead-state is similar to Delete
+          # convert CVS-File-States to internal Action-abbrevations
+          # default action is (M)odified
+          action = "M"
+          if revision.paths[0][:action] == "Exp" && revision.paths[0][:revision] == "1.1"
+            action = "A" # add-action always at first revision (= 1.1)
+          elsif revision.paths[0][:action] == "dead"
+            action = "D" # dead-state is similar to Delete
           end
-        
-          Change.create(:changeset => cs,
-          :action => action,
-          :path => scm.with_leading_slash(revision.paths[0][:path]),
-          :revision => revision.paths[0][:revision],
-          :branch => revision.paths[0][:branch]
-          )
+          Change.create(
+             :changeset => cs,
+             :action    => action,
+             :path      => scm.with_leading_slash(revision.paths[0][:path]),
+             :revision  => revision.paths[0][:revision],
+             :branch    => revision.paths[0][:branch]
+              )
         end
       end
-      
+
       # Renumber new changesets in chronological order
       changesets.find(
-              :all, :order => 'committed_on ASC, id ASC', :conditions => "revision LIKE 'tmp%'"
+              :all,
+              :order => 'committed_on ASC, id ASC',
+              :conditions => "revision LIKE 'tmp%'"
            ).each do |changeset|
         changeset.update_attribute :revision, next_revision_number
       end
     end # transaction
     @current_revision_number = nil
   end
-  
+
   private
-  
+
   # Returns the next revision number to assign to a CVS changeset
   def next_revision_number
     # Need to retrieve existing revision numbers to sort them as integers
--- a/app/models/repository/darcs.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/darcs.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,12 +20,12 @@
 class Repository::Darcs < Repository
   validates_presence_of :url, :log_encoding
 
-  ATTRIBUTE_KEY_NAMES = {
-      "url"          => "Root directory",
-      "log_encoding" => "Commit messages encoding",
-    }
   def self.human_attribute_name(attribute_key_name)
-    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+    attr_name = attribute_key_name
+    if attr_name == "url"
+      attr_name = "path_to_repository"
+    end
+    super(attr_name)
   end
 
   def self.scm_adapter_class
@@ -36,34 +36,44 @@
     'Darcs'
   end
 
+  def supports_directory_revisions?
+    true
+  end
+
   def entry(path=nil, identifier=nil)
     patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)
     scm.entry(path, patch.nil? ? nil : patch.scmid)
   end
-  
+
   def entries(path=nil, identifier=nil)
-    patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)
+    patch = nil
+    if ! identifier.nil?
+      patch = changesets.find_by_revision(identifier)
+      return nil if patch.nil?
+    end
     entries = scm.entries(path, patch.nil? ? nil : patch.scmid)
     if entries
       entries.each do |entry|
         # Search the DB for the entry's last change
-        changeset = changesets.find_by_scmid(entry.lastrev.scmid) if entry.lastrev && !entry.lastrev.scmid.blank?
+        if entry.lastrev && !entry.lastrev.scmid.blank?
+          changeset = changesets.find_by_scmid(entry.lastrev.scmid)
+        end
         if changeset
           entry.lastrev.identifier = changeset.revision
-          entry.lastrev.name = changeset.revision
-          entry.lastrev.time = changeset.committed_on
-          entry.lastrev.author = changeset.committer
+          entry.lastrev.name       = changeset.revision
+          entry.lastrev.time       = changeset.committed_on
+          entry.lastrev.author     = changeset.committer
         end
       end
     end
     entries
   end
-  
+
   def cat(path, identifier=nil)
     patch = identifier.nil? ? nil : changesets.find_by_revision(identifier.to_s)
     scm.cat(path, patch.nil? ? nil : patch.scmid)
   end
-  
+
   def diff(path, rev, rev_to)
     patch_from = changesets.find_by_revision(rev)
     return nil if patch_from.nil?
@@ -73,25 +83,24 @@
     end
     patch_from ? scm.diff(path, patch_from.scmid, patch_to ? patch_to.scmid : nil) : nil
   end
-  
+
   def fetch_changesets
     scm_info = scm.info
     if scm_info
       db_last_id = latest_changeset ? latest_changeset.scmid : nil
-      next_rev = latest_changeset ? latest_changeset.revision.to_i + 1 : 1      
+      next_rev   = latest_changeset ? latest_changeset.revision.to_i + 1 : 1
       # latest revision in the repository
-      scm_revision = scm_info.lastrev.scmid      
+      scm_revision = scm_info.lastrev.scmid
       unless changesets.find_by_scmid(scm_revision)
         revisions = scm.revisions('', db_last_id, nil, :with_path => true)
         transaction do
           revisions.reverse_each do |revision|
-            changeset = Changeset.create(:repository => self,
-                                         :revision => next_rev,
-                                         :scmid => revision.scmid,
-                                         :committer => revision.author, 
+            changeset = Changeset.create(:repository   => self,
+                                         :revision     => next_rev,
+                                         :scmid        => revision.scmid,
+                                         :committer    => revision.author,
                                          :committed_on => revision.time,
-                                         :comments => revision.message)
-                                         
+                                         :comments     => revision.message)
             revision.paths.each do |change|
               changeset.create_change(change)
             end
--- a/app/models/repository/filesystem.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/filesystem.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # FileSystem adapter
 # File written by Paul Rivier, at Demotera.
@@ -8,12 +8,12 @@
 # modify it under the terms of the 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.
@@ -24,11 +24,12 @@
   attr_protected :root_url
   validates_presence_of :url
 
-  ATTRIBUTE_KEY_NAMES = {
-      "url"          => "Root directory",
-    }
   def self.human_attribute_name(attribute_key_name)
-    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+    attr_name = attribute_key_name
+    if attr_name == "url"
+      attr_name = "root_directory"
+    end
+    super(attr_name)
   end
 
   def self.scm_adapter_class
@@ -39,6 +40,10 @@
     'Filesystem'
   end
 
+  def supports_all_revisions?
+    false
+  end
+
   def entries(path=nil, identifier=nil)
     scm.entries(path, identifier)
   end
@@ -46,5 +51,4 @@
   def fetch_changesets
     nil
   end
-  
 end
--- a/app/models/repository/git.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/git.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,17 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 # Copyright (C) 2007  Patrick Aljord patcito@ŋmail.com
+#
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
 # of the License, or (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,11 +22,12 @@
   attr_protected :root_url
   validates_presence_of :url
 
-  ATTRIBUTE_KEY_NAMES = {
-      "url"          => "Path to repository",
-    }
   def self.human_attribute_name(attribute_key_name)
-    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+    attr_name = attribute_key_name
+    if attr_name == "url"
+      attr_name = "path_to_repository"
+    end
+    super(attr_name)
   end
 
   def self.scm_adapter_class
@@ -36,6 +38,21 @@
     'Git'
   end
 
+  def report_last_commit
+    extra_report_last_commit
+  end
+
+  def extra_report_last_commit
+    return false if extra_info.nil?
+    v = extra_info["extra_report_last_commit"]
+    return false if v.nil?
+    v.to_s != '0'
+  end
+
+  def supports_directory_revisions?
+    true
+  end
+
   def repo_log_encoding
     'UTF-8'
   end
@@ -65,63 +82,92 @@
     changesets.find(:first, :conditions => ['scmid LIKE ?', "#{name}%"])
   end
 
-  # With SCM's that have a sequential commit numbering, redmine is able to be
-  # clever and only fetch changesets going forward from the most recent one
-  # it knows about.  However, with git, you never know if people have merged
-  # commits into the middle of the repository history, so we should parse
-  # the entire log. Since it's way too slow for large repositories, we only
-  # parse 1 week before the last known commit.
+  def entries(path=nil, identifier=nil)
+    scm.entries(path,
+                identifier,
+                options = {:report_last_commit => extra_report_last_commit})
+  end
+
+  # In Git and Mercurial, revisions are not in date order.
+  # Redmine Mercurial fixed issues.
+  #    * Redmine Takes Too Long On Large Mercurial Repository
+  #      http://www.redmine.org/issues/3449
+  #    * Sorting for changesets might go wrong on Mercurial repos
+  #      http://www.redmine.org/issues/3567
+  #
+  # Database revision column is text, so Redmine can not sort by revision.
+  # Mercurial has revision number, and revision number guarantees revision order.
+  # Redmine Mercurial model stored revisions ordered by database id to database.
+  # So, Redmine Mercurial model can use correct ordering revisions.
+  #
+  # Redmine Mercurial adapter uses "hg log -r 0:tip --limit 10"
+  # to get limited revisions from old to new.
+  # But, Git 1.7.3.4 does not support --reverse with -n or --skip.
+  #
   # The repository can still be fully reloaded by calling #clear_changesets
   # before fetching changesets (eg. for offline resync)
   def fetch_changesets
-    c = changesets.find(:first, :order => 'committed_on DESC')
-    since = (c ? c.committed_on - 7.days : nil)
-
-    revisions = scm.revisions('', nil, nil, :all => true, :since => since)
-    return if revisions.nil? || revisions.empty?
-
-    recent_changesets = changesets.find(:all, :conditions => ['committed_on >= ?', since])
-
-    # Clean out revisions that are no longer in git
-    recent_changesets.each {|c| c.destroy unless revisions.detect {|r| r.scmid.to_s == c.scmid.to_s }}
-
-    # Subtract revisions that redmine already knows about
-    recent_revisions = recent_changesets.map{|c| c.scmid}
-    revisions.reject!{|r| recent_revisions.include?(r.scmid)}
-
-    # Save the remaining ones to the database
-    unless revisions.nil?
-      revisions.each do |rev|
+    scm_brs = branches
+    return if scm_brs.nil? || scm_brs.empty?
+    h1 = extra_info || {}
+    h  = h1.dup
+    h["branches"]       ||= {}
+    h["db_consistent"]  ||= {}
+    if changesets.count == 0
+      h["db_consistent"]["ordering"] = 1
+      merge_extra_info(h)
+      self.save
+    elsif ! h["db_consistent"].has_key?("ordering")
+      h["db_consistent"]["ordering"] = 0
+      merge_extra_info(h)
+      self.save
+    end
+    scm_brs.each do |br|
+      from_scmid = nil
+      from_scmid = h["branches"][br]["last_scmid"] if h["branches"][br]
+      h["branches"][br] ||= {}
+      scm.revisions('', from_scmid, br, {:reverse => true}) do |rev|
+        db_rev = find_changeset_by_name(rev.revision)
         transaction do
-          changeset = Changeset.new(
-              :repository => self,
-              :revision   => rev.identifier,
-              :scmid      => rev.scmid,
-              :committer  => rev.author, 
-              :committed_on => rev.time,
-              :comments   => rev.message)
-            
-          if changeset.save
-            rev.paths.each do |file|
-              Change.create(
-                  :changeset => changeset,
-                  :action    => file[:action],
-                  :path      => file[:path])
-            end
+          if db_rev.nil?
+            save_revision(rev)
           end
+          h["branches"][br]["last_scmid"] = rev.scmid
+          merge_extra_info(h)
+          self.save
         end
       end
     end
   end
 
+  def save_revision(rev)
+    changeset = Changeset.new(
+              :repository   => self,
+              :revision     => rev.identifier,
+              :scmid        => rev.scmid,
+              :committer    => rev.author,
+              :committed_on => rev.time,
+              :comments     => rev.message
+              )
+    if changeset.save
+      rev.paths.each do |file|
+        Change.create(
+                  :changeset => changeset,
+                  :action    => file[:action],
+                  :path      => file[:path])
+      end
+    end
+  end
+  private :save_revision
+
   def latest_changesets(path,rev,limit=10)
     revisions = scm.revisions(path, nil, rev, :limit => limit, :all => false)
     return [] if revisions.nil? || revisions.empty?
 
     changesets.find(
-      :all, 
+      :all,
       :conditions => [
-        "scmid IN (?)", 
+        "scmid IN (?)",
         revisions.map!{|c| c.scmid}
       ],
       :order => 'committed_on DESC'
--- a/app/models/repository/mercurial.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/mercurial.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -26,11 +26,12 @@
 
   FETCH_AT_ONCE = 100  # number of changesets to fetch at once
 
-  ATTRIBUTE_KEY_NAMES = {
-      "url"          => "Root directory",
-    }
   def self.human_attribute_name(attribute_key_name)
-    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+    attr_name = attribute_key_name
+    if attr_name == "url"
+      attr_name = "path_to_repository"
+    end
+    super(attr_name)
   end
 
   def self.scm_adapter_class
@@ -41,6 +42,10 @@
     'Mercurial'
   end
 
+  def supports_directory_revisions?
+    true
+  end
+
   def repo_log_encoding
     'UTF-8'
   end
@@ -55,15 +60,6 @@
     changeset.scmid
   end
 
-  def branches
-    bras = scm.branches
-    bras.sort unless bras == %w|default|
-  end
-
-  def tags
-    nil
-  end
-
   def diff_format_revisions(cs, cs_to, sep=':')
     super(cs, cs_to, ' ')
   end
@@ -81,19 +77,50 @@
   end
 
   # Returns the latest changesets for +path+; sorted by revision number
-  # Default behavior is to search in cached changesets
+  #
+  # Because :order => 'id DESC' is defined at 'has_many',
+  # there is no need to set 'order'.
+  # But, MySQL test fails.
+  # Sqlite3 and PostgreSQL pass.
+  # Is this MySQL bug?
   def latest_changesets(path, rev, limit=10)
-    if path.blank?
-      changesets.find(:all, :include => :user, :limit => limit)
-    else
-      changesets.find(:all, :select => "DISTINCT #{Changeset.table_name}.*",
-                      :joins => :changes,
-                      :conditions => ["#{Change.table_name}.path = ? OR #{Change.table_name}.path LIKE ? ESCAPE ?",
-                                      path.with_leading_slash,
-                                      "#{path.with_leading_slash.gsub(/[%_\\]/) { |s| "\\#{s}" }}/%", '\\'],
-                      :include => :user, :limit => limit)
+    changesets.find(:all, :include => :user,
+                    :conditions => latest_changesets_cond(path, rev, limit),
+                    :limit => limit, :order => "#{Changeset.table_name}.id DESC")
+  end
+
+  def latest_changesets_cond(path, rev, limit)
+    cond, args = [], []
+    if scm.branchmap.member? rev
+      # Mercurial named branch is *stable* in each revision.
+      # So, named branch can be stored in database.
+      # Mercurial provides *bookmark* which is equivalent with git branch.
+      # But, bookmark is not implemented.
+      cond << "#{Changeset.table_name}.scmid IN (?)"
+      # Revisions in root directory and sub directory are not equal.
+      # So, in order to get correct limit, we need to get all revisions.
+      # But, it is very heavy.
+      # Mercurial does not treat direcotry.
+      # So, "hg log DIR" is very heavy.
+      branch_limit = path.blank? ? limit : ( limit * 5 )
+      args << scm.nodes_in_branch(rev, :limit => branch_limit)
+    elsif last = rev ? find_changeset_by_name(scm.tagmap[rev] || rev) : nil
+      cond << "#{Changeset.table_name}.id <= ?"
+      args << last.id
     end
+
+    unless path.blank?
+      cond << "EXISTS (SELECT * FROM #{Change.table_name}
+                 WHERE #{Change.table_name}.changeset_id = #{Changeset.table_name}.id
+                 AND (#{Change.table_name}.path = ?
+                       OR #{Change.table_name}.path LIKE ? ESCAPE ?))"
+      args << path.with_leading_slash
+      args << "#{path.with_leading_slash.gsub(/[%_\\]/) { |s| "\\#{s}" }}/%" << '\\'
+    end
+
+    [cond.join(' AND '), *args] unless cond.empty?
   end
+  private :latest_changesets_cond
 
   def fetch_changesets
     scm_rev = scm.info.lastrev.revision.to_i
--- a/app/models/repository/subversion.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/repository/subversion.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -30,6 +30,10 @@
     'Subversion'
   end
 
+  def supports_directory_revisions?
+    true
+  end
+
   def repo_log_encoding
     'UTF-8'
   end
@@ -38,12 +42,12 @@
     revisions = scm.revisions(path, rev, nil, :limit => limit)
     revisions ? changesets.find_all_by_revision(revisions.collect(&:identifier), :order => "committed_on DESC", :include => :user) : []
   end
-  
+
   # Returns a path relative to the url of the repository
   def relative_path(path)
     path.gsub(Regexp.new("^\/?#{Regexp.escape(relative_url)}"), '')
   end
-  
+
   def fetch_changesets
     scm_info = scm.info
     if scm_info
@@ -60,12 +64,12 @@
           revisions = scm.revisions('', identifier_to, identifier_from, :with_paths => true)
           revisions.reverse_each do |revision|
             transaction do
-              changeset = Changeset.create(:repository => self,
-                                           :revision => revision.identifier, 
-                                           :committer => revision.author, 
+              changeset = Changeset.create(:repository   => self,
+                                           :revision     => revision.identifier,
+                                           :committer    => revision.author,
                                            :committed_on => revision.time,
-                                           :comments => revision.message)
-              
+                                           :comments     => revision.message)
+
               revision.paths.each do |change|
                 changeset.create_change(change)
               end unless changeset.new_record?
@@ -76,9 +80,9 @@
       end
     end
   end
-  
+
   private
-  
+
   # Returns the relative url of the repository
   # Eg: root_url = file:///var/svn/foo
   #     url      = file:///var/svn/foo/bar
--- a/app/models/role.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/role.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -19,6 +19,12 @@
   # Built-in roles
   BUILTIN_NON_MEMBER = 1
   BUILTIN_ANONYMOUS  = 2
+  
+  ISSUES_VISIBILITY_OPTIONS = [
+    ['all', :label_issues_visibility_all],
+    ['default', :label_issues_visibility_public],
+    ['own', :label_issues_visibility_own]
+  ]
 
   named_scope :givable, { :conditions => "builtin = 0", :order => 'position' }
   named_scope :builtin, lambda { |*args|
@@ -43,7 +49,10 @@
   validates_presence_of :name
   validates_uniqueness_of :name
   validates_length_of :name, :maximum => 30
-
+  validates_inclusion_of :issues_visibility,
+    :in => ISSUES_VISIBILITY_OPTIONS.collect(&:first),
+    :if => lambda {|role| role.respond_to?(:issues_visibility)}
+  
   def permissions
     read_attribute(:permissions) || []
   end
@@ -84,6 +93,14 @@
     name
   end
   
+  def name
+    case builtin
+    when 1; l(:label_role_non_member, :default => read_attribute(:name))
+    when 2; l(:label_role_anonymous,  :default => read_attribute(:name))
+    else; read_attribute(:name)
+    end
+  end
+  
   # Return true if the role is a builtin role
   def builtin?
     self.builtin != 0
--- a/app/models/setting.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/setting.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -28,12 +28,12 @@
 	'%b %d, %Y',
 	'%B %d, %Y'
     ]
-    
+
   TIME_FORMATS = [
     '%H:%M',
     '%I:%M %p'
     ]
-    
+
   ENCODINGS = %w(US-ASCII
                   windows-1250
                   windows-1251
@@ -73,22 +73,22 @@
                   Big5
                   Big5-HKSCS
                   TIS-620)
-  
+
   cattr_accessor :available_settings
   @@available_settings = YAML::load(File.open("#{RAILS_ROOT}/config/settings.yml"))
   Redmine::Plugin.all.each do |plugin|
     next unless plugin.settings
-    @@available_settings["plugin_#{plugin.id}"] = {'default' => plugin.settings[:default], 'serialized' => true}    
+    @@available_settings["plugin_#{plugin.id}"] = {'default' => plugin.settings[:default], 'serialized' => true}
   end
-  
+
   validates_uniqueness_of :name
   validates_inclusion_of :name, :in => @@available_settings.keys
-  validates_numericality_of :value, :only_integer => true, :if => Proc.new { |setting| @@available_settings[setting.name]['format'] == 'int' }  
+  validates_numericality_of :value, :only_integer => true, :if => Proc.new { |setting| @@available_settings[setting.name]['format'] == 'int' }
 
   # Hash used to cache setting values
   @cached_settings = {}
   @cached_cleared_on = Time.now
-  
+
   def value
     v = read_attribute(:value)
     # Unserialize serialized settings
@@ -96,18 +96,18 @@
     v = v.to_sym if @@available_settings[name]['format'] == 'symbol' && !v.blank?
     v
   end
-  
+
   def value=(v)
     v = v.to_yaml if v && @@available_settings[name] && @@available_settings[name]['serialized']
     write_attribute(:value, v.to_s)
   end
-  
+
   # Returns the value of the setting named name
   def self.[](name)
     v = @cached_settings[name]
     v ? v : (@cached_settings[name] = find_or_default(name).value)
   end
-  
+
   def self.[]=(name, v)
     setting = find_or_default(name)
     setting.value = (v ? v : "")
@@ -115,7 +115,7 @@
     setting.save
     setting.value
   end
-  
+
   # Defines getter and setter for each setting
   # Then setting values can be read using: Setting.some_setting_name
   # or set using Setting.some_setting_name = "some value"
@@ -135,16 +135,16 @@
     END_SRC
     class_eval src, __FILE__, __LINE__
   end
-  
+
   # Helper that returns an array based on per_page_options setting
   def self.per_page_options_array
     per_page_options.split(%r{[\s,]}).collect(&:to_i).select {|n| n > 0}.sort
   end
-  
+
   def self.openid?
     Object.const_defined?(:OpenID) && self[:openid].to_i > 0
   end
-  
+
   # Checks if settings have changed since the values were read
   # and clears the cache hash if it's the case
   # Called once per request
@@ -156,13 +156,13 @@
       logger.info "Settings cache cleared." if logger
     end
   end
-  
+
 private
   # Returns the Setting instance for the setting named name
   # (record found in database or new record with default value)
   def self.find_or_default(name)
     name = name.to_s
-    raise "There's no setting named #{name}" unless @@available_settings.has_key?(name)    
+    raise "There's no setting named #{name}" unless @@available_settings.has_key?(name)
     setting = find_by_name(name)
     setting ||= new(:name => name, :value => @@available_settings[name]['default']) if @@available_settings.has_key? name
   end
--- a/app/models/time_entry.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/time_entry.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -22,7 +22,7 @@
   belongs_to :issue
   belongs_to :user
   belongs_to :activity, :class_name => 'TimeEntryActivity', :foreign_key => 'activity_id'
-  
+
   attr_protected :project_id, :user_id, :tyear, :tmonth, :tweek
 
   acts_as_customizable
@@ -33,12 +33,17 @@
 
   acts_as_activity_provider :timestamp => "#{table_name}.created_on",
                             :author_key => :user_id,
-                            :find_options => {:include => :project} 
+                            :find_options => {:include => :project}
 
   validates_presence_of :user_id, :activity_id, :project_id, :hours, :spent_on
   validates_numericality_of :hours, :allow_nil => true, :message => :invalid
   validates_length_of :comments, :maximum => 255, :allow_nil => true
 
+  named_scope :visible, lambda {|*args| {
+    :include => :project,
+    :conditions => Project.allowed_to_condition(args.shift || User.current, :view_time_entries, *args)
+  }}
+
   def after_initialize
     if new_record? && self.activity.nil?
       if default_activity = TimeEntryActivity.default
@@ -47,21 +52,21 @@
       self.hours = nil if hours == 0
     end
   end
-  
+
   def before_validation
     self.project = issue.project if issue && project.nil?
   end
-  
+
   def validate
     errors.add :hours, :invalid if hours && (hours < 0 || hours >= 1000)
     errors.add :project_id, :invalid if project.nil?
     errors.add :issue_id, :invalid if (issue_id && !issue) || (issue && project!=issue.project)
   end
-  
+
   def hours=(h)
     write_attribute :hours, (h.is_a?(String) ? (h.to_hours || h) : h)
   end
-  
+
   # tyear, tmonth, tweek assigned where setting spent_on attributes
   # these attributes make time aggregations easier
   def spent_on=(date)
@@ -73,13 +78,15 @@
     self.tmonth = spent_on ? spent_on.month : nil
     self.tweek = spent_on ? Date.civil(spent_on.year, spent_on.month, spent_on.day).cweek : nil
   end
-  
+
   # Returns true if the time entry can be edited by usr, otherwise false
   def editable_by?(usr)
     (usr == user && usr.allowed_to?(:edit_own_time_entries, project)) || usr.allowed_to?(:edit_time_entries, project)
   end
-  
+
+  # TODO: remove this method in 1.3.0
   def self.visible_by(usr)
+    ActiveSupport::Deprecation.warn "TimeEntry.visible_by is deprecated and will be removed in Redmine 1.3.0. Use the visible scope instead."
     with_scope(:find => { :conditions => Project.allowed_to_condition(usr, :view_time_entries) }) do
       yield
     end
--- a/app/models/user.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/user.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -84,6 +84,15 @@
   
   validates_acceptance_of :terms_and_conditions, :on => :create, :message => :must_accept_terms_and_conditions
 
+  named_scope :in_group, lambda {|group|
+    group_id = group.is_a?(Group) ? group.id : group.to_i
+    { :conditions => ["#{User.table_name}.id IN (SELECT gu.user_id FROM #{table_name_prefix}groups_users#{table_name_suffix} gu WHERE gu.group_id = ?)", group_id] }
+  }
+  named_scope :not_in_group, lambda {|group|
+    group_id = group.is_a?(Group) ? group.id : group.to_i
+    { :conditions => ["#{User.table_name}.id NOT IN (SELECT gu.user_id FROM #{table_name_prefix}groups_users#{table_name_suffix} gu WHERE gu.group_id = ?)", group_id] }
+  }
+  
   def before_create
     self.mail_notification = Setting.default_notification_option if self.mail_notification.blank?
     true
@@ -98,6 +107,7 @@
   
   def reload(*args)
     @name = nil
+    @projects_by_role = nil
     super
   end
   
@@ -373,16 +383,33 @@
     !roles_for_project(project).detect {|role| role.member?}.nil?
   end
   
+  # Returns a hash of user's projects grouped by roles
+  def projects_by_role
+    return @projects_by_role if @projects_by_role
+    
+    @projects_by_role = Hash.new {|h,k| h[k]=[]}
+    memberships.each do |membership|
+      membership.roles.each do |role|
+        @projects_by_role[role] << membership.project if membership.project
+      end
+    end
+    @projects_by_role.each do |role, projects|
+      projects.uniq!
+    end
+  
+    @projects_by_role
+  end
+  
   # Return true if the user is allowed to do the specified action on a specific context
   # Action can be:
   # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit')
   # * a permission Symbol (eg. :edit_project)
   # Context can be:
   # * a project : returns true if user is allowed to do the specified action on this project
-  # * a group of projects : returns true if user is allowed on every project
+  # * an array of projects : returns true if user is allowed on every project
   # * nil with options[:global] set : check if user has at least one role allowed for this action, 
   #   or falls back to Non Member / Anonymous permissions depending if the user is logged
-  def allowed_to?(action, context, options={})
+  def allowed_to?(action, context, options={}, &block)
     if context && context.is_a?(Project)
       # No action allowed on archived projects
       return false unless context.active?
@@ -393,12 +420,15 @@
       
       roles = roles_for_project(context)
       return false unless roles
-      roles.detect {|role| (context.is_public? || role.member?) && role.allowed_to?(action)}
-      
+      roles.detect {|role|
+        (context.is_public? || role.member?) &&
+        role.allowed_to?(action) &&
+        (block_given? ? yield(role, self) : true)
+      }
     elsif context && context.is_a?(Array)
       # Authorize if user is authorized on every element of the array
       context.map do |project|
-        allowed_to?(action,project,options)
+        allowed_to?(action, project, options, &block)
       end.inject do |memo,allowed|
         memo && allowed
       end
@@ -408,7 +438,11 @@
       
       # authorize if user has at least one role that has this permission
       roles = memberships.collect {|m| m.roles}.flatten.uniq
-      roles.detect {|r| r.allowed_to?(action)} || (self.logged? ? Role.non_member.allowed_to?(action) : Role.anonymous.allowed_to?(action))
+      roles << (self.logged? ? Role.non_member : Role.anonymous)
+      roles.detect {|role|
+        role.allowed_to?(action) &&
+        (block_given? ? yield(role, self) : true)
+      }
     else
       false
     end
@@ -416,8 +450,8 @@
 
   # Is the user allowed to do the specified action on any project?
   # See allowed_to? for the actions and valid options.
-  def allowed_to_globally?(action, options)
-    allowed_to?(action, nil, options.reverse_merge(:global => true))
+  def allowed_to_globally?(action, options, &block)
+    allowed_to?(action, nil, options.reverse_merge(:global => true), &block)
   end
 
   safe_attributes 'login',
--- a/app/models/wiki.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/wiki.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -44,17 +44,26 @@
   
   # find the page with the given title
   def find_page(title, options = {})
+    @page_found_with_redirect = false
     title = start_page if title.blank?
     title = Wiki.titleize(title)
-    page = pages.first(:conditions => ["LOWER(title) LIKE LOWER(?)", title])
+    page = pages.first(:conditions => ["LOWER(title) = LOWER(?)", title])
     if !page && !(options[:with_redirect] == false)
       # search for a redirect
-      redirect = redirects.first(:conditions => ["LOWER(title) LIKE LOWER(?)", title])
-      page = find_page(redirect.redirects_to, :with_redirect => false) if redirect
+      redirect = redirects.first(:conditions => ["LOWER(title) = LOWER(?)", title])
+      if redirect
+        page = find_page(redirect.redirects_to, :with_redirect => false)
+        @page_found_with_redirect = true
+      end
     end
     page
   end
   
+  # Returns true if the last page was found with a redirect
+  def page_found_with_redirect?
+    @page_found_with_redirect
+  end
+
   # Finds a page by title
   # The given string can be of one of the forms: "title" or "project:title"
   # Examples:
--- a/app/models/wiki_content.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/wiki_content.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# RedMine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -23,28 +23,28 @@
   belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
   validates_presence_of :text
   validates_length_of :comments, :maximum => 255, :allow_nil => true
-  
+
   acts_as_versioned
-  
+
   def visible?(user=User.current)
     page.visible?(user)
   end
-    
+
   def project
     page.project
   end
-  
+
   def attachments
     page.nil? ? [] : page.attachments
   end
-  
+
   # Returns the mail adresses of users that should be notified
   def recipients
     notified = project.notified_users
     notified.reject! {|user| !visible?(user)}
     notified.collect(&:mail)
   end
-  
+
   class Version
     belongs_to :page, :class_name => '::WikiPage', :foreign_key => 'page_id'
     belongs_to :author, :class_name => '::User', :foreign_key => 'author_id'
@@ -84,7 +84,7 @@
       end
       plain
     end
-    
+
     def text
       @text ||= case compression
       when 'gzip'
@@ -92,16 +92,16 @@
       else
         # uncompressed data
         data
-      end      
+      end
     end
-    
+
     def project
       page.project
     end
-    
+
     # Returns the previous version or nil
     def previous
-      @previous ||= WikiContent::Version.find(:first, 
+      @previous ||= WikiContent::Version.find(:first,
                                               :order => 'version DESC',
                                               :include => :author,
                                               :conditions => ["wiki_content_id = ? AND version < ?", wiki_content_id, version])
--- a/app/models/wiki_page.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/models/wiki_page.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -32,6 +32,7 @@
 
   acts_as_searchable :columns => ['title', 'text'],
                      :include => [{:wiki => :project}, :content],
+                     :permission => :view_wiki_pages,
                      :project_key => "#{Wiki.table_name}.project_id"
 
   attr_accessor :redirect_existing_links
@@ -41,6 +42,12 @@
   validates_uniqueness_of :title, :scope => :wiki_id, :case_sensitive => false
   validates_associated :content
   
+  # eager load information about last updates, without loading text
+  named_scope :with_updated_on, {
+    :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on",
+    :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id"
+  }
+  
   # Wiki pages that are protected by default
   DEFAULT_PROTECTED_PAGES = %w(sidebar)
   
@@ -121,6 +128,18 @@
     content.text if content
   end
   
+  def updated_on
+    unless @updated_on
+      if time = read_attribute(:updated_on)
+        # content updated_on was eager loaded with the page
+        @updated_on = Time.parse(time) rescue nil
+      else
+        @updated_on = content && content.updated_on
+      end
+    end
+    @updated_on
+  end
+  
   # Returns true if usr is allowed to edit the page, otherwise false
   def editable_by?(usr)
     !protected? || usr.allowed_to?(:protect_wiki_pages, wiki.project)
--- a/app/sweepers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/sweepers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/sweepers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/sweepers
 http://redmine.rubyforge.org/svn
 
 
--- a/app/views/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 34
-/svn/!svn/ver/4983/trunk/app/views
+V 48
+/svn/!svn/ver/5961/branches/1.2-stable/app/views
 END
--- a/app/views/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-01T10:27:51.597350Z
-4983
-tmaruyama
+2011-05-29T12:06:05.086159Z
+5961
+jplang
 
 
 
--- a/app/views/account/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/account/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/account
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/account
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 232ce32581d2f869b81c300244decff5
 2010-01-28T18:54:51.800438Z
 3341
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 cf3d603bbb4825640988086c7871c165
 2007-09-22T13:17:49.935719Z
 747
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 82c6920dc6c95e35b0248de4be82885b
 2009-04-21T13:43:57.529967Z
 2678
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 72b586f183037fcab519bc7575d3b2b5
 2010-03-03T20:21:05.265018Z
 3530
--- a/app/views/activities/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/activities/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/activities
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/activities
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-27T14:05:54.014502Z
-4047
-edavis10
+2011-04-03T14:01:32.419875Z
+5301
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-9e6d9091be2c8769f8e262500d974f84
-2010-08-27T14:05:54.014502Z
-4047
-edavis10
+2011-06-06T13:18:33.000000Z
+842302ab754ce754f88204a7074c4b9d
+2011-04-03T14:01:32.419875Z
+5301
+jplang
 has-props
 
 
@@ -58,5 +58,5 @@
 
 
 
-3266
+2936
 
--- a/app/views/activities/.svn/text-base/index.html.erb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/activities/.svn/text-base/index.html.erb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -21,16 +21,14 @@
 <%= content_tag('p', l(:label_no_data), :class => 'nodata') if @events_by_day.empty? %>
 
 <div style="float:left;">
-<%= link_to_remote(('&#171; ' + l(:label_previous)), 
-                   {:update => "content", :url => params.merge(:from => @date_to - @days - 1), :method => :get, :complete => 'window.scrollTo(0,0)'},
-                   {:href => url_for(params.merge(:from => @date_to - @days - 1)),
-                    :title => l(:label_date_from_to, :start => format_date(@date_to - 2*@days), :end => format_date(@date_to - @days - 1))}) %>
+<%= link_to_content_update('&#171; ' + l(:label_previous), 
+                   params.merge(:from => @date_to - @days - 1),
+                   :title => l(:label_date_from_to, :start => format_date(@date_to - 2*@days), :end => format_date(@date_to - @days - 1))) %>
 </div>
 <div style="float:right;">
-<%= link_to_remote((l(:label_next) + ' &#187;'), 
-                   {:update => "content", :url => params.merge(:from => @date_to + @days - 1), :method => :get, :complete => 'window.scrollTo(0,0)'},
-                   {:href => url_for(params.merge(:from => @date_to + @days - 1)),
-                    :title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1))}) unless @date_to >= Date.today %>
+<%= link_to_content_update(l(:label_next) + ' &#187;', 
+                   params.merge(:from => @date_to + @days - 1),
+                   :title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1))) unless @date_to >= Date.today %>
 </div>
 &nbsp;
 <% other_formats_links do |f| %>
--- a/app/views/activities/index.html.erb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/activities/index.html.erb	Mon Jun 06 14:41:04 2011 +0100
@@ -21,16 +21,14 @@
 <%= content_tag('p', l(:label_no_data), :class => 'nodata') if @events_by_day.empty? %>
 
 <div style="float:left;">
-<%= link_to_remote(('&#171; ' + l(:label_previous)), 
-                   {:update => "content", :url => params.merge(:from => @date_to - @days - 1), :method => :get, :complete => 'window.scrollTo(0,0)'},
-                   {:href => url_for(params.merge(:from => @date_to - @days - 1)),
-                    :title => l(:label_date_from_to, :start => format_date(@date_to - 2*@days), :end => format_date(@date_to - @days - 1))}) %>
+<%= link_to_content_update('&#171; ' + l(:label_previous), 
+                   params.merge(:from => @date_to - @days - 1),
+                   :title => l(:label_date_from_to, :start => format_date(@date_to - 2*@days), :end => format_date(@date_to - @days - 1))) %>
 </div>
 <div style="float:right;">
-<%= link_to_remote((l(:label_next) + ' &#187;'), 
-                   {:update => "content", :url => params.merge(:from => @date_to + @days - 1), :method => :get, :complete => 'window.scrollTo(0,0)'},
-                   {:href => url_for(params.merge(:from => @date_to + @days - 1)),
-                    :title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1))}) unless @date_to >= Date.today %>
+<%= link_to_content_update(l(:label_next) + ' &#187;', 
+                   params.merge(:from => @date_to + @days - 1),
+                   :title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1))) unless @date_to >= Date.today %>
 </div>
 &nbsp;
 <% other_formats_links do |f| %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/admin/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/admin
+END
--- a/app/views/admin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/admin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/admin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/admin
 http://redmine.rubyforge.org/svn
 
 
 
-2010-10-22T15:11:04.321155Z
-4271
-jplang
+2011-04-28T12:35:25.773529Z
+5562
+tmaruyama
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-a7b3d0461b8dac7e68d5b758e6b93b45
-2009-12-19T20:33:24.113306Z
-3200
-jplang
+2011-06-06T13:18:33.000000Z
+7890b8a0425776aeb77070710f89d8ce
+2011-04-28T12:35:25.773529Z
+5562
+tmaruyama
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-456
+498
 
 plugins.rhtml
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 aacfd3ff934f52585eba4f460f52df31
 2008-11-16T17:12:02.001794Z
 2041
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 a2dcf50c0d70604e64f18cd28f15280b
 2010-08-04T00:38:22.739166Z
 3909
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 8db715728d1f5851c242e085110f2bb6
 2008-01-05T11:33:49.132886Z
 1040
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 35378eb3f0e385475e3bd0586f22324a
 2009-12-17T18:21:02.630202Z
 3176
@@ -202,10 +202,10 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-9aaefdc17951db18479f38fb0db73ea7
-2010-10-22T15:11:04.321155Z
-4271
+2011-06-06T13:18:33.000000Z
+9b6daf583836b76e9183e9e125ca7ced
+2011-03-16T18:23:51.946930Z
+5151
 jplang
 has-props
 
@@ -228,5 +228,5 @@
 
 
 
-2136
+2247
 
--- a/app/views/admin/.svn/text-base/info.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/admin/.svn/text-base/info.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -4,10 +4,11 @@
 
 <table class="list">
 <% @checklist.each do |label, result| %>
-	<tr class="<%= cycle 'odd', 'even' %>">
-		<td><%= l(label) %></td>
-		<td width="30px"><%= image_tag((result ? 'true.png' : 'exclamation.png'), :style => "vertical-align:bottom;") %></td>
-	</tr>
+  <tr class="<%= cycle 'odd', 'even' %>">
+    <td><%= l(label) %></td>
+    <td width="30px"><%= image_tag((result ? 'true.png' : 'exclamation.png'),
+                                    :style => "vertical-align:bottom;") %></td>
+  </tr>
 <% end %>
 </table>
 
--- a/app/views/admin/.svn/text-base/projects.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/admin/.svn/text-base/projects.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -11,6 +11,7 @@
 <label><%= l(:label_project) %>:</label>
 <%= text_field_tag 'name', params[:name], :size => 30 %>
 <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
+<%= link_to l(:button_clear), {:controller => 'admin', :action => 'projects'}, :class => 'icon icon-reload' %>
 </fieldset>
 <% end %>
 &nbsp;
--- a/app/views/admin/info.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/admin/info.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -4,10 +4,11 @@
 
 <table class="list">
 <% @checklist.each do |label, result| %>
-	<tr class="<%= cycle 'odd', 'even' %>">
-		<td><%= l(label) %></td>
-		<td width="30px"><%= image_tag((result ? 'true.png' : 'exclamation.png'), :style => "vertical-align:bottom;") %></td>
-	</tr>
+  <tr class="<%= cycle 'odd', 'even' %>">
+    <td><%= l(label) %></td>
+    <td width="30px"><%= image_tag((result ? 'true.png' : 'exclamation.png'),
+                                    :style => "vertical-align:bottom;") %></td>
+  </tr>
 <% end %>
 </table>
 
--- a/app/views/admin/projects.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/admin/projects.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -11,6 +11,7 @@
 <label><%= l(:label_project) %>:</label>
 <%= text_field_tag 'name', params[:name], :size => 30 %>
 <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
+<%= link_to l(:button_clear), {:controller => 'admin', :action => 'projects'}, :class => 'icon icon-reload' %>
 </fieldset>
 <% end %>
 &nbsp;
--- a/app/views/attachments/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/attachments/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/attachments
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/attachments
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 6f5329a1a81f3798a84a26b0261f5000
 2008-12-09T16:54:46.963649Z
 2116
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 b8bc854a91c56c3e3d45390e8ed4bb8d
 2009-04-25T09:35:14.494071Z
 2693
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 9cd3f9685ce632814961d9f7e67c4d26
 2010-07-25T10:34:55.569539Z
 3879
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 43e4ae1b5703daa55b37eb438a169304
 2009-04-25T09:35:14.494071Z
 2693
--- a/app/views/auth_sources/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/auth_sources/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/auth_sources
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/auth_sources
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 2f1b944eb2979ed37624c653969fa6bf
 2010-02-15T16:41:21.789274Z
 3436
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 6f4f645b6d66417180eaadb0e204a56e
 2007-03-12T17:59:02.654744Z
 333
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 4ea0fc7f46738e3709d552778de7a756
 2010-05-23T03:16:31.304135Z
 3744
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 1cc2f5049536de6e5d6d4e926f96ab38
 2007-03-12T17:59:02.654744Z
 333
--- a/app/views/auto_completes/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/auto_completes/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/auto_completes
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/auto_completes
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 d325b0677890591680b96985e16a0139
 2010-08-17T15:03:58.074505Z
 3945
--- a/app/views/boards/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 41
-/svn/!svn/ver/4889/trunk/app/views/boards
-END
-show.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4889/trunk/app/views/boards/show.rhtml
-END
-_form.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/529/trunk/app/views/boards/_form.rhtml
-END
-edit.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/529/trunk/app/views/boards/edit.rhtml
-END
-index.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4047/trunk/app/views/boards/index.rhtml
-END
-new.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/529/trunk/app/views/boards/new.rhtml
-END
--- a/app/views/boards/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/boards/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/boards
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/boards
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 0f9b1735f403a56ed575c63dc474a611
 2011-02-20T13:11:10.508449Z
 4889
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 0416740cf4bf599b0da68e597c0cd44c
 2007-05-13T17:09:56.765659Z
 529
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 00f3643ebd3d5af2322b92c885a6eec6
 2007-05-13T17:09:56.765659Z
 529
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 5c323ebf8fea05f556896ed49186773b
 2010-08-27T14:05:54.014502Z
 4047
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 b951b4d73988508c5a42fdb7b7df695c
 2007-05-13T17:09:56.765659Z
 529
--- a/app/views/calendars/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4911/trunk/app/views/calendars
-END
-show.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4911/trunk/app/views/calendars/show.html.erb
-END
--- a/app/views/calendars/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/calendars/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/calendars
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/calendars
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-21T14:02:22.565987Z
-4911
+2011-04-01T14:34:44.070899Z
+5276
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-7da8933c1cb08241ebe459d9cabe8043
-2011-02-21T14:02:22.565987Z
-4911
+2011-06-06T13:18:33.000000Z
+ab4018273a0ea22e0fb58209d1f88be7
+2011-04-01T14:34:44.070899Z
+5276
 jplang
 has-props
 
@@ -58,5 +58,5 @@
 
 
 
-2007
+1686
 
--- a/app/views/calendars/.svn/text-base/show.html.erb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/calendars/.svn/text-base/show.html.erb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,7 +1,7 @@
 <h2><%= @query.new_record? ? l(:label_calendar) : h(@query.name) %></h2>
 
-<% form_tag(calendar_path, :method => :put, :id => 'query_form') do %>
-  <%= hidden_field_tag('project_id', @project.to_param) if @project%>
+<% form_tag({:controller => 'calendars', :action => 'show', :project_id => @project}, :method => :get, :id => 'query_form') do %>
+<%= hidden_field_tag 'set_filter', '1' %>
 <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
   <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
   <div style="<%= @query.new_record? ? "" : "display: none;" %>">
@@ -10,7 +10,7 @@
 </fieldset>
 
 <p style="float:right;">
-  <%= link_to_previous_month(@year, @month, :project => @project) %> | <%= link_to_next_month(@year, @month, :project => @project) %>
+  <%= link_to_previous_month(@year, @month) %> | <%= link_to_next_month(@year, @month) %>
 </p>
 
 <p class="buttons">
@@ -19,17 +19,8 @@
 <%= label_tag('year', l(:label_year)) %>
 <%= select_year(@year, :prefix => "year", :discard_type => true) %>
 
-<%= link_to_remote l(:button_apply), 
-                   { :url => { :set_filter => 1 },
-                     :update => "content",
-                     :with => "Form.serialize('query_form')"
-                   }, :class => 'icon icon-checked' %>
-                   
-<%= link_to_remote l(:button_clear),
-                   { :url => { :project_id => @project, :set_filter => 1 }, 
-                     :method => :put,
-                     :update => "content",
-                   }, :class => 'icon icon-reload' %>
+<%= link_to_function l(:button_apply), '$("query_form").submit()', :class => 'icon icon-checked' %>
+<%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 }, :class => 'icon icon-reload' %>
 </p>
 <% end %>
 
--- a/app/views/calendars/show.html.erb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/calendars/show.html.erb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,7 +1,7 @@
 <h2><%= @query.new_record? ? l(:label_calendar) : h(@query.name) %></h2>
 
-<% form_tag(calendar_path, :method => :put, :id => 'query_form') do %>
-  <%= hidden_field_tag('project_id', @project.to_param) if @project%>
+<% form_tag({:controller => 'calendars', :action => 'show', :project_id => @project}, :method => :get, :id => 'query_form') do %>
+<%= hidden_field_tag 'set_filter', '1' %>
 <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
   <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
   <div style="<%= @query.new_record? ? "" : "display: none;" %>">
@@ -10,7 +10,7 @@
 </fieldset>
 
 <p style="float:right;">
-  <%= link_to_previous_month(@year, @month, :project => @project) %> | <%= link_to_next_month(@year, @month, :project => @project) %>
+  <%= link_to_previous_month(@year, @month) %> | <%= link_to_next_month(@year, @month) %>
 </p>
 
 <p class="buttons">
@@ -19,17 +19,8 @@
 <%= label_tag('year', l(:label_year)) %>
 <%= select_year(@year, :prefix => "year", :discard_type => true) %>
 
-<%= link_to_remote l(:button_apply), 
-                   { :url => { :set_filter => 1 },
-                     :update => "content",
-                     :with => "Form.serialize('query_form')"
-                   }, :class => 'icon icon-checked' %>
-                   
-<%= link_to_remote l(:button_clear),
-                   { :url => { :project_id => @project, :set_filter => 1 }, 
-                     :method => :put,
-                     :update => "content",
-                   }, :class => 'icon icon-reload' %>
+<%= link_to_function l(:button_apply), '$("query_form").submit()', :class => 'icon icon-checked' %>
+<%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 }, :class => 'icon icon-reload' %>
 </p>
 <% end %>
 
--- a/app/views/common/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/common/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,47 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 41
-/svn/!svn/ver/4604/trunk/app/views/common
+V 55
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/common
 END
-_file.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/3585/trunk/app/views/common/_file.rhtml
-END
-error.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/4286/trunk/app/views/common/error.html.erb
-END
-feed.atom.rxml
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/2768/trunk/app/views/common/feed.atom.rxml
-END
-_preview.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/1699/trunk/app/views/common/_preview.rhtml
-END
-_diff.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4604/trunk/app/views/common/_diff.rhtml
-END
-_calendar.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/3790/trunk/app/views/common/_calendar.rhtml
-END
-_tabs.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/3174/trunk/app/views/common/_tabs.rhtml
-END
--- a/app/views/common/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/common/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/common
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/common
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-01T13:40:36.520874Z
-4604
-jplang
+2011-05-21T04:26:15.661225Z
+5872
+tmaruyama
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 f95c4268a6ac374ab617da665e57a3ad
 2010-03-14T13:22:50.317701Z
 3585
@@ -66,11 +66,12 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-882dace2c9ea129616067a2052cebef4
-2010-10-23T11:07:04.019894Z
-4286
-jplang
+2011-06-06T13:18:33.000000Z
+df19ed70179aa9f6d4ffc2403ac593bc
+2011-05-21T04:26:15.661225Z
+5872
+tmaruyama
+has-props
 
 
 
@@ -91,8 +92,7 @@
 
 
 
-
-156
+150
 
 feed.atom.rxml
 file
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 e2b0309f637e9a49ef39f8401f3190c5
 2009-05-26T08:28:36.964305Z
 2768
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 d03b1c3719bd49af7d930d210a8e8328
 2008-07-26T12:54:54.604420Z
 1699
@@ -168,10 +168,10 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-1938ad8ac1793e75074891018e795398
-2011-01-01T13:40:36.520874Z
-4604
+2011-06-06T13:18:33.000000Z
+358b5f24bf743ee83c21cf15289b0a60
+2011-03-11T20:23:29.177962Z
+5094
 jplang
 has-props
 
@@ -194,7 +194,7 @@
 
 
 
-2520
+1541
 
 _calendar.rhtml
 file
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 18b2d631fabd5720aa07d369da11d0de
 2010-06-19T22:52:15.523619Z
 3790
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 6e7716818f87ed1ad9839c6e9a92ed1b
 2009-12-14T20:13:29.438642Z
 3174
--- a/app/views/common/.svn/text-base/_diff.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/common/.svn/text-base/_diff.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,66 +1,56 @@
 <% diff = Redmine::UnifiedDiff.new(diff, :type => diff_type, :max_lines => Setting.diff_max_lines_displayed.to_i) -%>
+
 <% diff.each do |table_file| -%>
 <div class="autoscroll">
-<% if diff_type == 'sbs' -%>
+<% if diff.diff_type == 'sbs' -%>
 <table class="filecontent">
 <thead>
 <tr><th colspan="4" class="filename"><%=to_utf8 table_file.file_name %></th></tr>
 </thead>
 <tbody>
-<% prev_line_left, prev_line_right = nil, nil -%>
-<% table_file.keys.sort.each do |key| -%>
-<% if prev_line_left && prev_line_right && (table_file[key].nb_line_left != prev_line_left+1) && (table_file[key].nb_line_right != prev_line_right+1) -%>
+<% table_file.each_line do |spacing, line| -%>
+<% if spacing -%>
 <tr class="spacing">
-<th class="line-num">...</th><td></td><th class="line-num">...</th><td></td>
+  <th class="line-num">...</th><td></td><th class="line-num">...</th><td></td>
+</tr>
 <% end -%>
 <tr>
-  <th class="line-num"><%= table_file[key].nb_line_left %></th>
-  <td class="line-code <%= table_file[key].type_diff_left %>">
-    <pre><%=to_utf8 table_file[key].line_left %></pre>
+  <th class="line-num"><%= line.nb_line_left %></th>
+  <td class="line-code <%= line.type_diff_left %>">
+    <pre><%=to_utf8 line.html_line_left %></pre>
   </td>
-  <th class="line-num"><%= table_file[key].nb_line_right %></th>
-  <td class="line-code <%= table_file[key].type_diff_right %>">
-    <pre><%=to_utf8 table_file[key].line_right %></pre>
+  <th class="line-num"><%= line.nb_line_right %></th>
+  <td class="line-code <%= line.type_diff_right %>">
+    <pre><%=to_utf8 line.html_line_right %></pre>
   </td>
 </tr>
-<% prev_line_left, prev_line_right = table_file[key].nb_line_left.to_i, table_file[key].nb_line_right.to_i -%>
 <% end -%>
 </tbody>
 </table>
 
 <% else -%>
-<table class="filecontent syntaxhl">
+<table class="filecontent">
 <thead>
 <tr><th colspan="3" class="filename"><%=to_utf8 table_file.file_name %></th></tr>
 </thead>
 <tbody>
-<% prev_line_left, prev_line_right = nil, nil -%>
-<% table_file.keys.sort.each do |key, line| %>
-<% if prev_line_left && prev_line_right && (table_file[key].nb_line_left != prev_line_left+1) && (table_file[key].nb_line_right != prev_line_right+1) -%>
+<% table_file.each_line do |spacing, line| %>
+<% if spacing -%>
 <tr class="spacing">
-<th class="line-num">...</th><th class="line-num">...</th><td></td>
+  <th class="line-num">...</th><th class="line-num">...</th><td></td>
 </tr>
 <% end -%>
 <tr>
-  <th class="line-num"><%= table_file[key].nb_line_left %></th>
-  <th class="line-num"><%= table_file[key].nb_line_right %></th>
-  <% if table_file[key].line_left.empty? -%>
-  <td class="line-code <%= table_file[key].type_diff_right %>">
-    <pre><%=to_utf8 table_file[key].line_right %></pre>
+  <th class="line-num"><%= line.nb_line_left %></th>
+  <th class="line-num"><%= line.nb_line_right %></th>
+  <td class="line-code <%= line.type_diff %>">
+    <pre><%=to_utf8 line.html_line %></pre>
   </td>
-  <% else -%>
-  <td class="line-code <%= table_file[key].type_diff_left %>">
-    <pre><%=to_utf8 table_file[key].line_left %></pre>
-  </td>
-  <% end -%>
 </tr>
-<% prev_line_left = table_file[key].nb_line_left.to_i if table_file[key].nb_line_left.to_i > 0 -%>
-<% prev_line_right = table_file[key].nb_line_right.to_i if table_file[key].nb_line_right.to_i > 0 -%>
 <% end -%>
 </tbody>
 </table>
 <% end -%>
-
 </div>
 <% end -%>
 
--- a/app/views/common/.svn/text-base/error.html.erb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/common/.svn/text-base/error.html.erb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,6 +1,6 @@
-<h2><%=h @status %></h2>
-
-<p id="errorExplanation"><%=h @message %></p>
-<p><a href="javascript:history.back()">Back</a></p>
-
-<% html_title @status %>
+<h2><%=h @status %></h2>
+
+<p id="errorExplanation"><%=h @message %></p>
+<p><a href="javascript:history.back()">Back</a></p>
+
+<% html_title @status %>
--- a/app/views/common/_diff.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/common/_diff.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,66 +1,56 @@
 <% diff = Redmine::UnifiedDiff.new(diff, :type => diff_type, :max_lines => Setting.diff_max_lines_displayed.to_i) -%>
+
 <% diff.each do |table_file| -%>
 <div class="autoscroll">
-<% if diff_type == 'sbs' -%>
+<% if diff.diff_type == 'sbs' -%>
 <table class="filecontent">
 <thead>
 <tr><th colspan="4" class="filename"><%=to_utf8 table_file.file_name %></th></tr>
 </thead>
 <tbody>
-<% prev_line_left, prev_line_right = nil, nil -%>
-<% table_file.keys.sort.each do |key| -%>
-<% if prev_line_left && prev_line_right && (table_file[key].nb_line_left != prev_line_left+1) && (table_file[key].nb_line_right != prev_line_right+1) -%>
+<% table_file.each_line do |spacing, line| -%>
+<% if spacing -%>
 <tr class="spacing">
-<th class="line-num">...</th><td></td><th class="line-num">...</th><td></td>
+  <th class="line-num">...</th><td></td><th class="line-num">...</th><td></td>
+</tr>
 <% end -%>
 <tr>
-  <th class="line-num"><%= table_file[key].nb_line_left %></th>
-  <td class="line-code <%= table_file[key].type_diff_left %>">
-    <pre><%=to_utf8 table_file[key].line_left %></pre>
+  <th class="line-num"><%= line.nb_line_left %></th>
+  <td class="line-code <%= line.type_diff_left %>">
+    <pre><%=to_utf8 line.html_line_left %></pre>
   </td>
-  <th class="line-num"><%= table_file[key].nb_line_right %></th>
-  <td class="line-code <%= table_file[key].type_diff_right %>">
-    <pre><%=to_utf8 table_file[key].line_right %></pre>
+  <th class="line-num"><%= line.nb_line_right %></th>
+  <td class="line-code <%= line.type_diff_right %>">
+    <pre><%=to_utf8 line.html_line_right %></pre>
   </td>
 </tr>
-<% prev_line_left, prev_line_right = table_file[key].nb_line_left.to_i, table_file[key].nb_line_right.to_i -%>
 <% end -%>
 </tbody>
 </table>
 
 <% else -%>
-<table class="filecontent syntaxhl">
+<table class="filecontent">
 <thead>
 <tr><th colspan="3" class="filename"><%=to_utf8 table_file.file_name %></th></tr>
 </thead>
 <tbody>
-<% prev_line_left, prev_line_right = nil, nil -%>
-<% table_file.keys.sort.each do |key, line| %>
-<% if prev_line_left && prev_line_right && (table_file[key].nb_line_left != prev_line_left+1) && (table_file[key].nb_line_right != prev_line_right+1) -%>
+<% table_file.each_line do |spacing, line| %>
+<% if spacing -%>
 <tr class="spacing">
-<th class="line-num">...</th><th class="line-num">...</th><td></td>
+  <th class="line-num">...</th><th class="line-num">...</th><td></td>
 </tr>
 <% end -%>
 <tr>
-  <th class="line-num"><%= table_file[key].nb_line_left %></th>
-  <th class="line-num"><%= table_file[key].nb_line_right %></th>
-  <% if table_file[key].line_left.empty? -%>
-  <td class="line-code <%= table_file[key].type_diff_right %>">
-    <pre><%=to_utf8 table_file[key].line_right %></pre>
+  <th class="line-num"><%= line.nb_line_left %></th>
+  <th class="line-num"><%= line.nb_line_right %></th>
+  <td class="line-code <%= line.type_diff %>">
+    <pre><%=to_utf8 line.html_line %></pre>
   </td>
-  <% else -%>
-  <td class="line-code <%= table_file[key].type_diff_left %>">
-    <pre><%=to_utf8 table_file[key].line_left %></pre>
-  </td>
-  <% end -%>
 </tr>
-<% prev_line_left = table_file[key].nb_line_left.to_i if table_file[key].nb_line_left.to_i > 0 -%>
-<% prev_line_right = table_file[key].nb_line_right.to_i if table_file[key].nb_line_right.to_i > 0 -%>
 <% end -%>
 </tbody>
 </table>
 <% end -%>
-
 </div>
 <% end -%>
 
--- a/app/views/common/error.html.erb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/common/error.html.erb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,6 +1,6 @@
-<h2><%=h @status %></h2>
-
-<p id="errorExplanation"><%=h @message %></p>
-<p><a href="javascript:history.back()">Back</a></p>
-
-<% html_title @status %>
+<h2><%=h @status %></h2>
+
+<p id="errorExplanation"><%=h @message %></p>
+<p><a href="javascript:history.back()">Back</a></p>
+
+<% html_title @status %>
--- a/app/views/context_menus/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/context_menus/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/context_menus
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/context_menus
 http://redmine.rubyforge.org/svn
 
 
 
-2010-11-16T19:49:08.085592Z
-4409
+2011-04-17T15:17:18.418900Z
+5495
 jplang
 
 
@@ -26,16 +26,50 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
+time_entries.html.erb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+d021ca3ed499dc32afd907dfd0529b38
+2011-04-04T11:54:47.184431Z
+5316
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1879
+
 issues.html.erb
 file
 
 
 
 
-2011-03-03T11:05:10.000000Z
-1a873e0d09f011b6b274e955460d35a1
-2010-11-16T19:49:08.085592Z
-4409
+2011-06-06T13:18:33.000000Z
+71478da35c13199e1b5b3f0a2a33168f
+2011-04-17T15:17:18.418900Z
+5495
 jplang
 has-props
 
@@ -58,5 +92,5 @@
 
 
 
-6698
+6706
 
--- a/app/views/context_menus/.svn/text-base/issues.html.erb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/context_menus/.svn/text-base/issues.html.erb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -115,7 +115,7 @@
   <li><%= context_menu_link l(:button_move), new_issue_move_path(:ids => @issues.collect(&:id)),
 	                        :class => 'icon-move', :disabled => !@can[:move]  %></li>
   <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id), :back_url => @back},
-                            :method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %></li>
+                            :method => :post, :confirm => issues_destroy_confirmation_message(@issues), :class => 'icon-del', :disabled => !@can[:delete] %></li>
 
   <%= call_hook(:view_issues_context_menu_end, {:issues => @issues, :can => @can, :back => @back }) %>
 </ul>
--- a/app/views/context_menus/issues.html.erb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/context_menus/issues.html.erb	Mon Jun 06 14:41:04 2011 +0100
@@ -115,7 +115,7 @@
   <li><%= context_menu_link l(:button_move), new_issue_move_path(:ids => @issues.collect(&:id)),
 	                        :class => 'icon-move', :disabled => !@can[:move]  %></li>
   <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id), :back_url => @back},
-                            :method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %></li>
+                            :method => :post, :confirm => issues_destroy_confirmation_message(@issues), :class => 'icon-del', :disabled => !@can[:delete] %></li>
 
   <%= call_hook(:view_issues_context_menu_end, {:issues => @issues, :can => @can, :back => @back }) %>
 </ul>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/context_menus/time_entries.html.erb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,33 @@
+<ul>
+  <% if !@time_entry.nil? -%>
+    <li><%= context_menu_link l(:button_edit), {:controller => 'timelog', :action => 'edit', :id => @time_entry},
+            :class => 'icon-edit', :disabled => !@can[:edit] %></li>
+  <% else %>
+    <li><%= context_menu_link l(:button_edit), {:controller => 'timelog', :action => 'bulk_edit', :ids => @time_entries.collect(&:id)},
+            :class => 'icon-edit', :disabled => !@can[:edit] %></li>
+  <% end %>
+
+  <%= call_hook(:view_time_entries_context_menu_start, {:time_entries => @time_entries, :can => @can, :back => @back }) %>
+
+	<% if @activities.present? -%>
+	<li class="folder">			
+		<a href="#" class="submenu"><%= l(:field_activity) %></a>
+		<ul>
+		<% @activities.each do |u| -%>
+		    <li><%= context_menu_link u.name, {:controller => 'timelog', :action => 'bulk_edit', :ids => @time_entries.collect(&:id), :time_entry => {'activity_id' => u}, :back_url => @back}, :method => :post,
+		                              :selected => (@time_entry && u == @time_entry.activity), :disabled => !@can[:update] %></li>
+		<% end -%>
+		    <li><%= context_menu_link l(:label_nobody), {:controller => 'timelog', :action => 'bulk_edit', :ids => @time_entries.collect(&:id), :time_entry => {'activity_id' => 'none'}, :back_url => @back}, :method => :post,
+		                              :selected => (@time_entry && @time_entry.activity.nil?), :disabled => !@can[:update] %></li>
+		</ul>
+	</li>
+	<% end %>
+
+  <%= call_hook(:view_time_entries_context_menu_end, {:time_entries => @time_entries, :can => @can, :back => @back }) %>
+
+  <li>
+    <%= context_menu_link l(:button_delete), 
+      {:controller => 'timelog', :action => 'destroy', :ids => @time_entries.collect(&:id), :back_url => @back},
+      :method => :delete, :confirm => l(:text_time_entries_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %>
+  </li>
+</ul>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/custom_fields/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/custom_fields
+END
--- a/app/views/custom_fields/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/custom_fields/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/custom_fields
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/custom_fields
 http://redmine.rubyforge.org/svn
 
 
 
-2010-11-07T14:15:01.891476Z
-4382
+2011-04-01T13:44:58.700463Z
+5272
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-7c1accc3dd22bd872e2e9b6a7f02a5c2
-2010-11-07T14:15:01.891476Z
-4382
+2011-06-06T13:18:33.000000Z
+a4379295fd24c6f633dc6f53e755c63a
+2011-04-01T13:44:58.700463Z
+5272
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-3960
+4190
 
 edit.rhtml
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 0c149f63c965988c70ecf48bde3222b3
 2009-12-09T10:49:58.529326Z
 3144
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 3372a4aeafa9f940744f07c4ce8ca434
 2010-04-16T15:33:49.924704Z
 3672
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 6441c559d374310cabfc9649eb5b3617
 2009-09-12T09:13:13.676884Z
 2871
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 7658107f6af4536cedfc075202ad3f7c
 2009-12-09T10:49:58.529326Z
 3144
--- a/app/views/custom_fields/.svn/text-base/_form.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/custom_fields/.svn/text-base/_form.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -18,33 +18,41 @@
       Element.hide(p_length.parentNode);
       Element.hide(p_regexp.parentNode);
       if (p_searchable) Element.show(p_searchable.parentNode);
-      Element.show(p_values);
+      Element.show(p_values.parentNode);
       break;
     case "bool":
       p_default.setAttribute('type','checkbox');
       Element.hide(p_length.parentNode);
       Element.hide(p_regexp.parentNode);
       if (p_searchable) Element.hide(p_searchable.parentNode);
-      Element.hide(p_values);
+      Element.hide(p_values.parentNode);
       break;
     case "date":
       Element.hide(p_length.parentNode);
       Element.hide(p_regexp.parentNode);
       if (p_searchable) Element.hide(p_searchable.parentNode);
-      Element.hide(p_values);
+      Element.hide(p_values.parentNode);
       break;
     case "float":
     case "int":
       Element.show(p_length.parentNode);
       Element.show(p_regexp.parentNode);
       if (p_searchable) Element.hide(p_searchable.parentNode);
-      Element.hide(p_values);
+      Element.hide(p_values.parentNode);
       break;
+		case "user":
+    case "version":
+      Element.hide(p_length.parentNode);
+      Element.hide(p_regexp.parentNode);
+      if (p_searchable) Element.hide(p_searchable.parentNode);
+      Element.hide(p_values.parentNode);
+      Element.hide(p_default.parentNode);
+		  break;
     default:
       Element.show(p_length.parentNode);
       Element.show(p_regexp.parentNode);
       if (p_searchable) Element.show(p_searchable.parentNode);
-      Element.hide(p_values);
+      Element.hide(p_values.parentNode);
       break;
   }
 }
@@ -54,16 +62,16 @@
 
 <div class="box">
 <p><%= f.text_field :name, :required => true %></p>
-<p><%= f.select :field_format, custom_field_formats_for_select, {}, :onchange => "toggle_custom_field_format();",
+<p><%= f.select :field_format, custom_field_formats_for_select(@custom_field), {}, :onchange => "toggle_custom_field_format();",
 																																		:disabled => !@custom_field.new_record? %></p>
 <p><label for="custom_field_min_length"><%=l(:label_min_max_length)%></label>
    <%= f.text_field :min_length, :size => 5, :no_label => true %> - 
    <%= f.text_field :max_length, :size => 5, :no_label => true %><br>(<%=l(:text_min_max_length_info)%>)</p>
 <p><%= f.text_field :regexp, :size => 50 %><br>(<%=l(:text_regexp_info)%>)</p>
-<p id="custom_field_possible_values"><%= f.text_area :possible_values, :value => @custom_field.possible_values.to_a.join("\n"),
-																																			 :cols => 20,
-																																			 :rows => 15 %>
-<br /><em><%= l(:text_custom_field_possible_values_info) %></em></p>
+<p>
+	<%= f.text_area :possible_values, :value => @custom_field.possible_values.to_a.join("\n"), :rows => 15 %>
+  <br /><em><%= l(:text_custom_field_possible_values_info) %></em>
+</p>
 <p><%= @custom_field.field_format == 'bool' ? f.check_box(:default_value) : f.text_field(:default_value) %></p>
 <%= call_hook(:view_custom_fields_form_upper_box, :custom_field => @custom_field, :form => f) %>
 </div>
--- a/app/views/custom_fields/_form.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/custom_fields/_form.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -18,33 +18,41 @@
       Element.hide(p_length.parentNode);
       Element.hide(p_regexp.parentNode);
       if (p_searchable) Element.show(p_searchable.parentNode);
-      Element.show(p_values);
+      Element.show(p_values.parentNode);
       break;
     case "bool":
       p_default.setAttribute('type','checkbox');
       Element.hide(p_length.parentNode);
       Element.hide(p_regexp.parentNode);
       if (p_searchable) Element.hide(p_searchable.parentNode);
-      Element.hide(p_values);
+      Element.hide(p_values.parentNode);
       break;
     case "date":
       Element.hide(p_length.parentNode);
       Element.hide(p_regexp.parentNode);
       if (p_searchable) Element.hide(p_searchable.parentNode);
-      Element.hide(p_values);
+      Element.hide(p_values.parentNode);
       break;
     case "float":
     case "int":
       Element.show(p_length.parentNode);
       Element.show(p_regexp.parentNode);
       if (p_searchable) Element.hide(p_searchable.parentNode);
-      Element.hide(p_values);
+      Element.hide(p_values.parentNode);
       break;
+		case "user":
+    case "version":
+      Element.hide(p_length.parentNode);
+      Element.hide(p_regexp.parentNode);
+      if (p_searchable) Element.hide(p_searchable.parentNode);
+      Element.hide(p_values.parentNode);
+      Element.hide(p_default.parentNode);
+		  break;
     default:
       Element.show(p_length.parentNode);
       Element.show(p_regexp.parentNode);
       if (p_searchable) Element.show(p_searchable.parentNode);
-      Element.hide(p_values);
+      Element.hide(p_values.parentNode);
       break;
   }
 }
@@ -54,16 +62,16 @@
 
 <div class="box">
 <p><%= f.text_field :name, :required => true %></p>
-<p><%= f.select :field_format, custom_field_formats_for_select, {}, :onchange => "toggle_custom_field_format();",
+<p><%= f.select :field_format, custom_field_formats_for_select(@custom_field), {}, :onchange => "toggle_custom_field_format();",
 																																		:disabled => !@custom_field.new_record? %></p>
 <p><label for="custom_field_min_length"><%=l(:label_min_max_length)%></label>
    <%= f.text_field :min_length, :size => 5, :no_label => true %> - 
    <%= f.text_field :max_length, :size => 5, :no_label => true %><br>(<%=l(:text_min_max_length_info)%>)</p>
 <p><%= f.text_field :regexp, :size => 50 %><br>(<%=l(:text_regexp_info)%>)</p>
-<p id="custom_field_possible_values"><%= f.text_area :possible_values, :value => @custom_field.possible_values.to_a.join("\n"),
-																																			 :cols => 20,
-																																			 :rows => 15 %>
-<br /><em><%= l(:text_custom_field_possible_values_info) %></em></p>
+<p>
+	<%= f.text_area :possible_values, :value => @custom_field.possible_values.to_a.join("\n"), :rows => 15 %>
+  <br /><em><%= l(:text_custom_field_possible_values_info) %></em>
+</p>
 <p><%= @custom_field.field_format == 'bool' ? f.check_box(:default_value) : f.text_field(:default_value) %></p>
 <%= call_hook(:view_custom_fields_form_upper_box, :custom_field => @custom_field, :form => f) %>
 </div>
--- a/app/views/documents/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/documents/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/documents
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/documents
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 755690362ea0b5f92a82326872d3b0ea
 2010-03-18T20:02:17.358992Z
 3602
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 a7c10b428fb4d74827a6ffdcc3651a25
 2010-03-18T20:06:16.936785Z
 3603
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 9d05f76602471c3dc339d8c54d2f4abc
 2009-05-30T23:30:36.923541Z
 2777
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 41a0e984e939e8fad03f2be67b33a4fc
 2007-03-12T17:59:02.654744Z
 333
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 cf8b8406d31262625c1f2ab2b66020b2
 2009-01-22T16:34:54.303755Z
 2295
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 60e54f2c42af4454d69bfc812bbf55ca
 2008-02-29T19:46:58.834023Z
 1180
--- a/app/views/enumerations/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/enumerations/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/enumerations
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/enumerations
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 b4f45f24d2fb9546e609fd3299912be6
 2010-05-09T11:19:15.980195Z
 3734
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 0a47386b406e4f425fe541d12c780467
 2009-10-21T22:34:28.905707Z
 2946
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 668687299206262ccf34ac3a44f57c33
 2009-07-05T12:22:02.133266Z
 2810
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 b9c8a97c172197a30cbb6c08000a9fa7
 2008-06-17T19:10:54.015252Z
 1558
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 e6eaade1aac54267080f56f5a09d3fd1
 2009-07-05T12:22:02.133266Z
 2810
--- a/app/views/files/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/files/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/files
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/files
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 05986f09d13424caeb68601c7c9ff16b
 2010-10-22T14:45:02.987126Z
 4268
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 7cd15d28fd27afa1f10b921c8b35cd7a
 2010-09-14T16:24:07.840869Z
 4085
--- a/app/views/gantts/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/gantts/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/gantts
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/gantts
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-21T15:06:11.321114Z
-4913
+2011-04-03T14:01:32.419875Z
+5301
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-6f609d119b323e4fd1a249dfbd614e38
-2011-02-21T15:06:11.321114Z
-4913
+2011-06-06T13:18:33.000000Z
+cd7362f337d3c416c33f6033220b22d5
+2011-04-03T14:01:32.419875Z
+5301
 jplang
 has-props
 
@@ -58,5 +58,5 @@
 
 
 
-6326
+5863
 
--- a/app/views/gantts/.svn/text-base/show.html.erb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/gantts/.svn/text-base/show.html.erb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 <% @gantt.view = self %>
 <h2><%= @query.new_record? ? l(:label_gantt) : h(@query.name) %></h2>
 
-<% form_tag(gantt_path(:month => params[:month], :year => params[:year], :months => params[:months]), :method => :put, :id => 'query_form') do %>
-  <%= hidden_field_tag('project_id', @project.to_param) if @project%>
+<% form_tag({:controller => 'gantts', :action => 'show', :project_id => @project, :month => params[:month], :year => params[:year], :months => params[:months]}, :method => :get, :id => 'query_form') do %>
+<%= hidden_field_tag 'set_filter', '1' %>
 <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
   <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
 	<div style="<%= @query.new_record? ? "" : "display: none;" %>">
@@ -22,17 +22,8 @@
 <%= select_year(@gantt.year_from, :prefix => "year", :discard_type => true) %>
 <%= hidden_field_tag 'zoom', @gantt.zoom %>
 
-<%= link_to_remote l(:button_apply), 
-                   { :url => { :set_filter => 1 },
-                     :update => "content",
-                     :with => "Form.serialize('query_form')"
-                   }, :class => 'icon icon-checked' %>
-                   
-<%= link_to_remote l(:button_clear),
-                   { :url => { :project_id => @project, :set_filter => 1 }, 
-                   	 :method => :put,
-                     :update => "content",
-                   }, :class => 'icon icon-reload' %>
+<%= link_to_function l(:button_apply), '$("query_form").submit()', :class => 'icon icon-checked' %>
+<%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 }, :class => 'icon icon-reload' %>
 </p>
 <% end %>
 
@@ -178,14 +169,14 @@
 
 <table width="100%">
 <tr>
-<td align="left"><%= link_to_remote ('&#171; ' + l(:label_previous)), {:url => @gantt.params_previous, :method => :get, :update => 'content', :complete => 'window.scrollTo(0,0)'}, {:href => url_for(@gantt.params_previous)} %></td>
-<td align="right"><%= link_to_remote (l(:label_next) + ' &#187;'), {:url => @gantt.params_next, :method => :get, :update => 'content', :complete => 'window.scrollTo(0,0)'}, {:href => url_for(@gantt.params_next)} %></td>
+<td align="left"><%= link_to_content_update('&#171; ' + l(:label_previous), params.merge(@gantt.params_previous)) %></td>
+<td align="right"><%= link_to_content_update(l(:label_next) + ' &#187;', params.merge(@gantt.params_next)) %></td>
 </tr>
 </table>
 
 <% other_formats_links do |f| %>
-	<%= f.link_to 'PDF', :url => @gantt.params %>
-	<%= f.link_to('PNG', :url => @gantt.params) if @gantt.respond_to?('to_image') %>
+	<%= f.link_to 'PDF', :url => params.merge(@gantt.params) %>
+	<%= f.link_to('PNG', :url => params.merge(@gantt.params)) if @gantt.respond_to?('to_image') %>
 <% end %>
 <% end # query.valid? %>
 
--- a/app/views/gantts/show.html.erb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/gantts/show.html.erb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 <% @gantt.view = self %>
 <h2><%= @query.new_record? ? l(:label_gantt) : h(@query.name) %></h2>
 
-<% form_tag(gantt_path(:month => params[:month], :year => params[:year], :months => params[:months]), :method => :put, :id => 'query_form') do %>
-  <%= hidden_field_tag('project_id', @project.to_param) if @project%>
+<% form_tag({:controller => 'gantts', :action => 'show', :project_id => @project, :month => params[:month], :year => params[:year], :months => params[:months]}, :method => :get, :id => 'query_form') do %>
+<%= hidden_field_tag 'set_filter', '1' %>
 <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
   <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
 	<div style="<%= @query.new_record? ? "" : "display: none;" %>">
@@ -22,17 +22,8 @@
 <%= select_year(@gantt.year_from, :prefix => "year", :discard_type => true) %>
 <%= hidden_field_tag 'zoom', @gantt.zoom %>
 
-<%= link_to_remote l(:button_apply), 
-                   { :url => { :set_filter => 1 },
-                     :update => "content",
-                     :with => "Form.serialize('query_form')"
-                   }, :class => 'icon icon-checked' %>
-                   
-<%= link_to_remote l(:button_clear),
-                   { :url => { :project_id => @project, :set_filter => 1 }, 
-                   	 :method => :put,
-                     :update => "content",
-                   }, :class => 'icon icon-reload' %>
+<%= link_to_function l(:button_apply), '$("query_form").submit()', :class => 'icon icon-checked' %>
+<%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 }, :class => 'icon icon-reload' %>
 </p>
 <% end %>
 
@@ -178,14 +169,14 @@
 
 <table width="100%">
 <tr>
-<td align="left"><%= link_to_remote ('&#171; ' + l(:label_previous)), {:url => @gantt.params_previous, :method => :get, :update => 'content', :complete => 'window.scrollTo(0,0)'}, {:href => url_for(@gantt.params_previous)} %></td>
-<td align="right"><%= link_to_remote (l(:label_next) + ' &#187;'), {:url => @gantt.params_next, :method => :get, :update => 'content', :complete => 'window.scrollTo(0,0)'}, {:href => url_for(@gantt.params_next)} %></td>
+<td align="left"><%= link_to_content_update('&#171; ' + l(:label_previous), params.merge(@gantt.params_previous)) %></td>
+<td align="right"><%= link_to_content_update(l(:label_next) + ' &#187;', params.merge(@gantt.params_next)) %></td>
 </tr>
 </table>
 
 <% other_formats_links do |f| %>
-	<%= f.link_to 'PDF', :url => @gantt.params %>
-	<%= f.link_to('PNG', :url => @gantt.params) if @gantt.respond_to?('to_image') %>
+	<%= f.link_to 'PDF', :url => params.merge(@gantt.params) %>
+	<%= f.link_to('PNG', :url => params.merge(@gantt.params)) if @gantt.respond_to?('to_image') %>
 <% end %>
 <% end # query.valid? %>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/groups/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/groups
+END
--- a/app/views/groups/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/groups/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/groups
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/groups
 http://redmine.rubyforge.org/svn
 
 
 
-2010-10-30T16:47:33.260585Z
-4312
-jbbarth
+2011-04-01T16:47:30.350690Z
+5284
+jplang
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 8798190a9ed51cd47a32f7fa3b14962b
 2009-09-11T21:11:20.141433Z
 2864
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 77b68adb1216f00c034d0afa77a50bff
 2009-09-12T09:13:13.676884Z
 2871
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 61731ddfe926e25ea2108a99a7dc594d
 2009-07-05T11:38:40.659710Z
 2807
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 f122118621575d0b74331d392b4aba4b
 2010-02-06T13:26:29.318273Z
 3375
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 5fc442e9118fe012a7d4049daa4d68b4
 2009-09-12T16:12:42.876344Z
 2879
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 5f484ae9be041e266944cc2710caa394
 2010-05-09T11:19:15.980195Z
 3734
@@ -236,11 +236,11 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-7738dc0db4c4ad48e82613829c1e991a
-2010-10-30T16:47:33.260585Z
-4312
-jbbarth
+2011-06-06T13:18:33.000000Z
+9578abaa4df41ed89c0663dcbd1ed17c
+2011-04-01T16:47:30.350690Z
+5284
+jplang
 has-props
 
 
@@ -262,7 +262,7 @@
 
 
 
-1625
+1624
 
 show.html.erb
 file
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 ee1e9b07710ccd0b0dee7791dddc93bb
 2009-07-05T13:54:34.821434Z
 2812
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 09eeec211f50994f28b31bcff9be43ef
 2009-09-05T11:19:00.617770Z
 2858
--- a/app/views/groups/.svn/text-base/_users.html.erb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/groups/.svn/text-base/_users.html.erb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -24,7 +24,7 @@
 </div>
 
 <div class="splitcontentright">
-<% users = User.active.find(:all, :limit => 100) - @group.users %>
+<% users = User.active.not_in_group(@group).all(:limit => 100) %>
 <% if users.any? %>
   <% remote_form_for(:group, @group, :url => {:controller => 'groups', :action => 'add_users', :id => @group}, :method => :post) do |f| %>
     <fieldset><legend><%=l(:label_user_new)%></legend>
--- a/app/views/groups/_users.html.erb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/groups/_users.html.erb	Mon Jun 06 14:41:04 2011 +0100
@@ -24,7 +24,7 @@
 </div>
 
 <div class="splitcontentright">
-<% users = User.active.find(:all, :limit => 100) - @group.users %>
+<% users = User.active.not_in_group(@group).all(:limit => 100) %>
 <% if users.any? %>
   <% remote_form_for(:group, @group, :url => {:controller => 'groups', :action => 'add_users', :id => @group}, :method => :post) do |f| %>
     <fieldset><legend><%=l(:label_user_new)%></legend>
--- a/app/views/issue_categories/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issue_categories/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/issue_categories
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/issue_categories
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 61ef938e10897a71008d145439614aa8
 2010-03-06T18:43:00.594668Z
 3549
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 e0d28729320423a7b8fcb6309b58de9a
 2010-11-07T14:56:12.614499Z
 4385
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 fc3f04670edce3c08e645d254198a89c
 2007-09-14T11:34:08.234701Z
 725
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 f7b34c60cf2f117d3c53be7b0840fe28
 2008-02-29T22:54:07.325361Z
 1182
--- a/app/views/issue_moves/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issue_moves/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/issue_moves
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/issue_moves
 http://redmine.rubyforge.org/svn
 
 
 
-2010-12-29T20:48:51.915261Z
-4583
+2011-04-12T19:22:44.432354Z
+5443
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-9a221a421165c46becefe4e15dc6266c
-2010-12-29T20:48:51.915261Z
-4583
+2011-06-06T13:18:33.000000Z
+1adceabf61b6f698270cbf4b97c42a83
+2011-04-12T19:22:44.432354Z
+5443
 jplang
 has-props
 
@@ -58,5 +58,5 @@
 
 
 
-2874
+2946
 
--- a/app/views/issue_moves/.svn/text-base/new.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issue_moves/.svn/text-base/new.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -74,3 +74,6 @@
 	<%= submit_tag l(:button_move_and_follow), :name => 'follow' %>
 <% end %>
 <% end %>
+<% content_for :header_tags do %>
+	<%= robot_exclusion_tag %>
+<% end %>
--- a/app/views/issue_moves/new.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issue_moves/new.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -74,3 +74,6 @@
 	<%= submit_tag l(:button_move_and_follow), :name => 'follow' %>
 <% end %>
 <% end %>
+<% content_for :header_tags do %>
+	<%= robot_exclusion_tag %>
+<% end %>
--- a/app/views/issue_relations/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issue_relations/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/issue_relations
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/issue_relations
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 7024ae266ddb4d218d7c24c3b17fa790
 2010-12-12T16:04:28.950669Z
 4502
--- a/app/views/issue_statuses/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issue_statuses/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/issue_statuses
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/issue_statuses
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 2d8b318bb1dbbe6dbb478716d52e65e9
 2010-03-17T20:46:22.413470Z
 3600
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 e4ea04eeab7c1f7265858a9dd09f1b7b
 2009-12-12T10:33:12.138303Z
 3157
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 21f8b2f134a83413d09ae7e4d004c642
 2009-07-05T12:22:02.133266Z
 2810
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 af751ca552f43d9954a0cb1bbdb6e362
 2009-07-05T12:22:02.133266Z
 2810
--- a/app/views/issues/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,125 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 41
-/svn/!svn/ver/4908/trunk/app/views/issues
-END
-_relations.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4741/trunk/app/views/issues/_relations.rhtml
-END
-_history.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/4062/trunk/app/views/issues/_history.rhtml
-END
-_action_menu.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/4258/trunk/app/views/issues/_action_menu.rhtml
-END
-bulk_edit.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4533/trunk/app/views/issues/bulk_edit.rhtml
-END
-_form.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4311/trunk/app/views/issues/_form.rhtml
-END
-_form_update.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/3151/trunk/app/views/issues/_form_update.rhtml
-END
-index.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4093/trunk/app/views/issues/index.rhtml
-END
-_sidebar.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/4908/trunk/app/views/issues/_sidebar.rhtml
-END
-_list.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4056/trunk/app/views/issues/_list.rhtml
-END
-index.api.rsb
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/4489/trunk/app/views/issues/index.api.rsb
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/issues
 END
-show.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4530/trunk/app/views/issues/show.rhtml
-END
-_form_custom_fields.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/2827/trunk/app/views/issues/_form_custom_fields.rhtml
-END
-_list_simple.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/3924/trunk/app/views/issues/_list_simple.rhtml
-END
-_changesets.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4652/trunk/app/views/issues/_changesets.rhtml
-END
-_edit.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/3946/trunk/app/views/issues/_edit.rhtml
-END
-edit.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/1129/trunk/app/views/issues/edit.rhtml
-END
-_attributes.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4090/trunk/app/views/issues/_attributes.rhtml
-END
-show.api.rsb
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4741/trunk/app/views/issues/show.api.rsb
-END
-destroy.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/2685/trunk/app/views/issues/destroy.rhtml
-END
-new.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4311/trunk/app/views/issues/new.rhtml
-END
--- a/app/views/issues/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/issues
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/issues
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-21T13:34:33.010064Z
-4908
+2011-04-17T15:17:18.418900Z
+5495
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-071e7d5deebfed5ec01c6fa478e57a6d
-2011-01-22T13:28:20.816262Z
-4741
+2011-06-06T13:18:33.000000Z
+c18fc1bae24038d3386be81993a37678
+2011-04-12T19:37:56.793879Z
+5444
 jplang
 has-props
 
@@ -58,7 +58,41 @@
 
 
 
-1763
+2023
+
+_action_menu.rhtml
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+c7a3bc51851c2b924a4af2ac51c6a22d
+2011-04-17T15:17:18.418900Z
+5495
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1154
 
 _history.rhtml
 file
@@ -66,11 +100,11 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-8d719ade30044f529f104cda9dcdd6f4
-2010-09-05T22:57:20.669640Z
-4062
-edavis10
+2011-06-06T13:18:33.000000Z
+0c7fe4dc90630a9b92d43aad7ad1db70
+2011-03-28T20:04:48.692581Z
+5240
+jplang
 has-props
 
 
@@ -92,19 +126,20 @@
 
 
 
-859
+1019
 
-_action_menu.rhtml
+_form.rhtml
 file
 
 
 
 
-2011-03-03T11:05:11.000000Z
-74c6e939ebb113c49a367fff0f463f63
-2010-10-15T23:11:05.712143Z
-4258
-edavis10
+2011-06-06T13:18:33.000000Z
+7e86b1795a1640748d794c3439ddab1d
+2011-04-15T13:23:13.506236Z
+5466
+jplang
+has-props
 
 
 
@@ -125,8 +160,7 @@
 
 
 
-
-1285
+1915
 
 bulk_edit.rhtml
 file
@@ -134,10 +168,10 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-f3bdc270087564333ffdacd38f1d363c
-2010-12-18T14:14:04.023240Z
-4533
+2011-06-06T13:18:33.000000Z
+5a6cefefd1c00a9d9c0f4ee125cbe147
+2011-04-07T16:34:58.239484Z
+5354
 jplang
 has-props
 
@@ -160,41 +194,7 @@
 
 
 
-3443
-
-_form.rhtml
-file
-
-
-
-
-2011-03-03T11:05:11.000000Z
-7c3d2a41291eabbd1c7e28139be69e49
-2010-10-30T16:15:31.867344Z
-4311
-jbbarth
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2033
+3826
 
 _form_update.rhtml
 file
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 00a1336147a304d10f556a97f7105a83
 2009-12-11T18:48:34.197724Z
 3151
@@ -236,11 +236,11 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-5a8516dceeaac8769ab1780f8e9cccd9
-2010-09-16T21:33:49.399868Z
-4093
-jbbarth
+2011-06-06T13:18:33.000000Z
+dda747decb5c11cd589cd5592a2d5bfa
+2011-04-01T14:34:44.070899Z
+5276
+jplang
 has-props
 
 
@@ -262,7 +262,7 @@
 
 
 
-4097
+3557
 
 _sidebar.rhtml
 file
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 b9c2ef98cde787dfe8b1b0b4df497613
 2011-02-21T13:34:33.010064Z
 4908
@@ -304,11 +304,11 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-b5bd20e1b16f321b87b14ec6d0b7a9e7
-2010-09-03T19:59:49.465806Z
-4056
-jbbarth
+2011-06-06T13:18:33.000000Z
+da2cbff6bc215672172e60589b16c9dd
+2011-04-05T22:18:49.170029Z
+5332
+jplang
 has-props
 
 
@@ -330,7 +330,7 @@
 
 
 
-1772
+1918
 
 index.api.rsb
 file
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 db6f5533a330ebdcd1dd5e4c47098024
 2010-12-11T13:13:49.013705Z
 4489
@@ -372,10 +372,10 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-f147a1cbca0263a122d10bf674d6dcbf
-2010-12-18T13:40:50.641112Z
-4530
+2011-06-06T13:18:33.000000Z
+16879c3e81700c198a7bfac049e25f20
+2011-04-12T19:53:14.178577Z
+5447
 jplang
 has-props
 
@@ -398,7 +398,7 @@
 
 
 
-5468
+5420
 
 _form_custom_fields.rhtml
 file
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 5cac68d4655699c1a4ce40ef17da7b0a
 2009-07-29T19:04:27.717761Z
 2827
@@ -434,13 +434,47 @@
 
 353
 
+_changesets.rhtml
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+161df5bf4aad48f815ece5d61f73b5bf
+2011-04-03T12:33:27.904025Z
+5300
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+457
+
 _list_simple.rhtml
 file
 
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 334ec8cd87b661a181185092c242c41d
 2010-08-08T07:07:20.961363Z
 3924
@@ -468,47 +502,13 @@
 
 989
 
-_changesets.rhtml
-file
-
-
-
-
-2011-03-03T11:05:11.000000Z
-eca2b7cfea14ef6185c358e55f1b8b48
-2011-01-08T00:19:51.192586Z
-4652
-tmaruyama
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-470
-
 _edit.rhtml
 file
 
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 ebae2e20ea4028620967382b877b5860
 2010-08-18T15:01:35.032314Z
 3946
@@ -542,10 +542,10 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-4b6048de503364b0ef668df08cceb602
-2008-02-09T16:11:18.249226Z
-1129
+2011-06-06T13:18:33.000000Z
+5b30673e11cba7d16c5d3b9d58ac17c7
+2011-04-12T19:22:44.432354Z
+5443
 jplang
 has-props
 
@@ -568,7 +568,7 @@
 
 
 
-90
+165
 
 _attributes.rhtml
 file
@@ -576,11 +576,11 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-e2c801f0755567e34186cdbbc510d29d
-2010-09-16T18:27:33.887969Z
-4090
-edavis10
+2011-06-06T13:18:33.000000Z
+95ca7e4a068d06c8efedc1c0cc4718d2
+2011-04-11T18:01:25.736617Z
+5418
+jplang
 has-props
 
 
@@ -602,7 +602,7 @@
 
 
 
-2461
+2791
 
 show.api.rsb
 file
@@ -610,7 +610,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 cdb3db6cd78da1f46578c9da61923c4e
 2011-01-22T13:28:20.816262Z
 4741
@@ -644,7 +644,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 b429d0e7dd6b3ef7bc1a28bdf0aeaf34
 2009-04-24T17:18:36.117696Z
 2685
@@ -678,11 +678,11 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-9889d4cce0dfd6d224e85fc1f489c623
-2010-10-30T16:15:31.867344Z
-4311
-jbbarth
+2011-06-06T13:18:33.000000Z
+952a57c3e6f5fc66fde1304569b7eb5d
+2011-04-12T19:22:44.432354Z
+5443
+jplang
 has-props
 
 
@@ -704,5 +704,5 @@
 
 
 
-1154
+1185
 
--- a/app/views/issues/.svn/text-base/_action_menu.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/text-base/_action_menu.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,10 +1,9 @@
 <div class="contextual">
 <%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %>
 <%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon icon-time-add' %>
-<% replace_watcher ||= 'watcher' %>
-<%= watcher_tag(@issue, User.current, {:id => replace_watcher, :replace => ['watcher','watcher2']}) %>
+<%= watcher_tag(@issue, User.current) %>
 <%= link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate' %>
 <%= link_to_if_authorized l(:button_copy), {:controller => 'issue_moves', :action => 'new', :id => @issue, :copy_options => {:copy => 't'}}, :class => 'icon icon-copy' %>
 <%= link_to_if_authorized l(:button_move), {:controller => 'issue_moves', :action => 'new', :id => @issue}, :class => 'icon icon-move' %>
-<%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del' %>
+<%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => issues_destroy_confirmation_message(@issue), :method => :post, :class => 'icon icon-del' %>
 </div>
--- a/app/views/issues/.svn/text-base/_attributes.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/text-base/_attributes.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -31,6 +31,11 @@
 </div>
 
 <div class="splitcontentright">
+<% if User.current.allowed_to?(:manage_subtasks, @project) %>
+<p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10 %></p>
+<div id="parent_issue_candidates" class="autocomplete"></div>
+<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %>
+<% end %>
 <p><%= f.text_field :start_date, :size => 10, :disabled => !@issue.leaf? %><%= calendar_for('issue_start_date') if @issue.leaf? %></p>
 <p><%= f.text_field :due_date, :size => 10, :disabled => !@issue.leaf? %><%= calendar_for('issue_due_date') if @issue.leaf? %></p>
 <p><%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf? %> <%= l(:field_hours) %></p>
--- a/app/views/issues/.svn/text-base/_changesets.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/text-base/_changesets.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -3,7 +3,7 @@
     <p><%= link_to_revision(changeset, changeset.project,
                             :text => "#{l(:label_revision)} #{changeset.format_identifier}") %><br />
         <span class="author"><%= authoring(changeset.committed_on, changeset.author) %></span></p>
-    <div class="changeset-changes">
+    <div class="wiki">
         <%= textilizable(changeset, :comments) %>
     </div>
     </div>
--- a/app/views/issues/.svn/text-base/_form.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/text-base/_form.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,19 +1,17 @@
 <%= call_hook(:view_issues_form_details_top, { :issue => @issue, :form => f }) %>
 
 <div id="issue_descr_fields" <%= 'style="display:none"' unless @issue.new_record? || @issue.errors.any? %>>
+<% if @issue.safe_attribute_names.include?('is_private') %>
+<p style="float:right; margin-right:1em;">
+  <label class="inline" for="issue_is_private"><%= f.check_box :is_private, :no_label => true %> <%= l(:field_is_private) %></label>
+</p>
+<% end %>
 <p><%= f.select :tracker_id, @project.trackers.collect {|t| [t.name, t.id]}, :required => true %></p>
 <%= observe_field :issue_tracker_id, :url => { :action => :new, :project_id => @project, :id => @issue },
                                      :update => :attributes,
                                      :with => "Form.serialize('issue-form')" %>
 
 <p><%= f.text_field :subject, :size => 80, :required => true %></p>
-                                     
-<% if User.current.allowed_to?(:manage_subtasks, @project) %>
-<p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10 %></p>
-<div id="parent_issue_candidates" class="autocomplete"></div>
-<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %>
-<% end %>
-
 <p><%= f.text_area :description,
                    :cols => 60,
                    :rows => (@issue.description.blank? ? 10 : [[10, @issue.description.length / 50].max, 100].min),
--- a/app/views/issues/.svn/text-base/_history.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/text-base/_history.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -17,3 +17,5 @@
   </div>
   <%= call_hook(:view_issues_history_journal_bottom, { :journal => journal }) %>
 <% end %>
+
+<% heads_for_wiki_formatter if User.current.allowed_to?(:edit_issue_notes, issue.project) || User.current.allowed_to?(:edit_own_issue_notes, issue.project) %>
--- a/app/views/issues/.svn/text-base/_list.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/text-base/_list.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -20,6 +20,7 @@
     	<td colspan="<%= query.columns.size + 2 %>">
     		<span class="expander" onclick="toggleRowGroup(this); return false;">&nbsp;</span>
       	<%= group.blank? ? 'None' : column_content(@query.group_by_column, issue) %> <span class="count">(<%= @issue_count_by_group[group] %>)</span>
+        <%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}", "toggleAllRowGroups(this)", :class => 'toggle-all') %>
     	</td>
 		</tr>
 		<% previous_group = group %>
@@ -27,7 +28,7 @@
 	<tr id="issue-<%= issue.id %>" class="hascontextmenu <%= cycle('odd', 'even') %> <%= issue.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
 	  <td class="checkbox hide-when-print"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>
 		<td class="id"><%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %></td>
-        <% query.columns.each do |column| %><%= content_tag 'td', column_content(column, issue), :class => column.name %><% end %>
+        <% query.columns.each do |column| %><%= content_tag 'td', column_content(column, issue), :class => column.css_classes %><% end %>
 	</tr>
 	<% end -%>
 	</tbody>
--- a/app/views/issues/.svn/text-base/_relations.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/text-base/_relations.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 <div class="contextual">
-<% if authorize_for('issue_relations', 'new') %>
+<% if User.current.allowed_to?(:manage_issue_relations, @project) %>
   <%= toggle_link l(:button_add), 'new-relation-form', {:focus => 'relation_issue_to_id'} %>
 <% end %>
 </div>
@@ -7,22 +7,25 @@
 <p><strong><%=l(:label_related_issues)%></strong></p>
 
 <% if @relations.present? %>
-<table style="width:100%">
+<form>
+<table class="list issues">
 <% @relations.each do |relation| %>
-<tr>
-<td><%= l(relation.label_for(@issue)) %> <%= "(#{l('datetime.distance_in_words.x_days', :count => relation.delay)})" if relation.delay && relation.delay != 0 %>
+<tr class="issue hascontextmenu">
+<td class="checkbox"><%= check_box_tag("ids[]", relation.other_issue(@issue).id, false, :id => nil) %></td>
+<td class="subject"><%= l(relation.label_for(@issue)) %> <%= "(#{l('datetime.distance_in_words.x_days', :count => relation.delay)})" if relation.delay && relation.delay != 0 %>
     <%= h(relation.other_issue(@issue).project) + ' - ' if Setting.cross_project_issue_relations? %>
     <%= link_to_issue(relation.other_issue(@issue), :truncate => 60) %>
 </td>
-<td><%= relation.other_issue(@issue).status.name %></td>
-<td><%= format_date(relation.other_issue(@issue).start_date) %></td>
-<td><%= format_date(relation.other_issue(@issue).due_date) %></td>
-<td><%= link_to_remote(image_tag('delete.png'), { :url => {:controller => 'issue_relations', :action => 'destroy', :issue_id => @issue, :id => relation},                                              
+<td class="status"><%= relation.other_issue(@issue).status.name %></td>
+<td class="start_date"><%= format_date(relation.other_issue(@issue).start_date) %></td>
+<td class="due_date"><%= format_date(relation.other_issue(@issue).due_date) %></td>
+<td class="buttons"><%= link_to_remote(image_tag('link_break.png'), { :url => {:controller => 'issue_relations', :action => 'destroy', :issue_id => @issue, :id => relation},                                              
                                                   :method => :post
                                                 }, :title => l(:label_relation_delete)) if authorize_for('issue_relations', 'destroy') %></td>
 </tr>
 <% end %>
 </table>
+</form>
 <% end %>
 
 <% remote_form_for(:relation, @relation, 
--- a/app/views/issues/.svn/text-base/bulk_edit.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/text-base/bulk_edit.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -48,13 +48,21 @@
 <% end %>
 
 <% @custom_fields.each do |custom_field| %>
-	<p><label><%= h(custom_field.name) %></label> <%= custom_field_tag_for_bulk_edit('issue', custom_field) %></p>
+	<p><label><%= h(custom_field.name) %></label> <%= custom_field_tag_for_bulk_edit('issue', custom_field, @projects) %></p>
 <% end %>
 
 <%= call_hook(:view_issues_bulk_edit_details_bottom, { :issues => @issues }) %>
 </div>
 
 <div class="splitcontentright">
+<% if @project && User.current.allowed_to?(:manage_subtasks, @project) %>
+<p>
+	<label><%= l(:field_parent_issue) %></label>
+	<%= text_field_tag 'issue[parent_issue_id]', '', :size => 10 %>
+</p>
+<div id="parent_issue_candidates" class="autocomplete"></div>
+<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:project_id => @project) }')" %>
+<% end %>
 <p>
 	<label><%= l(:field_start_date) %></label>
 	<%= text_field_tag 'issue[start_date]', '', :size => 10 %><%= calendar_for('issue_start_date') %>
--- a/app/views/issues/.svn/text-base/edit.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/text-base/edit.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,3 +1,6 @@
 <h2><%=h "#{@issue.tracker.name} ##{@issue.id}" %></h2>
 
 <%= render :partial => 'edit' %>
+<% content_for :header_tags do %>
+    <%= robot_exclusion_tag %>
+<% end %>
--- a/app/views/issues/.svn/text-base/index.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/text-base/index.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -8,8 +8,8 @@
 <h2><%= @query.new_record? ? l(:label_issue_plural) : h(@query.name) %></h2>
 <% html_title(@query.new_record? ? l(:label_issue_plural) : @query.name) %>
 
-<% form_tag({ :controller => 'queries', :action => 'new' }, :id => 'query_form') do %>
-    <%= hidden_field_tag('project_id', @project.to_param) if @project %>
+<% form_tag({ :controller => 'issues', :action => 'index', :project_id => @project }, :method => :get, :id => 'query_form') do %>
+    <%= hidden_field_tag 'set_filter', '1' %>
 		<div id="query_form_content" class="hide-when-print">
     <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
     	<legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
@@ -35,22 +35,10 @@
 		</div>
     <p class="buttons hide-when-print">
 
-    <%= link_to_remote l(:button_apply), 
-                       { :url => { :set_filter => 1 },
-                         :before => 'selectAllOptions("selected_columns");',
-                         :update => "content",
-                         :complete => "apply_filters_observer()",
-                         :with => "Form.serialize('query_form')"
-                       }, :class => 'icon icon-checked' %>
-                       
-    <%= link_to_remote l(:button_clear),
-                       { :url => { :set_filter => 1, :project_id => @project },
-                         :method => :get,
-                         :update => "content",
-                       }, :class => 'icon icon-reload'  %>
-                       
+    <%= link_to_function l(:button_apply), 'submit_query_form("query_form")', :class => 'icon icon-checked' %>
+    <%= link_to l(:button_clear), { :set_filter => 1, :project_id => @project }, :class => 'icon icon-reload'  %>
     <% if @query.new_record? && User.current.allowed_to?(:save_queries, @project, :global => true) %>
-    <%= link_to l(:button_save), {}, :onclick => "selectAllOptions('selected_columns'); $('query_form').submit(); return false;", :class => 'icon icon-save' %>
+    <%= link_to_function l(:button_save), "$('query_form').action='#{ url_for :controller => 'queries', :action => 'new', :project_id => @project }'; submit_query_form('query_form')", :class => 'icon icon-save' %>
     <% end %>
     </p>
 <% end %>
@@ -65,9 +53,9 @@
 <% end %>
 
 <% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => { :project_id => @project, :query_id => (@query.new_record? ? nil : @query), :key => User.current.rss_key } %>
-	<%= f.link_to 'CSV', :url => { :project_id => @project } %>
-	<%= f.link_to 'PDF', :url => { :project_id => @project } %>
+	<%= f.link_to 'Atom', :url => params.merge(:key => User.current.rss_key) %>
+	<%= f.link_to 'CSV', :url => params %>
+	<%= f.link_to 'PDF', :url => params %>
 <% end %>
 
 <% end %>
--- a/app/views/issues/.svn/text-base/new.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/text-base/new.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -23,4 +23,5 @@
 
 <% content_for :header_tags do %>
     <%= stylesheet_link_tag 'scm' %>
+    <%= robot_exclusion_tag %>
 <% end %>
--- a/app/views/issues/.svn/text-base/show.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/.svn/text-base/show.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,6 +1,6 @@
 <%= render :partial => 'action_menu' %>
 
-<h2><%= @issue.tracker.name %> #<%= @issue.id %></h2>
+<h2><%= issue_heading(@issue) %></h2>
 
 <div class="<%= @issue.css_classes %> details">
         <%= avatar(@issue.author, :size => "50") %>
@@ -73,7 +73,7 @@
 </div>
 <% end %>
 
-<% if authorize_for('issue_relations', 'new') || @issue.relations.present? %>
+<% if @relations.present? || User.current.allowed_to?(:manage_issue_relations, @project) %>
 <hr />
 <div id="relations">
 <%= render :partial => 'relations' %>
@@ -98,7 +98,7 @@
 
 
 <div style="clear: both;"></div>
-<%= render :partial => 'action_menu', :locals => {:replace_watcher => 'watcher2' } %>
+<%= render :partial => 'action_menu' %>
 
 <div style="clear: both;"></div>
 <% if authorize_for('issues', 'edit') %>
--- a/app/views/issues/_action_menu.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/_action_menu.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,10 +1,9 @@
 <div class="contextual">
 <%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %>
 <%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon icon-time-add' %>
-<% replace_watcher ||= 'watcher' %>
-<%= watcher_tag(@issue, User.current, {:id => replace_watcher, :replace => ['watcher','watcher2']}) %>
+<%= watcher_tag(@issue, User.current) %>
 <%= link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate' %>
 <%= link_to_if_authorized l(:button_copy), {:controller => 'issue_moves', :action => 'new', :id => @issue, :copy_options => {:copy => 't'}}, :class => 'icon icon-copy' %>
 <%= link_to_if_authorized l(:button_move), {:controller => 'issue_moves', :action => 'new', :id => @issue}, :class => 'icon icon-move' %>
-<%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del' %>
+<%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => issues_destroy_confirmation_message(@issue), :method => :post, :class => 'icon icon-del' %>
 </div>
--- a/app/views/issues/_attributes.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/_attributes.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -31,6 +31,11 @@
 </div>
 
 <div class="splitcontentright">
+<% if User.current.allowed_to?(:manage_subtasks, @project) %>
+<p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10 %></p>
+<div id="parent_issue_candidates" class="autocomplete"></div>
+<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %>
+<% end %>
 <p><%= f.text_field :start_date, :size => 10, :disabled => !@issue.leaf? %><%= calendar_for('issue_start_date') if @issue.leaf? %></p>
 <p><%= f.text_field :due_date, :size => 10, :disabled => !@issue.leaf? %><%= calendar_for('issue_due_date') if @issue.leaf? %></p>
 <p><%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf? %> <%= l(:field_hours) %></p>
--- a/app/views/issues/_changesets.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/_changesets.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -3,7 +3,7 @@
     <p><%= link_to_revision(changeset, changeset.project,
                             :text => "#{l(:label_revision)} #{changeset.format_identifier}") %><br />
         <span class="author"><%= authoring(changeset.committed_on, changeset.author) %></span></p>
-    <div class="changeset-changes">
+    <div class="wiki">
         <%= textilizable(changeset, :comments) %>
     </div>
     </div>
--- a/app/views/issues/_form.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/_form.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,21 +1,17 @@
 <%= call_hook(:view_issues_form_details_top, { :issue => @issue, :form => f }) %>
 
 <div id="issue_descr_fields" <%= 'style="display:none"' unless @issue.new_record? || @issue.errors.any? %>>
+<% if @issue.safe_attribute_names.include?('is_private') %>
+<p style="float:right; margin-right:1em;">
+  <label class="inline" for="issue_is_private"><%= f.check_box :is_private, :no_label => true %> <%= l(:field_is_private) %></label>
+</p>
+<% end %>
 <p><%= f.select :tracker_id, @project.trackers.collect {|t| [t.name, t.id]}, :required => true %></p>
 <%= observe_field :issue_tracker_id, :url => { :action => :new, :project_id => @project, :id => @issue },
                                      :update => :attributes,
                                      :with => "Form.serialize('issue-form')" %>
 
 <p><%= f.text_field :subject, :size => 80, :required => true %></p>
-                                     
-<% if User.current.allowed_to?(:manage_subtasks, @project) %>
-  <p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10, :autocomplete => :on %>
-  <br />
-                          <em> <%=l(:text_issue_parent_issue_info)%></em>
-  </p>
-  <div id="parent_issue_candidates" class="autocomplete"></div>
-    <%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %>
-<% end %>
 
 <p><%= f.text_area :description,
                    :cols => 60,
--- a/app/views/issues/_history.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/_history.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -17,3 +17,5 @@
   </div>
   <%= call_hook(:view_issues_history_journal_bottom, { :journal => journal }) %>
 <% end %>
+
+<% heads_for_wiki_formatter if User.current.allowed_to?(:edit_issue_notes, issue.project) || User.current.allowed_to?(:edit_own_issue_notes, issue.project) %>
--- a/app/views/issues/_list.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/_list.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -20,6 +20,7 @@
     	<td colspan="<%= query.columns.size + 2 %>">
     		<span class="expander" onclick="toggleRowGroup(this); return false;">&nbsp;</span>
       	<%= group.blank? ? 'None' : column_content(@query.group_by_column, issue) %> <span class="count">(<%= @issue_count_by_group[group] %>)</span>
+        <%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}", "toggleAllRowGroups(this)", :class => 'toggle-all') %>
     	</td>
 		</tr>
 		<% previous_group = group %>
@@ -27,7 +28,7 @@
 	<tr id="issue-<%= issue.id %>" class="hascontextmenu <%= cycle('odd', 'even') %> <%= issue.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
 	  <td class="checkbox hide-when-print"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>
 		<td class="id"><%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %></td>
-        <% query.columns.each do |column| %><%= content_tag 'td', column_content(column, issue), :class => column.name %><% end %>
+        <% query.columns.each do |column| %><%= content_tag 'td', column_content(column, issue), :class => column.css_classes %><% end %>
 	</tr>
 	<% end -%>
 	</tbody>
--- a/app/views/issues/_relations.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/_relations.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 <div class="contextual">
-<% if authorize_for('issue_relations', 'new') %>
+<% if User.current.allowed_to?(:manage_issue_relations, @project) %>
   <%= toggle_link l(:button_add), 'new-relation-form', {:focus => 'relation_issue_to_id'} %>
 <% end %>
 </div>
@@ -7,22 +7,25 @@
 <p><strong><%=l(:label_related_issues)%></strong></p>
 
 <% if @relations.present? %>
-<table style="width:100%">
+<form>
+<table class="list issues">
 <% @relations.each do |relation| %>
-<tr>
-<td><%= l(relation.label_for(@issue)) %> <%= "(#{l('datetime.distance_in_words.x_days', :count => relation.delay)})" if relation.delay && relation.delay != 0 %>
+<tr class="issue hascontextmenu">
+<td class="checkbox"><%= check_box_tag("ids[]", relation.other_issue(@issue).id, false, :id => nil) %></td>
+<td class="subject"><%= l(relation.label_for(@issue)) %> <%= "(#{l('datetime.distance_in_words.x_days', :count => relation.delay)})" if relation.delay && relation.delay != 0 %>
     <%= h(relation.other_issue(@issue).project) + ' - ' if Setting.cross_project_issue_relations? %>
     <%= link_to_issue(relation.other_issue(@issue), :truncate => 60) %>
 </td>
-<td><%= relation.other_issue(@issue).status.name %></td>
-<td><%= format_date(relation.other_issue(@issue).start_date) %></td>
-<td><%= format_date(relation.other_issue(@issue).due_date) %></td>
-<td><%= link_to_remote(image_tag('delete.png'), { :url => {:controller => 'issue_relations', :action => 'destroy', :issue_id => @issue, :id => relation},                                              
+<td class="status"><%= relation.other_issue(@issue).status.name %></td>
+<td class="start_date"><%= format_date(relation.other_issue(@issue).start_date) %></td>
+<td class="due_date"><%= format_date(relation.other_issue(@issue).due_date) %></td>
+<td class="buttons"><%= link_to_remote(image_tag('link_break.png'), { :url => {:controller => 'issue_relations', :action => 'destroy', :issue_id => @issue, :id => relation},                                              
                                                   :method => :post
                                                 }, :title => l(:label_relation_delete)) if authorize_for('issue_relations', 'destroy') %></td>
 </tr>
 <% end %>
 </table>
+</form>
 <% end %>
 
 <% remote_form_for(:relation, @relation, 
--- a/app/views/issues/bulk_edit.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/bulk_edit.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -48,13 +48,21 @@
 <% end %>
 
 <% @custom_fields.each do |custom_field| %>
-	<p><label><%= h(custom_field.name) %></label> <%= custom_field_tag_for_bulk_edit('issue', custom_field) %></p>
+	<p><label><%= h(custom_field.name) %></label> <%= custom_field_tag_for_bulk_edit('issue', custom_field, @projects) %></p>
 <% end %>
 
 <%= call_hook(:view_issues_bulk_edit_details_bottom, { :issues => @issues }) %>
 </div>
 
 <div class="splitcontentright">
+<% if @project && User.current.allowed_to?(:manage_subtasks, @project) %>
+<p>
+	<label><%= l(:field_parent_issue) %></label>
+	<%= text_field_tag 'issue[parent_issue_id]', '', :size => 10 %>
+</p>
+<div id="parent_issue_candidates" class="autocomplete"></div>
+<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:project_id => @project) }')" %>
+<% end %>
 <p>
 	<label><%= l(:field_start_date) %></label>
 	<%= text_field_tag 'issue[start_date]', '', :size => 10 %><%= calendar_for('issue_start_date') %>
--- a/app/views/issues/edit.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/edit.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,3 +1,6 @@
 <h2><%=h "#{@issue.tracker.name} ##{@issue.id}" %></h2>
 
 <%= render :partial => 'edit' %>
+<% content_for :header_tags do %>
+    <%= robot_exclusion_tag %>
+<% end %>
--- a/app/views/issues/index.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/index.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -8,8 +8,8 @@
 <h2><%= @query.new_record? ? l(:label_issue_plural) : h(@query.name) %></h2>
 <% html_title(@query.new_record? ? l(:label_issue_plural) : @query.name) %>
 
-<% form_tag({ :controller => 'queries', :action => 'new' }, :id => 'query_form') do %>
-    <%= hidden_field_tag('project_id', @project.to_param) if @project %>
+<% form_tag({ :controller => 'issues', :action => 'index', :project_id => @project }, :method => :get, :id => 'query_form') do %>
+    <%= hidden_field_tag 'set_filter', '1' %>
 		<div id="query_form_content" class="hide-when-print">
     <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
     	<legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
@@ -35,22 +35,10 @@
 		</div>
     <p class="buttons hide-when-print">
 
-    <%= link_to_remote l(:button_apply), 
-                       { :url => { :set_filter => 1 },
-                         :before => 'selectAllOptions("selected_columns");',
-                         :update => "content",
-                         :complete => "apply_filters_observer()",
-                         :with => "Form.serialize('query_form')"
-                       }, :class => 'icon icon-checked' %>
-                       
-    <%= link_to_remote l(:button_clear),
-                       { :url => { :set_filter => 1, :project_id => @project },
-                         :method => :get,
-                         :update => "content",
-                       }, :class => 'icon icon-reload'  %>
-                       
+    <%= link_to_function l(:button_apply), 'submit_query_form("query_form")', :class => 'icon icon-checked' %>
+    <%= link_to l(:button_clear), { :set_filter => 1, :project_id => @project }, :class => 'icon icon-reload'  %>
     <% if @query.new_record? && User.current.allowed_to?(:save_queries, @project, :global => true) %>
-    <%= link_to l(:button_save), {}, :onclick => "selectAllOptions('selected_columns'); $('query_form').submit(); return false;", :class => 'icon icon-save' %>
+    <%= link_to_function l(:button_save), "$('query_form').action='#{ url_for :controller => 'queries', :action => 'new', :project_id => @project }'; submit_query_form('query_form')", :class => 'icon icon-save' %>
     <% end %>
     </p>
 <% end %>
@@ -65,9 +53,9 @@
 <% end %>
 
 <% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => { :project_id => @project, :query_id => (@query.new_record? ? nil : @query), :key => User.current.rss_key } %>
-	<%= f.link_to 'CSV', :url => { :project_id => @project } %>
-	<%= f.link_to 'PDF', :url => { :project_id => @project } %>
+	<%= f.link_to 'Atom', :url => params.merge(:key => User.current.rss_key) %>
+	<%= f.link_to 'CSV', :url => params %>
+	<%= f.link_to 'PDF', :url => params %>
 <% end %>
 
 <% end %>
--- a/app/views/issues/new.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/new.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -23,4 +23,5 @@
 
 <% content_for :header_tags do %>
     <%= stylesheet_link_tag 'scm' %>
+    <%= robot_exclusion_tag %>
 <% end %>
--- a/app/views/issues/show.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/issues/show.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,6 +1,6 @@
 <%= render :partial => 'action_menu' %>
 
-<h2><%= @issue.tracker.name %> #<%= @issue.id %></h2>
+<h2><%= issue_heading(@issue) %></h2>
 
 <div class="<%= @issue.css_classes %> details">
         <%= avatar(@issue.author, :size => "50") %>
@@ -73,7 +73,7 @@
 </div>
 <% end %>
 
-<% if authorize_for('issue_relations', 'new') || @issue.relations.present? %>
+<% if @relations.present? || User.current.allowed_to?(:manage_issue_relations, @project) %>
 <hr />
 <div id="relations">
 <%= render :partial => 'relations' %>
@@ -98,7 +98,7 @@
 
 
 <div style="clear: both;"></div>
-<%= render :partial => 'action_menu', :locals => {:replace_watcher => 'watcher2' } %>
+<%= render :partial => 'action_menu' %>
 
 <div style="clear: both;"></div>
 <% if authorize_for('issues', 'edit') %>
--- a/app/views/journals/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/journals/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,35 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/4954/trunk/app/views/journals
-END
-_notes_form.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/2924/trunk/app/views/journals/_notes_form.rhtml
-END
-update.rjs
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/3596/trunk/app/views/journals/update.rjs
-END
-edit.rjs
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/1105/trunk/app/views/journals/edit.rjs
-END
-diff.html.erb
 K 25
 svn:wc:ra_dav:version-url
 V 57
-/svn/!svn/ver/4954/trunk/app/views/journals/diff.html.erb
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/journals
 END
-index.rxml
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4034/trunk/app/views/journals/index.rxml
-END
--- a/app/views/journals/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/journals/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/journals
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/journals
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-27T13:34:41.060565Z
-4954
+2011-03-28T21:45:30.892324Z
+5246
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-fb8a5b1bfdbadbbaaa17ce7fc1dfcf3c
-2009-10-11T10:36:11.599175Z
-2924
+2011-06-06T13:18:33.000000Z
+6f96a31cd9e465b7b9324190b604aac1
+2011-03-28T21:45:30.892324Z
+5246
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-656
+1304
 
 update.rjs
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 269ec86216a5d0340e02940f1b190d51
 2010-03-17T04:13:05.342620Z
 3596
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 ce552c52f7c423630412d0593cc1ee61
 2008-02-02T10:50:31.694950Z
 1105
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 073352211ae7cecb9e1ff5ea1ce17150
 2011-02-27T13:34:41.060565Z
 4954
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 ef7f777c9318cee52e909377c4f96e8b
 2010-08-23T15:04:36.844654Z
 4034
--- a/app/views/journals/.svn/text-base/_notes_form.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/journals/.svn/text-base/_notes_form.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,21 @@
 <% form_remote_tag(:url => {}, :html => { :id => "journal-#{@journal.id}-form" }) do %>
-    <%= text_area_tag :notes, @journal.notes, :class => 'wiki-edit', 
-                                              :rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min) %>
+    <%= text_area_tag :notes, @journal.notes,
+          :id => "journal_#{@journal.id}_notes",
+          :class => 'wiki-edit', 
+          :rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min) %>
     <%= call_hook(:view_journals_notes_form_after_notes, { :journal => @journal}) %>
     <p><%= submit_tag l(:button_save) %>
+    <%= link_to_remote l(:label_preview), 
+                       { :url => preview_issue_path(:project_id => @project, :id => @journal.issue),
+                         :method => 'post',
+                         :update => "journal_#{@journal.id}_preview",
+                         :with => "Form.serialize('journal-#{@journal.id}-form')",
+                         :complete => "Element.scrollTo('journal_#{@journal.id}_preview')"
+                       }, :accesskey => accesskey(:preview) %>
+    |
     <%= link_to l(:button_cancel), '#', :onclick => "Element.remove('journal-#{@journal.id}-form'); " +
                                                     "Element.show('journal-#{@journal.id}-notes'); return false;" %></p>
+
+    <div id="journal_<%= @journal.id %>_preview" class="wiki"></div>
 <% end %>
+<%= wikitoolbar_for "journal_#{@journal.id}_notes" %>
--- a/app/views/journals/_notes_form.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/journals/_notes_form.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,21 @@
 <% form_remote_tag(:url => {}, :html => { :id => "journal-#{@journal.id}-form" }) do %>
-    <%= text_area_tag :notes, @journal.notes, :class => 'wiki-edit', 
-                                              :rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min) %>
+    <%= text_area_tag :notes, @journal.notes,
+          :id => "journal_#{@journal.id}_notes",
+          :class => 'wiki-edit', 
+          :rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min) %>
     <%= call_hook(:view_journals_notes_form_after_notes, { :journal => @journal}) %>
     <p><%= submit_tag l(:button_save) %>
+    <%= link_to_remote l(:label_preview), 
+                       { :url => preview_issue_path(:project_id => @project, :id => @journal.issue),
+                         :method => 'post',
+                         :update => "journal_#{@journal.id}_preview",
+                         :with => "Form.serialize('journal-#{@journal.id}-form')",
+                         :complete => "Element.scrollTo('journal_#{@journal.id}_preview')"
+                       }, :accesskey => accesskey(:preview) %>
+    |
     <%= link_to l(:button_cancel), '#', :onclick => "Element.remove('journal-#{@journal.id}-form'); " +
                                                     "Element.show('journal-#{@journal.id}-notes'); return false;" %></p>
+
+    <div id="journal_<%= @journal.id %>_preview" class="wiki"></div>
 <% end %>
+<%= wikitoolbar_for "journal_#{@journal.id}_notes" %>
--- a/app/views/layouts/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/layouts/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,29 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 42
-/svn/!svn/ver/4965/trunk/app/views/layouts
+V 56
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/layouts
 END
-base.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4965/trunk/app/views/layouts/base.rhtml
-END
-mailer.text.plain.erb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4362/trunk/app/views/layouts/mailer.text.plain.erb
-END
-mailer.text.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4362/trunk/app/views/layouts/mailer.text.html.erb
-END
-admin.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/3176/trunk/app/views/layouts/admin.rhtml
-END
--- a/app/views/layouts/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/layouts/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/layouts
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/layouts
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-28T16:44:02.921792Z
-4965
+2011-03-28T19:59:35.933790Z
+5239
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-be984c02903b5fdba04df41a14c73242
-2011-02-28T16:44:02.921792Z
-4965
+2011-06-06T13:18:33.000000Z
+b4bb84ecaf9a28dd92d63bc219ca26e0
+2011-03-28T19:59:35.933790Z
+5239
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-2912
+3029
 
 mailer.text.plain.erb
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 490231bbc42932a0f9e1735a94d06260
 2010-11-02T19:00:36.834304Z
 4362
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 5073a425d4e7896c725996f9cf35f74b
 2010-11-02T19:00:36.834304Z
 4362
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 cc6ca08e56314fb510561e8eeb4ede46
 2009-12-17T18:21:02.630202Z
 3176
--- a/app/views/layouts/.svn/text-base/base.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/layouts/.svn/text-base/base.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -5,12 +5,12 @@
 <title><%=h html_title %></title>
 <meta name="description" content="<%= Redmine::Info.app_name %>" />
 <meta name="keywords" content="issue,bug,tracker" />
+<%= csrf_meta_tag %>
 <%= favicon %>
 <%= stylesheet_link_tag 'application', :media => 'all' %>
 <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
 <%= javascript_heads %>
 <%= heads_for_theme %>
-<%= heads_for_wiki_formatter %>
 <!--[if IE 6]>
     <style type="text/css">
       * html body{ width: expression( document.documentElement.clientWidth < 900 ? '900px' : '100%' ); }
@@ -29,10 +29,11 @@
         <%= render_menu :account_menu -%>
     </div>
     <%= content_tag('div', "#{l(:label_logged_as)} #{link_to_user(User.current, :format => :username)}", :id => 'loggedas') if User.current.logged? %>
-    <%= render_menu :top_menu -%>
+    <%= render_menu :top_menu if User.current.logged? || !Setting.login_required? -%>
 </div>
       
 <div id="header">
+    <% if User.current.logged? || !Setting.login_required? %>
     <div id="quick-search">
         <% form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get ) do %>
         <%= hidden_field_tag(controller.default_search_scope, 1, :id => nil) if controller.default_search_scope %>
@@ -41,6 +42,7 @@
         <% end %>
         <%= render_project_jump_box %>
     </div>
+    <% end %>
     
     <h1><%= page_header_title %></h1>
     
--- a/app/views/layouts/base.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/layouts/base.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -5,12 +5,12 @@
 <title><%=h html_title %></title>
 <meta name="description" content="A repository for software developed and published by audio and music researchers in the UK." />
 <meta name="keywords" content="audio,music,software,research,UK,sound,repository,code,redmine" />
+<%= csrf_meta_tag %>
 <%= favicon %>
 <%= stylesheet_link_tag 'application', :media => 'all' %>
 <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
 <%= javascript_heads %>
 <%= heads_for_theme %>
-<%= heads_for_wiki_formatter %>
 <!--[if IE 6]>
     <style type="text/css">
       * html body{ width: expression( document.documentElement.clientWidth < 900 ? '900px' : '100%' ); }
@@ -29,11 +29,11 @@
         <%= render_menu :account_menu -%>
     </div>
     <%= content_tag('div', "#{l(:label_logged_as)} #{link_to_user(User.current, :format => :username)}", :id => 'loggedas') if User.current.logged? %>
-    <%= render_menu :top_menu -%>
+    <%= render_menu :top_menu if User.current.logged? || !Setting.login_required? -%>
 </div>
       
 <%= tag('div', {:id => 'header', :class => (display_main_menu?(@project) ? 'header-project' : 'header-general')}, true) %>
-
+    <% if User.current.logged? || !Setting.login_required? %>
 
     <div id="project-search-jump">
       <div id="quick-search">
@@ -48,6 +48,7 @@
         <%= render_project_jump_box %>
       </div>
     </div>
+    <% end %>
 
     <% unless page_header_title[1].empty? %>
       <h3 id="project-ancestors-title"><%= page_header_title[1] %></h3>
--- a/app/views/ldap_auth_sources/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/ldap_auth_sources/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/ldap_auth_sources
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/ldap_auth_sources
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 7eaca2b2857c3c1ef6fa72633333d56f
 2010-05-23T03:16:31.304135Z
 3744
--- a/app/views/mailer/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/mailer/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,197 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 41
-/svn/!svn/ver/4892/trunk/app/views/mailer
+V 55
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/mailer
 END
-wiki_content_added.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_added.text.plain.rhtml
-END
-account_activated.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/2484/trunk/app/views/mailer/account_activated.text.plain.rhtml
-END
-register.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/877/trunk/app/views/mailer/register.text.html.rhtml
-END
-account_activation_request.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/915/trunk/app/views/mailer/account_activation_request.text.plain.rhtml
-END
-account_activation_request.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/3452/trunk/app/views/mailer/account_activation_request.text.html.rhtml
-END
-attachments_added.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/877/trunk/app/views/mailer/attachments_added.text.plain.rhtml
-END
-issue_edit.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/2493/trunk/app/views/mailer/issue_edit.text.plain.rhtml
-END
-issue_edit.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/3452/trunk/app/views/mailer/issue_edit.text.html.rhtml
-END
-issue_add.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/3452/trunk/app/views/mailer/issue_add.text.html.rhtml
-END
-message_posted.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/3452/trunk/app/views/mailer/message_posted.text.html.rhtml
-END
-reminder.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/2493/trunk/app/views/mailer/reminder.text.plain.rhtml
-END
-reminder.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/2814/trunk/app/views/mailer/reminder.text.html.rhtml
-END
-wiki_content_added.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_added.text.html.rhtml
-END
-test.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/877/trunk/app/views/mailer/test.text.plain.rhtml
-END
-test.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/877/trunk/app/views/mailer/test.text.html.rhtml
-END
-account_activated.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/2484/trunk/app/views/mailer/account_activated.text.html.rhtml
-END
-register.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/877/trunk/app/views/mailer/register.text.plain.rhtml
-END
-_issue_text_plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4892/trunk/app/views/mailer/_issue_text_plain.rhtml
-END
-_issue_text_html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4892/trunk/app/views/mailer/_issue_text_html.rhtml
-END
-news_added.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/877/trunk/app/views/mailer/news_added.text.plain.rhtml
-END
-attachments_added.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/3452/trunk/app/views/mailer/attachments_added.text.html.rhtml
-END
-news_added.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/3452/trunk/app/views/mailer/news_added.text.html.rhtml
-END
-document_added.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/877/trunk/app/views/mailer/document_added.text.plain.rhtml
-END
-document_added.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/3452/trunk/app/views/mailer/document_added.text.html.rhtml
-END
-issue_add.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/2493/trunk/app/views/mailer/issue_add.text.plain.rhtml
-END
-account_information.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/877/trunk/app/views/mailer/account_information.text.plain.rhtml
-END
-message_posted.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/932/trunk/app/views/mailer/message_posted.text.plain.rhtml
-END
-account_information.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/3452/trunk/app/views/mailer/account_information.text.html.rhtml
-END
-wiki_content_updated.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_updated.text.plain.rhtml
-END
-lost_password.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/1683/trunk/app/views/mailer/lost_password.text.plain.rhtml
-END
-wiki_content_updated.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_updated.text.html.rhtml
-END
-lost_password.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/3452/trunk/app/views/mailer/lost_password.text.html.rhtml
-END
--- a/app/views/mailer/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/mailer/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/mailer
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/mailer
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-20T14:27:34.168395Z
-4892
+2011-03-04T14:32:58.878627Z
+5003
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 1729c597befa0c9411266eb9d1c5b577
 2010-10-27T16:27:06.240747Z
 4296
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 e54fccdf5cf9e146cddf2adc5797d76f
 2009-02-20T17:04:47.905923Z
 2484
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 55d268cfc5ec4c2375739d401a00e9ca
 2007-11-04T10:43:39.403792Z
 877
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 157b6123ac6990f3cb83d1a24c441599
 2007-11-18T17:46:55.863051Z
 915
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 99836d2f584d6975add91d6f4885dfa3
 2010-02-18T19:13:38.135448Z
 3452
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 0fcec4c9195f18d0d58724feb863a27e
 2007-11-04T10:43:39.403792Z
 877
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 501bcdc81562733bce55a29655f6fd89
 2009-02-21T11:04:50.579477Z
 2493
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 746db1ca981aa5fc37569de58a3be57b
 2010-02-18T19:13:38.135448Z
 3452
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 55b994ef0e81fdc6d78f280c8716f230
 2010-02-18T19:13:38.135448Z
 3452
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 76b612bb95df0f232af66dcfa75908a9
 2010-02-18T19:13:38.135448Z
 3452
@@ -372,7 +372,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 6a0fb1622f40125ab40706fa05705436
 2009-02-21T11:04:50.579477Z
 2493
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 6efcff34ccd9ec0ebd5c501a38bd9e61
 2009-07-05T14:14:44.411724Z
 2814
@@ -440,7 +440,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 37e05984b98664e4b97c26b51196f9ab
 2010-10-27T16:27:06.240747Z
 4296
@@ -474,7 +474,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 62a282059a34f2aaa4d56b609e94e27c
 2007-11-04T10:43:39.403792Z
 877
@@ -502,13 +502,81 @@
 
 63
 
+news_comment_added.text.plain.rhtml
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+a9f9a05cb394b4eb25b73d5fc647b8cd
+2011-03-04T14:32:58.878627Z
+5003
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+117
+
+news_comment_added.text.html.rhtml
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+543373e794d16e801a07187a952fb177
+2011-03-04T14:32:58.878627Z
+5003
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+178
+
 test.text.html.rhtml
 file
 
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 b95faada3d8a7eac9ddd90de85d377eb
 2007-11-04T10:43:39.403792Z
 877
@@ -542,7 +610,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 b6dee3a7f5ce5253d3d66ea2d0aed032
 2009-02-20T17:04:47.905923Z
 2484
@@ -576,7 +644,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 382940abff8d469305e2b82eaac09875
 2007-11-04T10:43:39.403792Z
 877
@@ -610,7 +678,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 76a51edc640a60b59fca8e679d0161b6
 2011-02-20T14:27:34.168395Z
 4892
@@ -644,7 +712,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 68467469e0b5a8d3dc67dba7ba7e42b0
 2011-02-20T14:27:34.168395Z
 4892
@@ -672,13 +740,47 @@
 
 635
 
+attachments_added.text.html.rhtml
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+db9ef17343824d59b7a19db7036ee2f1
+2010-02-18T19:13:38.135448Z
+3452
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+144
+
 news_added.text.plain.rhtml
 file
 
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 0cbce1fe1b288482af3095ce9bc555ed
 2007-11-04T10:43:39.403792Z
 877
@@ -706,47 +808,13 @@
 
 87
 
-attachments_added.text.html.rhtml
-file
-
-
-
-
-2011-03-03T11:05:10.000000Z
-db9ef17343824d59b7a19db7036ee2f1
-2010-02-18T19:13:38.135448Z
-3452
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-144
-
 news_added.text.html.rhtml
 file
 
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 7dffb9cfc22aef3b03d0d771179f26d6
 2010-02-18T19:13:38.135448Z
 3452
@@ -780,7 +848,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 d4eae87a9e17f49caeb6913659b9c42d
 2007-11-04T10:43:39.403792Z
 877
@@ -808,13 +876,47 @@
 
 107
 
+issue_add.text.plain.rhtml
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+52a0f774acd5b7aeeb3768de943af901
+2009-02-21T11:04:50.579477Z
+2493
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+224
+
 document_added.text.html.rhtml
 file
 
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 06d5fbff057e28328f2be88419207f80
 2010-02-18T19:13:38.135448Z
 3452
@@ -842,47 +944,13 @@
 
 163
 
-issue_add.text.plain.rhtml
-file
-
-
-
-
-2011-03-03T11:05:10.000000Z
-52a0f774acd5b7aeeb3768de943af901
-2009-02-21T11:04:50.579477Z
-2493
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-224
-
 account_information.text.plain.rhtml
 file
 
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 2b46c7d28f33cec521374ccae2fd8451
 2007-11-04T10:43:39.403792Z
 877
@@ -910,13 +978,47 @@
 
 295
 
+account_information.text.html.rhtml
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+e7e91d7f18dd1547cfebafdf4822a18f
+2010-02-18T19:13:38.135448Z
+3452
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+368
+
 message_posted.text.plain.rhtml
 file
 
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 9b7ab36ebc57f0c02756d2b076e67b19
 2007-11-26T18:47:49.588558Z
 932
@@ -944,47 +1046,13 @@
 
 68
 
-account_information.text.html.rhtml
-file
-
-
-
-
-2011-03-03T11:05:10.000000Z
-e7e91d7f18dd1547cfebafdf4822a18f
-2010-02-18T19:13:38.135448Z
-3452
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-368
-
 wiki_content_updated.text.plain.rhtml
 file
 
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 0cb005c22ad144fdbe29238b0080f28b
 2010-10-27T16:27:06.240747Z
 4296
@@ -1018,7 +1086,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 44018a44ceaecb5c9be3fed66e759064
 2008-07-21T19:13:46.546624Z
 1683
@@ -1052,7 +1120,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 a53d9ea13c19cbce1edc375a01b5753d
 2010-02-18T19:13:38.135448Z
 3452
@@ -1086,7 +1154,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 f35cf0d09dd393a255db2d428a3d30f0
 2010-10-27T16:27:06.240747Z
 4296
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/mailer/news_comment_added.text.html.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+<h1><%= link_to(h(@news.title), @news_url) %></h1>
+
+<p><%= l(:text_user_wrote, :value => h(@comment.author)) %></p>
+
+<%= textilizable @comment, :comments, :only_path => false %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/mailer/news_comment_added.text.plain.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,6 @@
+<%= @news.title %>
+<%= @news_url %>
+
+<%= l(:text_user_wrote, :value => @comment.author) %>
+
+<%= @comment.comments %>
--- a/app/views/members/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/members/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/members
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/members
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 9e105ea0b16e73250d47d57f07d71cff
 2009-09-12T08:36:46.650954Z
 2869
--- a/app/views/messages/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/4889/trunk/app/views/messages
-END
-show.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/3877/trunk/app/views/messages/show.rhtml
-END
-_form.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3339/trunk/app/views/messages/_form.rhtml
-END
-edit.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4889/trunk/app/views/messages/edit.rhtml
-END
-new.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/1205/trunk/app/views/messages/new.rhtml
-END
--- a/app/views/messages/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/messages/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/messages
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/messages
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 c68f1ef8a922f2a408e0349d80db4376
 2010-07-25T10:02:12.905073Z
 3877
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 4fecf6ec48e549e01ada68dc8d623f38
 2010-01-25T17:26:02.255593Z
 3339
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 65fbdcd20ac7f10349863c836306f7d3
 2011-02-20T13:11:10.508449Z
 4889
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 3512563f842c2e951d7738870f2d4065
 2008-03-07T17:49:44.664945Z
 1205
--- a/app/views/my/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/my/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,41 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 37
-/svn/!svn/ver/4722/trunk/app/views/my
-END
-account.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/4223/trunk/app/views/my/account.rhtml
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/my
 END
-page.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/3542/trunk/app/views/my/page.rhtml
-END
-password.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/2678/trunk/app/views/my/password.rhtml
-END
-_sidebar.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3775/trunk/app/views/my/_sidebar.rhtml
-END
-_block.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/2528/trunk/app/views/my/_block.rhtml
-END
-page_layout.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4722/trunk/app/views/my/page_layout.rhtml
-END
--- a/app/views/my/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/my/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/my
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/my
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-15T14:04:11.836008Z
-4722
-jplang
+2011-05-12T00:26:58.029913Z
+5748
+tmaruyama
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 746c4ac2d5bc111d91747aa0b0c54a5a
 2010-09-28T22:13:06.534232Z
 4223
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 afa83dffe27e19383284d8177f1f4687
 2010-03-04T19:02:57.949679Z
 3542
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 a43c901172c8b1750d24612b24f2db22
 2009-04-21T13:43:57.529967Z
 2678
@@ -137,11 +137,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-91a0469f13d98fd2504ca036e16660f1
-2010-06-19T16:50:13.340830Z
-3775
-edavis10
+2011-06-06T13:18:33.000000Z
+e4b4b1b0fe5e86d3a3da3d4161fc5427
+2011-05-12T00:26:58.029913Z
+5748
+tmaruyama
 has-props
 
 
@@ -163,7 +163,7 @@
 
 
 
-1092
+1125
 
 _block.rhtml
 file
@@ -171,7 +171,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 efb09bc859f5527d219f0dd3d5c12fe8
 2009-02-26T16:15:07.718565Z
 2528
@@ -205,7 +205,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 852c99d50bf883063cd77b7042c145d4
 2011-01-15T14:04:11.836008Z
 4722
--- a/app/views/my/.svn/text-base/_sidebar.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/my/.svn/text-base/_sidebar.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,6 +1,6 @@
 <h3><%=l(:label_my_account)%></h3>
 
-<p><%=l(:field_login)%>: <strong><%= @user.login %></strong><br />
+<p><%=l(:field_login)%>: <strong><%= link_to_user(@user, :format => :username) %></strong><br />
 <%=l(:field_created_on)%>: <%= format_time(@user.created_on) %></p>
 
 
@@ -19,7 +19,7 @@
 <h4><%= l(:label_api_access_key) %></h4>
 <div>
   <%= link_to_function(l(:button_show), "$('api-access-key').toggle();")%>
-  <pre id='api-access-key' class='autoscroll'><%= @user.api_key %></pre>
+  <pre id='api-access-key' class='autoscroll'><%= h(@user.api_key) %></pre>
 </div>
 <%= javascript_tag("$('api-access-key').hide();") %>
 <p>
--- a/app/views/my/_sidebar.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/my/_sidebar.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,6 +1,6 @@
 <h3><%=l(:label_my_account)%></h3>
 
-<p><%=l(:field_login)%>: <strong><%= @user.login %></strong><br />
+<p><%=l(:field_login)%>: <strong><%= link_to_user(@user, :format => :username) %></strong><br />
 <%=l(:field_created_on)%>: <%= format_time(@user.created_on) %></p>
 
 
@@ -19,7 +19,7 @@
 <h4><%= l(:label_api_access_key) %></h4>
 <div>
   <%= link_to_function(l(:button_show), "$('api-access-key').toggle();")%>
-  <pre id='api-access-key' class='autoscroll'><%= @user.api_key %></pre>
+  <pre id='api-access-key' class='autoscroll'><%= h(@user.api_key) %></pre>
 </div>
 <%= javascript_tag("$('api-access-key').hide();") %>
 <p>
--- a/app/views/my/blocks/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/my/blocks/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/my/blocks
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/my/blocks
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 0b880299704151a6acd66b5632f60426
 2010-03-10T05:10:43.201527Z
 3557
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 6aa71a8cc8a018c4c564915c10355709
 2007-04-20T09:53:44.242780Z
 449
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 55339408a7e093de86505f92845ed977
 2009-03-17T17:34:49.297132Z
 2598
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 bf22b792b1b79c60dc866718c074f370
 2009-05-30T23:30:36.923541Z
 2777
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 2ba11e15a7f15f88fe061979d921b59d
 2010-10-15T23:37:01.382819Z
 4259
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 a21d8649f0daec69caabb118e9b6375c
 2008-08-26T11:08:45.487893Z
 1766
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 3894ab9b2f76b3622a362843be2162be
 2010-01-30T11:23:17.508662Z
 3351
--- a/app/views/news/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/news/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,47 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 39
-/svn/!svn/ver/4505/trunk/app/views/news
-END
-_news.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4214/trunk/app/views/news/_news.rhtml
-END
-index.api.rsb
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/4505/trunk/app/views/news/index.api.rsb
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/news
 END
-show.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4412/trunk/app/views/news/show.rhtml
-END
-_form.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/750/trunk/app/views/news/_form.rhtml
-END
-edit.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4214/trunk/app/views/news/edit.rhtml
-END
-index.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4267/trunk/app/views/news/index.rhtml
-END
-new.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4214/trunk/app/views/news/new.rhtml
-END
--- a/app/views/news/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/news/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/news
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/news
 http://redmine.rubyforge.org/svn
 
 
 
-2010-12-12T17:00:52.100205Z
-4505
+2011-03-04T14:32:58.878627Z
+5003
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 2501c1cef884fd4a56abb3a4e736825f
 2010-09-27T16:51:12.033537Z
 4214
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 194919e4bc598629f690752af5340b5b
 2010-12-12T17:00:52.100205Z
 4505
@@ -100,10 +100,10 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-969b4f69a93036097550cd14be8023bc
-2010-11-20T09:38:54.291843Z
-4412
+2011-06-06T13:18:33.000000Z
+788183c16154d2b5436073e67273070f
+2011-03-04T14:32:58.878627Z
+5003
 jplang
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-2920
+2960
 
 _form.rhtml
 file
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 e06c154a981d18d975bcba8eb682df30
 2007-09-22T17:52:43.686392Z
 750
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 dd2c968c6b42916bff9b9e5de055e007
 2010-09-27T16:51:12.033537Z
 4214
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 764ec3719917039d0cac3d375ec819c4
 2010-10-22T14:42:38.351679Z
 4267
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 1e7f24dd1dc6a117b245a76174e4c8ae
 2010-09-27T16:51:12.033537Z
 4214
--- a/app/views/news/.svn/text-base/show.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/news/.svn/text-base/show.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,4 +1,5 @@
 <div class="contextual">
+<%= watcher_tag(@news, User.current) %>
 <%= link_to(l(:button_edit), 
       edit_news_path(@news),
       :class => 'icon icon-edit',
--- a/app/views/news/show.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/news/show.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,4 +1,5 @@
 <div class="contextual">
+<%= watcher_tag(@news, User.current) %>
 <%= link_to(l(:button_edit), 
       edit_news_path(@news),
       :class => 'icon icon-edit',
--- a/app/views/previews/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/previews/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/previews
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/previews
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 359c6608ef716c8b3b62fd96c241a680
 2010-08-18T15:01:35.032314Z
 3946
--- a/app/views/projects/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/projects/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,77 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/4719/trunk/app/views/projects
-END
-copy.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/3608/trunk/app/views/projects/copy.rhtml
-END
-new.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/4648/trunk/app/views/projects/new.html.erb
-END
-index.api.rsb
 K 25
 svn:wc:ra_dav:version-url
 V 57
-/svn/!svn/ver/4572/trunk/app/views/projects/index.api.rsb
+/svn/!svn/ver/5961/branches/1.2-stable/app/views/projects
 END
-settings.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/2871/trunk/app/views/projects/settings.rhtml
-END
-show.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4382/trunk/app/views/projects/show.rhtml
-END
-_form.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4648/trunk/app/views/projects/_form.rhtml
-END
-_edit.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4071/trunk/app/views/projects/_edit.rhtml
-END
-list_members.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/2990/trunk/app/views/projects/list_members.rhtml
-END
-_members_box.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4009/trunk/app/views/projects/_members_box.html.erb
-END
-index.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4069/trunk/app/views/projects/index.rhtml
-END
-show.api.rsb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/4486/trunk/app/views/projects/show.api.rsb
-END
-destroy.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4071/trunk/app/views/projects/destroy.rhtml
-END
--- a/app/views/projects/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/projects/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/projects
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/projects
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-15T13:20:18.866830Z
-4719
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-26653788620aef89a25b8ad819144e03
-2010-03-21T11:17:29.163519Z
-3608
+2011-06-06T13:18:33.000000Z
+0131341fbe8ad004ae5bc77375cdfee7
+2011-04-05T13:26:32.676058Z
+5330
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-1919
+1582
 
 settings
 dir
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 89a2baf21090ed983ffe265fa0929b29
 2011-01-06T21:02:19.982329Z
 4648
@@ -103,7 +103,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 4eef8200b378cb9b074da5abac7c5dfa
 2010-12-23T13:34:44.668484Z
 4572
@@ -137,7 +137,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 66d45b68c4615d2b502b2c6d06cf0951
 2009-09-12T09:13:13.676884Z
 2871
@@ -171,10 +171,10 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-bbcdfa64f2a80d809b80b00c26fd0c8c
-2010-11-07T14:15:01.891476Z
-4382
+2011-06-06T13:18:33.000000Z
+32752b6b82cb4f60ebabf9114f8c861d
+2011-03-16T17:29:30.884439Z
+5149
 jplang
 has-props
 
@@ -197,7 +197,7 @@
 
 
 
-3499
+3450
 
 _form.rhtml
 file
@@ -205,7 +205,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 b0519f745853f4f4e673c2e30389dc40
 2011-01-06T21:02:19.982329Z
 4648
@@ -239,7 +239,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 e3a6cb86da5f31cae6c8fc0a4e6bad35
 2010-09-09T18:57:21.507694Z
 4071
@@ -273,7 +273,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 0f2ffbd9b87d4ecc80f5c8bcac0cc9e9
 2009-10-29T18:44:16.555741Z
 2990
@@ -307,7 +307,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 f880a7facfac62099e5b3fc4ebe862b3
 2010-08-19T22:24:37.242219Z
 4009
@@ -341,7 +341,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 cb60b85b211b8c78058e4ccc5cdefc82
 2010-09-07T15:00:27.481481Z
 4069
@@ -375,7 +375,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 c49d7ceec0060eb7437c7e3f2b7629ed
 2010-12-11T10:19:11.273304Z
 4486
@@ -409,7 +409,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 308fa6064dd3e4d6d85be448402ba7b2
 2010-09-09T18:57:21.507694Z
 4071
--- a/app/views/projects/.svn/text-base/copy.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/projects/.svn/text-base/copy.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -3,15 +3,6 @@
 <% labelled_tabular_form_for :project, @project, :url => { :action => "copy" } do |f| %>
 <%= render :partial => 'form', :locals => { :f => f } %>
 
-<fieldset class="box"><legend><%= l(:label_module_plural) %></legend>
-<% Redmine::AccessControl.available_project_modules.each do |m| %>
-    <label class="floating">
-    <%= check_box_tag 'enabled_modules[]', m, @project.module_enabled?(m) %>
-    <%= l_or_humanize(m, :prefix => "project_module_") %>
-    </label>
-<% end %>
-</fieldset>
-
 <fieldset class="box"><legend><%= l(:button_copy) %></legend>
   <label class="block"><%= check_box_tag 'only[]', 'members', true %> <%= l(:label_member_plural) %> (<%= @source_project.members.count %>)</label>
   <label class="block"><%= check_box_tag 'only[]', 'versions', true %> <%= l(:label_version_plural) %> (<%= @source_project.versions.count %>)</label>
--- a/app/views/projects/.svn/text-base/show.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/projects/.svn/text-base/show.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -64,7 +64,7 @@
 </div>
 
 <% content_for :sidebar do %>
-    <% if @total_hours && User.current.allowed_to?(:view_time_entries, @project) %>
+    <% if @total_hours.present? %>
     <h3><%= l(:label_spent_time) %></h3>
     <p><span class="icon icon-time"><%= l_hours(@total_hours) %></span></p>
     <p><%= link_to(l(:label_details), {:controller => 'timelog', :action => 'index', :project_id => @project}) %> |
--- a/app/views/projects/copy.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/projects/copy.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -3,15 +3,6 @@
 <% labelled_tabular_form_for :project, @project, :url => { :action => "copy" } do |f| %>
 <%= render :partial => 'form', :locals => { :f => f } %>
 
-<fieldset class="box"><legend><%= l(:label_module_plural) %></legend>
-<% Redmine::AccessControl.available_project_modules.each do |m| %>
-    <label class="floating">
-    <%= check_box_tag 'enabled_modules[]', m, @project.module_enabled?(m) %>
-    <%= l_or_humanize(m, :prefix => "project_module_") %>
-    </label>
-<% end %>
-</fieldset>
-
 <fieldset class="box"><legend><%= l(:button_copy) %></legend>
   <label class="block"><%= check_box_tag 'only[]', 'members', true %> <%= l(:label_member_plural) %> (<%= @source_project.members.count %>)</label>
   <label class="block"><%= check_box_tag 'only[]', 'versions', true %> <%= l(:label_version_plural) %> (<%= @source_project.versions.count %>)</label>
--- a/app/views/projects/settings/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/projects/settings/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,53 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4719/trunk/app/views/projects/settings
-END
-_issue_categories.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/3734/trunk/app/views/projects/settings/_issue_categories.rhtml
-END
-_repository.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/3336/trunk/app/views/projects/settings/_repository.rhtml
-END
-_wiki.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/1143/trunk/app/views/projects/settings/_wiki.rhtml
-END
-_activities.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/4075/trunk/app/views/projects/settings/_activities.rhtml
-END
-_modules.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4647/trunk/app/views/projects/settings/_modules.rhtml
-END
-_versions.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4307/trunk/app/views/projects/settings/_versions.rhtml
-END
-_boards.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 66
-/svn/!svn/ver/3734/trunk/app/views/projects/settings/_boards.rhtml
+/svn/!svn/ver/5961/branches/1.2-stable/app/views/projects/settings
 END
-_members.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4719/trunk/app/views/projects/settings/_members.rhtml
-END
--- a/app/views/projects/settings/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/projects/settings/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/projects/settings
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/projects/settings
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-15T13:20:18.866830Z
-4719
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 3f93ad7df3a43b70f004499bacc76cdf
 2010-05-09T11:19:15.980195Z
 3734
@@ -66,11 +66,11 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-1fd25ea9af565c8a79ac61c918cbd3fc
-2010-01-21T18:21:56.082191Z
-3336
-edavis10
+2011-06-06T13:18:33.000000Z
+42c5b4103543369a3b4cd629172673bc
+2011-05-29T12:06:05.086159Z
+5961
+jplang
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-1075
+1474
 
 _wiki.rhtml
 file
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 1ee550d6ee54d0c528eee8bb142c496d
 2008-02-12T22:43:37.870107Z
 1143
@@ -134,11 +134,12 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-14f07f16cc36c896e6dc4d975c7ef807
-2010-09-10T16:00:49.687515Z
-4075
-edavis10
+2011-06-06T13:18:33.000000Z
+17ae98146a2d76d03b93381c2e24daa3
+2011-05-21T04:33:11.662910Z
+5873
+tmaruyama
+has-props
 
 
 
@@ -159,8 +160,7 @@
 
 
 
-
-1421
+1379
 
 _modules.rhtml
 file
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 6dc73d6291a5471699054e6fbd33da8e
 2011-01-06T20:57:17.003359Z
 4647
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 4f26d985da6ada4c0d724095490050c5
 2010-10-29T22:40:02.439890Z
 4307
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 1d2eb75d2aa1ff66975f701d6b45c059
 2010-05-09T11:19:15.980195Z
 3734
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 6e7a70ea4a2a2fe46b75b968d19bb68e
 2011-01-15T13:20:18.866830Z
 4719
--- a/app/views/projects/settings/.svn/text-base/_activities.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/projects/settings/.svn/text-base/_activities.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,42 +1,42 @@
-<% form_tag(project_project_enumerations_path(@project), :method => :put, :class => "tabular") do %>
-
-<table class="list">
-  <thead><tr>
-    <th><%= l(:field_name) %></th>
-    <th><%= l(:enumeration_system_activity) %></th>
-    <% TimeEntryActivity.new.available_custom_fields.each do |value| %>
-	<th><%= h value.name %></th>
-    <% end %>
-    <th style="width:15%;"><%= l(:field_active) %></th>
-  </tr></thead>
-
-  <% @project.activities(true).each do |enumeration| %>
-  <% fields_for "enumerations[#{enumeration.id}]", enumeration do |ff| %>
-  <tr class="<%= cycle('odd', 'even') %>">
-    <td>
-      <%= ff.hidden_field :parent_id, :value => enumeration.id unless enumeration.project %>
-      <%= h(enumeration) %>
-    </td>
-    <td align="center" style="width:15%;"><%= checked_image !enumeration.project %></td>
-    <% enumeration.custom_field_values.each do |value| %>
-	<td align="center">
-      <%= custom_field_tag "enumerations[#{enumeration.id}]", value %>
-    </td>
-    <% end %>
-    <td align="center" style="width:15%;">
-      <%= ff.check_box :active %>
-    </td>
-  </tr>
-  <% end %>
-  <% end %>
-</table>
-
-<div class="contextual">
-<%= link_to(l(:button_reset), project_project_enumerations_path(@project),
-						:method => :delete,
-						:confirm => l(:text_are_you_sure),
-            :class => 'icon icon-del') %>
-</div>
-
-<%= submit_tag l(:button_save) %>
-<% end %>
+<% form_tag(project_project_enumerations_path(@project), :method => :put, :class => "tabular") do %>
+
+<table class="list">
+  <thead><tr>
+    <th><%= l(:field_name) %></th>
+    <th><%= l(:enumeration_system_activity) %></th>
+    <% TimeEntryActivity.new.available_custom_fields.each do |value| %>
+	<th><%= h value.name %></th>
+    <% end %>
+    <th style="width:15%;"><%= l(:field_active) %></th>
+  </tr></thead>
+
+  <% @project.activities(true).each do |enumeration| %>
+  <% fields_for "enumerations[#{enumeration.id}]", enumeration do |ff| %>
+  <tr class="<%= cycle('odd', 'even') %>">
+    <td>
+      <%= ff.hidden_field :parent_id, :value => enumeration.id unless enumeration.project %>
+      <%= h(enumeration) %>
+    </td>
+    <td align="center" style="width:15%;"><%= checked_image !enumeration.project %></td>
+    <% enumeration.custom_field_values.each do |value| %>
+	<td align="center">
+      <%= custom_field_tag "enumerations[#{enumeration.id}]", value %>
+    </td>
+    <% end %>
+    <td align="center" style="width:15%;">
+      <%= ff.check_box :active %>
+    </td>
+  </tr>
+  <% end %>
+  <% end %>
+</table>
+
+<div class="contextual">
+<%= link_to(l(:button_reset), project_project_enumerations_path(@project),
+						:method => :delete,
+						:confirm => l(:text_are_you_sure),
+            :class => 'icon icon-del') %>
+</div>
+
+<%= submit_tag l(:button_save) %>
+<% end %>
--- a/app/views/projects/settings/.svn/text-base/_repository.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/projects/settings/.svn/text-base/_repository.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,4 +1,4 @@
-<% remote_form_for :repository, @repository, 
+<% remote_form_for :repository, @repository,
                    :url => { :controller => 'repositories', :action => 'edit', :id => @project },
                    :builder => TabularFormBuilder,
                    :lang => current_language do |f| %>
@@ -6,19 +6,36 @@
 <%= error_messages_for 'repository' %>
 
 <div class="box tabular">
-<p><%= label_tag('repository_scm', l(:label_scm)) %><%= scm_select_tag(@repository) %></p>
-<%= repository_field_tags(f, @repository) if @repository %>
+<p>
+<%= label_tag('repository_scm', l(:label_scm)) %><%= scm_select_tag(@repository) %>
+<% if @repository && ! @repository.class.scm_available %>
+	<br />
+	<em><%= content_tag 'span', l(:text_scm_command_not_available), :class => 'error' %></em>
+<% end %>
+</p>
+<% button_disabled = true %>
+<% if @repository %>
+<%   button_disabled = ! @repository.class.scm_available %>
+<%=    repository_field_tags(f, @repository)%>
+<% end %>
 </div>
 
 <div class="contextual">
 <% if @repository && !@repository.new_record? %>
-<%= link_to(l(:label_user_plural), {:controller => 'repositories', :action => 'committers', :id => @project}, :class => 'icon icon-user') %>
+<%= link_to(l(:label_user_plural),
+                {
+                :controller => 'repositories',
+                :action     => 'committers',
+                :id         => @project
+                },
+             :class => 'icon icon-user') %>
 <%= link_to(l(:button_delete), {:controller => 'repositories', :action => 'destroy', :id => @project},
             :confirm => l(:text_are_you_sure),
-            :method => :post,
-            :class => 'icon icon-del') %>
+            :method  => :post,
+            :class   => 'icon icon-del') %>
 <% end %>
 </div>
 
-<%= submit_tag((@repository.nil? || @repository.new_record?) ? l(:button_create) : l(:button_save), :disabled => @repository.nil?) %>
+<%= submit_tag((@repository.nil? || @repository.new_record?) ? l(:button_create) : l(:button_save),
+               :disabled => button_disabled) %>
 <% end %>
--- a/app/views/projects/settings/_activities.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/projects/settings/_activities.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,42 +1,42 @@
-<% form_tag(project_project_enumerations_path(@project), :method => :put, :class => "tabular") do %>
-
-<table class="list">
-  <thead><tr>
-    <th><%= l(:field_name) %></th>
-    <th><%= l(:enumeration_system_activity) %></th>
-    <% TimeEntryActivity.new.available_custom_fields.each do |value| %>
-	<th><%= h value.name %></th>
-    <% end %>
-    <th style="width:15%;"><%= l(:field_active) %></th>
-  </tr></thead>
-
-  <% @project.activities(true).each do |enumeration| %>
-  <% fields_for "enumerations[#{enumeration.id}]", enumeration do |ff| %>
-  <tr class="<%= cycle('odd', 'even') %>">
-    <td>
-      <%= ff.hidden_field :parent_id, :value => enumeration.id unless enumeration.project %>
-      <%= h(enumeration) %>
-    </td>
-    <td align="center" style="width:15%;"><%= checked_image !enumeration.project %></td>
-    <% enumeration.custom_field_values.each do |value| %>
-	<td align="center">
-      <%= custom_field_tag "enumerations[#{enumeration.id}]", value %>
-    </td>
-    <% end %>
-    <td align="center" style="width:15%;">
-      <%= ff.check_box :active %>
-    </td>
-  </tr>
-  <% end %>
-  <% end %>
-</table>
-
-<div class="contextual">
-<%= link_to(l(:button_reset), project_project_enumerations_path(@project),
-						:method => :delete,
-						:confirm => l(:text_are_you_sure),
-            :class => 'icon icon-del') %>
-</div>
-
-<%= submit_tag l(:button_save) %>
-<% end %>
+<% form_tag(project_project_enumerations_path(@project), :method => :put, :class => "tabular") do %>
+
+<table class="list">
+  <thead><tr>
+    <th><%= l(:field_name) %></th>
+    <th><%= l(:enumeration_system_activity) %></th>
+    <% TimeEntryActivity.new.available_custom_fields.each do |value| %>
+	<th><%= h value.name %></th>
+    <% end %>
+    <th style="width:15%;"><%= l(:field_active) %></th>
+  </tr></thead>
+
+  <% @project.activities(true).each do |enumeration| %>
+  <% fields_for "enumerations[#{enumeration.id}]", enumeration do |ff| %>
+  <tr class="<%= cycle('odd', 'even') %>">
+    <td>
+      <%= ff.hidden_field :parent_id, :value => enumeration.id unless enumeration.project %>
+      <%= h(enumeration) %>
+    </td>
+    <td align="center" style="width:15%;"><%= checked_image !enumeration.project %></td>
+    <% enumeration.custom_field_values.each do |value| %>
+	<td align="center">
+      <%= custom_field_tag "enumerations[#{enumeration.id}]", value %>
+    </td>
+    <% end %>
+    <td align="center" style="width:15%;">
+      <%= ff.check_box :active %>
+    </td>
+  </tr>
+  <% end %>
+  <% end %>
+</table>
+
+<div class="contextual">
+<%= link_to(l(:button_reset), project_project_enumerations_path(@project),
+						:method => :delete,
+						:confirm => l(:text_are_you_sure),
+            :class => 'icon icon-del') %>
+</div>
+
+<%= submit_tag l(:button_save) %>
+<% end %>
--- a/app/views/projects/settings/_repository.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/projects/settings/_repository.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,4 +1,4 @@
-<% remote_form_for :repository, @repository, 
+<% remote_form_for :repository, @repository,
                    :url => { :controller => 'repositories', :action => 'edit', :id => @project },
                    :builder => TabularFormBuilder,
                    :lang => current_language do |f| %>
@@ -15,11 +15,17 @@
 
 <div class="contextual">
 <% if @repository && !@repository.new_record? %>
-<%= link_to(l(:label_user_plural), {:controller => 'repositories', :action => 'committers', :id => @project}, :class => 'icon icon-user') %>
+<%= link_to(l(:label_user_plural),
+                {
+                :controller => 'repositories',
+                :action     => 'committers',
+                :id         => @project
+                },
+             :class => 'icon icon-user') %>
 <%= link_to(l(:button_delete), {:controller => 'repositories', :action => 'destroy', :id => @project},
             :confirm => l(:text_are_you_sure),
-            :method => :post,
-            :class => 'icon icon-del') %>
+            :method  => :post,
+            :class   => 'icon icon-del') %>
 <% end %>
 </div>
 
--- a/app/views/projects/show.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/projects/show.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -64,7 +64,7 @@
 </div>
 
 <% content_for :sidebar do %>
-    <% if @total_hours && User.current.allowed_to?(:view_time_entries, @project) %>
+    <% if @total_hours.present? %>
     <h3><%= l(:label_spent_time) %></h3>
     <p><span class="icon icon-time"><%= l_hours(@total_hours) %></span></p>
     <p><%= link_to(l(:label_details), {:controller => 'timelog', :action => 'index', :project_id => @project}) %> |
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/queries/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/queries
+END
--- a/app/views/queries/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/queries/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/queries
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/queries
 http://redmine.rubyforge.org/svn
 
 
 
-2010-11-07T15:38:51.908839Z
-4387
+2011-04-03T14:31:32.940784Z
+5304
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-409f5db0d48427b0a9077eb0804d13f9
-2009-11-28T11:59:45.246623Z
-3106
+2011-06-06T13:18:33.000000Z
+b7275c2d279af7900a9b83a4a7e93611
+2011-04-03T14:31:32.940784Z
+5304
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-1235
+1217
 
 _form.rhtml
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 9d6312b02ab4243f7f899de6e37e260b
 2009-11-28T11:34:12.256986Z
 3105
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 b2d901380f08af968240e5dc82b90fc4
 2007-10-01T11:39:34.113865Z
 784
@@ -134,10 +134,10 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-e57491c4634e00f0ef53c44959c58d46
-2010-11-07T15:38:51.908839Z
-4387
+2011-06-06T13:18:33.000000Z
+9b66a1f09df990f9bbc5bb79427d7a7b
+2011-04-01T15:00:23.035426Z
+5279
 jplang
 has-props
 
@@ -160,7 +160,7 @@
 
 
 
-4495
+4537
 
 index.rhtml
 file
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 214378e8574ddebfc274513b423f51a2
 2007-11-05T18:38:42.932265Z
 887
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 d42e88aaf70a65db3b609d51857fb711
 2009-09-20T14:06:57.257282Z
 2895
--- a/app/views/queries/.svn/text-base/_columns.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/queries/.svn/text-base/_columns.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -10,7 +10,7 @@
 			<input type="button" value="&#8592;"
 			 onclick="moveOptions(this.form.selected_columns, this.form.available_columns);" />
 		</td>
-		<td><%= select_tag 'query[column_names][]',
+		<td><%= select_tag 'c[]',
 		          options_for_select(query.columns.collect {|column| [column.caption, column.name]}),
 		          :id => 'selected_columns', :multiple => true, :size => 10, :style => "width:150px" %>
 		</td>
--- a/app/views/queries/.svn/text-base/_filters.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/queries/.svn/text-base/_filters.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -21,10 +21,14 @@
     
     if (check_box.checked) {
         Element.show("operators_" + field);
+				Form.Element.enable("operators_" + field);
+        Form.Element.enable("values_" + field);
         toggle_operator(field);
     } else {
         Element.hide("operators_" + field);
         Element.hide("div_values_" + field);
+        Form.Element.disable("operators_" + field);
+        Form.Element.disable("values_" + field);
   }
 }
 
@@ -54,13 +58,15 @@
     }
 }
 
+function submit_query_form(id) {
+  selectAllOptions("selected_columns");
+  $(id).submit();
+}
+
 function apply_filters_observer() {
   $$("#query_form input[type=text]").invoke("observe", "keypress", function(e){
     if(e.keyCode == Event.KEY_RETURN) {
-      <%= remote_function(:url => { :set_filter => 1},
-                          :update => "content",
-                          :with => "Form.serialize('query_form')",
-                          :complete => "e.stop(); apply_filters_observer()") %>
+      submit_query_form("query_form");
     }
   });
 }
@@ -77,26 +83,26 @@
        options = filter[1] %>
     <tr <%= 'style="display:none;"' unless query.has_filter?(field) %> id="tr_<%= field %>" class="filter">
     <td style="width:200px;">
-        <%= check_box_tag 'fields[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %>
+        <%= check_box_tag 'f[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %>
         <label for="cb_<%= field %>"><%= filter[1][:name] || l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) %></label>
     </td>
     <td style="width:150px;">
-        <%= select_tag "operators[#{field}]", options_for_select(operators_for_select(options[:type]), query.operator_for(field)), :id => "operators_#{field}", :onchange => "toggle_operator('#{field}');", :class => "select-small", :style => "vertical-align: top;" %>
+        <%= select_tag "op[#{field}]", options_for_select(operators_for_select(options[:type]), query.operator_for(field)), :id => "operators_#{field}", :onchange => "toggle_operator('#{field}');", :class => "select-small", :style => "vertical-align: top;" %>
     </td>
     <td>    
     <div id="div_values_<%= field %>" style="display:none;">
     <% case options[:type]
     when :list, :list_optional, :list_status, :list_subprojects %>
-        <select <%= "multiple=true" if query.values_for(field) and query.values_for(field).length > 1 %> name="values[<%= field %>][]" id="values_<%= field %>" class="select-small" style="vertical-align: top;">
+        <select <%= "multiple=true" if query.values_for(field) and query.values_for(field).length > 1 %> name="v[<%= field %>][]" id="values_<%= field %>" class="select-small" style="vertical-align: top;">
         <%= options_for_select options[:values], query.values_for(field) %>        
         </select>
         <%= link_to_function image_tag('bullet_toggle_plus.png'), "toggle_multi_select('#{field}');", :style => "vertical-align: bottom;" %>
     <% when :date, :date_past %>
-        <%= text_field_tag "values[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %> <%= l(:label_day_plural) %>
+        <%= text_field_tag "v[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %> <%= l(:label_day_plural) %>
     <% when :string, :text %>
-        <%= text_field_tag "values[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 30, :class => "select-small" %>
+        <%= text_field_tag "v[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 30, :class => "select-small" %>
     <% when :integer %>
-        <%= text_field_tag "values[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %>
+        <%= text_field_tag "v[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %>
     <% end %>
     </div>
     <script type="text/javascript">toggle_filter('<%= field %>');</script>
@@ -114,4 +120,4 @@
 </td>
 </tr>
 </table>
-<%= hidden_field_tag 'fields[]', '' %>
+<%= hidden_field_tag 'f[]', '' %>
--- a/app/views/queries/_columns.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/queries/_columns.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -10,7 +10,7 @@
 			<input type="button" value="&#8592;"
 			 onclick="moveOptions(this.form.selected_columns, this.form.available_columns);" />
 		</td>
-		<td><%= select_tag 'query[column_names][]',
+		<td><%= select_tag 'c[]',
 		          options_for_select(query.columns.collect {|column| [column.caption, column.name]}),
 		          :id => 'selected_columns', :multiple => true, :size => 10, :style => "width:150px" %>
 		</td>
--- a/app/views/queries/_filters.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/queries/_filters.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -21,10 +21,14 @@
     
     if (check_box.checked) {
         Element.show("operators_" + field);
+				Form.Element.enable("operators_" + field);
+        Form.Element.enable("values_" + field);
         toggle_operator(field);
     } else {
         Element.hide("operators_" + field);
         Element.hide("div_values_" + field);
+        Form.Element.disable("operators_" + field);
+        Form.Element.disable("values_" + field);
   }
 }
 
@@ -54,13 +58,15 @@
     }
 }
 
+function submit_query_form(id) {
+  selectAllOptions("selected_columns");
+  $(id).submit();
+}
+
 function apply_filters_observer() {
   $$("#query_form input[type=text]").invoke("observe", "keypress", function(e){
     if(e.keyCode == Event.KEY_RETURN) {
-      <%= remote_function(:url => { :set_filter => 1},
-                          :update => "content",
-                          :with => "Form.serialize('query_form')",
-                          :complete => "e.stop(); apply_filters_observer()") %>
+      submit_query_form("query_form");
     }
   });
 }
@@ -77,26 +83,26 @@
        options = filter[1] %>
     <tr <%= 'style="display:none;"' unless query.has_filter?(field) %> id="tr_<%= field %>" class="filter">
     <td style="width:200px;">
-        <%= check_box_tag 'fields[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %>
+        <%= check_box_tag 'f[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %>
         <label for="cb_<%= field %>"><%= filter[1][:name] || l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) %></label>
     </td>
     <td style="width:150px;">
-        <%= select_tag "operators[#{field}]", options_for_select(operators_for_select(options[:type]), query.operator_for(field)), :id => "operators_#{field}", :onchange => "toggle_operator('#{field}');", :class => "select-small", :style => "vertical-align: top;" %>
+        <%= select_tag "op[#{field}]", options_for_select(operators_for_select(options[:type]), query.operator_for(field)), :id => "operators_#{field}", :onchange => "toggle_operator('#{field}');", :class => "select-small", :style => "vertical-align: top;" %>
     </td>
     <td>    
     <div id="div_values_<%= field %>" style="display:none;">
     <% case options[:type]
     when :list, :list_optional, :list_status, :list_subprojects %>
-        <select <%= "multiple=true" if query.values_for(field) and query.values_for(field).length > 1 %> name="values[<%= field %>][]" id="values_<%= field %>" class="select-small" style="vertical-align: top;">
+        <select <%= "multiple=true" if query.values_for(field) and query.values_for(field).length > 1 %> name="v[<%= field %>][]" id="values_<%= field %>" class="select-small" style="vertical-align: top;">
         <%= options_for_select options[:values], query.values_for(field) %>        
         </select>
         <%= link_to_function image_tag('bullet_toggle_plus.png'), "toggle_multi_select('#{field}');", :style => "vertical-align: bottom;" %>
     <% when :date, :date_past %>
-        <%= text_field_tag "values[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %> <%= l(:label_day_plural) %>
+        <%= text_field_tag "v[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %> <%= l(:label_day_plural) %>
     <% when :string, :text %>
-        <%= text_field_tag "values[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 30, :class => "select-small" %>
+        <%= text_field_tag "v[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 30, :class => "select-small" %>
     <% when :integer %>
-        <%= text_field_tag "values[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %>
+        <%= text_field_tag "v[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %>
     <% end %>
     </div>
     <script type="text/javascript">toggle_filter('<%= field %>');</script>
@@ -114,4 +120,4 @@
 </td>
 </tr>
 </table>
-<%= hidden_field_tag 'fields[]', '' %>
+<%= hidden_field_tag 'f[]', '' %>
--- a/app/views/reports/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/reports/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/reports
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/reports
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 d150c943c49d910431268e3b5b148f5d
 2010-06-20T03:37:42.430179Z
 3797
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 faf9d3d189ffa44154f1272c333808b5
 2010-01-07T21:12:16.849243Z
 3283
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 b0028f798f34512aa7c5f8c014ad73f7
 2010-01-07T21:12:16.849243Z
 3283
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 58b8758e6fc3da959cb412ae64e9237f
 2007-03-12T17:59:02.654744Z
 333
--- a/app/views/repositories/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,95 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/4921/trunk/app/views/repositories
-END
-stats.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/2895/trunk/app/views/repositories/stats.rhtml
-END
-revision.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4613/trunk/app/views/repositories/revision.rhtml
-END
-_navigation.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/3086/trunk/app/views/repositories/_navigation.rhtml
-END
-entry.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/2840/trunk/app/views/repositories/entry.rhtml
-END
-_dir_list_content.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/4921/trunk/app/views/repositories/_dir_list_content.rhtml
-END
-diff.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4698/trunk/app/views/repositories/diff.rhtml
-END
-changes.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 61
-/svn/!svn/ver/2840/trunk/app/views/repositories/changes.rhtml
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/repositories
 END
-_dir_list.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/1032/trunk/app/views/repositories/_dir_list.rhtml
-END
-annotate.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4613/trunk/app/views/repositories/annotate.rhtml
-END
-show.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/2849/trunk/app/views/repositories/show.rhtml
-END
-_revisions.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4613/trunk/app/views/repositories/_revisions.rhtml
-END
-revisions.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/2840/trunk/app/views/repositories/revisions.rhtml
-END
-committers.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/2137/trunk/app/views/repositories/committers.rhtml
-END
-_link_to_functions.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/2849/trunk/app/views/repositories/_link_to_functions.rhtml
-END
-_breadcrumbs.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/4733/trunk/app/views/repositories/_breadcrumbs.rhtml
-END
--- a/app/views/repositories/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/repositories
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/repositories
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-22T08:16:05.081549Z
-4921
+2011-05-21T00:59:40.399050Z
+5860
 tmaruyama
 
 
@@ -26,13 +26,81 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
+_navigation.rhtml
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+59dbb643c447518053d9cdb1a86cb5ef
+2009-11-24T17:55:45.336708Z
+3086
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+910
+
+revision.rhtml
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+384e66ab55cf66e21cf0e6281db6745f
+2011-05-21T00:58:47.244046Z
+5859
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2090
+
 stats.rhtml
 file
 
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 bafc924316c90c31dc1cd9a6daf124ef
 2009-09-20T14:06:57.257282Z
 2895
@@ -60,81 +128,13 @@
 
 581
 
-revision.rhtml
-file
-
-
-
-
-2011-03-03T11:05:11.000000Z
-8599ffd3e73ccf24e2c81c6e0a20c906
-2011-01-02T09:45:05.291687Z
-4613
-tmaruyama
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1931
-
-_navigation.rhtml
-file
-
-
-
-
-2011-03-03T11:05:11.000000Z
-59dbb643c447518053d9cdb1a86cb5ef
-2009-11-24T17:55:45.336708Z
-3086
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-910
-
 entry.rhtml
 file
 
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 012e1437dd062433556a6281439b3900
 2009-08-15T22:41:40.505056Z
 2840
@@ -168,10 +168,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-9e9a1bb7f64971403644f55f38f9ccce
-2011-02-22T08:16:05.081549Z
-4921
+2011-06-06T13:18:33.000000Z
+52062d28fe7f8fce9ba10335926fe6c2
+2011-05-13T03:55:21.375053Z
+5775
 tmaruyama
 has-props
 
@@ -194,7 +194,75 @@
 
 
 
-1839
+2029
+
+_dir_list.rhtml
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+13d094fdb12d094bcd8db82898f94612
+2011-05-13T03:55:21.375053Z
+5775
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+411
+
+changes.rhtml
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+cde7a86a5ec0cf9915b0540c9acbb820
+2009-08-15T22:41:40.505056Z
+2840
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+636
 
 diff.rhtml
 file
@@ -202,7 +270,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 76c0335206cfde112a6416937072848b
 2011-01-11T16:04:07.541291Z
 4698
@@ -230,81 +298,13 @@
 
 944
 
-changes.rhtml
-file
-
-
-
-
-2011-03-03T11:05:11.000000Z
-cde7a86a5ec0cf9915b0540c9acbb820
-2009-08-15T22:41:40.505056Z
-2840
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-636
-
-_dir_list.rhtml
-file
-
-
-
-
-2011-03-03T11:05:11.000000Z
-8c004b6e433ac1a6ca64c97a35512f28
-2008-01-02T22:41:53.166620Z
-1032
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-350
-
 annotate.rhtml
 file
 
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 d3aaac2a6c4b7c77b844324970afff64
 2011-01-02T09:45:05.291687Z
 4613
@@ -332,47 +332,13 @@
 
 1333
 
-show.rhtml
-file
-
-
-
-
-2011-03-03T11:05:11.000000Z
-5608dc13675382cd62688058ca0b77d1
-2009-09-01T12:13:17.386587Z
-2849
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1461
-
 _revisions.rhtml
 file
 
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 61a2e63b2e36b7d622d95745cc864583
 2011-01-02T09:45:05.291687Z
 4613
@@ -400,17 +366,51 @@
 
 1341
 
+show.rhtml
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+d63ae531baf19516526772ad42c128a2
+2011-03-26T02:40:13.309063Z
+5223
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2061
+
 revisions.rhtml
 file
 
 
 
 
-2011-03-03T11:05:11.000000Z
-f2efac3274e0c46cf32037372907a644
-2009-08-15T22:41:40.505056Z
-2840
-edavis10
+2011-06-06T13:18:33.000000Z
+ebdeb45983545fd5691d8667b156ccfd
+2011-05-21T00:59:40.399050Z
+5860
+tmaruyama
 has-props
 
 
@@ -432,7 +432,41 @@
 
 
 
-810
+960
+
+_link_to_functions.rhtml
+file
+
+
+
+
+2011-06-06T13:14:59.000000Z
+a86ac8a045315f57fa32acb29c08f19f
+2009-09-01T12:13:17.386587Z
+2849
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+847
 
 committers.rhtml
 file
@@ -440,7 +474,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 2db96b0dcaab42c8e67b7fc590618fd3
 2008-12-15T18:02:25.843227Z
 2137
@@ -468,50 +502,16 @@
 
 857
 
-_link_to_functions.rhtml
-file
-
-
-
-
-2011-03-03T11:05:11.000000Z
-a86ac8a045315f57fa32acb29c08f19f
-2009-09-01T12:13:17.386587Z
-2849
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-847
-
 _breadcrumbs.rhtml
 file
 
 
 
 
-2011-03-03T11:05:11.000000Z
-a8822300e64f74b50bbb1e90d1a61dda
-2011-01-21T13:22:08.161817Z
-4733
+2011-06-06T13:18:33.000000Z
+70983d0940293e9e5b731b0d182d76ab
+2011-03-16T00:51:14.442890Z
+5147
 tmaruyama
 has-props
 
@@ -534,5 +534,5 @@
 
 
 
-687
+912
 
--- a/app/views/repositories/.svn/text-base/_breadcrumbs.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/.svn/text-base/_breadcrumbs.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -10,12 +10,19 @@
     link_path << '/' unless link_path.empty?
     link_path << "#{dir}" 
     %>
-    / <%= link_to h(dir), :action => 'show', :id => @project, :path => to_path_param(link_path), :rev => @rev %>
+    / <%= link_to h(dir), :action => 'show', :id => @project,
+                :path => to_path_param(link_path), :rev => @rev %>
 <% end %>
 <% if filename %>
-    / <%= link_to h(filename), :action => 'changes', :id => @project, :path => to_path_param("#{link_path}/#{filename}"), :rev => @rev %>
+    / <%= link_to h(filename),
+                   :action => 'changes', :id => @project,
+                   :path => to_path_param("#{link_path}/#{filename}"), :rev => @rev %>
 <% end %>
-
-<%= "@ #{h format_revision(@changeset)}" if @changeset %>
+<%
+  # @rev is revsion or Git and Mercurial branch or tag.
+  # For Mercurial *tip*, @rev and @changeset are nil.
+  rev_text = @changeset.nil? ? @rev : format_revision(@changeset)
+%>
+<%= "@ #{h rev_text}" unless rev_text.blank? %>
 
 <% html_title(with_leading_slash(path)) -%>
--- a/app/views/repositories/.svn/text-base/_dir_list.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/.svn/text-base/_dir_list.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -3,10 +3,12 @@
 <tr id="root">
 <th><%= l(:field_name) %></th>
 <th><%= l(:field_filesize) %></th>
-<th><%= l(:label_revision) %></th>
-<th><%= l(:label_age) %></th>
-<th><%= l(:field_author) %></th>
-<th><%= l(:field_comments) %></th>
+<% if @repository.report_last_commit %>
+<th><%= l(:label_revision)  %></th>
+<th><%= l(:label_age)       %></th>
+<th><%= l(:field_author)    %></th>
+<th><%= l(:field_comments)  %></th>
+<% end %>
 </tr>
 </thead>
 <tbody>
--- a/app/views/repositories/.svn/text-base/_dir_list_content.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/.svn/text-base/_dir_list_content.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,10 +1,11 @@
 <% @entries.each do |entry| %>
 <% tr_id = Digest::MD5.hexdigest(entry.path)
    depth = params[:depth].to_i %>
-<%  ent_path = replace_invalid_utf8(entry.path)   %>
-<%  ent_name = replace_invalid_utf8(entry.name)   %>
+<%  ent_path = Redmine::CodesetUtil.replace_invalid_utf8(entry.path)   %>
+<%  ent_name = Redmine::CodesetUtil.replace_invalid_utf8(entry.name)   %>
 <tr id="<%= tr_id %>" class="<%= h params[:parent_id] %> entry <%= entry.kind %>">
-<td style="padding-left: <%=18 * depth%>px;" class="filename">
+<td style="padding-left: <%=18 * depth%>px;" class="<%=
+           @repository.report_last_commit ? "filename" : "filename_no_report" %>";>
 <% if entry.is_dir? %>
 <span class="expander" onclick="<%=  remote_function :url => {:action => 'show', :id => @project, :path => to_path_param(ent_path), :rev => @rev, :depth => (depth + 1), :parent_id => tr_id},
                   :method => :get,
@@ -19,9 +20,11 @@
 </td>
 <td class="size"><%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.is_dir? %></td>
 <% changeset = @project.repository.find_changeset_by_name(entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %>
+<% if @repository.report_last_commit %>
 <td class="revision"><%= link_to_revision(changeset, @project) if changeset %></td>
 <td class="age"><%= distance_of_time_in_words(entry.lastrev.time, Time.now) if entry.lastrev && entry.lastrev.time %></td>
-<td class="author"><%= changeset.nil? ? h(replace_invalid_utf8(entry.lastrev.author.to_s.split('<').first)) : changeset.author if entry.lastrev %></td>
+<td class="author"><%= changeset.nil? ? h(Redmine::CodesetUtil.replace_invalid_utf8(entry.lastrev.author.to_s.split('<').first)) : changeset.author if entry.lastrev %></td>
 <td class="comments"><%=h truncate(changeset.comments, :length => 50) unless changeset.nil? %></td>
+<% end %>
 </tr>
 <% end %>
--- a/app/views/repositories/.svn/text-base/revision.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/.svn/text-base/revision.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -13,7 +13,11 @@
   <% end -%>
   &#187;&nbsp;
 
-  <% form_tag({:controller => 'repositories', :action => 'revision', :id => @project, :rev => nil}, :method => :get) do %>
+  <% form_tag({:controller => 'repositories',
+               :action     => 'revision',
+               :id         => @project,
+               :rev        => nil},
+               :method     => :get) do %>
     <%= text_field_tag 'rev', @rev, :size => 8 %>
     <%= submit_tag 'OK', :name => nil %>
   <% end %>
@@ -38,14 +42,18 @@
 <% if User.current.allowed_to?(:browse_repository, @project) %>
 <h3><%= l(:label_attachment_plural) %></h3>
 <ul id="changes-legend">
-<li class="change change-A"><%= l(:label_added) %></li>
+<li class="change change-A"><%= l(:label_added)    %></li>
 <li class="change change-M"><%= l(:label_modified) %></li>
-<li class="change change-C"><%= l(:label_copied) %></li>
-<li class="change change-R"><%= l(:label_renamed) %></li>
-<li class="change change-D"><%= l(:label_deleted) %></li>
+<li class="change change-C"><%= l(:label_copied)   %></li>
+<li class="change change-R"><%= l(:label_renamed)  %></li>
+<li class="change change-D"><%= l(:label_deleted)  %></li>
 </ul>
 
-<p><%= link_to(l(:label_view_diff), :action => 'diff', :id => @project, :path => "", :rev => @changeset.identifier) if @changeset.changes.any? %></p>
+<p><%= link_to(l(:label_view_diff),
+               :action => 'diff',
+               :id     => @project,
+               :path   => "",
+               :rev    => @changeset.identifier) if @changeset.changes.any? %></p>
 
 <div class="changeset-changes">
 <%= render_changeset_changes %>
--- a/app/views/repositories/.svn/text-base/revisions.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/.svn/text-base/revisions.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,19 +1,26 @@
 <div class="contextual">
 <% form_tag({:action => 'revision', :id => @project}) do %>
-<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 8 %>
-<%= submit_tag 'OK' %>
+<%=   l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 8 %>
+<%=   submit_tag 'OK' %>
 <% end %>
 </div>
 
 <h2><%= l(:label_revision_plural) %></h2>
 
-<%= render :partial => 'revisions', :locals => {:project => @project, :path => '', :revisions => @changesets, :entry => nil }%>
+<%= render :partial => 'revisions',
+           :locals => {:project   => @project,
+                       :path      => '', 
+                       :revisions => @changesets,
+                       :entry     => nil } %>
 
 <p class="pagination"><%= pagination_links_full @changeset_pages,@changeset_count %></p>
 
 <% content_for :header_tags do %>
-<%= stylesheet_link_tag "scm" %>
-<%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :page => nil, :key => User.current.rss_key})) %>
+<%=   stylesheet_link_tag "scm" %>
+<%=   auto_discovery_link_tag(
+               :atom,
+               params.merge(
+                 {:format => 'atom', :page => nil, :key => User.current.rss_key})) %>
 <% end %>
 
 <% other_formats_links do |f| %>
--- a/app/views/repositories/.svn/text-base/show.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/.svn/text-base/show.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -12,23 +12,49 @@
 
 <%= render_properties(@properties) %>
 
-<% if @changesets && !@changesets.empty? && authorize_for('repositories', 'revisions') %>
+<% if authorize_for('repositories', 'revisions') %>
+<%   if @changesets && !@changesets.empty? %>
 <h3><%= l(:label_latest_revision_plural) %></h3>
-<%= render :partial => 'revisions', :locals => {:project => @project, :path => @path, :revisions => @changesets, :entry => nil }%>
+<%=    render :partial => 'revisions',
+              :locals => {:project => @project, :path => @path,
+                          :revisions => @changesets, :entry => nil }%>
+<%   end %>
+<p>
+<%
+     has_branches = (!@repository.branches.nil? && @repository.branches.length > 0)
+     sep = ''
+ %>
+<%   if @repository.supports_all_revisions? && @path.blank? %>
+<%= link_to l(:label_view_all_revisions), :action => 'revisions', :id => @project %>
+<%   sep = '|' %>
+<%   end %>
+<%
+     if @repository.supports_directory_revisions? &&
+         ( has_branches || !@path.blank? || !@rev.blank? )
+ %>
+<%= sep %>
+<%=
+    link_to l(:label_view_revisions),
+                   :action => 'changes',
+                   :path   => to_path_param(@path),
+                   :id     => @project,
+                   :rev    => @rev
+                   %>
+<%   end %>
+</p>
 
-<% if @path.blank? %>
-	<p><%= link_to l(:label_view_all_revisions), :action => 'revisions', :id => @project %></p>
-<% else %>
-	<p><%= link_to l(:label_view_revisions), :action => 'changes', :path => to_path_param(@path), :id => @project %></p>
-<% end %>
+<%   if true # @path.blank? %>
+<%     content_for :header_tags do %>
+  <%= auto_discovery_link_tag(
+                   :atom, params.merge(
+                      {:format => 'atom', :action => 'revisions',
+                       :id => @project, :page => nil, :key => User.current.rss_key})) %>
+<%     end %>
 
-<% content_for :header_tags do %>
-  <%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :action => 'revisions', :id => @project, :page => nil, :key => User.current.rss_key})) %>
-<% end %>
-
-<% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => {:action => 'revisions', :id => @project, :key => User.current.rss_key} %>
-<% end %>
+<%     other_formats_links do |f| %>
+  <%= f.link_to 'Atom', :url => {:action => 'revisions', :id => @project, :key => User.current.rss_key} %>
+<%     end %>
+<%   end %>
 <% end %>
 
 <% content_for :header_tags do %>
--- a/app/views/repositories/_breadcrumbs.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/_breadcrumbs.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -10,12 +10,19 @@
     link_path << '/' unless link_path.empty?
     link_path << "#{dir}" 
     %>
-    / <%= link_to h(dir), :action => 'show', :id => @project, :path => to_path_param(link_path), :rev => @rev %>
+    / <%= link_to h(dir), :action => 'show', :id => @project,
+                :path => to_path_param(link_path), :rev => @rev %>
 <% end %>
 <% if filename %>
-    / <%= link_to h(filename), :action => 'changes', :id => @project, :path => to_path_param("#{link_path}/#{filename}"), :rev => @rev %>
+    / <%= link_to h(filename),
+                   :action => 'changes', :id => @project,
+                   :path => to_path_param("#{link_path}/#{filename}"), :rev => @rev %>
 <% end %>
-
-<%= "@ #{h format_revision(@changeset)}" if @changeset %>
+<%
+  # @rev is revsion or Git and Mercurial branch or tag.
+  # For Mercurial *tip*, @rev and @changeset are nil.
+  rev_text = @changeset.nil? ? @rev : format_revision(@changeset)
+%>
+<%= "@ #{h rev_text}" unless rev_text.blank? %>
 
 <% html_title(with_leading_slash(path)) -%>
--- a/app/views/repositories/_dir_list.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/_dir_list.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -3,10 +3,12 @@
 <tr id="root">
 <th><%= l(:field_name) %></th>
 <th><%= l(:field_filesize) %></th>
-<th><%= l(:label_revision) %></th>
-<th><%= l(:label_age) %></th>
-<th><%= l(:field_author) %></th>
-<th><%= l(:field_comments) %></th>
+<% if @repository.report_last_commit %>
+<th><%= l(:label_revision)  %></th>
+<th><%= l(:label_age)       %></th>
+<th><%= l(:field_author)    %></th>
+<th><%= l(:field_comments)  %></th>
+<% end %>
 </tr>
 </thead>
 <tbody>
--- a/app/views/repositories/_dir_list_content.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/_dir_list_content.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,10 +1,11 @@
 <% @entries.each do |entry| %>
 <% tr_id = Digest::MD5.hexdigest(entry.path)
    depth = params[:depth].to_i %>
-<%  ent_path = replace_invalid_utf8(entry.path)   %>
-<%  ent_name = replace_invalid_utf8(entry.name)   %>
+<%  ent_path = Redmine::CodesetUtil.replace_invalid_utf8(entry.path)   %>
+<%  ent_name = Redmine::CodesetUtil.replace_invalid_utf8(entry.name)   %>
 <tr id="<%= tr_id %>" class="<%= h params[:parent_id] %> entry <%= entry.kind %>">
-<td style="padding-left: <%=18 * depth%>px;" class="filename">
+<td style="padding-left: <%=18 * depth%>px;" class="<%=
+           @repository.report_last_commit ? "filename" : "filename_no_report" %>";>
 <% if entry.is_dir? %>
 <span class="expander" onclick="<%=  remote_function :url => {:action => 'show', :id => @project, :path => to_path_param(ent_path), :rev => @rev, :depth => (depth + 1), :parent_id => tr_id},
                   :method => :get,
@@ -19,9 +20,11 @@
 </td>
 <td class="size"><%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.is_dir? %></td>
 <% changeset = @project.repository.find_changeset_by_name(entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %>
+<% if @repository.report_last_commit %>
 <td class="revision"><%= link_to_revision(changeset, @project) if changeset %></td>
 <td class="age"><%= distance_of_time_in_words(entry.lastrev.time, Time.now) if entry.lastrev && entry.lastrev.time %></td>
-<td class="author"><%= changeset.nil? ? h(replace_invalid_utf8(entry.lastrev.author.to_s.split('<').first)) : changeset.author if entry.lastrev %></td>
+<td class="author"><%= changeset.nil? ? h(Redmine::CodesetUtil.replace_invalid_utf8(entry.lastrev.author.to_s.split('<').first)) : changeset.author if entry.lastrev %></td>
 <td class="comments"><%=h truncate(changeset.comments, :length => 50) unless changeset.nil? %></td>
+<% end %>
 </tr>
 <% end %>
--- a/app/views/repositories/revision.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/revision.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -13,7 +13,11 @@
   <% end -%>
   &#187;&nbsp;
 
-  <% form_tag({:controller => 'repositories', :action => 'revision', :id => @project, :rev => nil}, :method => :get) do %>
+  <% form_tag({:controller => 'repositories',
+               :action     => 'revision',
+               :id         => @project,
+               :rev        => nil},
+               :method     => :get) do %>
     <%= text_field_tag 'rev', @rev, :size => 8 %>
     <%= submit_tag 'OK', :name => nil %>
   <% end %>
@@ -38,14 +42,18 @@
 <% if User.current.allowed_to?(:browse_repository, @project) %>
 <h3><%= l(:label_attachment_plural) %></h3>
 <ul id="changes-legend">
-<li class="change change-A"><%= l(:label_added) %></li>
+<li class="change change-A"><%= l(:label_added)    %></li>
 <li class="change change-M"><%= l(:label_modified) %></li>
-<li class="change change-C"><%= l(:label_copied) %></li>
-<li class="change change-R"><%= l(:label_renamed) %></li>
-<li class="change change-D"><%= l(:label_deleted) %></li>
+<li class="change change-C"><%= l(:label_copied)   %></li>
+<li class="change change-R"><%= l(:label_renamed)  %></li>
+<li class="change change-D"><%= l(:label_deleted)  %></li>
 </ul>
 
-<p><%= link_to(l(:label_view_diff), :action => 'diff', :id => @project, :path => "", :rev => @changeset.identifier) if @changeset.changes.any? %></p>
+<p><%= link_to(l(:label_view_diff),
+               :action => 'diff',
+               :id     => @project,
+               :path   => "",
+               :rev    => @changeset.identifier) if @changeset.changes.any? %></p>
 
 <div class="changeset-changes">
 <%= render_changeset_changes %>
--- a/app/views/repositories/revisions.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/revisions.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,19 +1,26 @@
 <div class="contextual">
 <% form_tag({:action => 'revision', :id => @project}) do %>
-<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 8 %>
-<%= submit_tag 'OK' %>
+<%=   l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 8 %>
+<%=   submit_tag 'OK' %>
 <% end %>
 </div>
 
 <h2><%= l(:label_revision_plural) %></h2>
 
-<%= render :partial => 'revisions', :locals => {:project => @project, :path => '', :revisions => @changesets, :entry => nil }%>
+<%= render :partial => 'revisions',
+           :locals => {:project   => @project,
+                       :path      => '', 
+                       :revisions => @changesets,
+                       :entry     => nil } %>
 
 <p class="pagination"><%= pagination_links_full @changeset_pages,@changeset_count %></p>
 
 <% content_for :header_tags do %>
-<%= stylesheet_link_tag "scm" %>
-<%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :page => nil, :key => User.current.rss_key})) %>
+<%=   stylesheet_link_tag "scm" %>
+<%=   auto_discovery_link_tag(
+               :atom,
+               params.merge(
+                 {:format => 'atom', :page => nil, :key => User.current.rss_key})) %>
 <% end %>
 
 <% other_formats_links do |f| %>
--- a/app/views/repositories/show.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/repositories/show.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -12,23 +12,49 @@
 
 <%= render_properties(@properties) %>
 
-<% if @changesets && !@changesets.empty? && authorize_for('repositories', 'revisions') %>
+<% if authorize_for('repositories', 'revisions') %>
+<%   if @changesets && !@changesets.empty? %>
 <h3><%= l(:label_latest_revision_plural) %></h3>
-<%= render :partial => 'revisions', :locals => {:project => @project, :path => @path, :revisions => @changesets, :entry => nil }%>
+<%=    render :partial => 'revisions',
+              :locals => {:project => @project, :path => @path,
+                          :revisions => @changesets, :entry => nil }%>
+<%   end %>
+<p>
+<%
+     has_branches = (!@repository.branches.nil? && @repository.branches.length > 0)
+     sep = ''
+ %>
+<%   if @repository.supports_all_revisions? && @path.blank? %>
+<%= link_to l(:label_view_all_revisions), :action => 'revisions', :id => @project %>
+<%   sep = '|' %>
+<%   end %>
+<%
+     if @repository.supports_directory_revisions? &&
+         ( has_branches || !@path.blank? || !@rev.blank? )
+ %>
+<%= sep %>
+<%=
+    link_to l(:label_view_revisions),
+                   :action => 'changes',
+                   :path   => to_path_param(@path),
+                   :id     => @project,
+                   :rev    => @rev
+                   %>
+<%   end %>
+</p>
 
-<% if @path.blank? %>
-	<p><%= link_to l(:label_view_all_revisions), :action => 'revisions', :id => @project %></p>
-<% else %>
-	<p><%= link_to l(:label_view_revisions), :action => 'changes', :path => to_path_param(@path), :id => @project %></p>
-<% end %>
+<%   if true # @path.blank? %>
+<%     content_for :header_tags do %>
+  <%= auto_discovery_link_tag(
+                   :atom, params.merge(
+                      {:format => 'atom', :action => 'revisions',
+                       :id => @project, :page => nil, :key => User.current.rss_key})) %>
+<%     end %>
 
-<% content_for :header_tags do %>
-  <%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :action => 'revisions', :id => @project, :page => nil, :key => User.current.rss_key})) %>
-<% end %>
-
-<% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => {:action => 'revisions', :id => @project, :key => User.current.rss_key} %>
-<% end %>
+<%     other_formats_links do |f| %>
+  <%= f.link_to 'Atom', :url => {:action => 'revisions', :id => @project, :key => User.current.rss_key} %>
+<%     end %>
+<%   end %>
 <% end %>
 
 <% content_for :header_tags do %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/roles/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/roles
+END
--- a/app/views/roles/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/roles/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/roles
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/roles
 http://redmine.rubyforge.org/svn
 
 
 
-2010-02-15T16:41:16.346582Z
-3435
-edavis10
+2011-04-11T17:53:15.908614Z
+5416
+jplang
 
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-cbcd3851055c3f5a5aa20d005b086872
-2009-07-05T12:22:02.133266Z
-2810
+2011-06-06T13:18:33.000000Z
+5061d0ed44fcb0730e65e3e104e0c5d5
+2011-03-13T13:32:44.829514Z
+5107
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-2165
+2183
 
 index.html.erb
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 82f5657ab6c01b56b039af0cf2312ade
 2010-02-15T16:41:16.346582Z
 3435
@@ -100,10 +100,10 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-652c40985320a23285c8e27439418f22
-2008-10-24T15:24:35.832581Z
-1943
+2011-06-06T13:18:33.000000Z
+4ae0d0cb6123333383cf662b299e6f18
+2011-04-11T17:53:15.908614Z
+5416
 jplang
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-1159
+1269
 
 edit.rhtml
 file
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 4bcaa15de1de193dd1f98128b71a420b
 2009-10-25T13:28:36.522470Z
 2979
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 0ff8206c0e77e6356f9d16ccaeff13e2
 2009-07-05T12:22:02.133266Z
 2810
--- a/app/views/roles/.svn/text-base/_form.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/roles/.svn/text-base/_form.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,16 @@
 <%= error_messages_for 'role' %> 
 
+<div class="box">
 <% unless @role.builtin? %>
-<div class="box">
 <p><%= f.text_field :name, :required => true %></p>
 <p><%= f.check_box :assignable %></p>
+<% end %>
+<p><%= f.select :issues_visibility, Role::ISSUES_VISIBILITY_OPTIONS.collect {|v| [l(v.last), v.first]} %></p>
 <% if @role.new_record? && @roles.any? %>
 <p><label><%= l(:label_copy_workflow_from) %></label>
 <%= select_tag(:copy_workflow_from, content_tag("option") + options_from_collection_for_select(@roles, :id, :name)) %></p>
 <% end %>
 </div>
-<% end %>
 
 <h3><%= l(:label_permissions) %></h3>
 <div class="box" id="permissions">
--- a/app/views/roles/.svn/text-base/report.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/roles/.svn/text-base/report.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -2,6 +2,7 @@
 
 <% form_tag({:action => 'report'}, :id => 'permissions_form') do %>
 <%= hidden_field_tag 'permissions[0]', '', :id => nil %>
+<div class="autoscroll">
 <table class="list">
 <thead>
     <tr>
@@ -21,7 +22,7 @@
     <% unless mod.blank? %>
         <tr class="group open">
         	<td colspan="<%= @roles.size + 1 %>">
-        		<span class="expander" onclick="toggleRowGroup(this); return false;">&nbsp;</span>
+        		<span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
         		<%= l_or_humanize(mod, :prefix => 'project_module_') %>
         	</td>
         </tr>
@@ -45,6 +46,7 @@
 <% end %>
 </tbody>
 </table>
+</div>
 <p><%= check_all_links 'permissions_form' %></p>
 <p><%= submit_tag l(:button_save) %></p>
 <% end %>
--- a/app/views/roles/_form.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/roles/_form.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,16 @@
 <%= error_messages_for 'role' %> 
 
+<div class="box">
 <% unless @role.builtin? %>
-<div class="box">
 <p><%= f.text_field :name, :required => true %></p>
 <p><%= f.check_box :assignable %></p>
+<% end %>
+<p><%= f.select :issues_visibility, Role::ISSUES_VISIBILITY_OPTIONS.collect {|v| [l(v.last), v.first]} %></p>
 <% if @role.new_record? && @roles.any? %>
 <p><label><%= l(:label_copy_workflow_from) %></label>
 <%= select_tag(:copy_workflow_from, content_tag("option") + options_from_collection_for_select(@roles, :id, :name)) %></p>
 <% end %>
 </div>
-<% end %>
 
 <h3><%= l(:label_permissions) %></h3>
 <div class="box" id="permissions">
--- a/app/views/roles/report.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/roles/report.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -2,6 +2,7 @@
 
 <% form_tag({:action => 'report'}, :id => 'permissions_form') do %>
 <%= hidden_field_tag 'permissions[0]', '', :id => nil %>
+<div class="autoscroll">
 <table class="list">
 <thead>
     <tr>
@@ -21,7 +22,7 @@
     <% unless mod.blank? %>
         <tr class="group open">
         	<td colspan="<%= @roles.size + 1 %>">
-        		<span class="expander" onclick="toggleRowGroup(this); return false;">&nbsp;</span>
+        		<span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
         		<%= l_or_humanize(mod, :prefix => 'project_module_') %>
         	</td>
         </tr>
@@ -45,6 +46,7 @@
 <% end %>
 </tbody>
 </table>
+</div>
 <p><%= check_all_links 'permissions_form' %></p>
 <p><%= submit_tag l(:button_save) %></p>
 <% end %>
--- a/app/views/search/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/search/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/search
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/search
 http://redmine.rubyforge.org/svn
 
 
 
-2009-09-20T14:06:57.257282Z
-2895
+2011-04-03T14:01:32.419875Z
+5301
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-0235b1dd9d5f01dbaaab2b59dc006f2e
-2009-09-20T14:06:57.257282Z
-2895
+2011-06-06T13:18:33.000000Z
+186bc99ad48ac57daa48e018409e7fbe
+2011-04-03T14:01:32.419875Z
+5301
 jplang
 has-props
 
@@ -58,5 +58,5 @@
 
 
 
-2237
+1863
 
--- a/app/views/search/.svn/text-base/index.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/search/.svn/text-base/index.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -35,16 +35,12 @@
 
 <p><center>
 <% if @pagination_previous_date %>
-<%= link_to_remote ('&#171; ' + l(:label_previous)),
-                   {:update => :content,
-                    :url => params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))
-                   }, :href => url_for(params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))) %>&nbsp;
+<%= link_to_content_update('&#171; ' + l(:label_previous),
+      params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))) %>&nbsp;
 <% end %>
 <% if @pagination_next_date %>
-<%= link_to_remote (l(:label_next) + ' &#187;'),
-                   {:update => :content,
-                    :url => params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))
-                   }, :href => url_for(params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))) %>
+<%= link_to_content_update(l(:label_next) + ' &#187;',
+      params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))) %>
 <% end %>
 </center></p>
 
--- a/app/views/search/index.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/search/index.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -35,16 +35,12 @@
 
 <p><center>
 <% if @pagination_previous_date %>
-<%= link_to_remote ('&#171; ' + l(:label_previous)),
-                   {:update => :content,
-                    :url => params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))
-                   }, :href => url_for(params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))) %>&nbsp;
+<%= link_to_content_update('&#171; ' + l(:label_previous),
+      params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))) %>&nbsp;
 <% end %>
 <% if @pagination_next_date %>
-<%= link_to_remote (l(:label_next) + ' &#187;'),
-                   {:update => :content,
-                    :url => params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))
-                   }, :href => url_for(params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))) %>
+<%= link_to_content_update(l(:label_next) + ' &#187;',
+      params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))) %>
 <% end %>
 </center></p>
 
--- a/app/views/settings/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/settings/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,65 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/4983/trunk/app/views/settings
-END
-_issues.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 57
-/svn/!svn/ver/4513/trunk/app/views/settings/_issues.rhtml
+/svn/!svn/ver/5961/branches/1.2-stable/app/views/settings
 END
-_general.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4426/trunk/app/views/settings/_general.rhtml
-END
-_authentication.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4306/trunk/app/views/settings/_authentication.rhtml
-END
-_mail_handler.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/3226/trunk/app/views/settings/_mail_handler.rhtml
-END
-plugin.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/837/trunk/app/views/settings/plugin.rhtml
-END
-_display.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4811/trunk/app/views/settings/_display.rhtml
-END
-edit.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/2871/trunk/app/views/settings/edit.rhtml
-END
-_repositories.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4983/trunk/app/views/settings/_repositories.rhtml
-END
-_notifications.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4730/trunk/app/views/settings/_notifications.rhtml
-END
-_projects.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/3198/trunk/app/views/settings/_projects.rhtml
-END
--- a/app/views/settings/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/settings/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/settings
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/settings
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-01T10:27:51.597350Z
-4983
-tmaruyama
+2011-05-29T12:06:05.086159Z
+5961
+jplang
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 dad877e4db2f583979314edcb017bb1b
 2010-12-15T21:18:06.237327Z
 4513
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 7307d5f65399ab2f28eac1162a330678
 2010-11-25T20:27:44.648840Z
 4426
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 8005b162966a27cd4e7c30022320b47e
 2010-10-29T22:28:24.886659Z
 4306
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 1da887b84f272fe4cde6fafaf198529a
 2009-12-23T18:35:19.208194Z
 3226
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 1836fa87f24f7f62eafaed8d1886ca67
 2007-10-13T14:11:06.987513Z
 837
@@ -202,11 +202,11 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-55169c45bb26caf3ff0c92c5b07d7bbe
-2011-02-12T08:16:37.660908Z
-4811
-jbbarth
+2011-06-06T13:18:33.000000Z
+73c09bb702e614c89ef409043dc16705
+2011-03-27T15:43:26.269165Z
+5228
+jplang
 has-props
 
 
@@ -228,7 +228,7 @@
 
 
 
-1061
+1103
 
 edit.rhtml
 file
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 a629426fc7edef8be6c4545bce9a5abd
 2009-09-12T09:13:13.676884Z
 2871
@@ -270,11 +270,11 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-7bc500aa382125fa379e7539d4566431
-2011-03-01T10:27:51.597350Z
-4983
-tmaruyama
+2011-06-06T13:18:33.000000Z
+0bda809a3ce939512e85eb5c5a58162d
+2011-05-29T12:06:05.086159Z
+5961
+jplang
 has-props
 
 
@@ -296,7 +296,7 @@
 
 
 
-2231
+3964
 
 _notifications.rhtml
 file
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 9f784c1426ed466df89a56d5ae835efe
 2011-01-16T15:36:42.998302Z
 4730
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 de489dd7dc60d569a855c1f33d941552
 2009-12-19T20:07:09.039389Z
 3198
--- a/app/views/settings/.svn/text-base/_display.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/settings/.svn/text-base/_display.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -5,7 +5,7 @@
 
 <p><%= setting_select :default_language, lang_options_for_select(false) %></p>
 
-<p><%= setting_select :start_of_week, [[day_name(1),'1'], [day_name(7),'7']], :blank => :label_language_based %></p>
+<p><%= setting_select :start_of_week, [[day_name(1),'1'], [day_name(6),'6'], [day_name(7),'7']], :blank => :label_language_based %></p>
 
 <p><%= setting_select :date_format, Setting::DATE_FORMATS.collect {|f| [Date.today.strftime(f), f]}, :blank => :label_language_based %></p>
 
@@ -15,7 +15,7 @@
 
 <p><%= setting_check_box :gravatar_enabled %></p>
 
-<p><%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid'], ["Retro", "retro"]], :blank => :label_none %></p>
+<p><%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid'], ["Retro", 'retro'], ["Mystery man", 'mm']], :blank => :label_none %></p>
 </div>
 
 <%= submit_tag l(:button_save) %>
--- a/app/views/settings/.svn/text-base/_repositories.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/settings/.svn/text-base/_repositories.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,41 +1,95 @@
 <% form_tag({:action => 'edit', :tab => 'repositories'}) do %>
 
+<fieldset class="box tabular settings enabled_scm">
+<legend><%= l(:setting_enabled_scm) %></legend>
+<table>
+  <tr>
+    <th></th>
+    <th><%= l(:text_scm_command)         %></th>
+    <th><%= l(:text_scm_command_version) %></th>
+  </tr>
+  <% Redmine::Scm::Base.all.collect do |choice| %>
+    <% scm_class = "Repository::#{choice}".constantize %>
+    <% text, value = (choice.is_a?(Array) ? choice : [choice, choice]) %>
+    <% setting = :enabled_scm %>
+    <tr>
+      <td class="scm_name">
+        <%= 
+          check_box_tag(
+              "settings[#{setting}][]",
+               value,
+               Setting.send(setting).include?(value))
+         %>
+        <%= text.to_s %>
+      </td>
+      <td>
+         <%=
+           image_tag(
+              (scm_class.scm_available ? 'true.png' : 'exclamation.png'),
+              :style => "vertical-align:bottom;"
+           )
+           %>
+          <%= scm_class.scm_command %>
+       </td>
+       <td>
+          <%= scm_class.scm_version_string %>
+       </td>
+     </tr>
+  <% end %>
+</table>
+<p class="scm_config">
+<%= l(:text_scm_config) %>
+</p>
+</fieldset>
+
 <div class="box tabular settings">
 <p><%= setting_check_box :autofetch_changesets %></p>
 
-<p><%= setting_check_box :sys_api_enabled, 
-				 :onclick => "if (this.checked) { Form.Element.enable('settings_sys_api_key'); } else { Form.Element.disable('settings_sys_api_key'); }" %></p>
+<p><%= setting_check_box :sys_api_enabled,
+                         :onclick =>
+                             "if (this.checked) { Form.Element.enable('settings_sys_api_key'); } else { Form.Element.disable('settings_sys_api_key'); }" %></p>
 
-<p><%= setting_text_field :sys_api_key, :size => 30,
-																				:id => 'settings_sys_api_key',
-																				:disabled => !Setting.sys_api_enabled?,
-																				:label => :setting_mail_handler_api_key %>
-  <%= link_to_function l(:label_generate_key), "if ($('settings_sys_api_key').disabled == false) { $('settings_sys_api_key').value = randomKey(20) }" %>
+<p><%= setting_text_field :sys_api_key,
+                          :size     => 30,
+                          :id       => 'settings_sys_api_key',
+                          :disabled => !Setting.sys_api_enabled?,
+                          :label    => :setting_mail_handler_api_key %>
+  <%= link_to_function l(:label_generate_key),
+                       "if ($('settings_sys_api_key').disabled == false) { $('settings_sys_api_key').value = randomKey(20) }" %>
 </p>
 
-<p><%= setting_multiselect(:enabled_scm, Redmine::Scm::Base.all) %></p>
-
 <p><%= setting_text_field :repositories_encodings, :size => 60 %><br />
 <em><%= l(:text_comma_separated) %></em></p>
 
 <p><%= setting_text_field :repository_log_display_limit, :size => 6 %></p>
 </div>
 
-<fieldset class="box tabular settings"><legend><%= l(:text_issues_ref_in_commit_messages) %></legend>
+<fieldset class="box tabular settings">
+<legend><%= l(:text_issues_ref_in_commit_messages) %></legend>
 <p><%= setting_text_field :commit_ref_keywords, :size => 30 %><br />
 <em><%= l(:text_comma_separated) %></em></p>
 
 <p><%= setting_text_field :commit_fix_keywords, :size => 30 %>
-&nbsp;<%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %>
-&nbsp;<%= l(:field_done_ratio) %>: <%= setting_select :commit_fix_done_ratio, (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, :blank => :label_no_change_option, :label => false %>
+&nbsp;<%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id,
+                                                          [["", 0]] +
+                                                              IssueStatus.find(:all).collect{
+                                                                 |status| [status.name, status.id.to_s]
+                                                              },
+                                                          :label => false %>
+&nbsp;<%= l(:field_done_ratio) %>: <%= setting_select :commit_fix_done_ratio,
+                                                       (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] },
+                                                       :blank => :label_no_change_option,
+                                                       :label => false %>
 <br /><em><%= l(:text_comma_separated) %></em></p>
 
 <p><%= setting_check_box :commit_logtime_enabled,
-         :onclick => "if (this.checked) { Form.Element.enable('settings_commit_logtime_activity_id'); } else { Form.Element.disable('settings_commit_logtime_activity_id'); }"%></p>
+                         :onclick =>
+                            "if (this.checked) { Form.Element.enable('settings_commit_logtime_activity_id'); } else { Form.Element.disable('settings_commit_logtime_activity_id'); }"%></p>
 
-<p><%= setting_select :commit_logtime_activity_id, 
-         [[l(:label_default), 0]] + TimeEntryActivity.shared.all.collect{|activity| [activity.name, activity.id.to_s]},
-         :disabled => !Setting.commit_logtime_enabled?%></p>
+<p><%= setting_select :commit_logtime_activity_id,
+                      [[l(:label_default), 0]] +
+                          TimeEntryActivity.shared.all.collect{|activity| [activity.name, activity.id.to_s]},
+                      :disabled => !Setting.commit_logtime_enabled?%></p>
 </fieldset>
 
 <%= submit_tag l(:button_save) %>
--- a/app/views/settings/_display.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/settings/_display.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -5,7 +5,7 @@
 
 <p><%= setting_select :default_language, lang_options_for_select(false) %></p>
 
-<p><%= setting_select :start_of_week, [[day_name(1),'1'], [day_name(7),'7']], :blank => :label_language_based %></p>
+<p><%= setting_select :start_of_week, [[day_name(1),'1'], [day_name(6),'6'], [day_name(7),'7']], :blank => :label_language_based %></p>
 
 <p><%= setting_select :date_format, Setting::DATE_FORMATS.collect {|f| [Date.today.strftime(f), f]}, :blank => :label_language_based %></p>
 
@@ -15,7 +15,7 @@
 
 <p><%= setting_check_box :gravatar_enabled %></p>
 
-<p><%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid'], ["Retro", "retro"]], :blank => :label_none %></p>
+<p><%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid'], ["Retro", 'retro'], ["Mystery man", 'mm']], :blank => :label_none %></p>
 </div>
 
 <%= submit_tag l(:button_save) %>
--- a/app/views/settings/_repositories.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/settings/_repositories.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,41 +1,95 @@
 <% form_tag({:action => 'edit', :tab => 'repositories'}) do %>
 
+<fieldset class="box tabular settings enabled_scm">
+<legend><%= l(:setting_enabled_scm) %></legend>
+<table>
+  <tr>
+    <th></th>
+    <th><%= l(:text_scm_command)         %></th>
+    <th><%= l(:text_scm_command_version) %></th>
+  </tr>
+  <% Redmine::Scm::Base.all.collect do |choice| %>
+    <% scm_class = "Repository::#{choice}".constantize %>
+    <% text, value = (choice.is_a?(Array) ? choice : [choice, choice]) %>
+    <% setting = :enabled_scm %>
+    <tr>
+      <td class="scm_name">
+        <%= 
+          check_box_tag(
+              "settings[#{setting}][]",
+               value,
+               Setting.send(setting).include?(value))
+         %>
+        <%= text.to_s %>
+      </td>
+      <td>
+         <%=
+           image_tag(
+              (scm_class.scm_available ? 'true.png' : 'exclamation.png'),
+              :style => "vertical-align:bottom;"
+           )
+           %>
+          <%= scm_class.scm_command %>
+       </td>
+       <td>
+          <%= scm_class.scm_version_string %>
+       </td>
+     </tr>
+  <% end %>
+</table>
+<p class="scm_config">
+<%= l(:text_scm_config) %>
+</p>
+</fieldset>
+
 <div class="box tabular settings">
 <p><%= setting_check_box :autofetch_changesets %></p>
 
-<p><%= setting_check_box :sys_api_enabled, 
-				 :onclick => "if (this.checked) { Form.Element.enable('settings_sys_api_key'); } else { Form.Element.disable('settings_sys_api_key'); }" %></p>
+<p><%= setting_check_box :sys_api_enabled,
+                         :onclick =>
+                             "if (this.checked) { Form.Element.enable('settings_sys_api_key'); } else { Form.Element.disable('settings_sys_api_key'); }" %></p>
 
-<p><%= setting_text_field :sys_api_key, :size => 30,
-																				:id => 'settings_sys_api_key',
-																				:disabled => !Setting.sys_api_enabled?,
-																				:label => :setting_mail_handler_api_key %>
-  <%= link_to_function l(:label_generate_key), "if ($('settings_sys_api_key').disabled == false) { $('settings_sys_api_key').value = randomKey(20) }" %>
+<p><%= setting_text_field :sys_api_key,
+                          :size     => 30,
+                          :id       => 'settings_sys_api_key',
+                          :disabled => !Setting.sys_api_enabled?,
+                          :label    => :setting_mail_handler_api_key %>
+  <%= link_to_function l(:label_generate_key),
+                       "if ($('settings_sys_api_key').disabled == false) { $('settings_sys_api_key').value = randomKey(20) }" %>
 </p>
 
-<p><%= setting_multiselect(:enabled_scm, Redmine::Scm::Base.all) %></p>
-
 <p><%= setting_text_field :repositories_encodings, :size => 60 %><br />
 <em><%= l(:text_comma_separated) %></em></p>
 
 <p><%= setting_text_field :repository_log_display_limit, :size => 6 %></p>
 </div>
 
-<fieldset class="box tabular settings"><legend><%= l(:text_issues_ref_in_commit_messages) %></legend>
+<fieldset class="box tabular settings">
+<legend><%= l(:text_issues_ref_in_commit_messages) %></legend>
 <p><%= setting_text_field :commit_ref_keywords, :size => 30 %><br />
 <em><%= l(:text_comma_separated) %></em></p>
 
 <p><%= setting_text_field :commit_fix_keywords, :size => 30 %>
-&nbsp;<%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %>
-&nbsp;<%= l(:field_done_ratio) %>: <%= setting_select :commit_fix_done_ratio, (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, :blank => :label_no_change_option, :label => false %>
+&nbsp;<%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id,
+                                                          [["", 0]] +
+                                                              IssueStatus.find(:all).collect{
+                                                                 |status| [status.name, status.id.to_s]
+                                                              },
+                                                          :label => false %>
+&nbsp;<%= l(:field_done_ratio) %>: <%= setting_select :commit_fix_done_ratio,
+                                                       (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] },
+                                                       :blank => :label_no_change_option,
+                                                       :label => false %>
 <br /><em><%= l(:text_comma_separated) %></em></p>
 
 <p><%= setting_check_box :commit_logtime_enabled,
-         :onclick => "if (this.checked) { Form.Element.enable('settings_commit_logtime_activity_id'); } else { Form.Element.disable('settings_commit_logtime_activity_id'); }"%></p>
+                         :onclick =>
+                            "if (this.checked) { Form.Element.enable('settings_commit_logtime_activity_id'); } else { Form.Element.disable('settings_commit_logtime_activity_id'); }"%></p>
 
-<p><%= setting_select :commit_logtime_activity_id, 
-         [[l(:label_default), 0]] + TimeEntryActivity.shared.all.collect{|activity| [activity.name, activity.id.to_s]},
-         :disabled => !Setting.commit_logtime_enabled?%></p>
+<p><%= setting_select :commit_logtime_activity_id,
+                      [[l(:label_default), 0]] +
+                          TimeEntryActivity.shared.all.collect{|activity| [activity.name, activity.id.to_s]},
+                      :disabled => !Setting.commit_logtime_enabled?%></p>
 </fieldset>
 
 <%= submit_tag l(:button_save) %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/time_entry_reports/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 67
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/time_entry_reports
+END
--- a/app/views/time_entry_reports/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/time_entry_reports/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/time_entry_reports
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/time_entry_reports
 http://redmine.rubyforge.org/svn
 
 
 
-2010-10-07T15:51:09.349542Z
-4239
-edavis10
+2011-04-03T12:02:10.155680Z
+5298
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-d896f5cf56b2a3cd64887f239e584fdc
-2010-10-07T15:51:09.349542Z
-4239
-edavis10
+2011-06-06T13:18:33.000000Z
+372b261e8c1bb4a74da7c6ea149de24f
+2011-04-03T12:02:10.155680Z
+5298
+jplang
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-3569
+3218
 
 _report_criteria.rhtml
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 5fa73daf0a67b2a39fd10320bcd7ab45
 2010-10-05T16:07:17.015270Z
 4232
--- a/app/views/time_entry_reports/.svn/text-base/report.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/time_entry_reports/.svn/text-base/report.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -6,13 +6,10 @@
 
 <h2><%= l(:label_spent_time) %></h2>
 
-<% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %>
+<% form_tag({:controller => 'time_entry_reports', :action => 'report', :project_id => @project, :issue_id => @issue}, :method => :get, :id => 'query_form') do %>
   <% @criterias.each do |criteria| %>
     <%= hidden_field_tag 'criterias[]', criteria, :id => nil %>
   <% end %>
-  <%# TODO: get rid of the project_id field, that should already be in the URL %>
-  <%= hidden_field_tag('project_id', params[:project_id]) if @project %>
-  <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %>
   <%= render :partial => 'timelog/date_range' %>
 
   <p><%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'],
@@ -22,14 +19,11 @@
                                                         :onchange => "this.form.onsubmit();" %>
 
   <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}),
-                                                          :onchange => "this.form.onsubmit();",
+                                                          :onchange => "this.form.submit();",
                                                           :style => 'width: 200px',
                                                           :id => nil,
                                                           :disabled => (@criterias.length >= 3)) %>
-     <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns},
-                                           :method => :get,
-                                           :update => 'content'
-                                          }, :class => 'icon icon-reload' %></p>
+     <%= link_to l(:button_clear), {:project_id => @project, :issue_id => @issue, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns}, :class => 'icon icon-reload' %></p>
 <% end %>
 
 <% unless @criterias.empty? %>
--- a/app/views/time_entry_reports/report.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/time_entry_reports/report.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -6,13 +6,10 @@
 
 <h2><%= l(:label_spent_time) %></h2>
 
-<% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %>
+<% form_tag({:controller => 'time_entry_reports', :action => 'report', :project_id => @project, :issue_id => @issue}, :method => :get, :id => 'query_form') do %>
   <% @criterias.each do |criteria| %>
     <%= hidden_field_tag 'criterias[]', criteria, :id => nil %>
   <% end %>
-  <%# TODO: get rid of the project_id field, that should already be in the URL %>
-  <%= hidden_field_tag('project_id', params[:project_id]) if @project %>
-  <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %>
   <%= render :partial => 'timelog/date_range' %>
 
   <p><%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'],
@@ -22,14 +19,11 @@
                                                         :onchange => "this.form.onsubmit();" %>
 
   <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}),
-                                                          :onchange => "this.form.onsubmit();",
+                                                          :onchange => "this.form.submit();",
                                                           :style => 'width: 200px',
                                                           :id => nil,
                                                           :disabled => (@criterias.length >= 3)) %>
-     <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns},
-                                           :method => :get,
-                                           :update => 'content'
-                                          }, :class => 'icon icon-reload' %></p>
+     <%= link_to l(:button_clear), {:project_id => @project, :issue_id => @issue, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns}, :class => 'icon icon-reload' %></p>
 <% end %>
 
 <% unless @criterias.empty? %>
--- a/app/views/timelog/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/timelog/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,41 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 42
-/svn/!svn/ver/4466/trunk/app/views/timelog
-END
-_list.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4250/trunk/app/views/timelog/_list.rhtml
-END
-index.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4239/trunk/app/views/timelog/index.html.erb
-END
-index.api.rsb
 K 25
 svn:wc:ra_dav:version-url
 V 56
-/svn/!svn/ver/4466/trunk/app/views/timelog/index.api.rsb
+/svn/!svn/ver/5946/branches/1.2-stable/app/views/timelog
 END
-edit.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4248/trunk/app/views/timelog/edit.rhtml
-END
-_date_range.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/4235/trunk/app/views/timelog/_date_range.rhtml
-END
-show.api.rsb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4466/trunk/app/views/timelog/show.api.rsb
-END
--- a/app/views/timelog/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/timelog/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/timelog
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/timelog
 http://redmine.rubyforge.org/svn
 
 
 
-2010-12-04T17:43:39.823144Z
-4466
+2011-05-29T07:24:15.223638Z
+5946
 jplang
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-128d8975cacb0db79fc14a461544db09
-2010-10-12T15:55:21.984670Z
-4250
-edavis10
+2011-06-06T13:18:33.000000Z
+e88efaa6af38a128fb3f8cde3571a718
+2011-04-04T11:53:55.783646Z
+5314
+tmaruyama
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-1733
+2239
 
 index.html.erb
 file
@@ -66,11 +66,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-404d6b75c96def01a9a6bf86a6f58697
-2010-10-07T15:51:09.349542Z
-4239
-edavis10
+2011-06-06T13:18:33.000000Z
+775865919ae8ffd5a06f3de08441d55b
+2011-04-03T11:55:24.787027Z
+5297
+jplang
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-1421
+1207
 
 index.api.rsb
 file
@@ -100,10 +100,10 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-9faa66f4b89685010b3683f26c387512
-2010-12-04T17:43:39.823144Z
-4466
+2011-06-06T13:18:33.000000Z
+cd9d66ae656d5138a5c3631ce0d7f5aa
+2011-05-29T07:24:15.223638Z
+5946
 jplang
 has-props
 
@@ -126,7 +126,41 @@
 
 
 
-727
+805
+
+bulk_edit.rhtml
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+056802a752512ee4f3472a6a3755b65d
+2011-04-07T16:34:58.239484Z
+5354
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1724
 
 edit.rhtml
 file
@@ -134,7 +168,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 3bb82a2517a120b7a44add17f3369082
 2010-10-11T15:31:42.953914Z
 4248
@@ -168,11 +202,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-43628f95cde9503c20744c3b9fe9dfcd
-2010-10-06T18:23:45.014848Z
-4235
-edavis10
+2011-06-06T13:18:33.000000Z
+52538b1db45085cc19d89c18f8699478
+2011-04-03T12:02:56.333119Z
+5299
+jplang
 has-props
 
 
@@ -194,7 +228,7 @@
 
 
 
-1736
+2027
 
 show.api.rsb
 file
@@ -202,7 +236,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 5838cace900e781466a5826ba75b9f44
 2010-12-04T17:43:39.823144Z
 4466
--- a/app/views/timelog/.svn/text-base/_date_range.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/timelog/.svn/text-base/_date_range.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -2,27 +2,24 @@
 <legend onclick="toggleFieldset(this);"><%= l(:label_date_range) %></legend>
 <div>
 <p>
-<%= radio_button_tag 'period_type', '1', !@free_period %>
+<%= radio_button_tag 'period_type', '1', !@free_period, :onclick => 'Form.Element.disable("from");Form.Element.disable("to");Form.Element.enable("period");' %>
 <%= select_tag 'period', options_for_period_select(params[:period]),
-                         :onchange => 'this.form.onsubmit();',
-                         :onfocus => '$("period_type_1").checked = true;' %>
+                         :onchange => 'this.form.submit();',
+                         :onfocus => '$("period_type_1").checked = true;',
+                         :disabled => @free_period %>
 </p>
 <p>
-<%= radio_button_tag 'period_type', '2', @free_period %>
+<%= radio_button_tag 'period_type', '2', @free_period, :onclick => 'Form.Element.enable("from");Form.Element.enable("to");Form.Element.disable("period");' %>
 <span onclick="$('period_type_2').checked = true;">
-<%= l(:label_date_from_to, :start => (text_field_tag('from', @from, :size => 10) + calendar_for('from')),
-													 :end => (text_field_tag('to', @to, :size => 10) + calendar_for('to'))) %>
+<%= l(:label_date_from_to, :start => (text_field_tag('from', @from, :size => 10, :disabled => !@free_period) + calendar_for('from')),
+													 :end => (text_field_tag('to', @to, :size => 10, :disabled => !@free_period) + calendar_for('to'))) %>
 </span>
 </p>
 </div>
 </fieldset>
 <p class="buttons">
-	<%= link_to_remote l(:button_apply), 
-	                   { :url => { },
-	                     :update => "content",
-                            :with => "Form.serialize('query_form')",
-                            :method => :get
-	                   }, :class => 'icon icon-checked' %>
+	<%= link_to_function l(:button_apply), '$("query_form").submit()', :class => 'icon icon-checked' %>
+  <%= link_to l(:button_clear), {:controller => controller_name, :action => action_name, :project_id => @project, :issue_id => @issue}, :class => 'icon icon-reload' %>
 </p>
 
 <div class="tabs">
--- a/app/views/timelog/.svn/text-base/_list.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/timelog/.svn/text-base/_list.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,6 +1,14 @@
+<% form_tag({}) do -%>	
+<%= hidden_field_tag 'back_url', url_for(params) %>
 <table class="list time-entries">
 <thead>
 <tr>
+<th class="checkbox hide-when-print">
+  <%= link_to image_tag('toggle_check.png'), 
+    {}, 
+    :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;', 
+    :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
+</th>
 <%= sort_header_tag('spent_on', :caption => l(:label_date), :default_order => 'desc') %>
 <%= sort_header_tag('user', :caption => l(:label_member)) %>
 <%= sort_header_tag('activity', :caption => l(:label_activity)) %>
@@ -13,7 +21,8 @@
 </thead>
 <tbody>
 <% entries.each do |entry| -%>
-<tr class="time-entry <%= cycle("odd", "even") %>">
+<tr class="time-entry <%= cycle("odd", "even") %> hascontextmenu">
+<td class="checkbox hide-when-print"><%= check_box_tag("ids[]", entry.id, false, :id => nil) %></td>
 <td class="spent_on"><%= format_date(entry.spent_on) %></td>
 <td class="user"><%=h entry.user %></td>
 <td class="activity"><%=h entry.activity %></td>
@@ -39,3 +48,6 @@
 <% end -%>
 </tbody>
 </table>
+<% end -%>
+
+<%= context_menu time_entries_context_menu_path %>
--- a/app/views/timelog/.svn/text-base/index.api.rsb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/timelog/.svn/text-base/index.api.rsb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,4 +1,4 @@
-api.array :time_entries do
+api.array :time_entries, api_meta(:total_count => @entry_count, :offset => @offset, :limit => @limit) do
   @entries.each do |time_entry|
     api.time_entry do
       api.id time_entry.id
--- a/app/views/timelog/.svn/text-base/index.html.erb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/timelog/.svn/text-base/index.html.erb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -6,11 +6,7 @@
 
 <h2><%= l(:label_spent_time) %></h2>
 
-<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %>
-<%# TOOD: remove the project_id and issue_id hidden fields, that information is
-already in the URI %>
-<%= hidden_field_tag('project_id', params[:project_id]) if @project %>
-<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %>
+<% form_tag({:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue}, :method => :get, :id => 'query_form') do %>
 <%= render :partial => 'date_range' %>
 <% end %>
 
--- a/app/views/timelog/_date_range.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/timelog/_date_range.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -2,27 +2,24 @@
 <legend onclick="toggleFieldset(this);"><%= l(:label_date_range) %></legend>
 <div>
 <p>
-<%= radio_button_tag 'period_type', '1', !@free_period %>
+<%= radio_button_tag 'period_type', '1', !@free_period, :onclick => 'Form.Element.disable("from");Form.Element.disable("to");Form.Element.enable("period");' %>
 <%= select_tag 'period', options_for_period_select(params[:period]),
-                         :onchange => 'this.form.onsubmit();',
-                         :onfocus => '$("period_type_1").checked = true;' %>
+                         :onchange => 'this.form.submit();',
+                         :onfocus => '$("period_type_1").checked = true;',
+                         :disabled => @free_period %>
 </p>
 <p>
-<%= radio_button_tag 'period_type', '2', @free_period %>
+<%= radio_button_tag 'period_type', '2', @free_period, :onclick => 'Form.Element.enable("from");Form.Element.enable("to");Form.Element.disable("period");' %>
 <span onclick="$('period_type_2').checked = true;">
-<%= l(:label_date_from_to, :start => (text_field_tag('from', @from, :size => 10) + calendar_for('from')),
-													 :end => (text_field_tag('to', @to, :size => 10) + calendar_for('to'))) %>
+<%= l(:label_date_from_to, :start => (text_field_tag('from', @from, :size => 10, :disabled => !@free_period) + calendar_for('from')),
+													 :end => (text_field_tag('to', @to, :size => 10, :disabled => !@free_period) + calendar_for('to'))) %>
 </span>
 </p>
 </div>
 </fieldset>
 <p class="buttons">
-	<%= link_to_remote l(:button_apply), 
-	                   { :url => { },
-	                     :update => "content",
-                            :with => "Form.serialize('query_form')",
-                            :method => :get
-	                   }, :class => 'icon icon-checked' %>
+	<%= link_to_function l(:button_apply), '$("query_form").submit()', :class => 'icon icon-checked' %>
+  <%= link_to l(:button_clear), {:controller => controller_name, :action => action_name, :project_id => @project, :issue_id => @issue}, :class => 'icon icon-reload' %>
 </p>
 
 <div class="tabs">
--- a/app/views/timelog/_list.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/timelog/_list.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,6 +1,14 @@
+<% form_tag({}) do -%>	
+<%= hidden_field_tag 'back_url', url_for(params) %>
 <table class="list time-entries">
 <thead>
 <tr>
+<th class="checkbox hide-when-print">
+  <%= link_to image_tag('toggle_check.png'), 
+    {}, 
+    :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;', 
+    :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
+</th>
 <%= sort_header_tag('spent_on', :caption => l(:label_date), :default_order => 'desc') %>
 <%= sort_header_tag('user', :caption => l(:label_member)) %>
 <%= sort_header_tag('activity', :caption => l(:label_activity)) %>
@@ -13,7 +21,8 @@
 </thead>
 <tbody>
 <% entries.each do |entry| -%>
-<tr class="time-entry <%= cycle("odd", "even") %>">
+<tr class="time-entry <%= cycle("odd", "even") %> hascontextmenu">
+<td class="checkbox hide-when-print"><%= check_box_tag("ids[]", entry.id, false, :id => nil) %></td>
 <td class="spent_on"><%= format_date(entry.spent_on) %></td>
 <td class="user"><%=h entry.user %></td>
 <td class="activity"><%=h entry.activity %></td>
@@ -39,3 +48,6 @@
 <% end -%>
 </tbody>
 </table>
+<% end -%>
+
+<%= context_menu time_entries_context_menu_path %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/timelog/bulk_edit.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,49 @@
+<h2><%= l(:label_bulk_edit_selected_time_entries) %></h2>
+
+<ul><%= @time_entries.collect {|i| content_tag('li', link_to(h("#{i.spent_on.strftime("%Y-%m-%d")} -- #{i.project}:  #{l(:label_f_hour_plural, :value => i.hours)}"), { :action => 'edit', :id => i }))} %></ul>
+
+<% form_tag(:action => 'bulk_update') do %>
+<%= @time_entries.collect {|i| hidden_field_tag('ids[]', i.id)}.join %>
+<div class="box tabular">
+  <fieldset class="attributes">
+  <legend><%= l(:label_change_properties) %></legend>
+  <div>
+    <p>
+      <label><%= l(:field_issue) %></label>
+      <%= text_field :time_entry, :issue_id, :size => 6 %>
+    </p>
+
+    <p>
+      <label><%= l(:field_spent_on) %></label>
+      <%= text_field :time_entry, :spent_on, :size => 10 %><%= calendar_for('time_entry_spent_on') %>
+    </p>
+
+    <p>
+      <label><%= l(:field_hours) %></label>
+      <%= text_field :time_entry, :hours, :size => 6 %>
+    </p>
+
+    <% if @available_activities.any? %>
+    <p>
+      <label><%= l(:field_activity) %></label>
+      <%= select_tag('time_entry[activity_id]', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(@available_activities, :id, :name)) %>
+    </p>
+    <% end %>
+
+    <p>
+      <label><%= l(:field_comments) %></label>
+      <%= text_field(:time_entry, :comments, :size => 100) %>
+    </p>
+
+    <% @custom_fields.each do |custom_field| %>
+      <p><label><%= h(custom_field.name) %></label> <%= custom_field_tag_for_bulk_edit('time_entry', custom_field, @projects) %></p>
+    <% end %>
+
+    <%= call_hook(:view_time_entries_bulk_edit_details_bottom, { :time_entries => @time_entries }) %>
+  </div>
+
+  </fieldset>
+</div>
+
+<p><%= submit_tag l(:button_submit) %></p>
+<% end %>
--- a/app/views/timelog/index.api.rsb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/timelog/index.api.rsb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,4 +1,4 @@
-api.array :time_entries do
+api.array :time_entries, api_meta(:total_count => @entry_count, :offset => @offset, :limit => @limit) do
   @entries.each do |time_entry|
     api.time_entry do
       api.id time_entry.id
--- a/app/views/timelog/index.html.erb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/timelog/index.html.erb	Mon Jun 06 14:41:04 2011 +0100
@@ -6,11 +6,7 @@
 
 <h2><%= l(:label_spent_time) %></h2>
 
-<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %>
-<%# TOOD: remove the project_id and issue_id hidden fields, that information is
-already in the URI %>
-<%= hidden_field_tag('project_id', params[:project_id]) if @project %>
-<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %>
+<% form_tag({:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue}, :method => :get, :id => 'query_form') do %>
 <%= render :partial => 'date_range' %>
 <% end %>
 
--- a/app/views/trackers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/trackers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/trackers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/trackers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 952031a6216d1b67897c30936b8c656c
 2010-02-15T16:41:27.289923Z
 3437
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 0b8a4f0aead4d21c20c9cc8dd29141e5
 2009-12-12T15:23:22.060140Z
 3162
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 ac4b0e11130741048a5f7c7405bff3de
 2009-12-09T11:03:55.646494Z
 3146
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 cf313c286d40c5c44da29ad261b01421
 2009-12-09T11:03:55.646494Z
 3146
--- a/app/views/users/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/users/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,77 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 40
-/svn/!svn/ver/4900/trunk/app/views/users
-END
-_general.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4249/trunk/app/views/users/_general.rhtml
-END
-_memberships.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4508/trunk/app/views/users/_memberships.rhtml
-END
-_groups.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 54
-/svn/!svn/ver/4230/trunk/app/views/users/_groups.rhtml
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/users
 END
-new.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4229/trunk/app/views/users/new.html.erb
-END
-_mail_notifications.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/4497/trunk/app/views/users/_mail_notifications.html.erb
-END
-index.api.rsb
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4489/trunk/app/views/users/index.api.rsb
-END
-show.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4382/trunk/app/views/users/show.rhtml
-END
-_form.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4493/trunk/app/views/users/_form.rhtml
-END
-_preferences.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4900/trunk/app/views/users/_preferences.html.erb
-END
-edit.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4729/trunk/app/views/users/edit.rhtml
-END
-index.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4729/trunk/app/views/users/index.rhtml
-END
-show.api.rsb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4486/trunk/app/views/users/show.api.rsb
-END
--- a/app/views/users/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/users/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/users
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/users
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-21T09:53:29.844413Z
-4900
+2011-03-20T11:49:29.794817Z
+5172
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 27e27971f72ee72e276157b29606a4f8
 2010-10-11T20:34:33.692909Z
 4249
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 82d8afa73a30d32a1df6dbf0a6ec9ccc
 2010-12-12T21:21:57.860671Z
 4508
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 f19cc195f524459954b4b4be5bfdcff5
 2010-09-30T18:22:46.611444Z
 4230
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 488647d93840c1ffa5834cc45817c1c3
 2010-09-29T16:00:45.891709Z
 4229
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 e6086313266e733c482de5431e85f7a1
 2010-12-12T14:25:23.262992Z
 4497
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 2232eeac9e0dea5001f5c7dbd9156a79
 2010-12-11T13:13:49.013705Z
 4489
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 1914aa4c363a1dab0cdba1e49ccc13ff
 2010-11-07T14:15:01.891476Z
 4382
@@ -270,10 +270,10 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-35c46993d584ac75dd129b95ac411a10
-2010-12-12T13:39:55.171678Z
-4493
+2011-06-06T13:18:33.000000Z
+b072a682fc838af70db88ade37e24f81
+2011-03-20T11:49:29.794817Z
+5172
 jplang
 has-props
 
@@ -296,7 +296,7 @@
 
 
 
-1644
+1824
 
 _preferences.html.erb
 file
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 819ceb2599cdb65121387da777ec7454
 2011-02-21T09:53:29.844413Z
 4900
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 334693af38532eb4e5c8801223e2c718
 2011-01-16T15:23:11.666065Z
 4729
@@ -372,10 +372,10 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-82f2de0e0ade1e3dc2c39d3415d5580c
-2011-01-16T15:23:11.666065Z
-4729
+2011-06-06T13:18:33.000000Z
+18ca651de1074f94a94da9b8385ce0e6
+2011-03-16T18:23:51.946930Z
+5151
 jplang
 has-props
 
@@ -398,7 +398,7 @@
 
 
 
-2319
+2653
 
 show.api.rsb
 file
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 5af24df58230f005be3a6814c6f53e33
 2010-12-11T10:19:11.273304Z
 4486
--- a/app/views/users/.svn/text-base/_form.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/users/.svn/text-base/_form.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,6 +1,9 @@
 <%= error_messages_for 'user' %>
 
+<div id="user_form">
 <!--[form:user]-->
+<div class="splitcontentleft">
+<h3><%=l(:label_information_plural)%></h3>
 <div class="box tabular">
 <p><%= f.text_field :login, :required => true, :size => 25  %></p>
 <p><%= f.text_field :firstname, :required => true %></p>
@@ -19,8 +22,8 @@
 <%= call_hook(:view_users_form, :user => @user, :form => f) %>
 </div>
 
+<h3><%=l(:label_authentication)%></h3>
 <div class="box tabular">
-<h3><%=l(:label_authentication)%></h3>
 <% unless @auth_sources.empty? %>
 <p><%= f.select :auth_source_id, ([[l(:label_internal), ""]] + @auth_sources.collect { |a| [a.name, a.id] }), {}, :onchange => "if (this.value=='') {Element.show('password_fields');} else {Element.hide('password_fields');}" %></p>
 <% end %>
@@ -30,14 +33,19 @@
 <p><%= f.password_field :password_confirmation, :required => true, :size => 25  %></p>
 </div>
 </div>
+</div>
 
+<div class="splitcontentright">
+<h3><%=l(:field_mail_notification)%></h3>
 <div class="box">
-<h3><%=l(:field_mail_notification)%></h3>
 <%= render :partial => 'users/mail_notifications' %>
 </div>
 
+<h3><%=l(:label_preferences)%></h3>
 <div class="box tabular">
-<h3><%=l(:label_preferences)%></h3>
 <%= render :partial => 'users/preferences' %>
 </div>
+</div>
+</div>
+<div style="clear:left;"></div>
 <!--[eoform:user]-->
--- a/app/views/users/.svn/text-base/index.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/users/.svn/text-base/index.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -8,9 +8,16 @@
 <fieldset><legend><%= l(:label_filter_plural) %></legend>
 <label><%= l(:field_status) %>:</label>
 <%= select_tag 'status', users_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;"  %>
+
+<% if @groups.present? %>
+<label><%= l(:label_group) %>:</label>
+<%= select_tag 'group_id', '<option></option>' + options_from_collection_for_select(@groups, :id, :name, params[:group_id].to_i), :onchange => "this.form.submit(); return false;"  %>
+<% end %>
+
 <label><%= l(:label_user) %>:</label>
 <%= text_field_tag 'name', params[:name], :size => 30 %>
 <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
+<%= link_to l(:button_clear), users_path, :class => 'icon icon-reload' %>
 </fieldset>
 <% end %>
 &nbsp;
--- a/app/views/users/_form.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/users/_form.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -3,7 +3,10 @@
 
 <%= error_messages_for 'user' %>
 
+<div id="user_form">
 <!--[form:user]-->
+<div class="splitcontentleft">
+<h3><%=l(:label_information_plural)%></h3>
 <div class="box tabular">
 <p><%= f.text_field :login, :required => true, :size => 25  %></p>
 <p><%= f.text_field :firstname, :required => true %></p>
@@ -49,8 +52,8 @@
 
 
 
+<h3><%=l(:label_authentication)%></h3>
 <div class="box tabular">
-<h3><%=l(:label_authentication)%></h3>
 <% unless @auth_sources.empty? %>
 <p><%= f.select :auth_source_id, ([[l(:label_internal), ""]] + @auth_sources.collect { |a| [a.name, a.id] }), {}, :onchange => "if (this.value=='') {Element.show('password_fields');} else {Element.hide('password_fields');}" %></p>
 <% end %>
@@ -60,14 +63,19 @@
 <p><%= f.password_field :password_confirmation, :required => true, :size => 25  %></p>
 </div>
 </div>
+</div>
 
+<div class="splitcontentright">
+<h3><%=l(:field_mail_notification)%></h3>
 <div class="box">
-<h3><%=l(:field_mail_notification)%></h3>
 <%= render :partial => 'users/mail_notifications' %>
 </div>
 
+<h3><%=l(:label_preferences)%></h3>
 <div class="box tabular">
-<h3><%=l(:label_preferences)%></h3>
 <%= render :partial => 'users/preferences' %>
 </div>
+</div>
+</div>
+<div style="clear:left;"></div>
 <!--[eoform:user]-->
--- a/app/views/users/index.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/users/index.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -8,9 +8,16 @@
 <fieldset><legend><%= l(:label_filter_plural) %></legend>
 <label><%= l(:field_status) %>:</label>
 <%= select_tag 'status', users_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;"  %>
+
+<% if @groups.present? %>
+<label><%= l(:label_group) %>:</label>
+<%= select_tag 'group_id', '<option></option>' + options_from_collection_for_select(@groups, :id, :name, params[:group_id].to_i), :onchange => "this.form.submit(); return false;"  %>
+<% end %>
+
 <label><%= l(:label_user) %>:</label>
 <%= text_field_tag 'name', params[:name], :size => 30 %>
 <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
+<%= link_to l(:button_clear), users_path, :class => 'icon icon-reload' %>
 </fieldset>
 <% end %>
 &nbsp;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/versions/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/versions
+END
--- a/app/views/versions/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/versions/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/versions
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/versions
 http://redmine.rubyforge.org/svn
 
 
 
-2010-10-29T22:40:02.439890Z
-4307
-jbbarth
+2011-04-29T12:18:00.028904Z
+5600
+jplang
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 a50c2acc01c8d25be8e2c8cd082a2272
 2010-09-11T14:00:23.147923Z
 4082
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 d53190d87d1c24abce0fc949f816a706
 2010-09-17T15:55:08.377083Z
 4097
@@ -100,11 +100,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-ae897448ea943e1856633a3683c17a79
-2010-10-29T22:40:02.439890Z
-4307
-jbbarth
+2011-06-06T13:18:33.000000Z
+8bc9f038d11ff8852a4188b5aaf95621
+2011-04-29T12:18:00.028904Z
+5600
+jplang
 has-props
 
 
@@ -126,7 +126,7 @@
 
 
 
-1993
+2228
 
 _form.rhtml
 file
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 acf01b501fb1e345fd7abf572233ead9
 2009-12-06T10:28:20.099964Z
 3123
@@ -168,11 +168,11 @@
 
 
 
-2011-03-03T11:05:10.000000Z
-b5364f2d6f4cb92d1f747cd3dda5098f
-2010-09-17T16:11:43.740142Z
-4098
-edavis10
+2011-06-06T13:18:33.000000Z
+c7f3d61502256cfc878dce17dba3360c
+2011-03-21T20:08:16.105748Z
+5187
+jplang
 has-props
 
 
@@ -194,7 +194,7 @@
 
 
 
-1350
+1382
 
 _overview.rhtml
 file
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 6e68f24a6d6571388df3018bc915d37a
 2009-11-15T15:22:55.021661Z
 3064
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 85ddc3502659176221220bebef002d6c
 2010-09-17T15:55:08.377083Z
 4097
--- a/app/views/versions/.svn/text-base/_issue_counts.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/versions/.svn/text-base/_issue_counts.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -19,8 +19,8 @@
                                         :action => 'index',
                                         :project_id => version.project,
                                         :set_filter => 1,
-                                        :fixed_version_id => version,
-                                        "#{criteria}_id" => count[:group]} %>
+                                        :status_id => '*',
+                                        :fixed_version_id => version}.merge("#{criteria}_id".to_sym => count[:group]) %>
         </td>
         <td width="240px">
             <%= progress_bar((count[:closed].to_f / count[:total])*100, 
--- a/app/views/versions/.svn/text-base/show.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/versions/.svn/text-base/show.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -6,6 +6,10 @@
 
 <h2><%= h(@version.name) %></h2>
 
+<div id="roadmap">
+<%= render :partial => 'versions/overview', :locals => {:version => @version} %>
+<%= render(:partial => "wiki/content", :locals => {:content => @version.wiki_page.content}) if @version.wiki_page %>
+
 <div id="version-summary">
 <% if @version.estimated_hours > 0 || User.current.allowed_to?(:view_time_entries, @project) %>
 <fieldset><legend><%= l(:label_time_tracking) %></legend>
@@ -29,18 +33,19 @@
 </div>
 </div>
 
-<div id="roadmap">
-<%= render :partial => 'versions/overview', :locals => {:version => @version} %>
-<%= render(:partial => "wiki/content", :locals => {:content => @version.wiki_page.content}) if @version.wiki_page %>
-
 <% if @issues.present? %>
-<fieldset class="related-issues"><legend><%= l(:label_related_issues) %></legend>
-<ul>
-<% @issues.each do |issue| -%>
-    <li><%= link_to_issue(issue) %></li>
-<% end -%>
-</ul>
-</fieldset>
+<% form_tag({}) do -%>
+  <table class="list related-issues">
+  <caption><%= l(:label_related_issues) %></caption>
+  <%- @issues.each do |issue| -%>
+    <tr class="hascontextmenu">
+      <td class="checkbox"><%= check_box_tag 'ids[]', issue.id %></td>
+      <td><%= link_to_issue(issue, :project => (@project != issue.project)) %></td>
+    </tr>
+  <% end %>
+  </table>
+<% end %>
+<%= context_menu issues_context_menu_path %>
 <% end %>
 </div>
 
--- a/app/views/versions/_issue_counts.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/versions/_issue_counts.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -19,8 +19,8 @@
                                         :action => 'index',
                                         :project_id => version.project,
                                         :set_filter => 1,
-                                        :fixed_version_id => version,
-                                        "#{criteria}_id" => count[:group]} %>
+                                        :status_id => '*',
+                                        :fixed_version_id => version}.merge("#{criteria}_id".to_sym => count[:group]) %>
         </td>
         <td width="240px">
             <%= progress_bar((count[:closed].to_f / count[:total])*100, 
--- a/app/views/versions/show.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/versions/show.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -6,6 +6,10 @@
 
 <h2><%= h(@version.name) %></h2>
 
+<div id="roadmap">
+<%= render :partial => 'versions/overview', :locals => {:version => @version} %>
+<%= render(:partial => "wiki/content", :locals => {:content => @version.wiki_page.content}) if @version.wiki_page %>
+
 <div id="version-summary">
 <% if @version.estimated_hours > 0 || User.current.allowed_to?(:view_time_entries, @project) %>
 <fieldset><legend><%= l(:label_time_tracking) %></legend>
@@ -29,18 +33,19 @@
 </div>
 </div>
 
-<div id="roadmap">
-<%= render :partial => 'versions/overview', :locals => {:version => @version} %>
-<%= render(:partial => "wiki/content", :locals => {:content => @version.wiki_page.content}) if @version.wiki_page %>
-
 <% if @issues.present? %>
-<fieldset class="related-issues"><legend><%= l(:label_related_issues) %></legend>
-<ul>
-<% @issues.each do |issue| -%>
-    <li><%= link_to_issue(issue) %></li>
-<% end -%>
-</ul>
-</fieldset>
+<% form_tag({}) do -%>
+  <table class="list related-issues">
+  <caption><%= l(:label_related_issues) %></caption>
+  <%- @issues.each do |issue| -%>
+    <tr class="hascontextmenu">
+      <td class="checkbox"><%= check_box_tag 'ids[]', issue.id %></td>
+      <td><%= link_to_issue(issue, :project => (@project != issue.project)) %></td>
+    </tr>
+  <% end %>
+  </table>
+<% end %>
+<%= context_menu issues_context_menu_path %>
 <% end %>
 </div>
 
--- a/app/views/watchers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/watchers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/watchers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/watchers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 7ece4fb161c765ac7e63c30883733d99
 2010-03-13T17:45:41.194736Z
 3579
--- a/app/views/welcome/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/welcome/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/welcome
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/welcome
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 df32441c6802182ffb9a205c97ec8f3b
 2010-08-27T14:05:54.014502Z
 4047
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 dbe04ed0b787a5470a99a1f286c0685e
 2009-01-27T17:27:50.299725Z
 2319
--- a/app/views/wiki/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/wiki/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,83 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 39
-/svn/!svn/ver/4953/trunk/app/views/wiki
-END
-export_multiple.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/3026/trunk/app/views/wiki/export_multiple.rhtml
-END
-index.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4290/trunk/app/views/wiki/index.html.erb
-END
-show.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4303/trunk/app/views/wiki/show.rhtml
-END
-export.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3026/trunk/app/views/wiki/export.rhtml
-END
-history.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/4740/trunk/app/views/wiki/history.rhtml
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/wiki
 END
-edit.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4303/trunk/app/views/wiki/edit.rhtml
-END
-rename.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4375/trunk/app/views/wiki/rename.rhtml
-END
-_sidebar.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4296/trunk/app/views/wiki/_sidebar.rhtml
-END
-diff.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4953/trunk/app/views/wiki/diff.rhtml
-END
-_content.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/897/trunk/app/views/wiki/_content.rhtml
-END
-annotate.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4296/trunk/app/views/wiki/annotate.rhtml
-END
-date_index.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4303/trunk/app/views/wiki/date_index.html.erb
-END
-destroy.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4296/trunk/app/views/wiki/destroy.rhtml
-END
--- a/app/views/wiki/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/wiki/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/wiki
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/wiki
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-27T12:50:47.369941Z
-4953
+2011-04-12T19:22:44.432354Z
+5443
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 071f00658656d063a029ff9efcfda553
 2009-11-11T11:10:03.406528Z
 3026
@@ -66,11 +66,11 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-d47125b655bae6af3af29514ca23ec15
-2010-10-25T16:16:46.309025Z
-4290
-edavis10
+2011-06-06T13:18:33.000000Z
+5acf1f1f7e7549bce688ef4c07bb3485
+2011-03-21T18:10:04.628386Z
+5186
+jplang
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-894
+921
 
 show.rhtml
 file
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 1ebc19864533a067dc46a3bc6f3e9b22
 2010-10-28T21:25:38.778234Z
 4303
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 2ec7fba790578844437bd62bf95a9856
 2009-11-11T11:10:03.406528Z
 3026
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 032cfe657db049a60473a31d2d0391a2
 2011-01-22T13:21:24.424880Z
 4740
@@ -202,11 +202,11 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-cc9828c34998619dbd4b4925bf511be8
-2010-10-28T21:25:38.778234Z
-4303
-edavis10
+2011-06-06T13:18:33.000000Z
+caa64ac229cf303f19f5e0380bb3f7e7
+2011-04-12T19:22:44.432354Z
+5443
+jplang
 has-props
 
 
@@ -228,7 +228,7 @@
 
 
 
-1282
+1311
 
 rename.rhtml
 file
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 b45d32467f7beb06dbe055ecf7fdb247
 2010-11-06T14:30:32.528294Z
 4375
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 619db9d2a58a28c4b5c4baeaee88cc41
 2010-10-27T16:27:06.240747Z
 4296
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 954230b09809d40bbd6f6514fb1fcc59
 2011-02-27T12:50:47.369941Z
 4953
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 8705c97ebf1405603afbbd8614ee9d2b
 2007-11-12T14:36:33.182682Z
 897
@@ -372,7 +372,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 36a354ea1a705ec4843972e520ce2bd6
 2010-10-27T16:27:06.240747Z
 4296
@@ -406,11 +406,11 @@
 
 
 
-2011-03-03T11:05:11.000000Z
-5edb3698546c4aad9913945d39005221
-2010-10-28T21:25:38.778234Z
-4303
-edavis10
+2011-06-06T13:18:33.000000Z
+101923ebcb5dcf22fb0fe6083ed0f033
+2011-03-21T18:10:04.628386Z
+5186
+jplang
 has-props
 
 
@@ -432,7 +432,7 @@
 
 
 
-1117
+1119
 
 destroy.rhtml
 file
@@ -440,7 +440,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 5f032c821889bfc8bf9e6eeca1023f58
 2010-10-27T16:27:06.240747Z
 4296
--- a/app/views/wiki/.svn/text-base/date_index.html.erb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/wiki/.svn/text-base/date_index.html.erb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -23,11 +23,11 @@
 
 <% unless @pages.empty? %>
 <% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
+	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
 	<%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
 <% end %>
 <% end %>
 
 <% content_for :header_tags do %>
-<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
+<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
 <% end %>
--- a/app/views/wiki/.svn/text-base/edit.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/wiki/.svn/text-base/edit.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -23,6 +23,7 @@
 
 <% content_for :header_tags do %>
   <%= stylesheet_link_tag 'scm' %>
+  <%= robot_exclusion_tag %>
 <% end %>
 
 <% html_title @page.pretty_title %>
--- a/app/views/wiki/.svn/text-base/index.html.erb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/wiki/.svn/text-base/index.html.erb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -8,7 +8,7 @@
 <p class="nodata"><%= l(:label_no_data) %></p>
 <% end %>
 
-<%= render_page_hierarchy(@pages_by_parent_id) %>
+<%= render_page_hierarchy(@pages_by_parent_id, nil, :timestamp => true) %>
 
 <% content_for :sidebar do %>
   <%= render :partial => 'sidebar' %>
@@ -16,11 +16,11 @@
 
 <% unless @pages.empty? %>
 <% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
+	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
 	<%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
 <% end %>
 <% end %>
 
 <% content_for :header_tags do %>
-<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
+<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
 <% end %>
--- a/app/views/wiki/date_index.html.erb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/wiki/date_index.html.erb	Mon Jun 06 14:41:04 2011 +0100
@@ -23,11 +23,11 @@
 
 <% unless @pages.empty? %>
 <% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
+	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
 	<%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
 <% end %>
 <% end %>
 
 <% content_for :header_tags do %>
-<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
+<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
 <% end %>
--- a/app/views/wiki/edit.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/wiki/edit.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -23,6 +23,7 @@
 
 <% content_for :header_tags do %>
   <%= stylesheet_link_tag 'scm' %>
+  <%= robot_exclusion_tag %>
 <% end %>
 
 <% html_title @page.pretty_title %>
--- a/app/views/wiki/index.html.erb	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/wiki/index.html.erb	Mon Jun 06 14:41:04 2011 +0100
@@ -8,7 +8,7 @@
 <p class="nodata"><%= l(:label_no_data) %></p>
 <% end %>
 
-<%= render_page_hierarchy(@pages_by_parent_id) %>
+<%= render_page_hierarchy(@pages_by_parent_id, nil, :timestamp => true) %>
 
 <% content_for :sidebar do %>
   <%= render :partial => 'sidebar' %>
@@ -16,11 +16,11 @@
 
 <% unless @pages.empty? %>
 <% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
+	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
 	<%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
 <% end %>
 <% end %>
 
 <% content_for :header_tags do %>
-<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
+<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
 <% end %>
--- a/app/views/wikis/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/wikis/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/wikis
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/wikis
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:14:59.000000Z
 6edeee3130b12027d4d8dbfeca809abb
 2007-09-14T11:34:08.234701Z
 725
--- a/app/views/workflows/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/workflows/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,35 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4895/trunk/app/views/workflows
+V 58
+/svn/!svn/ver/5878/branches/1.2-stable/app/views/workflows
 END
-copy.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3154/trunk/app/views/workflows/copy.rhtml
-END
-_action_menu.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/3154/trunk/app/views/workflows/_action_menu.rhtml
-END
-edit.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4895/trunk/app/views/workflows/edit.rhtml
-END
-index.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/4890/trunk/app/views/workflows/index.rhtml
-END
-_form.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4895/trunk/app/views/workflows/_form.html.erb
-END
--- a/app/views/workflows/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/workflows/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/app/views/workflows
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/workflows
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-20T15:38:07.840581Z
-4895
+2011-03-30T16:56:52.761894Z
+5264
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 d7c2b6481788394f541fe6af5dadd598
 2009-12-12T10:06:07.860865Z
 3154
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:10.000000Z
+2011-06-06T13:14:59.000000Z
 2457a85600aa051fcf9edf06010e6fcc
 2009-12-12T10:06:07.860865Z
 3154
@@ -100,10 +100,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-f52bc187d855a23aea0bc36061a8d179
-2011-02-20T15:38:07.840581Z
-4895
+2011-06-06T13:18:33.000000Z
+3d867dc08990e317641df2e09eb711b8
+2011-03-30T16:56:52.761894Z
+5264
 jplang
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-2211
+2179
 
 index.rhtml
 file
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 0943677a780ac0d9c0ba1a7000148f13
 2011-02-20T13:13:10.623157Z
 4890
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 a2442c53d709a008d9026746d5f3cfd3
 2011-02-20T15:38:07.840581Z
 4895
--- a/app/views/workflows/.svn/text-base/edit.rhtml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/workflows/.svn/text-base/edit.rhtml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -28,7 +28,7 @@
       <%= render :partial => 'form', :locals => {:name => 'always', :workflows => @workflows['always']} %>
       
       <fieldset class="collapsible" style="padding: 0; margin-top: 0.5em;">
-        <legend onclick="toggleFieldset(this);">Autorisations supplémentaires lorsque l'utilisateur a créé la demande</legend>
+        <legend onclick="toggleFieldset(this);"><%= l(:label_additional_workflow_transitions_for_author) %></legend>
         <div id="author_workflows" style="margin: 0.5em 0 0.5em 0;">
           <%= render :partial => 'form', :locals => {:name => 'author', :workflows => @workflows['author']} %>
         </div>
@@ -36,7 +36,7 @@
       <%= javascript_tag "hideFieldset($('author_workflows'))" unless @workflows['author'].present? %>
       
       <fieldset class="collapsible" style="padding: 0;">
-        <legend onclick="toggleFieldset(this);">Autorisations supplémentaires lorsque la demande est assignée à l'utilisateur</legend>
+        <legend onclick="toggleFieldset(this);"><%= l(:label_additional_workflow_transitions_for_assignee) %></legend>
         <div id="assignee_workflows" style="margin: 0.5em 0 0.5em 0;">
       <%= render :partial => 'form', :locals => {:name => 'assignee', :workflows => @workflows['assignee']} %>
         </div>
--- a/app/views/workflows/edit.rhtml	Thu Mar 03 15:08:45 2011 +0000
+++ b/app/views/workflows/edit.rhtml	Mon Jun 06 14:41:04 2011 +0100
@@ -28,7 +28,7 @@
       <%= render :partial => 'form', :locals => {:name => 'always', :workflows => @workflows['always']} %>
       
       <fieldset class="collapsible" style="padding: 0; margin-top: 0.5em;">
-        <legend onclick="toggleFieldset(this);">Autorisations supplémentaires lorsque l'utilisateur a créé la demande</legend>
+        <legend onclick="toggleFieldset(this);"><%= l(:label_additional_workflow_transitions_for_author) %></legend>
         <div id="author_workflows" style="margin: 0.5em 0 0.5em 0;">
           <%= render :partial => 'form', :locals => {:name => 'author', :workflows => @workflows['author']} %>
         </div>
@@ -36,7 +36,7 @@
       <%= javascript_tag "hideFieldset($('author_workflows'))" unless @workflows['author'].present? %>
       
       <fieldset class="collapsible" style="padding: 0;">
-        <legend onclick="toggleFieldset(this);">Autorisations supplémentaires lorsque la demande est assignée à l'utilisateur</legend>
+        <legend onclick="toggleFieldset(this);"><%= l(:label_additional_workflow_transitions_for_assignee) %></legend>
         <div id="assignee_workflows" style="margin: 0.5em 0 0.5em 0;">
       <%= render :partial => 'form', :locals => {:name => 'assignee', :workflows => @workflows['assignee']} %>
         </div>
--- a/config/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,47 +1,17 @@
 K 25
 svn:wc:ra_dav:version-url
-V 31
-/svn/!svn/ver/4955/trunk/config
-END
-settings.yml
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4513/trunk/config/settings.yml
-END
-configuration.yml.example
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4950/trunk/config/configuration.yml.example
+V 45
+/svn/!svn/ver/5998/branches/1.2-stable/config
 END
 routes.rb
 K 25
 svn:wc:ra_dav:version-url
-V 41
-/svn/!svn/ver/4729/trunk/config/routes.rb
-END
-boot.rb
-K 25
-svn:wc:ra_dav:version-url
-V 39
-/svn/!svn/ver/4516/trunk/config/boot.rb
+V 55
+/svn/!svn/ver/5878/branches/1.2-stable/config/routes.rb
 END
 environment.rb
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4904/trunk/config/environment.rb
+V 60
+/svn/!svn/ver/5878/branches/1.2-stable/config/environment.rb
 END
-additional_environment.rb.example
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/3018/trunk/config/additional_environment.rb.example
-END
-database.yml.example
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4753/trunk/config/database.yml.example
-END
--- a/config/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/config
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/config
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-27T13:43:18.863191Z
-4955
-jplang
+2011-06-02T08:26:02.080563Z
+5998
+tmaruyama
 has-props
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 0f6fe2db3317d8b40af42a6d534da87e
 2010-12-15T21:18:06.237327Z
 4513
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 69243d1b5b9b111da631c7034d51ba71
 2011-02-26T13:09:25.657748Z
 4950
@@ -103,11 +103,11 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-b03599e0dc8d0a6b03c3173864eb57bd
-2011-01-16T15:23:11.666065Z
-4729
-jplang
+2011-06-06T13:20:53.000000Z
+f1eebe0f75a51707ede6d40175e2f15c
+2011-04-04T11:53:29.801553Z
+5313
+tmaruyama
 has-props
 
 
@@ -129,7 +129,7 @@
 
 
 
-14402
+15093
 
 boot.rb
 file
@@ -137,7 +137,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 2969e2a7b5ab1b2a014b5f0c94bac872
 2010-12-17T08:34:29.830642Z
 4516
@@ -174,10 +174,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-cc9c7d7f9a4bd800d2c4a8737147e4c3
-2011-02-21T11:02:18.659691Z
-4904
+2011-06-06T13:20:53.000000Z
+e67b4e0a2d4ca847d47fa960eeb2a55d
+2011-03-04T14:32:58.878627Z
+5003
 jplang
 has-props
 
@@ -200,7 +200,7 @@
 
 
 
-2553
+2572
 
 environments
 dir
@@ -211,7 +211,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 6b63489cdd262e653712af1aa96cd390
 2009-11-08T02:16:42.659918Z
 3018
@@ -245,7 +245,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 f33e1e1bf73ba5d10ef3a6f170da3088
 2011-01-23T10:25:48.265995Z
 4753
--- a/config/.svn/text-base/environment.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/.svn/text-base/environment.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -36,7 +36,7 @@
   
   # Activate observers that should always be running
   # config.active_record.observers = :cacher, :garbage_collector
-  config.active_record.observers = :message_observer, :issue_observer, :journal_observer, :news_observer, :document_observer, :wiki_content_observer
+  config.active_record.observers = :message_observer, :issue_observer, :journal_observer, :news_observer, :document_observer, :wiki_content_observer, :comment_observer
 
   # Make Active Record use UTC-base instead of local time
   # config.active_record.default_timezone = :utc
--- a/config/.svn/text-base/routes.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/.svn/text-base/routes.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -14,13 +14,21 @@
   map.connect 'roles/workflow/:id/:role_id/:tracker_id', :controller => 'roles', :action => 'workflow'
   map.connect 'help/:ctrl/:page', :controller => 'help'
 
-  map.connect 'projects/:project_id/time_entries/report', :controller => 'time_entry_reports', :action => 'report'
   map.with_options :controller => 'time_entry_reports', :action => 'report',:conditions => {:method => :get} do |time_report|
+    time_report.connect 'projects/:project_id/issues/:issue_id/time_entries/report'
+    time_report.connect 'projects/:project_id/issues/:issue_id/time_entries/report.:format'
+    time_report.connect 'projects/:project_id/time_entries/report'
+    time_report.connect 'projects/:project_id/time_entries/report.:format'
     time_report.connect 'time_entries/report'
     time_report.connect 'time_entries/report.:format'
-    time_report.connect 'projects/:project_id/time_entries/report.:format'
   end
 
+  map.bulk_edit_time_entry 'time_entries/bulk_edit',
+                   :controller => 'timelog', :action => 'bulk_edit', :conditions => { :method => :get }
+  map.bulk_update_time_entry 'time_entries/bulk_edit',
+                   :controller => 'timelog', :action => 'bulk_update', :conditions => { :method => :post }
+  map.time_entries_context_menu '/time_entries/context_menu',
+                   :controller => 'context_menus', :action => 'time_entries'
   # TODO: wasteful since this is also nested under issues, projects, and projects/issues
   map.resources :time_entries, :controller => 'timelog'
   
@@ -80,10 +88,16 @@
   map.quoted_issue '/issues/:id/quoted', :controller => 'journals', :action => 'new', :id => /\d+/, :conditions => { :method => :post }
   map.connect '/issues/:id/destroy', :controller => 'issues', :action => 'destroy', :conditions => { :method => :post } # legacy
 
-  map.resource :gantt, :path_prefix => '/issues', :controller => 'gantts', :only => [:show, :update]
-  map.resource :gantt, :path_prefix => '/projects/:project_id/issues', :controller => 'gantts', :only => [:show, :update]
-  map.resource :calendar, :path_prefix => '/issues', :controller => 'calendars', :only => [:show, :update]
-  map.resource :calendar, :path_prefix => '/projects/:project_id/issues', :controller => 'calendars', :only => [:show, :update]
+  map.with_options :controller => 'gantts', :action => 'show' do |gantts_routes|
+    gantts_routes.connect '/projects/:project_id/issues/gantt'
+    gantts_routes.connect '/projects/:project_id/issues/gantt.:format'
+    gantts_routes.connect '/issues/gantt.:format'
+  end
+  
+  map.with_options :controller => 'calendars', :action => 'show' do |calendars_routes|
+    calendars_routes.connect '/projects/:project_id/issues/calendar'
+    calendars_routes.connect '/issues/calendar'
+  end
 
   map.with_options :controller => 'reports', :conditions => {:method => :get} do |reports|
     reports.connect 'projects/:id/issues/report', :action => 'issue_report'
@@ -215,6 +229,7 @@
   map.resources :groups
   
   #left old routes at the bottom for backwards compat
+  map.connect 'projects/:project_id/queries/:action', :controller => 'queries'
   map.connect 'projects/:project_id/issues/:action', :controller => 'issues'
   map.connect 'projects/:project_id/documents/:action', :controller => 'documents'
   map.connect 'projects/:project_id/boards/:action/:id', :controller => 'boards'
--- a/config/environment.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/environment.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -36,7 +36,7 @@
   
   # Activate observers that should always be running
   # config.active_record.observers = :cacher, :garbage_collector
-  config.active_record.observers = :message_observer, :issue_observer, :journal_observer, :news_observer, :document_observer, :wiki_content_observer
+  config.active_record.observers = :message_observer, :issue_observer, :journal_observer, :news_observer, :document_observer, :wiki_content_observer, :comment_observer
 
   # Make Active Record use UTC-base instead of local time
   # config.active_record.default_timezone = :utc
--- a/config/environments/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/environments/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/config/environments
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/config/environments
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 08b25fdea5e3e041116340c3c3090b18
 2010-11-14T15:14:19.280754Z
 4405
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 02eadf22aa59353271c702e4865138b1
 2007-12-10T17:58:07.273873Z
 975
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 213279c73e8c922d0a9d43f3c1cc6943
 2010-02-08T18:53:07.634937Z
 3397
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 d08152d4dda4608f254785b23840140a
 2007-09-27T22:30:57.196220Z
 772
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 213279c73e8c922d0a9d43f3c1cc6943
 2010-02-08T18:53:07.634937Z
 3397
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 17a6fbb168f3951191541f0f5a554454
 2010-09-26T16:54:38.112012Z
 4182
--- a/config/initializers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/initializers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/config/initializers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/config/initializers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 acc71445fc1c65ebe6fdeba695fea714
 2009-09-20T14:06:57.257282Z
 2895
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 45627c8ad9bafcee93e6ce01b92b57d1
 2011-01-10T18:25:12.105765Z
 4679
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:14:59.000000Z
 17f5c9eadec957cb8fb2b6d1f07b61ae
 2011-02-21T11:02:18.659691Z
 4904
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 ca8db2f40b067cb8615263fa5a238517
 2009-09-20T14:06:57.257282Z
 2895
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 0005ed7b233f71646e0f75b9994cf219
 2008-09-10T18:26:13.133776Z
 1797
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:14:59.000000Z
 a7948d8e86bcd799c74945fe91b4a8b1
 2009-09-20T14:06:57.257282Z
 2895
--- a/config/locales/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,269 +1,269 @@
 K 25
 svn:wc:ra_dav:version-url
-V 39
-/svn/!svn/ver/4955/trunk/config/locales
+V 53
+/svn/!svn/ver/5998/branches/1.2-stable/config/locales
 END
 lt.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/lt.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/lt.yml
 END
 sr-YU.yml
 K 25
 svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4955/trunk/config/locales/sr-YU.yml
+V 63
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/sr-YU.yml
 END
 ro.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/ro.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/ro.yml
 END
 lv.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/lv.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/lv.yml
 END
 zh.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/zh.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/zh.yml
 END
 pt.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/pt.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/pt.yml
 END
 ca.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/ca.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/ca.yml
 END
 pt-BR.yml
 K 25
 svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4955/trunk/config/locales/pt-BR.yml
+V 63
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/pt-BR.yml
 END
 tr.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/tr.yml
+V 60
+/svn/!svn/ver/5998/branches/1.2-stable/config/locales/tr.yml
 END
 ru.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/ru.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/ru.yml
 END
 en-GB.yml
 K 25
 svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4955/trunk/config/locales/en-GB.yml
+V 63
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/en-GB.yml
 END
 id.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/id.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/id.yml
 END
 el.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/el.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/el.yml
 END
 en.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4954/trunk/config/locales/en.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/en.yml
 END
 gl.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/gl.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/gl.yml
 END
 cs.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/cs.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/cs.yml
+END
+es.yml
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/es.yml
 END
 mk.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/mk.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/mk.yml
 END
-es.yml
+zh-TW.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/es.yml
+V 63
+/svn/!svn/ver/5971/branches/1.2-stable/config/locales/zh-TW.yml
+END
+eu.yml
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/eu.yml
 END
 ko.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/ko.yml
-END
-eu.yml
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/eu.yml
-END
-zh-TW.yml
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4955/trunk/config/locales/zh-TW.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/ko.yml
 END
 mn.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/mn.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/mn.yml
 END
 it.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/it.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/it.yml
 END
 sk.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/sk.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/sk.yml
 END
 sl.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/sl.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/sl.yml
 END
 uk.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/uk.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/uk.yml
+END
+sr.yml
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/sr.yml
 END
 da.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/da.yml
-END
-sr.yml
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/sr.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/da.yml
 END
 fa.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/fa.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/fa.yml
+END
+de.yml
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/5987/branches/1.2-stable/config/locales/de.yml
+END
+bg.yml
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/5963/branches/1.2-stable/config/locales/bg.yml
 END
 sv.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/sv.yml
-END
-bg.yml
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/bg.yml
-END
-de.yml
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/de.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/sv.yml
 END
 ja.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/ja.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/ja.yml
 END
 he.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/he.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/he.yml
 END
 fi.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/fi.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/fi.yml
 END
 bs.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/bs.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/bs.yml
 END
 fr.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4954/trunk/config/locales/fr.yml
+V 60
+/svn/!svn/ver/5966/branches/1.2-stable/config/locales/fr.yml
 END
 nl.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/nl.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/nl.yml
 END
 hr.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/hr.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/hr.yml
 END
 pl.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/pl.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/pl.yml
 END
 th.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/th.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/th.yml
 END
 no.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/no.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/no.yml
 END
 hu.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/hu.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/hu.yml
 END
 vi.yml
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4955/trunk/config/locales/vi.yml
+V 60
+/svn/!svn/ver/5961/branches/1.2-stable/config/locales/vi.yml
 END
--- a/config/locales/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/config/locales
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/config/locales
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-27T13:43:18.863191Z
-4955
-jplang
+2011-06-02T08:26:02.080563Z
+5998
+tmaruyama
 
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-3542e97eeeee34df7a3d6d64a4ce0407
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+5e7b7f486912e5d0f86ef826213fdba6
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-44029
+46015
 
 sr-YU.yml
 file
@@ -66,33 +66,33 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-b05d928becf91c52a78271c93715bb1b
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+48ebc431f92eb9909461b86595623d53
+2011-05-29T12:06:05.086159Z
+5961
 jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-42299
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+43343
 
 ro.yml
 file
@@ -100,10 +100,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-dd9fb4aae0fa69165e4f4e1100c3fa26
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+c89831e13c892860c203da66ef7cde39
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-40417
+42401
 
 lv.yml
 file
@@ -134,33 +134,33 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-12f9b4e9c849923a86334f56fbb65f1a
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+dd21f6353eda45c24f513402301a86ae
+2011-05-29T12:06:05.086159Z
+5961
 jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-42305
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+43354
 
 zh.yml
 file
@@ -168,10 +168,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-dde46f425abed5caa3d8d3afe9049fb7
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+7a72ffc7de1ff3a52e782463729ddbc7
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -194,7 +194,7 @@
 
 
 
-38303
+40191
 
 pt.yml
 file
@@ -202,10 +202,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-017dbb90319bfa26bab5a45296b337b3
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+ec11cbc0584c8ac119cfc6c29081f56f
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -228,7 +228,7 @@
 
 
 
-41777
+43934
 
 ca.yml
 file
@@ -236,10 +236,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-55d3137cb8850d53bce7337a8a0cf720
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+a3707360ad2b2de97d4ed95701a94356
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -262,7 +262,7 @@
 
 
 
-42226
+44212
 
 pt-BR.yml
 file
@@ -270,10 +270,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-0714d61f3439e9e8058f26487eae91b2
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+b49afa84dd5f8734f8002419fe90d051
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -296,7 +296,7 @@
 
 
 
-41661
+43759
 
 tr.yml
 file
@@ -304,11 +304,11 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-5bc442cb54c4373e1aeea7dd56e30bd0
-2011-02-27T13:43:18.863191Z
-4955
-jplang
+2011-06-06T13:20:53.000000Z
+7bb800f58917300c44761e96f4d5032f
+2011-06-02T08:26:02.080563Z
+5998
+tmaruyama
 has-props
 
 
@@ -330,7 +330,7 @@
 
 
 
-40295
+43367
 
 ru.yml
 file
@@ -338,10 +338,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-6a3741281160ebb7f27f6d2bb03499c8
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+4ea5a627a00e7c1a8eda2636477032c0
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -364,7 +364,7 @@
 
 
 
-62124
+65360
 
 en-GB.yml
 file
@@ -372,33 +372,33 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-831604fd1ce5d6f72e64688ce6f62581
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+f78e8de5b513009213f9c69fc66247c0
+2011-05-29T12:06:05.086159Z
+5961
 jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-39685
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+40744
 
 id.yml
 file
@@ -406,10 +406,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-eb45d7f2bc3d3e7fd8ab01db1a3041a4
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+9d2d1e06b1b49d66819cc25def6eaa12
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -432,7 +432,7 @@
 
 
 
-40037
+42018
 
 el.yml
 file
@@ -440,10 +440,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-98b4f21cce1a0242221eecb23f5fc727
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+a3900a53db9dd482bca160bc630f12d3
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -466,7 +466,7 @@
 
 
 
-55145
+57131
 
 en.yml
 file
@@ -474,10 +474,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-4265d626f893cc08f2142d0a254e2ac7
-2011-02-27T13:34:41.060565Z
-4954
+2011-06-06T13:20:53.000000Z
+2c7af38389b9234860de6bb7fe1f1803
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -500,7 +500,7 @@
 
 
 
-38787
+40720
 
 gl.yml
 file
@@ -508,10 +508,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-03aa773b8d01d5bc421b8896fc9c861b
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+1246246f8c76fcfd296387509aa5b2cd
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -534,7 +534,7 @@
 
 
 
-40895
+42875
 
 cs.yml
 file
@@ -542,10 +542,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-85ac61a4067ad6dda83d43acbf874cf6
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+ecf7a07f4da1d9b7941892d52f8636e8
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -568,7 +568,7 @@
 
 
 
-41752
+43747
 
 mk.yml
 file
@@ -576,33 +576,33 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-626a66d6d98190418f4a4fd43077734f
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+3b5cb975840d7ff4a5f669be5607b37d
+2011-05-29T12:06:05.086159Z
+5961
 jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-49418
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+50462
 
 es.yml
 file
@@ -610,10 +610,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-6ef7d2fb0af3cce0f6afbdea3ff9ab17
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+702907e64c5219e59b0343b0f9be2532
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -636,7 +636,7 @@
 
 
 
-43670
+45659
 
 ko.yml
 file
@@ -644,10 +644,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-1ff250f0b17ecb9465add49dfcf9bb91
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+905023ea1e51638dc8be8ae0649a48ca
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -670,7 +670,7 @@
 
 
 
-44501
+46485
 
 eu.yml
 file
@@ -678,33 +678,33 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-b3ba93d14600b4b992e65fbd243759ae
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+c03eeee6ca05c7f7301960370e6f0e7c
+2011-05-29T12:06:05.086159Z
+5961
 jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-42568
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+43750
 
 zh-TW.yml
 file
@@ -712,11 +712,11 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-f4c6a612b84e5087ed4d023414dab628
-2011-02-27T13:43:18.863191Z
-4955
-jplang
+2011-06-06T13:20:53.000000Z
+6e15c0de02a38cd855ec6ec008799a2e
+2011-05-31T03:48:27.658498Z
+5971
+tmaruyama
 has-props
 
 
@@ -738,7 +738,7 @@
 
 
 
-42608
+44611
 
 mn.yml
 file
@@ -746,33 +746,33 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-b9e2987cb3cbaab826c7388d09b74f75
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+d125d8a5d37d483faa77d2dab780d4b9
+2011-05-29T12:06:05.086159Z
+5961
 jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-54082
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+55125
 
 it.yml
 file
@@ -780,10 +780,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-f80f107e4d9318b8a8cea65b2e13d579
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+85dcefefac13070b7aa284c6bf6c8787
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -806,7 +806,7 @@
 
 
 
-41436
+43417
 
 sk.yml
 file
@@ -814,10 +814,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-e7901c1e26424f863f96dd86164419c2
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+5d12e8694bbdc394e64f118e56e6ee2d
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -840,7 +840,7 @@
 
 
 
-41687
+43673
 
 sl.yml
 file
@@ -848,10 +848,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-808c04baadb112b6be492be9dc78ef89
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+e2c9983529b81f1cb0f75f921f5ed40a
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -874,7 +874,7 @@
 
 
 
-39863
+41849
 
 uk.yml
 file
@@ -882,10 +882,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-430d26c543f2d9d31ffe77c9ef3eb4f8
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+f55dca5aa01e0404de280fbdafe0e79c
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -908,7 +908,7 @@
 
 
 
-47441
+49427
 
 da.yml
 file
@@ -916,10 +916,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-a7ae693463d0d34fb5fd212ccbda0aff
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+5e1975c634cd0435fac3d988ae0c56ec
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -942,7 +942,7 @@
 
 
 
-39983
+41978
 
 sr.yml
 file
@@ -950,10 +950,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-adf2619297b8e142957c327c6a76c786
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+fab2e1c089f2d129ba1ef8ac29de2930
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -976,7 +976,7 @@
 
 
 
-54555
+56541
 
 fa.yml
 file
@@ -984,10 +984,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-6f585dcad4e6b03d987ea0f5e7d7e91f
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+dc9aa9dc1c76e148671ab6d121ff3b89
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -1010,7 +1010,7 @@
 
 
 
-51085
+53601
 
 bg.yml
 file
@@ -1018,11 +1018,11 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-e0df426fe104bb05be553a362f46610b
-2011-02-27T13:43:18.863191Z
-4955
-jplang
+2011-06-06T13:20:53.000000Z
+9a059cba7f432b990cef9cfd84a6c2c2
+2011-05-29T14:54:06.800463Z
+5963
+tmaruyama
 has-props
 
 
@@ -1044,7 +1044,7 @@
 
 
 
-54718
+57818
 
 de.yml
 file
@@ -1052,11 +1052,11 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-80e835963312388a9077a8f27452d429
-2011-02-27T13:43:18.863191Z
-4955
-jplang
+2011-06-06T13:20:53.000000Z
+69079d50061a1719565236cdf639960e
+2011-06-01T08:09:23.285027Z
+5987
+tmaruyama
 has-props
 
 
@@ -1078,7 +1078,7 @@
 
 
 
-42574
+44841
 
 sv.yml
 file
@@ -1086,10 +1086,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-59f72f202281205f1ed729183db2a402
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+5466cb2f059c427e478b892659b04824
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -1112,7 +1112,7 @@
 
 
 
-42180
+44295
 
 ja.yml
 file
@@ -1120,10 +1120,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-03fac78c16fdf9c77069f24fec7b2796
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+d6e75928ee638a76ad5120697fee360b
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -1146,7 +1146,7 @@
 
 
 
-46191
+48520
 
 he.yml
 file
@@ -1154,10 +1154,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-03045c9539de31b255a14c9207fb8eaa
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+87a07cb160ea8fcd984e5ef254454861
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -1180,7 +1180,7 @@
 
 
 
-45433
+47411
 
 fi.yml
 file
@@ -1188,10 +1188,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-18dd7ae78913bad4b75e0d5f16068290
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+6f7134b22b56cdb1713c7a3dbf38b742
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -1214,7 +1214,7 @@
 
 
 
-40941
+42923
 
 bs.yml
 file
@@ -1222,10 +1222,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-0fdc9e453941e547e3b40fee917fcf02
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+46ab17e98f32862b0526430b9337c764
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -1248,7 +1248,7 @@
 
 
 
-40878
+42866
 
 fr.yml
 file
@@ -1256,10 +1256,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-95995431647aa0e13c850df4250a57d0
-2011-02-27T13:34:41.060565Z
-4954
+2011-06-06T13:20:53.000000Z
+89004e3fd348f579a5119c4f19054774
+2011-05-30T16:40:17.424028Z
+5966
 jplang
 has-props
 
@@ -1282,7 +1282,7 @@
 
 
 
-43081
+45156
 
 nl.yml
 file
@@ -1290,10 +1290,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-06358d3f035a3fcc20cde865e7295023
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+1ca85bc2a1fabda051687f7bbb97db90
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -1316,7 +1316,7 @@
 
 
 
-40433
+42618
 
 hr.yml
 file
@@ -1324,10 +1324,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-3fbb52f4fa0ba97dfd179ad0c8e020c3
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+89ef8a359d83eaeebfc88f637be23163
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -1350,7 +1350,7 @@
 
 
 
-40541
+42529
 
 pl.yml
 file
@@ -1358,10 +1358,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-afca79760eefe54e70833751f3d9b0bb
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+d44215277c85a0010b522b5d87f1ef9a
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -1384,7 +1384,7 @@
 
 
 
-42836
+44826
 
 th.yml
 file
@@ -1392,10 +1392,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-e9737687144c1c4fd63eacb68f2682f1
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+54b9b765101bb126998397790b5d189a
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -1418,7 +1418,7 @@
 
 
 
-53301
+55287
 
 no.yml
 file
@@ -1426,10 +1426,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-8fff009aa1fe3602b8b4dff6210f8497
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+56c04554c393102c0d5d7142609a52eb
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -1452,7 +1452,7 @@
 
 
 
-38744
+40727
 
 hu.yml
 file
@@ -1460,10 +1460,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-5c2041121ebd0cd3bcf252d54e21786b
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+91dbf51d0aebef5b2518ef387d0bd131
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -1486,7 +1486,7 @@
 
 
 
-43268
+45718
 
 vi.yml
 file
@@ -1494,10 +1494,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-37a28f575513649d20833ce31e5fce23
-2011-02-27T13:43:18.863191Z
-4955
+2011-06-06T13:20:53.000000Z
+287ab5f3b5571371f14ad0ee81fc534a
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -1520,5 +1520,5 @@
 
 
 
-43836
+45820
 
--- a/config/locales/.svn/text-base/bg.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/bg.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -17,7 +17,10 @@
     month_names: [~, Януари, Февруари, Март, Април, Май, Юни, Юли, Август, Септември, Октомври, Ноември, Декември]
     abbr_month_names: [~, Яну, Фев, Мар, Апр, Май, Юни, Юли, Авг, Сеп, Окт, Ное, Дек]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -268,7 +271,7 @@
   field_attr_mail: Атрибут Email
   field_onthefly: Динамично създаване на потребител
   field_start_date: Начална дата
-  field_done_ratio: % Прогрес
+  field_done_ratio: "% Прогрес"
   field_auth_source: Начин на оторизация
   field_hide_mail: Скрий e-mail адреса ми
   field_comments: Коментар
@@ -304,7 +307,15 @@
   field_text: Текстово поле
   field_visible: Видим
   field_warn_on_leaving_unsaved: Предупреди ме, когато напускам страница с незаписано съдържание
-  
+  field_issues_visibility: Видимост на задачите
+  field_is_private: Лична
+  field_commit_logs_encoding: Кодова таблица на съобщенията при поверяване
+  field_scm_path_encoding: Кодова таблица на пътищата (path)
+  field_path_to_repository: Път до хранилището
+  field_root_directory: Коренна директория (папка)
+  field_cvsroot: CVSROOT
+  field_cvs_module: Модул
+
   setting_app_title: Заглавие
   setting_app_subtitle: Описание
   setting_welcome_text: Допълнителен текст
@@ -331,7 +342,6 @@
   setting_cross_project_issue_relations: Релации на задачи между проекти
   setting_issue_list_default_columns: Показвани колони по подразбиране
   setting_repositories_encodings: Кодови таблици
-  setting_commit_logs_encoding: Кодова таблица на съобщенията при поверяване
   setting_emails_header: Emails header
   setting_emails_footer: Подтекст за e-mail
   setting_protocol: Протокол
@@ -376,7 +386,9 @@
   permission_add_issues: Добавяне на задачи
   permission_edit_issues: Редактиране на задачи
   permission_manage_issue_relations: Управление на връзките между задачите
-  permission_add_issue_notes: Добаване на бележки
+  permission_set_own_issues_private: Установяване на собствените задачи публични или лични
+  permission_set_issues_private: Установяване на задачите публични или лични
+  permission_add_issue_notes: Добавяне на бележки
   permission_edit_issue_notes: Редактиране на бележки
   permission_edit_own_issue_notes: Редактиране на собствени бележки
   permission_move_issues: Преместване на задачи
@@ -451,6 +463,9 @@
   label_issues_by: "Задачи по %{value}"
   label_issue_added: Добавена задача
   label_issue_updated: Обновена задача
+  label_issue_note_added: Добавена бележка
+  label_issue_status_updated: Обновено състояние
+  label_issue_priority_updated: Обновен приоритет
   label_document: Документ
   label_document_new: Нов документ
   label_document_plural: Документи
@@ -459,6 +474,8 @@
   label_role_plural: Роли
   label_role_new: Нова роля
   label_role_and_permissions: Роли и права
+  label_role_anonymous: Анонимен
+  label_role_non_member: Не член
   label_member: Член
   label_member_new: Нов член
   label_member_plural: Членове
@@ -537,6 +554,7 @@
   label_news_latest: Последни новини
   label_news_view_all: Виж всички
   label_news_added: Добавена новина
+  label_news_comment_added: Добавен коментар към новина
   label_settings: Настройки
   label_overview: Общ изглед
   label_version: Версия
@@ -733,7 +751,8 @@
   label_changeset_plural: Ревизии
   label_default_columns: По подразбиране
   label_no_change_option: (Без промяна)
-  label_bulk_edit_selected_issues: Редактиране на задачи
+  label_bulk_edit_selected_issues: Групово редактиране на задачи
+  label_bulk_edit_selected_time_entries: Групово редактиране на записи за използвано време
   label_theme: Тема
   label_default: По подразбиране
   label_search_titles_only: Само в заглавията
@@ -795,12 +814,20 @@
   label_project_copy_notifications: Изпращане на Send e-mail известия по време на копирането на проекта
   label_principal_search: "Търсене на потребител или група:"
   label_user_search: "Търсене на потребител:"
+  label_additional_workflow_transitions_for_author: Позволени са допълнителни преходи, когато потребителят е авторът
+  label_additional_workflow_transitions_for_assignee:  Позволени са допълнителни преходи, когато потребителят е назначеният към задачата
+  label_issues_visibility_all: Всички задачи
+  label_issues_visibility_public: Всички не-лични задачи
+  label_issues_visibility_own: Задачи, създадени от или назначени на потребителя
+  label_git_report_last_commit: Извеждане на последното поверяване за файлове и папки
 
   button_login: Вход
   button_submit: Прикачване
   button_save: Запис
   button_check_all: Избор на всички
   button_uncheck_all: Изчистване на всички
+  button_collapse_all: Скриване всички
+  button_expand_all: Разгъване всички
   button_delete: Изтриване
   button_create: Създаване
   button_create_and_continue: Създаване и продължаване
@@ -860,6 +887,7 @@
   text_are_you_sure: Сигурни ли сте?
   text_are_you_sure_with_children: Изтриване на задачата и нейните подзадачи?
   text_journal_changed: "%{label} променен от %{old} на %{new}"
+  text_journal_changed_no_detail: "%{label} променен"
   text_journal_set_to: "%{label} установен на %{value}"
   text_journal_deleted: "%{label} изтрит (%{old})"
   text_journal_added: "Добавено %{label} %{value}"
@@ -887,6 +915,8 @@
   text_status_changed_by_changeset: "Приложено с ревизия %{value}."
   text_time_logged_by_changeset: Приложено в ревизия %{value}.
   text_issues_destroy_confirmation: 'Сигурни ли сте, че искате да изтриете избраните задачи?'
+  text_issues_destroy_descendants_confirmation: Тази операция ще премахне и %{count} подзадача(и).
+  text_time_entries_destroy_confirmation: Сигурен ли сте, че изтриете избраните записи за изразходвано време?
   text_select_project_modules: 'Изберете активните модули за този проект:'
   text_default_administrator_account_changed: Сменен фабричния администраторски профил
   text_file_repository_writable: Възможност за писане в хранилището с файлове
@@ -911,6 +941,13 @@
   text_zoom_in: Увеличаване
   text_zoom_out: Намаляване
   text_warn_on_leaving_unsaved: Страницата съдържа незаписано съдържание, което може да бъде загубено, ако я напуснете.
+  text_scm_path_encoding_note: "По подразбиране: UTF-8"
+  text_git_repository_note: Празно и локално хранилище (например /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Локално хранилище (например /hgrepo, c:\hgrepo)
+  text_scm_command: SCM команда
+  text_scm_command_version: Версия
+  text_scm_config: Можете да конфигурирате SCM командите в config/configuration.yml. За да активирате промените, рестартирайте Redmine.
+  text_scm_command_not_available: SCM командата не е налична или достъпна. Проверете конфигурацията в административния панел.
 
   default_role_manager: Мениджър
   default_role_developer: Разработчик
@@ -938,5 +975,3 @@
   enumeration_doc_categories: Категории документи
   enumeration_activities: Дейности (time tracking)
   enumeration_system_activity: Системна активност
-
-  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/bs.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/bs.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -15,7 +15,10 @@
 
     month_names: [~, Januar, Februar, Mart, April, Maj, Jun, Jul, Avgust, Septembar, Oktobar, Novembar, Decembar]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, Maj, Jun, Jul, Avg, Sep, Okt, Nov, Dec]
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
   
   time:
     formats:
@@ -145,8 +148,8 @@
   general_lang_name: 'Bosanski'
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
-  general_csv_encoding: utf8
-  general_pdf_encoding: utf8
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '7'
   
   notice_account_activated: Vaš nalog je aktiviran. Možete se prijaviti.
@@ -257,7 +260,7 @@
   field_attr_mail: Atribut za email
   field_onthefly: 'Kreiranje korisnika "On-the-fly"'
   field_start_date: Početak
-  field_done_ratio: % Realizovano
+  field_done_ratio: "% Realizovano"
   field_auth_source: Mod za authentifikaciju
   field_hide_mail: Sakrij moju email adresu
   field_comments: Komentar
@@ -312,7 +315,6 @@
   setting_cross_project_issue_relations: Omogući relacije između aktivnosti na različitim projektima
   setting_issue_list_default_columns: Podrazumjevane koleone za prikaz na listi aktivnosti
   setting_repositories_encodings: Enkodiranje repozitorija
-  setting_commit_logs_encoding: 'Enkodiranje "commit" poruka'
   setting_emails_footer: Potpis na email-ovima
   setting_protocol: Protokol
   setting_per_page_options: Broj objekata po stranici
@@ -954,3 +956,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: 'Enkodiranje "commit" poruka'
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/ca.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/ca.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -20,7 +20,10 @@
     month_names: [~, Gener, Febrer, Març, Abril, Maig, Juny, Juliol, Agost, Setembre, Octubre, Novembre, Desembre]
     abbr_month_names: [~, Gen, Feb, Mar, Abr, Mai, Jun, Jul, Ago, Set, Oct, Nov, Des]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -138,7 +141,7 @@
   general_csv_separator: ';'
   general_csv_decimal_separator: ','
   general_csv_encoding: ISO-8859-15
-  general_pdf_encoding: ISO-8859-15
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: "El compte s'ha actualitzat correctament."
@@ -161,7 +164,7 @@
   notice_email_error: "S'ha produït un error en enviar el correu (%{value})"
   notice_feeds_access_key_reseted: "S'ha reiniciat la clau d'accés del RSS."
   notice_api_access_key_reseted: "S'ha reiniciat la clau d'accés a l'API."
-  notice_failed_to_save_issues: "No s'han pogut desar %s assumptes de %{count} seleccionats: %{ids}."
+  notice_failed_to_save_issues: "No s'han pogut desar %{count} assumptes de %{total} seleccionats: %{ids}."
   notice_failed_to_save_members: "No s'han pogut desar els membres: %{errors}."
   notice_no_issue_selected: "No s'ha seleccionat cap assumpte. Activeu els assumptes que voleu editar."
   notice_account_pending: "S'ha creat el compte i ara està pendent de l'aprovació de l'administrador."
@@ -269,7 +272,7 @@
   field_attr_mail: Atribut del correu electrònic
   field_onthefly: "Creació de l'usuari «al vol»"
   field_start_date: Inici
-  field_done_ratio: % realitzat
+  field_done_ratio: "% realitzat"
   field_auth_source: "Mode d'autenticació"
   field_hide_mail: "Oculta l'adreça de correu electrònic"
   field_comments: Comentari
@@ -327,7 +330,6 @@
   setting_cross_project_issue_relations: "Permet les relacions d'assumptes entre projectes"
   setting_issue_list_default_columns: "Columnes mostrades per defecte en la llista d'assumptes"
   setting_repositories_encodings: Codificacions del dipòsit
-  setting_commit_logs_encoding: Codificació dels missatges publicats
   setting_emails_footer: Peu dels correus electrònics
   setting_protocol: Protocol
   setting_per_page_options: Opcions dels objectes per pàgina
@@ -943,3 +945,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Codificació dels missatges publicats
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/cs.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/cs.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -21,7 +21,10 @@
     month_names: [~, Leden, Únor, Březen, Duben, Květen, Červen, Červenec, Srpen, Září, Říjen, Listopad, Prosinec]
     abbr_month_names: [~, Led, Úno, Bře, Dub, Kvě, Čer, Čec, Srp, Zář, Říj, Lis, Pro]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -272,7 +275,7 @@
   field_attr_mail: Email (atribut)
   field_onthefly: Automatické vytváření uživatelů
   field_start_date: Začátek
-  field_done_ratio: % Hotovo
+  field_done_ratio: "% Hotovo"
   field_auth_source: Autentifikační mód
   field_hide_mail: Nezobrazovat můj email
   field_comments: Komentář
@@ -334,7 +337,6 @@
   setting_cross_project_issue_relations: Povolit vazby úkolů napříč projekty
   setting_issue_list_default_columns: Výchozí sloupce zobrazené v seznamu úkolů
   setting_repositories_encodings: Kódování 
-  setting_commit_logs_encoding: Kódování zpráv při commitu
   setting_emails_header: Hlavička emailů
   setting_emails_footer: Patička emailů
   setting_protocol: Protokol
@@ -349,7 +351,7 @@
   setting_sequential_project_identifiers: Generovat sekvenční identifikátory projektů
   setting_gravatar_enabled: Použít uživatelské ikony Gravatar
   setting_gravatar_default: Výchozí Gravatar
-  setting_diff_max_lines_displayed: Maximální počet zobrazenách řádků rozdílů
+  setting_diff_max_lines_displayed: Maximální počet zobrazených řádků rozdílů
   setting_file_max_size_displayed: Maximální velikost textových souborů zobrazených přímo na stránce
   setting_repository_log_display_limit: Maximální počet revizí zobrazených v logu souboru
   setting_openid: Umožnit přihlašování a registrace s OpenID
@@ -840,7 +842,7 @@
   button_update: Aktualizovat
   button_configure: Konfigurovat
   button_quote: Citovat
-  button_duplicate: Duplikát
+  button_duplicate: Duplikovat
   button_show: Zobrazit
   
   status_active: aktivní
@@ -901,7 +903,7 @@
   text_user_wrote: "%{value} napsal:"
   text_enumeration_destroy_question: "Několik (%{count}) objektů je přiřazeno k této hodnotě."
   text_enumeration_category_reassign_to: 'Přeřadit je do této:'
-  text_email_delivery_not_configured: "Doručování e-mailů není nastaveno a odesílání notifikací je zakázáno.\nNastavte Váš SMTP server v souboru config/email.yml a restartujte aplikaci."
+  text_email_delivery_not_configured: "Doručování e-mailů není nastaveno a odesílání notifikací je zakázáno.\nNastavte Váš SMTP server v souboru config/configuration.yml a restartujte aplikaci."
   text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživatelským jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky."
   text_diff_truncated: '... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.'
   text_custom_field_possible_values_info: 'Každá hodnota na novém řádku'
@@ -944,3 +946,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kódování zpráv při commitu
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/da.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/da.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -14,7 +14,10 @@
     abbr_day_names: [sø, ma, ti, 'on', to, fr, lø]
     month_names: [~, januar, februar, marts, april, maj, juni, juli, august, september, oktober, november, december]
     abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, aug, sep, okt, nov, dec]
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -134,7 +137,7 @@
         greater_than_start_date: "skal være senere end startdatoen"
         not_same_project: "hører ikke til samme projekt"
         circular_dependency: "Denne relation vil skabe et afhængighedsforhold"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "En sag kan ikke relateres til en af dens underopgaver"
 
       template:
         header:
@@ -151,7 +154,7 @@
   general_lang_name: 'Danish (Dansk)'
   general_csv_separator: ','
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: Kontoen er opdateret.
@@ -183,7 +186,7 @@
   error_scm_command_failed: "En fejl opstod under forbindelsen til det valgte repository: %{value}"
   
   mail_subject_lost_password: "Dit %{value} kodeord"
-  mail_body_lost_password: 'For at ændre dit kodeord, klik på dette link:'
+  mail_body_lost_password: 'Klik på dette link for at ændre dit kodeord:'
   mail_subject_register: "%{value} kontoaktivering"
   mail_body_register: 'Klik på dette link for at aktivere din konto:'
   mail_body_account_information_external: "Du kan bruge din %{value} konto til at logge ind."
@@ -227,7 +230,7 @@
   field_due_date: Deadline
   field_assigned_to: Tildelt til
   field_priority: Prioritet
-  field_fixed_version: Target version
+  field_fixed_version: Udgave
   field_user: Bruger
   field_role: Rolle
   field_homepage: Hjemmeside
@@ -254,8 +257,8 @@
   field_attr_lastname: Efternavn attribut
   field_attr_mail: Email attribut
   field_onthefly: løbende brugeroprettelse
-  field_start_date: Start date
-  field_done_ratio: % Færdig
+  field_start_date: Start dato
+  field_done_ratio: "% færdig"
   field_auth_source: Sikkerhedsmetode
   field_hide_mail: Skjul min email
   field_comments: Kommentar
@@ -349,7 +352,7 @@
   label_tracker_new: Ny type
   label_workflow: Arbejdsgang
   label_issue_status: Sagsstatus
-  label_issue_status_plural: Sagsstatuser
+  label_issue_status_plural: Sagsstatusser
   label_issue_status_new: Ny status
   label_issue_category: Sagskategori
   label_issue_category_plural: Sagskategorier
@@ -373,8 +376,8 @@
   label_logout: Log ud
   label_help: Hjælp
   label_reported_issues: Rapporterede sager
-  label_assigned_to_me_issues: Sager tildelt mig
-  label_last_login: Sidste login tidspunkt
+  label_assigned_to_me_issues: Sager tildelt til mig
+  label_last_login: Sidste logintidspunkt
   label_registered_on: Registreret den
   label_activity: Aktivitet
   label_new: Ny
@@ -489,7 +492,7 @@
   label_date_range: Dato interval
   label_less_than_ago: mindre end dage siden
   label_more_than_ago: mere end dage siden
-  label_ago: days siden
+  label_ago: dage siden
   label_contains: indeholder
   label_not_contains: ikke indeholder
   label_day_plural: dage
@@ -500,7 +503,7 @@
   label_modification_plural: "%{count} ændringer"
   label_revision: Revision
   label_revision_plural: Revisioner
-  label_associated_revisions: Tilnyttede revisioner
+  label_associated_revisions: Tilknyttede revisioner
   label_added: tilføjet
   label_modified: ændret
   label_deleted: slettet
@@ -530,7 +533,7 @@
   label_preview: Forhåndsvisning
   label_feed_plural: Feeds
   label_changes_details: Detaljer for alle ændringer
-  label_issue_tracking: Sags søgning
+  label_issue_tracking: Sagssøgning
   label_spent_time: Anvendt tid
   label_f_hour: "%{value} time"
   label_f_hour_plural: "%{value} timer"
@@ -547,7 +550,7 @@
   label_permissions_report: Godkendelsesrapport
   label_watched_issues: Overvågede sager
   label_related_issues: Relaterede sager
-  label_applied_status: Anvendte statuser
+  label_applied_status: Anvendte statusser
   label_loading: Indlæser...
   label_relation_new: Ny relation
   label_relation_delete: Slet relation
@@ -590,7 +593,7 @@
   label_jump_to_a_project: Skift til projekt...
   label_file_plural: Filer
   label_changeset_plural: Ændringer
-  label_default_columns: Standard kolonner
+  label_default_columns: Standardkolonner
   label_no_change_option: (Ingen ændringer)
   label_bulk_edit_selected_issues: Masse-ret de valgte sager
   label_theme: Tema
@@ -678,20 +681,20 @@
   text_issue_category_destroy_assignments: Slet tildelinger af kategori
   text_issue_category_reassign_to: Tildel sager til denne kategori
   text_user_mail_option: "For ikke-valgte projekter vil du kun modtage beskeder omhandlende ting du er involveret i eller overvåger (f.eks. sager du har indberettet eller ejer)."
-  text_no_configuration_data: "Roller, typer, sagsstatuser og arbejdsgange er endnu ikke konfigureret.\nDet er anbefalet at indlæse standardopsætningen. Du vil kunne ændre denne når den er indlæst."
+  text_no_configuration_data: "Roller, typer, sagsstatusser og arbejdsgange er endnu ikke konfigureret.\nDet er anbefalet at indlæse standardopsætningen. Du vil kunne ændre denne når den er indlæst."
   text_load_default_configuration: Indlæs standardopsætningen
   text_status_changed_by_changeset: "Anvendt i ændring %{value}."
   text_issues_destroy_confirmation: 'Er du sikker på du ønsker at slette den/de valgte sag(er)?'
   text_select_project_modules: 'Vælg moduler er skal være aktiveret for dette projekt:'
-  text_default_administrator_account_changed: Standard administratorkonto ændret
+  text_default_administrator_account_changed: Standardadministratorkonto ændret
   text_file_repository_writable: Filarkiv er skrivbar
   text_rmagick_available: RMagick tilgængelig (valgfri)
   
   default_role_manager: Leder
   default_role_developer: Udvikler
   default_role_reporter: Rapportør
-  default_tracker_bug: Bug
-  default_tracker_feature: Feature
+  default_tracker_bug: Fejl
+  default_tracker_feature: Funktion
   default_tracker_support: Support
   default_issue_status_new: Ny
   default_issue_status_in_progress: Igangværende
@@ -720,12 +723,12 @@
   error_issue_not_found_in_project: 'Sagen blev ikke fundet eller tilhører ikke dette projekt'
   text_assign_time_entries_to_project: Tildel raporterede timer til projektet
   setting_display_subprojects_issues: Vis sager for underprojekter på hovedprojektet som standard
-  label_optional_description: Optionel beskrivelse
+  label_optional_description: Valgfri beskrivelse
   text_destroy_time_entries: Slet registrerede timer
   field_comments_sorting: Vis kommentar
   text_reassign_time_entries: 'Tildel registrerede timer til denne sag igen'
   label_reverse_chronological_order: I omvendt kronologisk rækkefølge
-  label_preferences: Preferences
+  label_preferences: Præferencer
   label_overall_activity: Overordnet aktivitet
   setting_default_projects_public: Nye projekter er offentlige som standard
   error_scm_annotate: "Filen findes ikke, eller kunne ikke annoteres."
@@ -759,7 +762,7 @@
   permission_add_issue_watchers: Tilføj overvågere
   warning_attachments_not_saved: "der var %{count} fil(er), som ikke kunne gemmes."
   permission_comment_news: Kommentér nyheder
-  text_enumeration_category_reassign_to: 'FLyt dem til denne værdi:'
+  text_enumeration_category_reassign_to: 'Flyt dem til denne værdi:'
   permission_select_project_modules: Vælg projektmoduler
   permission_view_gantt: Se Gantt diagram
   permission_delete_messages: Slet beskeder
@@ -786,9 +789,9 @@
   label_and_its_subprojects: "%{value} og dets underprojekter"
   permission_view_calendar: Se kalender
   button_create_and_continue: Opret og fortsæt
-  setting_gravatar_enabled: Anvend Gravatar bruger ikoner
+  setting_gravatar_enabled: Anvend Gravatar brugerikoner
   label_updated_time_by: "Opdateret af %{author} for %{age} siden"
-  text_diff_truncated: '... Listen over forskelle er bleve afkortet da den overstiger den maksimale størrelse der kan vises.'
+  text_diff_truncated: '... Listen over forskelle er blevet afkortet da den overstiger den maksimale størrelse der kan vises.'
   text_user_wrote: "%{value} skrev:"
   setting_mail_handler_api_enabled: Aktiver webservice for indkomne emails
   permission_delete_issues: Slet sager
@@ -809,7 +812,6 @@
   permission_edit_project: Redigér projekt
   permission_save_queries: Gem forespørgsler
   label_copied: kopieret
-  setting_commit_logs_encoding: Kodning af Commit beskeder
   text_repository_usernames_mapping: "Vælg eller opdatér de Redmine brugere der svarer til de enkelte brugere fundet i repository loggen.\nBrugere med samme brugernavn eller email adresse i både Redmine og det valgte repository bliver automatisk koblet sammen."
   permission_edit_time_entries: Redigér tidsregistreringer
   general_csv_decimal_separator: ','
@@ -847,7 +849,7 @@
   label_tag: Tag
   label_branch: Branch
   error_no_tracker_in_project: Der er ingen sagshåndtering for dette projekt. Kontrollér venligst projektindstillingerne.
-  error_no_default_issue_status: Der er ikek defineret en standardstatus. Kontrollér venligst indstillingernen (Gå til "Administration -> Sagsstatuser").
+  error_no_default_issue_status: Der er ikke defineret en standardstatus. Kontrollér venligst indstillingerne (gå til "Administration -> Sagsstatusser").
   text_journal_changed: "%{label} ændret fra %{old} til %{new}"
   text_journal_set_to: "%{label} sat til %{value}"
   text_journal_deleted: "%{label} slettet (%{old})"
@@ -862,34 +864,34 @@
   version_status_closed: lukket
   version_status_locked: låst
   version_status_open: åben
-  error_can_not_reopen_issue_on_closed_version: En sag tildelt en lukket version, kan ikke genåbnes
+  error_can_not_reopen_issue_on_closed_version: En sag tildelt en lukket version kan ikke genåbnes
   label_user_anonymous: Anonym
   button_move_and_follow: Flyt og overvåg
   setting_default_projects_modules: Standard moduler, aktiveret for nye projekter
   setting_gravatar_default: Standard Gravatar billede
   field_sharing: Delning
-  label_version_sharing_hierarchy: Med projekt hierarki
+  label_version_sharing_hierarchy: Med projekthierarki
   label_version_sharing_system: Med alle projekter
-  label_version_sharing_descendants: Med under projekter
-  label_version_sharing_tree: Med projekt træ
+  label_version_sharing_descendants: Med underprojekter
+  label_version_sharing_tree: Med projekttræ
   label_version_sharing_none: Ikke delt
   error_can_not_archive_project: Dette projekt kan ikke arkiveres
   button_duplicate: Duplikér
   button_copy_and_follow: Kopiér og overvåg
   label_copy_source: Kilde
   setting_issue_done_ratio: Beregn sagsløsning ratio
-  setting_issue_done_ratio_issue_status: Benyt sags status
+  setting_issue_done_ratio_issue_status: Benyt sagsstatus
   error_issue_done_ratios_not_updated: Sagsløsnings ratio, ikke opdateret.
-  error_workflow_copy_target: Vælg venligst mål tracker og rolle(r)
-  setting_issue_done_ratio_issue_field: Benyt sags felt
+  error_workflow_copy_target: Vælg venligst måltracker og rolle(r)
+  setting_issue_done_ratio_issue_field: Benyt sagsfelt
   label_copy_same_as_target: Samme som mål
   label_copy_target: Mål
-  notice_issue_done_ratios_updated: Sagsløsnings ratio opdateret.
-  error_workflow_copy_source: Vælg venligst en kilde tracker eller rolle
-  label_update_issue_done_ratios: Opdater sagsløsnings ratio
+  notice_issue_done_ratios_updated: Sagsløsningsratio opdateret.
+  error_workflow_copy_source: Vælg venligst en kildetracker eller rolle
+  label_update_issue_done_ratios: Opdater sagsløsningsratio
   setting_start_of_week: Start kalendre på
   permission_view_issues: Vis sager
-  label_display_used_statuses_only: Vis kun statuser der er benyttet af denne tracker
+  label_display_used_statuses_only: Vis kun statusser der er benyttet af denne tracker
   label_revision_id: Revision %{value}
   label_api_access_key: API nøgle
   label_api_access_key_created_on: API nøgle genereret %{value} siden
@@ -911,12 +913,12 @@
   label_board_locked: Låst
   permission_export_wiki_pages: Eksporter wiki sider
   setting_cache_formatted_text: Cache formatteret tekst
-  permission_manage_project_activities: Administrer projekt aktiviteter
-  error_unable_delete_issue_status: Det var ikke muligt at slette sags status
+  permission_manage_project_activities: Administrer projektaktiviteter
+  error_unable_delete_issue_status: Det var ikke muligt at slette sagsstatus
   label_profile: Profil
-  permission_manage_subtasks: Administrer under opgaver
-  field_parent_issue: Hoved opgave
-  label_subtask_plural: Under opgaver
+  permission_manage_subtasks: Administrer underopgaver
+  field_parent_issue: Hovedopgave
+  label_subtask_plural: Underopgaver
   label_project_copy_notifications: Send email notifikationer, mens projektet kopieres
   error_can_not_delete_custom_field: Kan ikke slette brugerdefineret felt
   error_unable_to_connect: Kan ikke forbinde (%{value})
@@ -926,7 +928,7 @@
   label_my_page_block: blok
   notice_failed_to_save_members: "Fejl under lagring af medlem(mer): %{errors}."
   text_zoom_out: Zoom ud
-  text_zoom_in: Zoom in
+  text_zoom_in: Zoom ind
   notice_unable_delete_time_entry: Kan ikke slette tidsregistrering.
   label_overall_spent_time: Overordnet forbrug af tid
   field_time_entries: Log tid
@@ -935,24 +937,59 @@
   button_edit_associated_wikipage: "Redigér tilknyttet Wiki side: %{page_title}"
   text_are_you_sure_with_children: Slet sag og alle undersager?
   field_text: Tekstfelt
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Medlem af Gruppe
-  field_assigned_to_role: Medlem af Rolle
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
+  label_user_mail_option_only_owner: Kun for ting jeg er ejer af
+  setting_default_notification_option: Standardpåmindelsesmulighed
+  label_user_mail_option_only_my_events: Kun for ting jeg overvåger eller er involveret i
+  label_user_mail_option_only_assigned: Kun for ting jeg er tildelt
+  label_user_mail_option_none: Ingen hændelser
+  field_member_of_group: Medlem af gruppe
+  field_assigned_to_role: Medlem af rolle
+  notice_not_authorized_archived_project: Projektet du prøver at tilgå, er blevet arkiveret.
+  label_principal_search: "Søg efter bruger eller gruppe:"
+  label_user_search: "Søg efter bruger:"
+  field_visible: Synlig
   setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  setting_commit_logtime_activity_id: Aktivitet for registreret tid
+  text_time_logged_by_changeset: Anvendt i changeset %{value}.
+  setting_commit_logtime_enabled: Aktiver tidsregistrering
+  notice_gantt_chart_truncated: Kortet er blevet afkortet, fordi det overstiger det maksimale antal elementer, der kan vises (%{max})
+  setting_gantt_items_limit: Maksimalt antal af elementer der kan vises på gantt kortet
+
   field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kodning af Commit beskeder
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/de.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/de.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,6 @@
 # German translations for Ruby on Rails
 # by Clemens Kofler (clemens@railway.at)
+# additions for Redmine 1.2 by Jens Martsch (jmartsch@gmail.com)
 
 de:
   direction: ltr
@@ -19,7 +20,10 @@
     month_names: [~, Januar, Februar, März, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember]
     abbr_month_names: [~, Jan, Feb, Mär, Apr, Mai, Jun, Jul, Aug, Sep, Okt, Nov, Dez]
     # Used in date_select and datime_select.
-    order: [:day, :month, :year]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -152,7 +156,7 @@
   general_csv_separator: ';'
   general_csv_decimal_separator: ','
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
 
   notice_account_updated: Konto wurde erfolgreich aktualisiert.
@@ -283,7 +287,7 @@
   field_attr_mail: E-Mail-Attribut
   field_onthefly: On-the-fly-Benutzererstellung
   field_start_date: Beginn
-  field_done_ratio: % erledigt
+  field_done_ratio: "% erledigt"
   field_auth_source: Authentifizierungs-Modus
   field_hide_mail: E-Mail-Adresse nicht anzeigen
   field_comments: Kommentar
@@ -341,7 +345,6 @@
   setting_cross_project_issue_relations: Ticket-Beziehungen zwischen Projekten erlauben
   setting_issue_list_default_columns: Default-Spalten in der Ticket-Auflistung
   setting_repositories_encodings: Kodierungen der Projektarchive
-  setting_commit_logs_encoding: Kodierung der Commit-Log-Meldungen
   setting_emails_footer: E-Mail-Fußzeile
   setting_protocol: Protokoll
   setting_per_page_options: Objekte pro Seite
@@ -947,13 +950,48 @@
   field_member_of_group: Zuständigkeitsgruppe
   field_assigned_to_role: Zuständigkeitsrolle
   field_visible: Sichtbar
-  setting_emails_header: Emailkopf
+  setting_emails_header: E-Mail Betreffzeile
   setting_commit_logtime_activity_id: Aktivität für die Zeiterfassung
   text_time_logged_by_changeset: Angewendet in Changeset %{value}.
   setting_commit_logtime_enabled: Aktiviere Zeitlogging
   notice_gantt_chart_truncated: Die Grafik ist unvollständig, da das Maximum der anzeigbaren Aufgaben überschritten wurde (%{max})
   setting_gantt_items_limit: Maximale Anzahl von Aufgaben die im Gantt-Chart angezeigt werden.
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  field_warn_on_leaving_unsaved: vor dem Verlassen einer Seite mit ungesichertem Text im Editor warnen
+  text_warn_on_leaving_unsaved: Die aktuellen Änderungen gehen verloren, wenn Sie diese Seite verlassen.
+  label_my_queries: Meine eigenen Abfragen
+  text_journal_changed_no_detail: "%{label} aktualisiert"
+  label_news_comment_added: Kommentar zu einer News hinzugefügt
+  button_expand_all: Alle ausklappen
+  button_collapse_all: Alle einklappen
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Ausgewählte Zeitaufwände bearbeiten
+  text_time_entries_destroy_confirmation: Sind Sie sicher, dass Sie die ausgewählten Zeitaufwände löschen möchten?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Nichtmitglied
+  label_issue_note_added: Notiz hinzugefügt
+  label_issue_status_updated: Status aktualisiert
+  label_issue_priority_updated: Priorität aktualisiert
+  label_issues_visibility_own: Tickets die folgender User erstellt hat oder die ihm zugewiesen sind
+  field_issues_visibility: Ticket Sichtbarkeit
+  label_issues_visibility_all: Alle Tickets
+  permission_set_own_issues_private: Eigene Tickets privat oder öffentlich markieren
+  field_is_private: Privat
+  permission_set_issues_private: Tickets privat oder öffentlich markieren
+  label_issues_visibility_public: Alle nicht privaten Tickets
+  text_issues_destroy_descendants_confirmation: Dies wird auch %{count} Unteraufgabe/n löschen.
+  field_commit_logs_encoding: Kodierung der Commit-Log-Meldungen
+  field_scm_path_encoding: Pfad Kodierung
+  text_scm_path_encoding_note: "Standard: UTF-8"
+  field_path_to_repository: Pfad zum repository
+  field_root_directory: Wurzelverzeichnis
+  field_cvs_module: Modul
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare und lokales repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Lokales repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Kommando
+  text_scm_command_version: Version
+  label_git_report_last_commit: Bericht des letzten Commits für Dateien und Verzeichnisse
+  text_scm_config: Sie können Ihre scm Kommandos in config/configuration.yml ändern. Bitte starten Sie die Anwendung nach dem ändern neu.
+  text_scm_command_not_available: Scm Kommando ist nicht verfügbar. Bitte prüfen Sie die Einstellungen im Administrationspanel.
+
--- a/config/locales/.svn/text-base/el.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/el.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -19,7 +19,10 @@
     month_names: [~, Ιανουάριος, Φεβρουάριος, Μάρτιος, Απρίλιος, Μάϊος, Ιούνιος, Ιούλιος, Αύγουστος, Σεπτέμβριος, Οκτώβριος, Νοέμβριος, Δεκέμβριος]
     abbr_month_names: [~, Ιαν, Φεβ, Μαρ, Απρ, Μαϊ, Ιον, Ιολ, Αυγ, Σεπ, Οκτ, Νοε, Δεκ]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -252,7 +255,7 @@
   field_attr_mail: Ιδιότητα email
   field_onthefly: Άμεση δημιουργία χρήστη
   field_start_date: Εκκίνηση
-  field_done_ratio: % επιτεύχθη
+  field_done_ratio: "% επιτεύχθη"
   field_auth_source: Τρόπος πιστοποίησης
   field_hide_mail: Απόκρυψη διεύθυνσης email
   field_comments: Σχόλιο
@@ -307,7 +310,6 @@
   setting_cross_project_issue_relations: Επιτρέψτε συσχετισμό θεμάτων σε διασταύρωση-έργων
   setting_issue_list_default_columns: Προκαθορισμένες εμφανιζόμενες στήλες στη λίστα θεμάτων
   setting_repositories_encodings: Κωδικοποίηση χαρακτήρων αποθετηρίου
-  setting_commit_logs_encoding: Κωδικοποίηση μηνυμάτων commit
   setting_emails_footer: Υποσέλιδο στα email
   setting_protocol: Πρωτόκολο
   setting_per_page_options: Αντικείμενα ανά σελίδα επιλογών
@@ -940,3 +942,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Κωδικοποίηση μηνυμάτων commit
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/en-GB.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/en-GB.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,946 +1,981 @@
-en-GB:
-  direction: ltr
-  date:
-    formats:
-      # Use the strftime parameters for formats.
-      # When no format has been given, it uses default.
-      # You can provide other formats here if you like!
-      default: "%d/%m/%Y"
-      short: "%d %b"
-      long: "%d %B, %Y"
-      
-    day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
-    abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
-      
-    # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
-    abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
-    # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
-
-  time:
-    formats:
-      default: "%d/%m/%Y %I:%M %p"
-      time: "%I:%M %p"
-      short: "%d %b %H:%M"
-      long: "%d %B, %Y %H:%M"
-    am: "am"
-    pm: "pm"
-      
-  datetime:
-    distance_in_words:
-      half_a_minute: "half a minute"
-      less_than_x_seconds:
-        one:   "less than 1 second"
-        other: "less than %{count} seconds"
-      x_seconds:
-        one:   "1 second"
-        other: "%{count} seconds"
-      less_than_x_minutes:
-        one:   "less than a minute"
-        other: "less than %{count} minutes"
-      x_minutes:
-        one:   "1 minute"
-        other: "%{count} minutes"
-      about_x_hours:
-        one:   "about 1 hour"
-        other: "about %{count} hours"
-      x_days:
-        one:   "1 day"
-        other: "%{count} days"
-      about_x_months:
-        one:   "about 1 month"
-        other: "about %{count} months"
-      x_months:
-        one:   "1 month"
-        other: "%{count} months"
-      about_x_years:
-        one:   "about 1 year"
-        other: "about %{count} years"
-      over_x_years:
-        one:   "over 1 year"
-        other: "over %{count} years"
-      almost_x_years:
-        one:   "almost 1 year"
-        other: "almost %{count} years"
-
-  number:
-    format:
-      separator: "."
-      delimiter: " "
-      precision: 3
-
-    currency:
-      format:
-        format: "%u%n"
-        unit: "£"
-    human:
-      format:
-        delimiter: ""
-        precision: 1
-      storage_units:
-        format: "%n %u"
-        units:
-          byte:
-            one: "Byte"
-            other: "Bytes"
-          kb: "kB"
-          mb: "MB"
-          gb: "GB"
-          tb: "TB"
-
-        
-# Used in array.to_sentence.
-  support:
-    array:
-      sentence_connector: "and"
-      skip_last_comma: false
-      
-  activerecord:
-    errors:
-      template:
-        header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
-      messages:
-        inclusion: "is not included in the list"
-        exclusion: "is reserved"
-        invalid: "is invalid"
-        confirmation: "doesn't match confirmation"
-        accepted: "must be accepted"
-        empty: "can't be empty"
-        blank: "can't be blank"
-        too_long: "is too long (maximum is %{count} characters)"
-        too_short: "is too short (minimum is %{count} characters)"
-        wrong_length: "is the wrong length (should be %{count} characters)"
-        taken: "has already been taken"
-        not_a_number: "is not a number"
-        not_a_date: "is not a valid date"
-        greater_than: "must be greater than %{count}"
-        greater_than_or_equal_to: "must be greater than or equal to %{count}"
-        equal_to: "must be equal to %{count}"
-        less_than: "must be less than %{count}"
-        less_than_or_equal_to: "must be less than or equal to %{count}"
-        odd: "must be odd"
-        even: "must be even"
-        greater_than_start_date: "must be greater than start date"
-        not_same_project: "doesn't belong to the same project"
-        circular_dependency: "This relation would create a circular dependency"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
-
-  actionview_instancetag_blank_option: Please select
-  
-  general_text_No: 'No'
-  general_text_Yes: 'Yes'
-  general_text_no: 'no'
-  general_text_yes: 'yes'
-  general_lang_name: 'English (British)'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
-  general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
-  general_first_day_of_week: '1'
-  
-  notice_account_updated: Account was successfully updated.
-  notice_account_invalid_creditentials: Invalid user or password
-  notice_account_password_updated: Password was successfully updated.
-  notice_account_wrong_password: Wrong password
-  notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
-  notice_account_unknown_email: Unknown user.
-  notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
-  notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
-  notice_account_activated: Your account has been activated. You can now log in.
-  notice_successful_create: Successful creation.
-  notice_successful_update: Successful update.
-  notice_successful_delete: Successful deletion.
-  notice_successful_connection: Successful connection.
-  notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
-  notice_locking_conflict: Data has been updated by another user.
-  notice_not_authorized: You are not authorised to access this page.
-  notice_email_sent: "An email was sent to %{value}"
-  notice_email_error: "An error occurred while sending mail (%{value})"
-  notice_feeds_access_key_reseted: Your RSS access key was reset.
-  notice_api_access_key_reseted: Your API access key was reset.
-  notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
-  notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
-  notice_account_pending: "Your account was created and is now pending administrator approval."
-  notice_default_data_loaded: Default configuration successfully loaded.
-  notice_unable_delete_version: Unable to delete version.
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  
-  error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
-  error_scm_not_found: "The entry or revision was not found in the repository."
-  error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
-  error_scm_annotate: "The entry does not exist or can not be annotated."
-  error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
-  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
-  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
-  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
-  error_can_not_archive_project: This project can not be archived
-  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
-  error_workflow_copy_source: 'Please select a source tracker or role'
-  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
-  
-  warning_attachments_not_saved: "%{count} file(s) could not be saved."
-  
-  mail_subject_lost_password: "Your %{value} password"
-  mail_body_lost_password: 'To change your password, click on the following link:'
-  mail_subject_register: "Your %{value} account activation"
-  mail_body_register: 'To activate your account, click on the following link:'
-  mail_body_account_information_external: "You can use your %{value} account to log in."
-  mail_body_account_information: Your account information
-  mail_subject_account_activation_request: "%{value} account activation request"
-  mail_body_account_activation_request: "A new user (%{value}) has registered. The account is pending your approval:"
-  mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
-  mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
-  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
-  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
-  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
-  
-  gui_validation_error: 1 error
-  gui_validation_error_plural: "%{count} errors"
-  
-  field_name: Name
-  field_description: Description
-  field_summary: Summary
-  field_is_required: Required
-  field_firstname: Firstname
-  field_lastname: Lastname
-  field_mail: Email
-  field_filename: File
-  field_filesize: Size
-  field_downloads: Downloads
-  field_author: Author
-  field_created_on: Created
-  field_updated_on: Updated
-  field_field_format: Format
-  field_is_for_all: For all projects
-  field_possible_values: Possible values
-  field_regexp: Regular expression
-  field_min_length: Minimum length
-  field_max_length: Maximum length
-  field_value: Value
-  field_category: Category
-  field_title: Title
-  field_project: Project
-  field_issue: Issue
-  field_status: Status
-  field_notes: Notes
-  field_is_closed: Issue closed
-  field_is_default: Default value
-  field_tracker: Tracker
-  field_subject: Subject
-  field_due_date: Due date
-  field_assigned_to: Assignee
-  field_priority: Priority
-  field_fixed_version: Target version
-  field_user: User
-  field_role: Role
-  field_homepage: Homepage
-  field_is_public: Public
-  field_parent: Subproject of
-  field_is_in_roadmap: Issues displayed in roadmap
-  field_login: Login
-  field_mail_notification: Email notifications
-  field_admin: Administrator
-  field_last_login_on: Last connection
-  field_language: Language
-  field_effective_date: Date
-  field_password: Password
-  field_new_password: New password
-  field_password_confirmation: Confirmation
-  field_version: Version
-  field_type: Type
-  field_host: Host
-  field_port: Port
-  field_account: Account
-  field_base_dn: Base DN
-  field_attr_login: Login attribute
-  field_attr_firstname: Firstname attribute
-  field_attr_lastname: Lastname attribute
-  field_attr_mail: Email attribute
-  field_onthefly: On-the-fly user creation
-  field_start_date: Start date
-  field_done_ratio: % Done
-  field_auth_source: Authentication mode
-  field_hide_mail: Hide my email address
-  field_comments: Comment
-  field_url: URL
-  field_start_page: Start page
-  field_subproject: Subproject
-  field_hours: Hours
-  field_activity: Activity
-  field_spent_on: Date
-  field_identifier: Identifier
-  field_is_filter: Used as a filter
-  field_issue_to: Related issue
-  field_delay: Delay
-  field_assignable: Issues can be assigned to this role
-  field_redirect_existing_links: Redirect existing links
-  field_estimated_hours: Estimated time
-  field_column_names: Columns
-  field_time_zone: Time zone
-  field_searchable: Searchable
-  field_default_value: Default value
-  field_comments_sorting: Display comments
-  field_parent_title: Parent page
-  field_editable: Editable
-  field_watcher: Watcher
-  field_identity_url: OpenID URL
-  field_content: Content
-  field_group_by: Group results by
-  field_sharing: Sharing
-  
-  setting_app_title: Application title
-  setting_app_subtitle: Application subtitle
-  setting_welcome_text: Welcome text
-  setting_default_language: Default language
-  setting_login_required: Authentication required
-  setting_self_registration: Self-registration
-  setting_attachment_max_size: Attachment max. size
-  setting_issues_export_limit: Issues export limit
-  setting_mail_from: Emission email address
-  setting_bcc_recipients: Blind carbon copy recipients (bcc)
-  setting_plain_text_mail: Plain text mail (no HTML)
-  setting_host_name: Host name and path
-  setting_text_formatting: Text formatting
-  setting_wiki_compression: Wiki history compression
-  setting_feeds_limit: Feed content limit
-  setting_default_projects_public: New projects are public by default
-  setting_autofetch_changesets: Autofetch commits
-  setting_sys_api_enabled: Enable WS for repository management
-  setting_commit_ref_keywords: Referencing keywords
-  setting_commit_fix_keywords: Fixing keywords
-  setting_autologin: Autologin
-  setting_date_format: Date format
-  setting_time_format: Time format
-  setting_cross_project_issue_relations: Allow cross-project issue relations
-  setting_issue_list_default_columns: Default columns displayed on the issue list
-  setting_repositories_encodings: Repositories encodings
-  setting_commit_logs_encoding: Commit messages encoding
-  setting_emails_footer: Emails footer
-  setting_protocol: Protocol
-  setting_per_page_options: Objects per page options
-  setting_user_format: Users display format
-  setting_activity_days_default: Days displayed on project activity
-  setting_display_subprojects_issues: Display subprojects issues on main projects by default
-  setting_enabled_scm: Enabled SCM
-  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
-  setting_mail_handler_api_enabled: Enable WS for incoming emails
-  setting_mail_handler_api_key: API key
-  setting_sequential_project_identifiers: Generate sequential project identifiers
-  setting_gravatar_enabled: Use Gravatar user icons
-  setting_gravatar_default: Default Gravatar image
-  setting_diff_max_lines_displayed: Max number of diff lines displayed
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_openid: Allow OpenID login and registration
-  setting_password_min_length: Minimum password length
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_field: Use the issue field
-  setting_issue_done_ratio_issue_status: Use the issue status
-  setting_start_of_week: Start calendars on
-  setting_rest_api_enabled: Enable REST web service
-  setting_cache_formatted_text: Cache formatted text
-  
-  permission_add_project: Create project
-  permission_add_subprojects: Create subprojects
-  permission_edit_project: Edit project
-  permission_select_project_modules: Select project modules
-  permission_manage_members: Manage members
-  permission_manage_project_activities: Manage project activities
-  permission_manage_versions: Manage versions
-  permission_manage_categories: Manage issue categories
-  permission_view_issues: View Issues
-  permission_add_issues: Add issues
-  permission_edit_issues: Edit issues
-  permission_manage_issue_relations: Manage issue relations
-  permission_add_issue_notes: Add notes
-  permission_edit_issue_notes: Edit notes
-  permission_edit_own_issue_notes: Edit own notes
-  permission_move_issues: Move issues
-  permission_delete_issues: Delete issues
-  permission_manage_public_queries: Manage public queries
-  permission_save_queries: Save queries
-  permission_view_gantt: View gantt chart
-  permission_view_calendar: View calendar
-  permission_view_issue_watchers: View watchers list
-  permission_add_issue_watchers: Add watchers
-  permission_delete_issue_watchers: Delete watchers
-  permission_log_time: Log spent time
-  permission_view_time_entries: View spent time
-  permission_edit_time_entries: Edit time logs
-  permission_edit_own_time_entries: Edit own time logs
-  permission_manage_news: Manage news
-  permission_comment_news: Comment news
-  permission_manage_documents: Manage documents
-  permission_view_documents: View documents
-  permission_manage_files: Manage files
-  permission_view_files: View files
-  permission_manage_wiki: Manage wiki
-  permission_rename_wiki_pages: Rename wiki pages
-  permission_delete_wiki_pages: Delete wiki pages
-  permission_view_wiki_pages: View wiki
-  permission_view_wiki_edits: View wiki history
-  permission_edit_wiki_pages: Edit wiki pages
-  permission_delete_wiki_pages_attachments: Delete attachments
-  permission_protect_wiki_pages: Protect wiki pages
-  permission_manage_repository: Manage repository
-  permission_browse_repository: Browse repository
-  permission_view_changesets: View changesets
-  permission_commit_access: Commit access
-  permission_manage_boards: Manage boards
-  permission_view_messages: View messages
-  permission_add_messages: Post messages
-  permission_edit_messages: Edit messages
-  permission_edit_own_messages: Edit own messages
-  permission_delete_messages: Delete messages
-  permission_delete_own_messages: Delete own messages
-  permission_export_wiki_pages: Export wiki pages
-  
-  project_module_issue_tracking: Issue tracking
-  project_module_time_tracking: Time tracking
-  project_module_news: News
-  project_module_documents: Documents
-  project_module_files: Files
-  project_module_wiki: Wiki
-  project_module_repository: Repository
-  project_module_boards: Boards
-  
-  label_user: User
-  label_user_plural: Users
-  label_user_new: New user
-  label_user_anonymous: Anonymous
-  label_project: Project
-  label_project_new: New project
-  label_project_plural: Projects
-  label_x_projects:
-    zero:  no projects
-    one:   1 project
-    other: "%{count} projects"
-  label_project_all: All Projects
-  label_project_latest: Latest projects
-  label_issue: Issue
-  label_issue_new: New issue
-  label_issue_plural: Issues
-  label_issue_view_all: View all issues
-  label_issues_by: "Issues by %{value}"
-  label_issue_added: Issue added
-  label_issue_updated: Issue updated
-  label_document: Document
-  label_document_new: New document
-  label_document_plural: Documents
-  label_document_added: Document added
-  label_role: Role
-  label_role_plural: Roles
-  label_role_new: New role
-  label_role_and_permissions: Roles and permissions
-  label_member: Member
-  label_member_new: New member
-  label_member_plural: Members
-  label_tracker: Tracker
-  label_tracker_plural: Trackers
-  label_tracker_new: New tracker
-  label_workflow: Workflow
-  label_issue_status: Issue status
-  label_issue_status_plural: Issue statuses
-  label_issue_status_new: New status
-  label_issue_category: Issue category
-  label_issue_category_plural: Issue categories
-  label_issue_category_new: New category
-  label_custom_field: Custom field
-  label_custom_field_plural: Custom fields
-  label_custom_field_new: New custom field
-  label_enumerations: Enumerations
-  label_enumeration_new: New value
-  label_information: Information
-  label_information_plural: Information
-  label_please_login: Please log in
-  label_register: Register
-  label_login_with_open_id_option: or login with OpenID
-  label_password_lost: Lost password
-  label_home: Home
-  label_my_page: My page
-  label_my_account: My account
-  label_my_projects: My projects
-  label_administration: Administration
-  label_login: Sign in
-  label_logout: Sign out
-  label_help: Help
-  label_reported_issues: Reported issues
-  label_assigned_to_me_issues: Issues assigned to me
-  label_last_login: Last connection
-  label_registered_on: Registered on
-  label_activity: Activity
-  label_overall_activity: Overall activity
-  label_user_activity: "%{value}'s activity"
-  label_new: New
-  label_logged_as: Logged in as
-  label_environment: Environment
-  label_authentication: Authentication
-  label_auth_source: Authentication mode
-  label_auth_source_new: New authentication mode
-  label_auth_source_plural: Authentication modes
-  label_subproject_plural: Subprojects
-  label_subproject_new: New subproject
-  label_and_its_subprojects: "%{value} and its subprojects"
-  label_min_max_length: Min - Max length
-  label_list: List
-  label_date: Date
-  label_integer: Integer
-  label_float: Float
-  label_boolean: Boolean
-  label_string: Text
-  label_text: Long text
-  label_attribute: Attribute
-  label_attribute_plural: Attributes
-  label_download: "%{count} Download"
-  label_download_plural: "%{count} Downloads"
-  label_no_data: No data to display
-  label_change_status: Change status
-  label_history: History
-  label_attachment: File
-  label_attachment_new: New file
-  label_attachment_delete: Delete file
-  label_attachment_plural: Files
-  label_file_added: File added
-  label_report: Report
-  label_report_plural: Reports
-  label_news: News
-  label_news_new: Add news
-  label_news_plural: News
-  label_news_latest: Latest news
-  label_news_view_all: View all news
-  label_news_added: News added
-  label_settings: Settings
-  label_overview: Overview
-  label_version: Version
-  label_version_new: New version
-  label_version_plural: Versions
-  label_close_versions: Close completed versions
-  label_confirmation: Confirmation
-  label_export_to: 'Also available in:'
-  label_read: Read...
-  label_public_projects: Public projects
-  label_open_issues: open
-  label_open_issues_plural: open
-  label_closed_issues: closed
-  label_closed_issues_plural: closed
-  label_x_open_issues_abbr_on_total:
-    zero:  0 open / %{total}
-    one:   1 open / %{total}
-    other: "%{count} open / %{total}"
-  label_x_open_issues_abbr:
-    zero:  0 open
-    one:   1 open
-    other: "%{count} open"
-  label_x_closed_issues_abbr:
-    zero:  0 closed
-    one:   1 closed
-    other: "%{count} closed"
-  label_total: Total
-  label_permissions: Permissions
-  label_current_status: Current status
-  label_new_statuses_allowed: New statuses allowed
-  label_all: all
-  label_none: none
-  label_nobody: nobody
-  label_next: Next
-  label_previous: Previous
-  label_used_by: Used by
-  label_details: Details
-  label_add_note: Add a note
-  label_per_page: Per page
-  label_calendar: Calendar
-  label_months_from: months from
-  label_gantt: Gantt
-  label_internal: Internal
-  label_last_changes: "last %{count} changes"
-  label_change_view_all: View all changes
-  label_personalize_page: Personalise this page
-  label_comment: Comment
-  label_comment_plural: Comments
-  label_x_comments:
-    zero: no comments
-    one: 1 comment
-    other: "%{count} comments"
-  label_comment_add: Add a comment
-  label_comment_added: Comment added
-  label_comment_delete: Delete comments
-  label_query: Custom query
-  label_query_plural: Custom queries
-  label_query_new: New query
-  label_filter_add: Add filter
-  label_filter_plural: Filters
-  label_equals: is
-  label_not_equals: is not
-  label_in_less_than: in less than
-  label_in_more_than: in more than
-  label_greater_or_equal: '>='
-  label_less_or_equal: '<='
-  label_in: in
-  label_today: today
-  label_all_time: all time
-  label_yesterday: yesterday
-  label_this_week: this week
-  label_last_week: last week
-  label_last_n_days: "last %{count} days"
-  label_this_month: this month
-  label_last_month: last month
-  label_this_year: this year
-  label_date_range: Date range
-  label_less_than_ago: less than days ago
-  label_more_than_ago: more than days ago
-  label_ago: days ago
-  label_contains: contains
-  label_not_contains: doesn't contain
-  label_day_plural: days
-  label_repository: Repository
-  label_repository_plural: Repositories
-  label_browse: Browse
-  label_modification: "%{count} change"
-  label_modification_plural: "%{count} changes"
-  label_branch: Branch
-  label_tag: Tag 
-  label_revision: Revision
-  label_revision_plural: Revisions
-  label_revision_id: "Revision %{value}"
-  label_associated_revisions: Associated revisions
-  label_added: added
-  label_modified: modified
-  label_copied: copied
-  label_renamed: renamed
-  label_deleted: deleted
-  label_latest_revision: Latest revision
-  label_latest_revision_plural: Latest revisions
-  label_view_revisions: View revisions
-  label_view_all_revisions: View all revisions
-  label_max_size: Maximum size
-  label_sort_highest: Move to top
-  label_sort_higher: Move up
-  label_sort_lower: Move down
-  label_sort_lowest: Move to bottom
-  label_roadmap: Roadmap
-  label_roadmap_due_in: "Due in %{value}"
-  label_roadmap_overdue: "%{value} late"
-  label_roadmap_no_issues: No issues for this version
-  label_search: Search
-  label_result_plural: Results
-  label_all_words: All words
-  label_wiki: Wiki
-  label_wiki_edit: Wiki edit
-  label_wiki_edit_plural: Wiki edits
-  label_wiki_page: Wiki page
-  label_wiki_page_plural: Wiki pages
-  label_index_by_title: Index by title
-  label_index_by_date: Index by date
-  label_current_version: Current version
-  label_preview: Preview
-  label_feed_plural: Feeds
-  label_changes_details: Details of all changes
-  label_issue_tracking: Issue tracking
-  label_spent_time: Spent time
-  label_f_hour: "%{value} hour"
-  label_f_hour_plural: "%{value} hours"
-  label_time_tracking: Time tracking
-  label_change_plural: Changes
-  label_statistics: Statistics
-  label_commits_per_month: Commits per month
-  label_commits_per_author: Commits per author
-  label_view_diff: View differences
-  label_diff_inline: inline
-  label_diff_side_by_side: side by side
-  label_options: Options
-  label_copy_workflow_from: Copy workflow from
-  label_permissions_report: Permissions report
-  label_watched_issues: Watched issues
-  label_related_issues: Related issues
-  label_applied_status: Applied status
-  label_loading: Loading...
-  label_relation_new: New relation
-  label_relation_delete: Delete relation
-  label_relates_to: related to
-  label_duplicates: duplicates
-  label_duplicated_by: duplicated by
-  label_blocks: blocks
-  label_blocked_by: blocked by
-  label_precedes: precedes
-  label_follows: follows
-  label_end_to_start: end to start
-  label_end_to_end: end to end
-  label_start_to_start: start to start
-  label_start_to_end: start to end
-  label_stay_logged_in: Stay logged in
-  label_disabled: disabled
-  label_show_completed_versions: Show completed versions
-  label_me: me
-  label_board: Forum
-  label_board_new: New forum
-  label_board_plural: Forums
-  label_board_locked: Locked
-  label_board_sticky: Sticky
-  label_topic_plural: Topics
-  label_message_plural: Messages
-  label_message_last: Last message
-  label_message_new: New message
-  label_message_posted: Message added
-  label_reply_plural: Replies
-  label_send_information: Send account information to the user
-  label_year: Year
-  label_month: Month
-  label_week: Week
-  label_date_from: From
-  label_date_to: To
-  label_language_based: Based on user's language
-  label_sort_by: "Sort by %{value}"
-  label_send_test_email: Send a test email
-  label_feeds_access_key: RSS access key
-  label_missing_feeds_access_key: Missing a RSS access key
-  label_feeds_access_key_created_on: "RSS access key created %{value} ago"
-  label_module_plural: Modules
-  label_added_time_by: "Added by %{author} %{age} ago"
-  label_updated_time_by: "Updated by %{author} %{age} ago"
-  label_updated_time: "Updated %{value} ago"
-  label_jump_to_a_project: Jump to a project...
-  label_file_plural: Files
-  label_changeset_plural: Changesets
-  label_default_columns: Default columns
-  label_no_change_option: (No change)
-  label_bulk_edit_selected_issues: Bulk edit selected issues
-  label_theme: Theme
-  label_default: Default
-  label_search_titles_only: Search titles only
-  label_user_mail_option_all: "For any event on all my projects"
-  label_user_mail_option_selected: "For any event on the selected projects only..."
-  label_user_mail_option_none: "No events"
-  label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
-  label_registration_activation_by_email: account activation by email
-  label_registration_manual_activation: manual account activation
-  label_registration_automatic_activation: automatic account activation
-  label_display_per_page: "Per page: %{value}"
-  label_age: Age
-  label_change_properties: Change properties
-  label_general: General
-  label_more: More
-  label_scm: SCM
-  label_plugins: Plugins
-  label_ldap_authentication: LDAP authentication
-  label_downloads_abbr: D/L
-  label_optional_description: Optional description
-  label_add_another_file: Add another file
-  label_preferences: Preferences
-  label_chronological_order: In chronological order
-  label_reverse_chronological_order: In reverse chronological order
-  label_planning: Planning
-  label_incoming_emails: Incoming emails
-  label_generate_key: Generate a key
-  label_issue_watchers: Watchers
-  label_example: Example
-  label_display: Display
-  label_sort: Sort
-  label_ascending: Ascending
-  label_descending: Descending
-  label_date_from_to: From %{start} to %{end}
-  label_wiki_content_added: Wiki page added
-  label_wiki_content_updated: Wiki page updated
-  label_group: Group
-  label_group_plural: Groups
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  label_version_sharing_none: Not shared
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_tree: With project tree
-  label_version_sharing_system: With all projects
-  label_update_issue_done_ratios: Update issue done ratios
-  label_copy_source: Source
-  label_copy_target: Target
-  label_copy_same_as_target: Same as target
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_api_access_key: API access key
-  label_missing_api_access_key: Missing an API access key
-  label_api_access_key_created_on: "API access key created %{value} ago"
-  
-  button_login: Login
-  button_submit: Submit
-  button_save: Save
-  button_check_all: Check all
-  button_uncheck_all: Uncheck all
-  button_delete: Delete
-  button_create: Create
-  button_create_and_continue: Create and continue
-  button_test: Test
-  button_edit: Edit
-  button_add: Add
-  button_change: Change
-  button_apply: Apply
-  button_clear: Clear
-  button_lock: Lock
-  button_unlock: Unlock
-  button_download: Download
-  button_list: List
-  button_view: View
-  button_move: Move
-  button_move_and_follow: Move and follow
-  button_back: Back
-  button_cancel: Cancel
-  button_activate: Activate
-  button_sort: Sort
-  button_log_time: Log time
-  button_rollback: Rollback to this version
-  button_watch: Watch
-  button_unwatch: Unwatch
-  button_reply: Reply
-  button_archive: Archive
-  button_unarchive: Unarchive
-  button_reset: Reset
-  button_rename: Rename
-  button_change_password: Change password
-  button_copy: Copy
-  button_copy_and_follow: Copy and follow
-  button_annotate: Annotate
-  button_update: Update
-  button_configure: Configure
-  button_quote: Quote
-  button_duplicate: Duplicate
-  button_show: Show
-  
-  status_active: active
-  status_registered: registered
-  status_locked: locked
-  
-  version_status_open: open
-  version_status_locked: locked
-  version_status_closed: closed
-
-  field_active: Active
-  
-  text_select_mail_notifications: Select actions for which email notifications should be sent.
-  text_regexp_info: eg. ^[A-Z0-9]+$
-  text_min_max_length_info: 0 means no restriction
-  text_project_destroy_confirmation: Are you sure you want to delete this project and related data?
-  text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted."
-  text_workflow_edit: Select a role and a tracker to edit the workflow
-  text_are_you_sure: Are you sure?
-  text_journal_changed: "%{label} changed from %{old} to %{new}"
-  text_journal_set_to: "%{label} set to %{value}"
-  text_journal_deleted: "%{label} deleted (%{old})"
-  text_journal_added: "%{label} %{value} added"
-  text_tip_issue_begin_day: task beginning this day
-  text_tip_issue_end_day: task ending this day
-  text_tip_issue_begin_end_day: task beginning and ending this day
-  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
-  text_caracters_maximum: "%{count} characters maximum."
-  text_caracters_minimum: "Must be at least %{count} characters long."
-  text_length_between: "Length between %{min} and %{max} characters."
-  text_tracker_no_workflow: No workflow defined for this tracker
-  text_unallowed_characters: Unallowed characters
-  text_comma_separated: Multiple values allowed (comma separated).
-  text_line_separated: Multiple values allowed (one line for each value).
-  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
-  text_issue_added: "Issue %{id} has been reported by %{author}."
-  text_issue_updated: "Issue %{id} has been updated by %{author}."
-  text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content?
-  text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do?"
-  text_issue_category_destroy_assignments: Remove category assignments
-  text_issue_category_reassign_to: Reassign issues to this category
-  text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
-  text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
-  text_load_default_configuration: Load the default configuration
-  text_status_changed_by_changeset: "Applied in changeset %{value}."
-  text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?'
-  text_select_project_modules: 'Select modules to enable for this project:'
-  text_default_administrator_account_changed: Default administrator account changed
-  text_file_repository_writable: Attachments directory writable
-  text_plugin_assets_writable: Plugin assets directory writable
-  text_rmagick_available: RMagick available (optional)
-  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do?"
-  text_destroy_time_entries: Delete reported hours
-  text_assign_time_entries_to_project: Assign reported hours to the project
-  text_reassign_time_entries: 'Reassign reported hours to this issue:'
-  text_user_wrote: "%{value} wrote:"
-  text_enumeration_destroy_question: "%{count} objects are assigned to this value."
-  text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
-  text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
-  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-  text_custom_field_possible_values_info: 'One line for each value'
-  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
-  text_wiki_page_nullify_children: "Keep child pages as root pages"
-  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
-  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
-  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
-  
-  default_role_manager: Manager
-  default_role_developer: Developer
-  default_role_reporter: Reporter
-  default_tracker_bug: Bug
-  default_tracker_feature: Feature
-  default_tracker_support: Support
-  default_issue_status_new: New
-  default_issue_status_in_progress: In Progress
-  default_issue_status_resolved: Resolved
-  default_issue_status_feedback: Feedback
-  default_issue_status_closed: Closed
-  default_issue_status_rejected: Rejected
-  default_doc_category_user: User documentation
-  default_doc_category_tech: Technical documentation
-  default_priority_low: Low
-  default_priority_normal: Normal
-  default_priority_high: High
-  default_priority_urgent: Urgent
-  default_priority_immediate: Immediate
-  default_activity_design: Design
-  default_activity_development: Development
-  
-  enumeration_issue_priorities: Issue priorities
-  enumeration_doc_categories: Document categories
-  enumeration_activities: Activities (time tracking)
-  enumeration_system_activity: System Activity
-
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  error_can_not_delete_custom_field: Unable to delete custom field
-  permission_manage_subtasks: Manage subtasks
-  label_profile: Profile
-  error_unable_to_connect: Unable to connect (%{value})
-  label_overall_spent_time: Overall spent time
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  field_principal: Principal
-  field_parent_issue: Parent task
-  label_my_page_block: My page block
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_subtask_plural: Subtasks
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  label_project_copy_notifications: Send email notifications during the project copy
-  field_time_entries: Log time
-  project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+en-GB:
+  direction: ltr
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%d/%m/%Y"
+      short: "%d %b"
+      long: "%d %B, %Y"
+      
+    day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
+    abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
+      
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
+    abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
+    # Used in date_select and datime_select.
+    order:
+      - :year
+      - :month
+      - :day
+
+  time:
+    formats:
+      default: "%d/%m/%Y %I:%M %p"
+      time: "%I:%M %p"
+      short: "%d %b %H:%M"
+      long: "%d %B, %Y %H:%M"
+    am: "am"
+    pm: "pm"
+      
+  datetime:
+    distance_in_words:
+      half_a_minute: "half a minute"
+      less_than_x_seconds:
+        one:   "less than 1 second"
+        other: "less than %{count} seconds"
+      x_seconds:
+        one:   "1 second"
+        other: "%{count} seconds"
+      less_than_x_minutes:
+        one:   "less than a minute"
+        other: "less than %{count} minutes"
+      x_minutes:
+        one:   "1 minute"
+        other: "%{count} minutes"
+      about_x_hours:
+        one:   "about 1 hour"
+        other: "about %{count} hours"
+      x_days:
+        one:   "1 day"
+        other: "%{count} days"
+      about_x_months:
+        one:   "about 1 month"
+        other: "about %{count} months"
+      x_months:
+        one:   "1 month"
+        other: "%{count} months"
+      about_x_years:
+        one:   "about 1 year"
+        other: "about %{count} years"
+      over_x_years:
+        one:   "over 1 year"
+        other: "over %{count} years"
+      almost_x_years:
+        one:   "almost 1 year"
+        other: "almost %{count} years"
+
+  number:
+    format:
+      separator: "."
+      delimiter: " "
+      precision: 3
+
+    currency:
+      format:
+        format: "%u%n"
+        unit: "£"
+
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Byte"
+            other: "Bytes"
+          kb: "kB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+        
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "and"
+      skip_last_comma: false
+      
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "1 error prohibited this %{model} from being saved"
+          other:  "%{count} errors prohibited this %{model} from being saved"
+      messages:
+        inclusion: "is not included in the list"
+        exclusion: "is reserved"
+        invalid: "is invalid"
+        confirmation: "doesn't match confirmation"
+        accepted: "must be accepted"
+        empty: "can't be empty"
+        blank: "can't be blank"
+        too_long: "is too long (maximum is %{count} characters)"
+        too_short: "is too short (minimum is %{count} characters)"
+        wrong_length: "is the wrong length (should be %{count} characters)"
+        taken: "has already been taken"
+        not_a_number: "is not a number"
+        not_a_date: "is not a valid date"
+        greater_than: "must be greater than %{count}"
+        greater_than_or_equal_to: "must be greater than or equal to %{count}"
+        equal_to: "must be equal to %{count}"
+        less_than: "must be less than %{count}"
+        less_than_or_equal_to: "must be less than or equal to %{count}"
+        odd: "must be odd"
+        even: "must be even"
+        greater_than_start_date: "must be greater than start date"
+        not_same_project: "doesn't belong to the same project"
+        circular_dependency: "This relation would create a circular dependency"
+        cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks"
+
+  actionview_instancetag_blank_option: Please select
+  
+  general_text_No: 'No'
+  general_text_Yes: 'Yes'
+  general_text_no: 'no'
+  general_text_yes: 'yes'
+  general_lang_name: 'English (British)'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '1'
+  
+  notice_account_updated: Account was successfully updated.
+  notice_account_invalid_creditentials: Invalid user or password
+  notice_account_password_updated: Password was successfully updated.
+  notice_account_wrong_password: Wrong password
+  notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
+  notice_account_unknown_email: Unknown user.
+  notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
+  notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
+  notice_account_activated: Your account has been activated. You can now log in.
+  notice_successful_create: Successful creation.
+  notice_successful_update: Successful update.
+  notice_successful_delete: Successful deletion.
+  notice_successful_connection: Successful connection.
+  notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
+  notice_locking_conflict: Data has been updated by another user.
+  notice_not_authorized: You are not authorised to access this page.
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  notice_email_sent: "An email was sent to %{value}"
+  notice_email_error: "An error occurred while sending mail (%{value})"
+  notice_feeds_access_key_reseted: Your RSS access key was reset.
+  notice_api_access_key_reseted: Your API access key was reset.
+  notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
+  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
+  notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
+  notice_account_pending: "Your account was created and is now pending administrator approval."
+  notice_default_data_loaded: Default configuration successfully loaded.
+  notice_unable_delete_version: Unable to delete version.
+  notice_unable_delete_time_entry: Unable to delete time log entry.
+  notice_issue_done_ratios_updated: Issue done ratios updated.
+  notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})"
+  
+  error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
+  error_scm_not_found: "The entry or revision was not found in the repository."
+  error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
+  error_scm_annotate: "The entry does not exist or cannot be annotated."
+  error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
+  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
+  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
+  error_can_not_delete_custom_field: Unable to delete custom field
+  error_can_not_delete_tracker: "This tracker contains issues and cannot be deleted."
+  error_can_not_remove_role: "This role is in use and cannot be deleted."
+  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version cannot be reopened'
+  error_can_not_archive_project: This project cannot be archived
+  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
+  error_workflow_copy_source: 'Please select a source tracker or role'
+  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
+  error_unable_delete_issue_status: 'Unable to delete issue status'
+  error_unable_to_connect: "Unable to connect (%{value})"
+  warning_attachments_not_saved: "%{count} file(s) could not be saved."
+  
+  mail_subject_lost_password: "Your %{value} password"
+  mail_body_lost_password: 'To change your password, click on the following link:'
+  mail_subject_register: "Your %{value} account activation"
+  mail_body_register: 'To activate your account, click on the following link:'
+  mail_body_account_information_external: "You can use your %{value} account to log in."
+  mail_body_account_information: Your account information
+  mail_subject_account_activation_request: "%{value} account activation request"
+  mail_body_account_activation_request: "A new user (%{value}) has registered. The account is pending your approval:"
+  mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
+  mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
+  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
+  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
+  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
+  
+  gui_validation_error: 1 error
+  gui_validation_error_plural: "%{count} errors"
+  
+  field_name: Name
+  field_description: Description
+  field_summary: Summary
+  field_is_required: Required
+  field_firstname: First name
+  field_lastname: Last name
+  field_mail: Email
+  field_filename: File
+  field_filesize: Size
+  field_downloads: Downloads
+  field_author: Author
+  field_created_on: Created
+  field_updated_on: Updated
+  field_field_format: Format
+  field_is_for_all: For all projects
+  field_possible_values: Possible values
+  field_regexp: Regular expression
+  field_min_length: Minimum length
+  field_max_length: Maximum length
+  field_value: Value
+  field_category: Category
+  field_title: Title
+  field_project: Project
+  field_issue: Issue
+  field_status: Status
+  field_notes: Notes
+  field_is_closed: Issue closed
+  field_is_default: Default value
+  field_tracker: Tracker
+  field_subject: Subject
+  field_due_date: Due date
+  field_assigned_to: Assignee
+  field_priority: Priority
+  field_fixed_version: Target version
+  field_user: User
+  field_principal: Principal
+  field_role: Role
+  field_homepage: Homepage
+  field_is_public: Public
+  field_parent: Subproject of
+  field_is_in_roadmap: Issues displayed in roadmap
+  field_login: Login
+  field_mail_notification: Email notifications
+  field_admin: Administrator
+  field_last_login_on: Last connection
+  field_language: Language
+  field_effective_date: Date
+  field_password: Password
+  field_new_password: New password
+  field_password_confirmation: Confirmation
+  field_version: Version
+  field_type: Type
+  field_host: Host
+  field_port: Port
+  field_account: Account
+  field_base_dn: Base DN
+  field_attr_login: Login attribute
+  field_attr_firstname: Firstname attribute
+  field_attr_lastname: Lastname attribute
+  field_attr_mail: Email attribute
+  field_onthefly: On-the-fly user creation
+  field_start_date: Start date
+  field_done_ratio: "% Done"
+  field_auth_source: Authentication mode
+  field_hide_mail: Hide my email address
+  field_comments: Comment
+  field_url: URL
+  field_start_page: Start page
+  field_subproject: Subproject
+  field_hours: Hours
+  field_activity: Activity
+  field_spent_on: Date
+  field_identifier: Identifier
+  field_is_filter: Used as a filter
+  field_issue_to: Related issue
+  field_delay: Delay
+  field_assignable: Issues can be assigned to this role
+  field_redirect_existing_links: Redirect existing links
+  field_estimated_hours: Estimated time
+  field_column_names: Columns
+  field_time_entries: Log time
+  field_time_zone: Time zone
+  field_searchable: Searchable
+  field_default_value: Default value
+  field_comments_sorting: Display comments
+  field_parent_title: Parent page
+  field_editable: Editable
+  field_watcher: Watcher
+  field_identity_url: OpenID URL
+  field_content: Content
+  field_group_by: Group results by
+  field_sharing: Sharing
+  field_parent_issue: Parent task
+  field_member_of_group: "Assignee's group"
+  field_assigned_to_role: "Assignee's role"
+  field_text: Text field
+  field_visible: Visible
+  field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text"
+  
+  setting_app_title: Application title
+  setting_app_subtitle: Application subtitle
+  setting_welcome_text: Welcome text
+  setting_default_language: Default language
+  setting_login_required: Authentication required
+  setting_self_registration: Self-registration
+  setting_attachment_max_size: Attachment max. size
+  setting_issues_export_limit: Issues export limit
+  setting_mail_from: Emission email address
+  setting_bcc_recipients: Blind carbon copy recipients (bcc)
+  setting_plain_text_mail: Plain text mail (no HTML)
+  setting_host_name: Host name and path
+  setting_text_formatting: Text formatting
+  setting_wiki_compression: Wiki history compression
+  setting_feeds_limit: Feed content limit
+  setting_default_projects_public: New projects are public by default
+  setting_autofetch_changesets: Autofetch commits
+  setting_sys_api_enabled: Enable WS for repository management
+  setting_commit_ref_keywords: Referencing keywords
+  setting_commit_fix_keywords: Fixing keywords
+  setting_autologin: Autologin
+  setting_date_format: Date format
+  setting_time_format: Time format
+  setting_cross_project_issue_relations: Allow cross-project issue relations
+  setting_issue_list_default_columns: Default columns displayed on the issue list
+  setting_repositories_encodings: Repositories encodings
+  setting_emails_header: Emails header
+  setting_emails_footer: Emails footer
+  setting_protocol: Protocol
+  setting_per_page_options: Objects per page options
+  setting_user_format: Users display format
+  setting_activity_days_default: Days displayed on project activity
+  setting_display_subprojects_issues: Display subprojects issues on main projects by default
+  setting_enabled_scm: Enabled SCM
+  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
+  setting_mail_handler_api_enabled: Enable WS for incoming emails
+  setting_mail_handler_api_key: API key
+  setting_sequential_project_identifiers: Generate sequential project identifiers
+  setting_gravatar_enabled: Use Gravatar user icons
+  setting_gravatar_default: Default Gravatar image
+  setting_diff_max_lines_displayed: Max number of diff lines displayed
+  setting_file_max_size_displayed: Max size of text files displayed inline
+  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
+  setting_openid: Allow OpenID login and registration
+  setting_password_min_length: Minimum password length
+  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
+  setting_default_projects_modules: Default enabled modules for new projects
+  setting_issue_done_ratio: Calculate the issue done ratio with
+  setting_issue_done_ratio_issue_field: Use the issue field
+  setting_issue_done_ratio_issue_status: Use the issue status
+  setting_start_of_week: Start calendars on
+  setting_rest_api_enabled: Enable REST web service
+  setting_cache_formatted_text: Cache formatted text
+  setting_default_notification_option: Default notification option
+  setting_commit_logtime_enabled: Enable time logging
+  setting_commit_logtime_activity_id: Activity for logged time
+  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  
+  permission_add_project: Create project
+  permission_add_subprojects: Create subprojects
+  permission_edit_project: Edit project
+  permission_select_project_modules: Select project modules
+  permission_manage_members: Manage members
+  permission_manage_project_activities: Manage project activities
+  permission_manage_versions: Manage versions
+  permission_manage_categories: Manage issue categories
+  permission_view_issues: View Issues
+  permission_add_issues: Add issues
+  permission_edit_issues: Edit issues
+  permission_manage_issue_relations: Manage issue relations
+  permission_add_issue_notes: Add notes
+  permission_edit_issue_notes: Edit notes
+  permission_edit_own_issue_notes: Edit own notes
+  permission_move_issues: Move issues
+  permission_delete_issues: Delete issues
+  permission_manage_public_queries: Manage public queries
+  permission_save_queries: Save queries
+  permission_view_gantt: View gantt chart
+  permission_view_calendar: View calendar
+  permission_view_issue_watchers: View watchers list
+  permission_add_issue_watchers: Add watchers
+  permission_delete_issue_watchers: Delete watchers
+  permission_log_time: Log spent time
+  permission_view_time_entries: View spent time
+  permission_edit_time_entries: Edit time logs
+  permission_edit_own_time_entries: Edit own time logs
+  permission_manage_news: Manage news
+  permission_comment_news: Comment news
+  permission_manage_documents: Manage documents
+  permission_view_documents: View documents
+  permission_manage_files: Manage files
+  permission_view_files: View files
+  permission_manage_wiki: Manage wiki
+  permission_rename_wiki_pages: Rename wiki pages
+  permission_delete_wiki_pages: Delete wiki pages
+  permission_view_wiki_pages: View wiki
+  permission_view_wiki_edits: View wiki history
+  permission_edit_wiki_pages: Edit wiki pages
+  permission_delete_wiki_pages_attachments: Delete attachments
+  permission_protect_wiki_pages: Protect wiki pages
+  permission_manage_repository: Manage repository
+  permission_browse_repository: Browse repository
+  permission_view_changesets: View changesets
+  permission_commit_access: Commit access
+  permission_manage_boards: Manage forums
+  permission_view_messages: View messages
+  permission_add_messages: Post messages
+  permission_edit_messages: Edit messages
+  permission_edit_own_messages: Edit own messages
+  permission_delete_messages: Delete messages
+  permission_delete_own_messages: Delete own messages
+  permission_export_wiki_pages: Export wiki pages
+  permission_manage_subtasks: Manage subtasks
+  
+  project_module_issue_tracking: Issue tracking
+  project_module_time_tracking: Time tracking
+  project_module_news: News
+  project_module_documents: Documents
+  project_module_files: Files
+  project_module_wiki: Wiki
+  project_module_repository: Repository
+  project_module_boards: Forums
+  project_module_calendar: Calendar
+  project_module_gantt: Gantt
+  
+  label_user: User
+  label_user_plural: Users
+  label_user_new: New user
+  label_user_anonymous: Anonymous
+  label_project: Project
+  label_project_new: New project
+  label_project_plural: Projects
+  label_x_projects:
+    zero:  no projects
+    one:   1 project
+    other: "%{count} projects"
+  label_project_all: All Projects
+  label_project_latest: Latest projects
+  label_issue: Issue
+  label_issue_new: New issue
+  label_issue_plural: Issues
+  label_issue_view_all: View all issues
+  label_issues_by: "Issues by %{value}"
+  label_issue_added: Issue added
+  label_issue_updated: Issue updated
+  label_document: Document
+  label_document_new: New document
+  label_document_plural: Documents
+  label_document_added: Document added
+  label_role: Role
+  label_role_plural: Roles
+  label_role_new: New role
+  label_role_and_permissions: Roles and permissions
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_member: Member
+  label_member_new: New member
+  label_member_plural: Members
+  label_tracker: Tracker
+  label_tracker_plural: Trackers
+  label_tracker_new: New tracker
+  label_workflow: Workflow
+  label_issue_status: Issue status
+  label_issue_status_plural: Issue statuses
+  label_issue_status_new: New status
+  label_issue_category: Issue category
+  label_issue_category_plural: Issue categories
+  label_issue_category_new: New category
+  label_custom_field: Custom field
+  label_custom_field_plural: Custom fields
+  label_custom_field_new: New custom field
+  label_enumerations: Enumerations
+  label_enumeration_new: New value
+  label_information: Information
+  label_information_plural: Information
+  label_please_login: Please log in
+  label_register: Register
+  label_login_with_open_id_option: or login with OpenID
+  label_password_lost: Lost password
+  label_home: Home
+  label_my_page: My page
+  label_my_account: My account
+  label_my_projects: My projects
+  label_my_page_block: My page block
+  label_administration: Administration
+  label_login: Sign in
+  label_logout: Sign out
+  label_help: Help
+  label_reported_issues: Reported issues
+  label_assigned_to_me_issues: Issues assigned to me
+  label_last_login: Last connection
+  label_registered_on: Registered on
+  label_activity: Activity
+  label_overall_activity: Overall activity
+  label_user_activity: "%{value}'s activity"
+  label_new: New
+  label_logged_as: Logged in as
+  label_environment: Environment
+  label_authentication: Authentication
+  label_auth_source: Authentication mode
+  label_auth_source_new: New authentication mode
+  label_auth_source_plural: Authentication modes
+  label_subproject_plural: Subprojects
+  label_subproject_new: New subproject
+  label_and_its_subprojects: "%{value} and its subprojects"
+  label_min_max_length: Min - Max length
+  label_list: List
+  label_date: Date
+  label_integer: Integer
+  label_float: Float
+  label_boolean: Boolean
+  label_string: Text
+  label_text: Long text
+  label_attribute: Attribute
+  label_attribute_plural: Attributes
+  label_download: "%{count} Download"
+  label_download_plural: "%{count} Downloads"
+  label_no_data: No data to display
+  label_change_status: Change status
+  label_history: History
+  label_attachment: File
+  label_attachment_new: New file
+  label_attachment_delete: Delete file
+  label_attachment_plural: Files
+  label_file_added: File added
+  label_report: Report
+  label_report_plural: Reports
+  label_news: News
+  label_news_new: Add news
+  label_news_plural: News
+  label_news_latest: Latest news
+  label_news_view_all: View all news
+  label_news_added: News added
+  label_news_comment_added: Comment added to a news
+  label_settings: Settings
+  label_overview: Overview
+  label_version: Version
+  label_version_new: New version
+  label_version_plural: Versions
+  label_close_versions: Close completed versions
+  label_confirmation: Confirmation
+  label_export_to: 'Also available in:'
+  label_read: Read...
+  label_public_projects: Public projects
+  label_open_issues: open
+  label_open_issues_plural: open
+  label_closed_issues: closed
+  label_closed_issues_plural: closed
+  label_x_open_issues_abbr_on_total:
+    zero:  0 open / %{total}
+    one:   1 open / %{total}
+    other: "%{count} open / %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 open
+    one:   1 open
+    other: "%{count} open"
+  label_x_closed_issues_abbr:
+    zero:  0 closed
+    one:   1 closed
+    other: "%{count} closed"
+  label_total: Total
+  label_permissions: Permissions
+  label_current_status: Current status
+  label_new_statuses_allowed: New statuses allowed
+  label_all: all
+  label_none: none
+  label_nobody: nobody
+  label_next: Next
+  label_previous: Previous
+  label_used_by: Used by
+  label_details: Details
+  label_add_note: Add a note
+  label_per_page: Per page
+  label_calendar: Calendar
+  label_months_from: months from
+  label_gantt: Gantt
+  label_internal: Internal
+  label_last_changes: "last %{count} changes"
+  label_change_view_all: View all changes
+  label_personalize_page: Personalise this page
+  label_comment: Comment
+  label_comment_plural: Comments
+  label_x_comments:
+    zero: no comments
+    one: 1 comment
+    other: "%{count} comments"
+  label_comment_add: Add a comment
+  label_comment_added: Comment added
+  label_comment_delete: Delete comments
+  label_query: Custom query
+  label_query_plural: Custom queries
+  label_query_new: New query
+  label_my_queries: My custom queries
+  label_filter_add: Add filter
+  label_filter_plural: Filters
+  label_equals: is
+  label_not_equals: is not
+  label_in_less_than: in less than
+  label_in_more_than: in more than
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: in
+  label_today: today
+  label_all_time: all time
+  label_yesterday: yesterday
+  label_this_week: this week
+  label_last_week: last week
+  label_last_n_days: "last %{count} days"
+  label_this_month: this month
+  label_last_month: last month
+  label_this_year: this year
+  label_date_range: Date range
+  label_less_than_ago: less than days ago
+  label_more_than_ago: more than days ago
+  label_ago: days ago
+  label_contains: contains
+  label_not_contains: doesn't contain
+  label_day_plural: days
+  label_repository: Repository
+  label_repository_plural: Repositories
+  label_browse: Browse
+  label_modification: "%{count} change"
+  label_modification_plural: "%{count} changes"
+  label_branch: Branch
+  label_tag: Tag 
+  label_revision: Revision
+  label_revision_plural: Revisions
+  label_revision_id: "Revision %{value}"
+  label_associated_revisions: Associated revisions
+  label_added: added
+  label_modified: modified
+  label_copied: copied
+  label_renamed: renamed
+  label_deleted: deleted
+  label_latest_revision: Latest revision
+  label_latest_revision_plural: Latest revisions
+  label_view_revisions: View revisions
+  label_view_all_revisions: View all revisions
+  label_max_size: Maximum size
+  label_sort_highest: Move to top
+  label_sort_higher: Move up
+  label_sort_lower: Move down
+  label_sort_lowest: Move to bottom
+  label_roadmap: Roadmap
+  label_roadmap_due_in: "Due in %{value}"
+  label_roadmap_overdue: "%{value} late"
+  label_roadmap_no_issues: No issues for this version
+  label_search: Search
+  label_result_plural: Results
+  label_all_words: All words
+  label_wiki: Wiki
+  label_wiki_edit: Wiki edit
+  label_wiki_edit_plural: Wiki edits
+  label_wiki_page: Wiki page
+  label_wiki_page_plural: Wiki pages
+  label_index_by_title: Index by title
+  label_index_by_date: Index by date
+  label_current_version: Current version
+  label_preview: Preview
+  label_feed_plural: Feeds
+  label_changes_details: Details of all changes
+  label_issue_tracking: Issue tracking
+  label_spent_time: Spent time
+  label_overall_spent_time: Overall spent time
+  label_f_hour: "%{value} hour"
+  label_f_hour_plural: "%{value} hours"
+  label_time_tracking: Time tracking
+  label_change_plural: Changes
+  label_statistics: Statistics
+  label_commits_per_month: Commits per month
+  label_commits_per_author: Commits per author
+  label_view_diff: View differences
+  label_diff_inline: inline
+  label_diff_side_by_side: side by side
+  label_options: Options
+  label_copy_workflow_from: Copy workflow from
+  label_permissions_report: Permissions report
+  label_watched_issues: Watched issues
+  label_related_issues: Related issues
+  label_applied_status: Applied status
+  label_loading: Loading...
+  label_relation_new: New relation
+  label_relation_delete: Delete relation
+  label_relates_to: related to
+  label_duplicates: duplicates
+  label_duplicated_by: duplicated by
+  label_blocks: blocks
+  label_blocked_by: blocked by
+  label_precedes: precedes
+  label_follows: follows
+  label_end_to_start: end to start
+  label_end_to_end: end to end
+  label_start_to_start: start to start
+  label_start_to_end: start to end
+  label_stay_logged_in: Stay logged in
+  label_disabled: disabled
+  label_show_completed_versions: Show completed versions
+  label_me: me
+  label_board: Forum
+  label_board_new: New forum
+  label_board_plural: Forums
+  label_board_locked: Locked
+  label_board_sticky: Sticky
+  label_topic_plural: Topics
+  label_message_plural: Messages
+  label_message_last: Last message
+  label_message_new: New message
+  label_message_posted: Message added
+  label_reply_plural: Replies
+  label_send_information: Send account information to the user
+  label_year: Year
+  label_month: Month
+  label_week: Week
+  label_date_from: From
+  label_date_to: To
+  label_language_based: Based on user's language
+  label_sort_by: "Sort by %{value}"
+  label_send_test_email: Send a test email
+  label_feeds_access_key: RSS access key
+  label_missing_feeds_access_key: Missing a RSS access key
+  label_feeds_access_key_created_on: "RSS access key created %{value} ago"
+  label_module_plural: Modules
+  label_added_time_by: "Added by %{author} %{age} ago"
+  label_updated_time_by: "Updated by %{author} %{age} ago"
+  label_updated_time: "Updated %{value} ago"
+  label_jump_to_a_project: Jump to a project...
+  label_file_plural: Files
+  label_changeset_plural: Changesets
+  label_default_columns: Default columns
+  label_no_change_option: (No change)
+  label_bulk_edit_selected_issues: Bulk edit selected issues
+  label_theme: Theme
+  label_default: Default
+  label_search_titles_only: Search titles only
+  label_user_mail_option_all: "For any event on all my projects"
+  label_user_mail_option_selected: "For any event on the selected projects only..."
+  label_user_mail_option_none: "No events"
+  label_user_mail_option_only_my_events: "Only for things I watch or I'm involved in"
+  label_user_mail_option_only_assigned: "Only for things I am assigned to"
+  label_user_mail_option_only_owner: "Only for things I am the owner of"
+  label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
+  label_registration_activation_by_email: account activation by email
+  label_registration_manual_activation: manual account activation
+  label_registration_automatic_activation: automatic account activation
+  label_display_per_page: "Per page: %{value}"
+  label_age: Age
+  label_change_properties: Change properties
+  label_general: General
+  label_more: More
+  label_scm: SCM
+  label_plugins: Plugins
+  label_ldap_authentication: LDAP authentication
+  label_downloads_abbr: D/L
+  label_optional_description: Optional description
+  label_add_another_file: Add another file
+  label_preferences: Preferences
+  label_chronological_order: In chronological order
+  label_reverse_chronological_order: In reverse chronological order
+  label_planning: Planning
+  label_incoming_emails: Incoming emails
+  label_generate_key: Generate a key
+  label_issue_watchers: Watchers
+  label_example: Example
+  label_display: Display
+  label_sort: Sort
+  label_ascending: Ascending
+  label_descending: Descending
+  label_date_from_to: From %{start} to %{end}
+  label_wiki_content_added: Wiki page added
+  label_wiki_content_updated: Wiki page updated
+  label_group: Group
+  label_group_plural: Groups
+  label_group_new: New group
+  label_time_entry_plural: Spent time
+  label_version_sharing_none: Not shared
+  label_version_sharing_descendants: With subprojects
+  label_version_sharing_hierarchy: With project hierarchy
+  label_version_sharing_tree: With project tree
+  label_version_sharing_system: With all projects
+  label_update_issue_done_ratios: Update issue done ratios
+  label_copy_source: Source
+  label_copy_target: Target
+  label_copy_same_as_target: Same as target
+  label_display_used_statuses_only: Only display statuses that are used by this tracker
+  label_api_access_key: API access key
+  label_missing_api_access_key: Missing an API access key
+  label_api_access_key_created_on: "API access key created %{value} ago"
+  label_profile: Profile
+  label_subtask_plural: Subtasks
+  label_project_copy_notifications: Send email notifications during the project copy
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  
+  button_login: Login
+  button_submit: Submit
+  button_save: Save
+  button_check_all: Check all
+  button_uncheck_all: Uncheck all
+  button_collapse_all: Collapse all
+  button_expand_all: Expand all
+  button_delete: Delete
+  button_create: Create
+  button_create_and_continue: Create and continue
+  button_test: Test
+  button_edit: Edit
+  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
+  button_add: Add
+  button_change: Change
+  button_apply: Apply
+  button_clear: Clear
+  button_lock: Lock
+  button_unlock: Unlock
+  button_download: Download
+  button_list: List
+  button_view: View
+  button_move: Move
+  button_move_and_follow: Move and follow
+  button_back: Back
+  button_cancel: Cancel
+  button_activate: Activate
+  button_sort: Sort
+  button_log_time: Log time
+  button_rollback: Rollback to this version
+  button_watch: Watch
+  button_unwatch: Unwatch
+  button_reply: Reply
+  button_archive: Archive
+  button_unarchive: Unarchive
+  button_reset: Reset
+  button_rename: Rename
+  button_change_password: Change password
+  button_copy: Copy
+  button_copy_and_follow: Copy and follow
+  button_annotate: Annotate
+  button_update: Update
+  button_configure: Configure
+  button_quote: Quote
+  button_duplicate: Duplicate
+  button_show: Show
+  
+  status_active: active
+  status_registered: registered
+  status_locked: locked
+  
+  version_status_open: open
+  version_status_locked: locked
+  version_status_closed: closed
+
+  field_active: Active
+  
+  text_select_mail_notifications: Select actions for which email notifications should be sent.
+  text_regexp_info: eg. ^[A-Z0-9]+$
+  text_min_max_length_info: 0 means no restriction
+  text_project_destroy_confirmation: Are you sure you want to delete this project and related data?
+  text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted."
+  text_workflow_edit: Select a role and a tracker to edit the workflow
+  text_are_you_sure: Are you sure?
+  text_are_you_sure_with_children: "Delete issue and all child issues?"
+  text_journal_changed: "%{label} changed from %{old} to %{new}"
+  text_journal_changed_no_detail: "%{label} updated"
+  text_journal_set_to: "%{label} set to %{value}"
+  text_journal_deleted: "%{label} deleted (%{old})"
+  text_journal_added: "%{label} %{value} added"
+  text_tip_issue_begin_day: task beginning this day
+  text_tip_issue_end_day: task ending this day
+  text_tip_issue_begin_end_day: task beginning and ending this day
+  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier cannot be changed.'
+  text_caracters_maximum: "%{count} characters maximum."
+  text_caracters_minimum: "Must be at least %{count} characters long."
+  text_length_between: "Length between %{min} and %{max} characters."
+  text_tracker_no_workflow: No workflow defined for this tracker
+  text_unallowed_characters: Unallowed characters
+  text_comma_separated: Multiple values allowed (comma separated).
+  text_line_separated: Multiple values allowed (one line for each value).
+  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
+  text_issue_added: "Issue %{id} has been reported by %{author}."
+  text_issue_updated: "Issue %{id} has been updated by %{author}."
+  text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content?
+  text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do?"
+  text_issue_category_destroy_assignments: Remove category assignments
+  text_issue_category_reassign_to: Reassign issues to this category
+  text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
+  text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
+  text_load_default_configuration: Load the default configuration
+  text_status_changed_by_changeset: "Applied in changeset %{value}."
+  text_time_logged_by_changeset: "Applied in changeset %{value}."
+  text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?'
+  text_select_project_modules: 'Select modules to enable for this project:'
+  text_default_administrator_account_changed: Default administrator account changed
+  text_file_repository_writable: Attachments directory writable
+  text_plugin_assets_writable: Plugin assets directory writable
+  text_rmagick_available: RMagick available (optional)
+  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do?"
+  text_destroy_time_entries: Delete reported hours
+  text_assign_time_entries_to_project: Assign reported hours to the project
+  text_reassign_time_entries: 'Reassign reported hours to this issue:'
+  text_user_wrote: "%{value} wrote:"
+  text_enumeration_destroy_question: "%{count} objects are assigned to this value."
+  text_enumeration_category_reassign_to: 'Reassign them to this value:'
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
+  text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
+  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
+  text_custom_field_possible_values_info: 'One line for each value'
+  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
+  text_wiki_page_nullify_children: "Keep child pages as root pages"
+  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
+  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
+  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
+  text_zoom_in: Zoom in
+  text_zoom_out: Zoom out
+  text_warn_on_leaving_unsaved: "The current page contains unsaved text that will be lost if you leave this page."
+  
+  default_role_manager: Manager
+  default_role_developer: Developer
+  default_role_reporter: Reporter
+  default_tracker_bug: Bug
+  default_tracker_feature: Feature
+  default_tracker_support: Support
+  default_issue_status_new: New
+  default_issue_status_in_progress: In Progress
+  default_issue_status_resolved: Resolved
+  default_issue_status_feedback: Feedback
+  default_issue_status_closed: Closed
+  default_issue_status_rejected: Rejected
+  default_doc_category_user: User documentation
+  default_doc_category_tech: Technical documentation
+  default_priority_low: Low
+  default_priority_normal: Normal
+  default_priority_high: High
+  default_priority_urgent: Urgent
+  default_priority_immediate: Immediate
+  default_activity_design: Design
+  default_activity_development: Development
+  
+  enumeration_issue_priorities: Issue priorities
+  enumeration_doc_categories: Document categories
+  enumeration_activities: Activities (time tracking)
+  enumeration_system_activity: System Activity
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/en.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/en.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -17,7 +17,10 @@
     month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -66,11 +69,11 @@
         other: "almost %{count} years"
 
   number:
-    # Default format for numbers
     format:
       separator: "." 
       delimiter: ""
       precision: 3
+
     human:
       format:
         delimiter: ""
@@ -123,7 +126,7 @@
         greater_than_start_date: "must be greater than start date"
         not_same_project: "doesn't belong to the same project"
         circular_dependency: "This relation would create a circular dependency"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks"
 
   actionview_instancetag_blank_option: Please select
   
@@ -135,7 +138,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '7'
   
   notice_account_updated: Account was successfully updated.
@@ -172,15 +175,15 @@
   error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
   error_scm_not_found: "The entry or revision was not found in the repository."
   error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
-  error_scm_annotate: "The entry does not exist or can not be annotated."
+  error_scm_annotate: "The entry does not exist or cannot be annotated."
   error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
   error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
   error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
   error_can_not_delete_custom_field: Unable to delete custom field
-  error_can_not_delete_tracker: "This tracker contains issues and can't be deleted."
-  error_can_not_remove_role: "This role is in use and can not be deleted."
-  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
-  error_can_not_archive_project: This project can not be archived
+  error_can_not_delete_tracker: "This tracker contains issues and cannot be deleted."
+  error_can_not_remove_role: "This role is in use and cannot be deleted."
+  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version cannot be reopened'
+  error_can_not_archive_project: This project cannot be archived
   error_issue_done_ratios_not_updated: "Issue done ratios not updated."
   error_workflow_copy_source: 'Please select a source tracker or role'
   error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
@@ -210,8 +213,8 @@
   field_description: Description
   field_summary: Summary
   field_is_required: Required
-  field_firstname: Firstname
-  field_lastname: Lastname
+  field_firstname: First name
+  field_lastname: Last name
   field_mail: Email
   field_filename: File
   field_filesize: Size
@@ -268,7 +271,7 @@
   field_attr_mail: Email attribute
   field_onthefly: On-the-fly user creation
   field_start_date: Start date
-  field_done_ratio: % Done
+  field_done_ratio: "% Done"
   field_auth_source: Authentication mode
   field_hide_mail: Hide my email address
   field_comments: Comment
@@ -304,7 +307,15 @@
   field_text: Text field
   field_visible: Visible
   field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text"
-  
+  field_issues_visibility: Issues visibility
+  field_is_private: Private
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvsroot: CVSROOT
+  field_cvs_module: Module
+
   setting_app_title: Application title
   setting_app_subtitle: Application subtitle
   setting_welcome_text: Welcome text
@@ -331,7 +342,6 @@
   setting_cross_project_issue_relations: Allow cross-project issue relations
   setting_issue_list_default_columns: Default columns displayed on the issue list
   setting_repositories_encodings: Repositories encodings
-  setting_commit_logs_encoding: Commit messages encoding
   setting_emails_header: Emails header
   setting_emails_footer: Emails footer
   setting_protocol: Protocol
@@ -376,6 +386,8 @@
   permission_add_issues: Add issues
   permission_edit_issues: Edit issues
   permission_manage_issue_relations: Manage issue relations
+  permission_set_issues_private: Set issues public or private
+  permission_set_own_issues_private: Set own issues public or private
   permission_add_issue_notes: Add notes
   permission_edit_issue_notes: Edit notes
   permission_edit_own_issue_notes: Edit own notes
@@ -410,7 +422,7 @@
   permission_browse_repository: Browse repository
   permission_view_changesets: View changesets
   permission_commit_access: Commit access
-  permission_manage_boards: Manage boards
+  permission_manage_boards: Manage forums
   permission_view_messages: View messages
   permission_add_messages: Post messages
   permission_edit_messages: Edit messages
@@ -427,7 +439,7 @@
   project_module_files: Files
   project_module_wiki: Wiki
   project_module_repository: Repository
-  project_module_boards: Boards
+  project_module_boards: Forums
   project_module_calendar: Calendar
   project_module_gantt: Gantt
   
@@ -451,6 +463,9 @@
   label_issues_by: "Issues by %{value}"
   label_issue_added: Issue added
   label_issue_updated: Issue updated
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
   label_document: Document
   label_document_new: New document
   label_document_plural: Documents
@@ -459,6 +474,8 @@
   label_role_plural: Roles
   label_role_new: New role
   label_role_and_permissions: Roles and permissions
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
   label_member: Member
   label_member_new: New member
   label_member_plural: Members
@@ -537,6 +554,7 @@
   label_news_latest: Latest news
   label_news_view_all: View all news
   label_news_added: News added
+  label_news_comment_added: Comment added to a news
   label_settings: Settings
   label_overview: Overview
   label_version: Version
@@ -734,6 +752,7 @@
   label_default_columns: Default columns
   label_no_change_option: (No change)
   label_bulk_edit_selected_issues: Bulk edit selected issues
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
   label_theme: Theme
   label_default: Default
   label_search_titles_only: Search titles only
@@ -795,12 +814,20 @@
   label_project_copy_notifications: Send email notifications during the project copy
   label_principal_search: "Search for user or group:"
   label_user_search: "Search for user:"
-  
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_issues_visibility_all: All issues
+  label_issues_visibility_public: All non private issues
+  label_issues_visibility_own: Issues created by or assigned to the user
+  label_git_report_last_commit: Report last commit for files and directories
+
   button_login: Login
   button_submit: Submit
   button_save: Save
   button_check_all: Check all
   button_uncheck_all: Uncheck all
+  button_collapse_all: Collapse all
+  button_expand_all: Expand all
   button_delete: Delete
   button_create: Create
   button_create_and_continue: Create and continue
@@ -840,24 +867,24 @@
   button_quote: Quote
   button_duplicate: Duplicate
   button_show: Show
-  
+
   status_active: active
   status_registered: registered
   status_locked: locked
-  
+
   version_status_open: open
   version_status_locked: locked
   version_status_closed: closed
 
   field_active: Active
-  
+
   text_select_mail_notifications: Select actions for which email notifications should be sent.
   text_regexp_info: eg. ^[A-Z0-9]+$
   text_min_max_length_info: 0 means no restriction
-  text_project_destroy_confirmation: Are you sure you want to delete this project and related data ?
+  text_project_destroy_confirmation: Are you sure you want to delete this project and related data?
   text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted."
   text_workflow_edit: Select a role and a tracker to edit the workflow
-  text_are_you_sure: Are you sure ?
+  text_are_you_sure: Are you sure?
   text_are_you_sure_with_children: "Delete issue and all child issues?"
   text_journal_changed: "%{label} changed from %{old} to %{new}"
   text_journal_changed_no_detail: "%{label} updated"
@@ -867,7 +894,7 @@
   text_tip_issue_begin_day: issue beginning this day
   text_tip_issue_end_day: issue ending this day
   text_tip_issue_begin_end_day: issue beginning and ending this day
-  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
+  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier cannot be changed.'
   text_caracters_maximum: "%{count} characters maximum."
   text_caracters_minimum: "Must be at least %{count} characters long."
   text_length_between: "Length between %{min} and %{max} characters."
@@ -878,8 +905,8 @@
   text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
   text_issue_added: "Issue %{id} has been reported by %{author}."
   text_issue_updated: "Issue %{id} has been updated by %{author}."
-  text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ?
-  text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do ?"
+  text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content?
+  text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do?"
   text_issue_category_destroy_assignments: Remove category assignments
   text_issue_category_reassign_to: Reassign issues to this category
   text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
@@ -887,13 +914,15 @@
   text_load_default_configuration: Load the default configuration
   text_status_changed_by_changeset: "Applied in changeset %{value}."
   text_time_logged_by_changeset: "Applied in changeset %{value}."
-  text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?'
+  text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?'
+  text_issues_destroy_descendants_confirmation: "This will also delete %{count} subtask(s)."
+  text_time_entries_destroy_confirmation: 'Are you sure you want to delete the selected time entr(y/ies)?'
   text_select_project_modules: 'Select modules to enable for this project:'
   text_default_administrator_account_changed: Default administrator account changed
   text_file_repository_writable: Attachments directory writable
   text_plugin_assets_writable: Plugin assets directory writable
   text_rmagick_available: RMagick available (optional)
-  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do ?"
+  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do?"
   text_destroy_time_entries: Delete reported hours
   text_assign_time_entries_to_project: Assign reported hours to the project
   text_reassign_time_entries: 'Reassign reported hours to this issue:'
@@ -912,7 +941,14 @@
   text_zoom_in: Zoom in
   text_zoom_out: Zoom out
   text_warn_on_leaving_unsaved: "The current page contains unsaved text that will be lost if you leave this page."
-  
+  text_scm_path_encoding_note: "Default: UTF-8"
+  text_git_repository_note: "Bare and local repository (e.g. /gitrepo, c:\gitrepo)"
+  text_mercurial_repository_note: "Local repository (e.g. /hgrepo, c:\hgrepo)"
+  text_scm_command: Command
+  text_scm_command_version: Version
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
+
   default_role_manager: Manager
   default_role_developer: Developer
   default_role_reporter: Reporter
@@ -934,9 +970,8 @@
   default_priority_immediate: Immediate
   default_activity_design: Design
   default_activity_development: Development
-  
+
   enumeration_issue_priorities: Issue priorities
   enumeration_doc_categories: Document categories
   enumeration_activities: Activities (time tracking)
   enumeration_system_activity: System Activity
-
--- a/config/locales/.svn/text-base/es.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/es.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -159,7 +159,10 @@
     month_names: [~, Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Setiembre, Octubre, Noviembre, Diciembre]
     abbr_month_names: [~, Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Set, Oct, Nov, Dic]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -264,7 +267,7 @@
   field_default_value: Estado por defecto
   field_delay: Retraso
   field_description: Descripción
-  field_done_ratio: % Realizado
+  field_done_ratio: "% Realizado"
   field_downloads: Descargas
   field_due_date: Fecha fin
   field_effective_date: Fecha
@@ -333,7 +336,7 @@
   general_csv_separator: ';'
   general_first_day_of_week: '1'
   general_lang_name: 'Español'
-  general_pdf_encoding: ISO-8859-15
+  general_pdf_encoding: UTF-8
   general_text_No: 'No'
   general_text_Yes: 'Sí'
   general_text_no: 'no'
@@ -677,7 +680,7 @@
   notice_default_data_loaded: Configuración por defecto cargada correctamente.
   notice_email_error: "Ha ocurrido un error mientras enviando el correo (%{value})"
   notice_email_sent: "Se ha enviado un correo a %{value}"
-  notice_failed_to_save_issues: "Imposible grabar %s peticion(es) en %{count} seleccionado: %{ids}."
+  notice_failed_to_save_issues: "Imposible grabar %{count} peticion(es) de %{total} seleccionada(s): %{ids}."
   notice_feeds_access_key_reseted: Su clave de acceso para RSS ha sido reiniciada.
   notice_file_not_found: La página a la que intenta acceder no existe.
   notice_locking_conflict: Los datos han sido modificados por otro usuario.
@@ -752,7 +755,6 @@
   setting_autologin: Conexión automática
   setting_bcc_recipients: Ocultar las copias de carbón (bcc)
   setting_commit_fix_keywords: Palabras clave para la corrección
-  setting_commit_logs_encoding: Codificación de los mensajes de commit
   setting_commit_ref_keywords: Palabras clave para la referencia
   setting_cross_project_issue_relations: Permitir relacionar peticiones de distintos proyectos
   setting_date_format: Formato de fecha
@@ -977,3 +979,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Codificación de los mensajes de commit
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/eu.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/eu.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,946 +1,982 @@
-# Redmine EU language
-# Author: Ales Zabala Alava (Shagi), <shagi@gisa-elkartea.org>
-# 2010-01-25
-# Distributed under the same terms as the Redmine itself.
-eu:
-  direction: ltr
-  date:
-    formats:
-      # Use the strftime parameters for formats.
-      # When no format has been given, it uses default.
-      # You can provide other formats here if you like!
-      default: "%Y/%m/%d"
-      short: "%b %d"
-      long: "%Y %B %d"
-      
-    day_names: [Igandea, Astelehena, Asteartea, Asteazkena, Osteguna, Ostirala, Larunbata]
-    abbr_day_names: [Ig., Al., Ar., Az., Og., Or., La.]
-      
-    # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, Urtarrila, Otsaila, Martxoa, Apirila, Maiatza, Ekaina, Uztaila, Abuztua, Iraila, Urria, Azaroa, Abendua]
-    abbr_month_names: [~, Urt, Ots, Mar, Api, Mai, Eka, Uzt, Abu, Ira, Urr, Aza, Abe]
-    # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
-
-  time:
-    formats:
-      default: "%Y/%m/%d %H:%M"
-      time: "%H:%M"
-      short: "%b %d %H:%M"
-      long: "%Y %B %d %H:%M"
-    am: "am"
-    pm: "pm"
-      
-  datetime:
-    distance_in_words:
-      half_a_minute: "minutu erdi"
-      less_than_x_seconds:
-        one:   "segundu bat baino gutxiago"
-        other: "%{count} segundu baino gutxiago"
-      x_seconds:
-        one:   "segundu 1"
-        other: "%{count} segundu"
-      less_than_x_minutes:
-        one:   "minutu bat baino gutxiago"
-        other: "%{count} minutu baino gutxiago"
-      x_minutes:
-        one:   "minutu 1"
-        other: "%{count} minutu"
-      about_x_hours:
-        one:   "ordu 1 inguru"
-        other: "%{count} ordu inguru"
-      x_days:
-        one:   "egun 1"
-        other: "%{count} egun"
-      about_x_months:
-        one:   "hilabete 1 inguru"
-        other: "%{count} hilabete inguru"
-      x_months:
-        one:   "hilabete 1"
-        other: "%{count} hilabete"
-      about_x_years:
-        one:   "urte 1 inguru"
-        other: "%{count} urte inguru"
-      over_x_years:
-        one:   "urte 1 baino gehiago"
-        other: "%{count} urte baino gehiago"
-      almost_x_years:
-        one:   "ia urte 1"
-        other: "ia %{count} urte"
-
-  number:
-    format:
-      separator: "."
-      delimiter: ""
-      precision: 3
-    human:
-      format:
-        delimiter: ""
-        precision: 1
-      storage_units:
-        format: "%n %u"
-        units:
-          byte:
-            one: "Byte"
-            other: "Byte"
-          kb: "KB"
-          mb: "MB"
-          gb: "GB"
-          tb: "TB"
-
-        
-# Used in array.to_sentence.
-  support:
-    array:
-      sentence_connector: "eta"
-      skip_last_comma: false
-      
-  activerecord:
-    errors:
-      template:
-        header:
-          one:    "Errore batek %{model} hau godetzea galarazi du."
-          other:  "%{count} errorek %{model} hau gordetzea galarazi dute."
-      messages:
-        inclusion: "ez dago zerrendan"
-        exclusion: "erreserbatuta dago"
-        invalid: "baliogabea da"
-        confirmation: "ez du berrespenarekin bat egiten"
-        accepted: "onartu behar da"
-        empty: "ezin da hutsik egon"
-        blank: "ezin da hutsik egon"
-        too_long: "luzeegia da (maximoa %{count} karaktere dira)"
-        too_short: "laburregia da (minimoa %{count} karaktere dira)"
-        wrong_length: "luzera ezegokia da (%{count} karakter izan beharko litzake)"
-        taken: "dagoeneko hartuta dago"
-        not_a_number: "ez da zenbaki bat"
-        not_a_date: "ez da baliozko data"
-        greater_than: "%{count} baino handiagoa izan behar du"
-        greater_than_or_equal_to: "%{count} edo handiagoa izan behar du"
-        equal_to: "%{count} izan behar du"
-        less_than: "%{count} baino gutxiago izan behar du"
-        less_than_or_equal_to: "%{count} edo gutxiago izan behar du"
-        odd: "bakoitia izan behar du"
-        even: "bikoitia izan behar du"
-        greater_than_start_date: "hasiera data baino handiagoa izan behar du"
-        not_same_project: "ez dago proiektu berdinean"
-        circular_dependency: "Erlazio honek mendekotasun zirkular bat sortuko luke"
-        cant_link_an_issue_with_a_descendant: "Zeregin bat ezin da bere azpiataza batekin estekatu."
-
-  actionview_instancetag_blank_option: Hautatu mesedez
-  
-  general_text_No: 'Ez'
-  general_text_Yes: 'Bai'
-  general_text_no: 'ez'
-  general_text_yes: 'bai'
-  general_lang_name: 'Euskara'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
-  general_csv_encoding: UTF-8
-  general_pdf_encoding: UTF-8
-  general_first_day_of_week: '1'
-  
-  notice_account_updated: Kontua ongi eguneratu da.
-  notice_account_invalid_creditentials: Erabiltzaile edo pasahitz ezegokia
-  notice_account_password_updated: Pasahitza ongi eguneratu da.
-  notice_account_wrong_password: Pasahitz ezegokia.
-  notice_account_register_done: Kontua ongi sortu da. Kontua gaitzeko klikatu epostan adierazi zaizun estekan.
-  notice_account_unknown_email: Erabiltzaile ezezaguna.
-  notice_can_t_change_password: Kontu honek kanpoko autentikazio bat erabiltzen du. Ezinezkoa da pasahitza aldatzea.
-  notice_account_lost_email_sent: Pasahitz berria aukeratzeko jarraibideak dituen eposta bat bidali zaizu.
-  notice_account_activated: Zure kontua gaituta dago. Orain saioa has dezakezu
-  notice_successful_create: Sortze arrakastatsua.
-  notice_successful_update: Eguneratze arrakastatsua.
-  notice_successful_delete: Ezabaketa arrakastatsua.
-  notice_successful_connection: Konexio arrakastatsua.
-  notice_file_not_found: Atzitu nahi duzun orria ez da exisitzen edo ezabatua izan da.
-  notice_locking_conflict: Beste erabiltzaile batek datuak eguneratu ditu.
-  notice_not_authorized: Ez duzu orri hau atzitzeko baimenik.
-  notice_email_sent: "%{value} helbidera eposta bat bidali da"
-  notice_email_error: "Errorea eposta bidaltzean (%{value})"
-  notice_feeds_access_key_reseted: Zure RSS atzipen giltza berrezarri da.
-  notice_api_access_key_reseted: Zure API atzipen giltza berrezarri da.
-  notice_failed_to_save_issues: "Hautatutako %{total} zereginetatik %{count} ezin izan dira konpondu: %{ids}."
-  notice_no_issue_selected: "Ez da zereginik hautatu! Mesedez, editatu nahi dituzun arazoak markatu."
-  notice_account_pending: "Zure kontua sortu da, orain kudeatzailearen onarpenaren zain dago."
-  notice_default_data_loaded: Lehenetsitako konfigurazioa ongi kargatu da.
-  notice_unable_delete_version: Ezin da bertsioa ezabatu.
-  notice_issue_done_ratios_updated: Burututako zereginen erlazioa eguneratu da.
-  
-  error_can_t_load_default_data: "Ezin izan da lehenetsitako konfigurazioa kargatu: %{value}"
-  error_scm_not_found: "Sarrera edo berrikuspena ez da biltegian topatu."
-  error_scm_command_failed: "Errorea gertatu da biltegia atzitzean: %{value}"
-  error_scm_annotate: "Sarrera ez da existitzen edo ezin da anotatu."
-  error_issue_not_found_in_project: 'Zeregina ez da topatu edo ez da proiektu honetakoa'
-  error_no_tracker_in_project: 'Proiektu honek ez du aztarnaririk esleituta. Mesedez egiaztatu Proiektuaren ezarpenak.'
-  error_no_default_issue_status: 'Zereginek ez dute lehenetsitako egoerarik.  Mesedez egiaztatu zure konfigurazioa ("Kudeaketa -> Arazoen egoerak" atalera joan).'
-  error_can_not_reopen_issue_on_closed_version: 'Itxitako bertsio batera esleitutako zereginak ezin dira berrireki'
-  error_can_not_archive_project: Proiektu hau ezin da artxibatu
-  error_issue_done_ratios_not_updated: "Burututako zereginen erlazioa ez da eguneratu."
-  error_workflow_copy_source: 'Mesedez hautatu iturburuko aztarnari edo rola'
-  error_workflow_copy_target: 'Mesedez hautatu helburuko aztarnari(ak) edo rola(k)'
-  
-  warning_attachments_not_saved: "%{count} fitxategi ezin izan d(ir)a gorde."
-  
-  mail_subject_lost_password: "Zure %{value} pasahitza"
-  mail_body_lost_password: 'Zure pasahitza aldatzeko hurrengo estekan klikatu:'
-  mail_subject_register: "Zure %{value} kontuaren gaitzea"
-  mail_body_register: 'Zure kontua gaitzeko hurrengo estekan klikatu:'
-  mail_body_account_information_external: "Zure %{value} kontua erabil dezakezu saioa hasteko."
-  mail_body_account_information: Zure kontuaren informazioa
-  mail_subject_account_activation_request: "%{value} kontu gaitzeko eskaera"
-  mail_body_account_activation_request: "Erabiltzaile berri bat (%{value}) erregistratu da. Kontua zure onarpenaren zain dago:"
-  mail_subject_reminder: "%{count} arazo hurrengo %{days} egunetan amaitzen d(ir)a"
-  mail_body_reminder: "Zuri esleituta dauden %{count} arazo hurrengo %{days} egunetan amaitzen d(ir)a:"
-  mail_subject_wiki_content_added: "'%{id}' wiki orria gehitu da"
-  mail_body_wiki_content_added: "%{author}-(e)k '%{id}' wiki orria gehitu du."
-  mail_subject_wiki_content_updated: "'%{id}' wiki orria eguneratu da"
-  mail_body_wiki_content_updated: "%{author}-(e)k '%{id}' wiki orria eguneratu du."
-  
-  gui_validation_error: akats 1
-  gui_validation_error_plural: "%{count} akats"
-  
-  field_name: Izena
-  field_description: Deskribapena
-  field_summary: Laburpena
-  field_is_required: Beharrezkoa
-  field_firstname: Izena
-  field_lastname: Abizenak
-  field_mail: Eposta
-  field_filename: Fitxategia
-  field_filesize: Tamaina
-  field_downloads: Deskargak
-  field_author: Egilea
-  field_created_on: Sortuta
-  field_updated_on: Eguneratuta
-  field_field_format: Formatua
-  field_is_for_all: Proiektu guztietarako
-  field_possible_values: Balio posibleak
-  field_regexp: Expresio erregularra
-  field_min_length: Luzera minimoa
-  field_max_length: Luzera maxioma
-  field_value: Balioa
-  field_category: Kategoria
-  field_title: Izenburua
-  field_project: Proiektua
-  field_issue: Zeregina
-  field_status: Egoera
-  field_notes: Oharrak
-  field_is_closed: Itxitako arazoa
-  field_is_default: Lehenetsitako balioa
-  field_tracker: Aztarnaria
-  field_subject: Gaia
-  field_due_date: Amaiera data
-  field_assigned_to: Esleituta
-  field_priority: Lehentasuna
-  field_fixed_version: Helburuko bertsioa
-  field_user: Erabiltzilea
-  field_role: Rola
-  field_homepage: Orri nagusia
-  field_is_public: Publikoa
-  field_parent: "Honen azpiproiektua:"
-  field_is_in_chlog: Zereginak aldaketa egunkarian ikusten dira
-  field_is_in_roadmap: Arazoak ibilbide-mapan erakutsi
-  field_login: Erabiltzaile izena
-  field_mail_notification: Eposta jakinarazpenak
-  field_admin: Kudeatzailea
-  field_last_login_on: Azken konexioa
-  field_language: Hizkuntza
-  field_effective_date: Data
-  field_password: Pasahitza
-  field_new_password: Pasahitz berria
-  field_password_confirmation: Berrespena
-  field_version: Bertsioa
-  field_type: Mota
-  field_host: Ostalaria
-  field_port: Portua
-  field_account: Kontua
-  field_base_dn: Base DN
-  field_attr_login: Erabiltzaile atributua
-  field_attr_firstname: Izena atributua
-  field_attr_lastname: Abizenak atributua
-  field_attr_mail: Eposta atributua
-  field_onthefly: Zuzeneko erabiltzaile sorrera
-  field_start_date: Hasiera
-  field_done_ratio: Egindako %
-  field_auth_source: Autentikazio modua
-  field_hide_mail: Nire eposta helbidea ezkutatu
-  field_comments: Iruzkina
-  field_url: URL
-  field_start_page: Hasierako orria
-  field_subproject: Azpiproiektua
-  field_hours: Ordu
-  field_activity: Jarduera
-  field_spent_on: Data
-  field_identifier: Identifikatzailea
-  field_is_filter: Iragazki moduan erabilita
-  field_issue_to: Erlazionatutako zereginak
-  field_delay: Atzerapena
-  field_assignable: Arazoak rol honetara esleitu daitezke
-  field_redirect_existing_links: Existitzen diren estekak berbideratu
-  field_estimated_hours: Estimatutako denbora
-  field_column_names: Zutabeak
-  field_time_zone: Ordu zonaldea
-  field_searchable: Bilagarria
-  field_default_value: Lehenetsitako balioa
-  field_comments_sorting: Iruzkinak erakutsi
-  field_parent_title: Orri gurasoa
-  field_editable: Editagarria
-  field_watcher: Behatzailea
-  field_identity_url: OpenID URLa
-  field_content: Edukia
-  field_group_by: Emaitzak honegatik taldekatu
-  field_sharing: Partekatzea
-
-  setting_app_title: Aplikazioaren izenburua
-  setting_app_subtitle: Aplikazioaren azpizenburua
-  setting_welcome_text: Ongietorriko testua
-  setting_default_language: Lehenetsitako hizkuntza
-  setting_login_required: Autentikazioa derrigorrezkoa
-  setting_self_registration: Norberak erregistratu
-  setting_attachment_max_size: Eranskinen tamaina max.
-  setting_issues_export_limit: Zereginen esportatze limitea
-  setting_mail_from: Igorlearen eposta helbidea
-  setting_bcc_recipients: Hartzaileak ezkutuko kopian (bcc)
-  setting_plain_text_mail: Testu soileko epostak (HTML-rik ez)
-  setting_host_name: Ostalari izena eta bidea
-  setting_text_formatting: Testu formatua
-  setting_wiki_compression: Wikiaren historia konprimitu
-  setting_feeds_limit: Jarioaren edukiera limitea
-  setting_default_projects_public: Proiektu berriak defektuz publikoak dira
-  setting_autofetch_changesets: Commit-ak automatikoki hartu
-  setting_sys_api_enabled: Biltegien kudeaketarako WS gaitu
-  setting_commit_ref_keywords: Erreferentzien gako-hitzak
-  setting_commit_fix_keywords: Konpontze gako-hitzak
-  setting_autologin: Saioa automatikoki hasi
-  setting_date_format: Data formatua
-  setting_time_format: Ordu formatua
-  setting_cross_project_issue_relations: Zereginak proiektuen artean erlazionatzea baimendu
-  setting_issue_list_default_columns: Zereginen zerrendan defektuz ikusten diren zutabeak
-  setting_repositories_encodings: Biltegien kodeketak
-  setting_commit_logs_encoding: Commit-en egunkarien kodetzea
-  setting_emails_footer: Eposten oina
-  setting_protocol: Protokoloa
-  setting_per_page_options: Orriko objektuen aukerak
-  setting_user_format: Erabiltzaileak erakusteko formatua
-  setting_activity_days_default: Proiektuen jardueran erakusteko egunak
-  setting_display_subprojects_issues: Azpiproiektuen zereginak proiektu nagusian erakutsi defektuz
-  setting_enabled_scm: Gaitutako IKKak
-  setting_mail_handler_body_delimiters: "Lerro hauteko baten ondoren epostak moztu"
-  setting_mail_handler_api_enabled: Sarrerako epostentzako WS gaitu
-  setting_mail_handler_api_key: API giltza
-  setting_sequential_project_identifiers: Proiektuen identifikadore sekuentzialak sortu
-  setting_gravatar_enabled: Erabili Gravatar erabiltzaile ikonoak
-  setting_gravatar_default: Lehenetsitako Gravatar irudia
-  setting_diff_max_lines_displayed: Erakutsiko diren diff lerro kopuru maximoa
-  setting_file_max_size_displayed: Barnean erakuzten diren testu fitxategien tamaina maximoa
-  setting_repository_log_display_limit: Egunkari fitxategian erakutsiko diren berrikuspen kopuru maximoa.
-  setting_openid: Baimendu OpenID saio hasiera eta erregistatzea
-  setting_password_min_length: Pasahitzen luzera minimoa
-  setting_new_project_user_role_id: Proiektu berriak sortzerakoan kudeatzaile ez diren erabiltzaileei esleitutako rola
-  setting_default_projects_modules: Proiektu berrientzako defektuz gaitutako moduluak
-  setting_issue_done_ratio: "Zereginen burututako tasa kalkulatzean erabili:"
-  setting_issue_done_ratio_issue_field: Zeregin eremua erabili
-  setting_issue_done_ratio_issue_status: Zeregin egoera erabili
-  setting_start_of_week: "Egutegiak noiz hasi:"
-  setting_rest_api_enabled: Gaitu REST web zerbitzua
-  
-  permission_add_project: Proiektua sortu
-  permission_add_subprojects: Azpiproiektuak sortu
-  permission_edit_project: Proiektua editatu
-  permission_select_project_modules: Proiektuaren moduluak hautatu
-  permission_manage_members: Kideak kudeatu
-  permission_manage_versions: Bertsioak kudeatu
-  permission_manage_categories: Arazoen kategoriak kudeatu
-  permission_view_issues: Zereginak ikusi
-  permission_add_issues: Zereginak gehitu
-  permission_edit_issues: Zereginak aldatu
-  permission_manage_issue_relations: Zereginen erlazioak kudeatu
-  permission_add_issue_notes: Oharrak gehitu
-  permission_edit_issue_notes: Oharrak aldatu
-  permission_edit_own_issue_notes: Nork bere oharrak aldatu
-  permission_move_issues: Zereginak mugitu
-  permission_delete_issues: Zereginak ezabatu
-  permission_manage_public_queries: Galdera publikoak kudeatu
-  permission_save_queries: Galderak gorde
-  permission_view_gantt: Gantt grafikoa ikusi
-  permission_view_calendar: Egutegia ikusi
-  permission_view_issue_watchers: Behatzaileen zerrenda ikusi
-  permission_add_issue_watchers: Behatzaileak gehitu
-  permission_delete_issue_watchers: Behatzaileak ezabatu
-  permission_log_time: Igarotako denbora erregistratu
-  permission_view_time_entries: Igarotako denbora ikusi
-  permission_edit_time_entries: Denbora egunkariak editatu
-  permission_edit_own_time_entries: Nork bere denbora egunkariak editatu
-  permission_manage_news: Berriak kudeatu
-  permission_comment_news: Berrien iruzkinak egin
-  permission_manage_documents: Dokumentuak kudeatu
-  permission_view_documents: Dokumentuak ikusi
-  permission_manage_files: Fitxategiak kudeatu
-  permission_view_files: Fitxategiak ikusi
-  permission_manage_wiki: Wikia kudeatu
-  permission_rename_wiki_pages: Wiki orriak berrizendatu
-  permission_delete_wiki_pages: Wiki orriak ezabatu
-  permission_view_wiki_pages: Wikia ikusi
-  permission_view_wiki_edits: Wikiaren historia ikusi
-  permission_edit_wiki_pages: Wiki orriak editatu
-  permission_delete_wiki_pages_attachments: Eranskinak ezabatu
-  permission_protect_wiki_pages: Wiki orriak babestu
-  permission_manage_repository: Biltegiak kudeatu
-  permission_browse_repository: Biltegia arakatu
-  permission_view_changesets: Aldaketak ikusi
-  permission_commit_access: Commit atzipena
-  permission_manage_boards: Foroak kudeatu
-  permission_view_messages: Mezuak ikusi
-  permission_add_messages: Mezuak bidali
-  permission_edit_messages: Mezuak aldatu
-  permission_edit_own_messages: Nork bere mezuak aldatu
-  permission_delete_messages: Mezuak ezabatu
-  permission_delete_own_messages: Nork bere mezuak ezabatu
-  
-  project_module_issue_tracking: Zereginen jarraipena
-  project_module_time_tracking: Denbora jarraipena
-  project_module_news: Berriak
-  project_module_documents: Dokumentuak
-  project_module_files: Fitxategiak
-  project_module_wiki: Wiki
-  project_module_repository: Biltegia
-  project_module_boards: Foroak
-  
-  label_user: Erabiltzailea
-  label_user_plural: Erabiltzaileak
-  label_user_new: Erabiltzaile berria
-  label_user_anonymous: Ezezaguna
-  label_project: Proiektua
-  label_project_new: Proiektu berria
-  label_project_plural: Proiektuak
-  label_x_projects:
-    zero:  proiekturik ez
-    one:   proiektu bat
-    other: "%{count} proiektu"
-  label_project_all: Proiektu guztiak
-  label_project_latest: Azken proiektuak
-  label_issue: Zeregina
-  label_issue_new: Zeregin berria
-  label_issue_plural: Zereginak
-  label_issue_view_all: Zeregin guztiak ikusi
-  label_issues_by: "Zereginak honengatik: %{value}"
-  label_issue_added: Zeregina gehituta
-  label_issue_updated: Zeregina eguneratuta
-  label_document: Dokumentua
-  label_document_new: Dokumentu berria
-  label_document_plural: Dokumentuak
-  label_document_added: Dokumentua gehituta
-  label_role: Rola
-  label_role_plural: Rolak
-  label_role_new: Rol berria
-  label_role_and_permissions: Rolak eta baimenak
-  label_member: Kidea
-  label_member_new: Kide berria
-  label_member_plural: Kideak
-  label_tracker: Aztarnaria
-  label_tracker_plural: Aztarnariak
-  label_tracker_new: Aztarnari berria
-  label_workflow: Lan-fluxua
-  label_issue_status: Zeregin egoera
-  label_issue_status_plural: Zeregin egoerak
-  label_issue_status_new: Egoera berria
-  label_issue_category: Zeregin kategoria
-  label_issue_category_plural: Zeregin kategoriak
-  label_issue_category_new: Kategoria berria
-  label_custom_field: Eremu pertsonalizatua
-  label_custom_field_plural: Eremu pertsonalizatuak
-  label_custom_field_new: Eremu pertsonalizatu berria
-  label_enumerations: Enumerazioak
-  label_enumeration_new: Balio berria
-  label_information: Informazioa
-  label_information_plural: Informazioa
-  label_please_login: Saioa hasi mesedez
-  label_register: Erregistratu
-  label_login_with_open_id_option: edo OpenID-rekin saioa hasi
-  label_password_lost: Pasahitza galduta
-  label_home: Hasiera
-  label_my_page: Nire orria
-  label_my_account: Nire kontua
-  label_my_projects: Nire proiektuak
-  label_administration: Kudeaketa
-  label_login: Saioa hasi
-  label_logout: Saioa bukatu
-  label_help: Laguntza
-  label_reported_issues: Berri emandako zereginak
-  label_assigned_to_me_issues: Niri esleitutako arazoak
-  label_last_login: Azken konexioa
-  label_registered_on: Noiz erregistratuta
-  label_activity: Jarduerak
-  label_overall_activity: Jarduera guztiak
-  label_user_activity: "%{value}-(r)en jarduerak"
-  label_new: Berria
-  label_logged_as: "Sartutako erabiltzailea:"
-  label_environment: Ingurune
-  label_authentication: Autentikazioa
-  label_auth_source: Autentikazio modua
-  label_auth_source_new: Autentikazio modu berria
-  label_auth_source_plural: Autentikazio moduak
-  label_subproject_plural: Azpiproiektuak
-  label_subproject_new: Azpiproiektu berria
-  label_and_its_subprojects: "%{value} eta bere azpiproiektuak"
-  label_min_max_length: Luzera min - max
-  label_list: Zerrenda
-  label_date: Data
-  label_integer: Osokoa
-  label_float: Koma higikorrekoa
-  label_boolean: Boolearra
-  label_string: Testua
-  label_text: Testu luzea
-  label_attribute: Atributua
-  label_attribute_plural: Atributuak
-  label_download: "Deskarga %{count}"
-  label_download_plural: "%{count} Deskarga"
-  label_no_data: Ez dago erakusteko daturik
-  label_change_status: Egoera aldatu
-  label_history: Historikoa
-  label_attachment: Fitxategia
-  label_attachment_new: Fitxategi berria
-  label_attachment_delete: Fitxategia ezabatu
-  label_attachment_plural: Fitxategiak
-  label_file_added: Fitxategia gehituta
-  label_report: Berri ematea
-  label_report_plural: Berri emateak
-  label_news: Berria
-  label_news_new: Berria gehitu
-  label_news_plural: Berriak
-  label_news_latest: Azken berriak
-  label_news_view_all: Berri guztiak ikusi
-  label_news_added: Berria gehituta
-  label_change_log: Aldaketa egunkaria
-  label_settings: Ezarpenak
-  label_overview: Gainbegirada
-  label_version: Bertsioa
-  label_version_new: Bertsio berria
-  label_version_plural: Bertsioak
-  label_close_versions: Burututako bertsioak itxi
-  label_confirmation: Baieztapena
-  label_export_to: 'Eskuragarri baita:'
-  label_read: Irakurri...
-  label_public_projects: Proiektu publikoak
-  label_open_issues: irekita
-  label_open_issues_plural: irekiak
-  label_closed_issues: itxita
-  label_closed_issues_plural: itxiak
-  label_x_open_issues_abbr_on_total:
-    zero:  0 irekita / %{total}
-    one:   1 irekita / %{total}
-    other: "%{count} irekiak / %{total}"
-  label_x_open_issues_abbr:
-    zero:  0 irekita
-    one:   1 irekita
-    other: "%{count} irekiak"
-  label_x_closed_issues_abbr:
-    zero:  0 itxita
-    one:   1 itxita
-    other: "%{count} itxiak"
-  label_total: Guztira
-  label_permissions: Baimenak
-  label_current_status: Uneko egoera
-  label_new_statuses_allowed: Baimendutako egoera berriak
-  label_all: guztiak
-  label_none: ezer
-  label_nobody: inor
-  label_next: Hurrengoa
-  label_previous: Aurrekoak
-  label_used_by: Erabilita
-  label_details: Xehetasunak
-  label_add_note: Oharra gehitu
-  label_per_page: Orriko
-  label_calendar: Egutegia
-  label_months_from: hilabete noiztik
-  label_gantt: Gantt
-  label_internal: Barnekoa
-  label_last_changes: "azken %{count} aldaketak"
-  label_change_view_all: Aldaketa guztiak ikusi
-  label_personalize_page: Orri hau pertsonalizatu
-  label_comment: Iruzkin
-  label_comment_plural: Iruzkinak
-  label_x_comments:
-    zero: iruzkinik ez
-    one: iruzkin 1
-    other: "%{count} iruzkin"
-  label_comment_add: Iruzkina gehitu
-  label_comment_added: Iruzkina gehituta
-  label_comment_delete: Iruzkinak ezabatu
-  label_query: Galdera pertsonalizatua
-  label_query_plural: Pertsonalizatutako galderak
-  label_query_new: Galdera berria
-  label_filter_add: Iragazkia gehitu
-  label_filter_plural: Iragazkiak
-  label_equals: da
-  label_not_equals: ez da
-  label_in_less_than: baino gutxiagotan
-  label_in_more_than: baino gehiagotan
-  label_greater_or_equal: '>='
-  label_less_or_equal: '<='
-  label_in: hauetan
-  label_today: gaur
-  label_all_time: denbora guztia
-  label_yesterday: atzo
-  label_this_week: aste honetan
-  label_last_week: pasadan astean
-  label_last_n_days: "azken %{count} egunetan"
-  label_this_month: hilabete hau
-  label_last_month: pasadan hilabetea
-  label_this_year: urte hau
-  label_date_range: Data tartea
-  label_less_than_ago: egun hauek baino gutxiago
-  label_more_than_ago: egun hauek baino gehiago
-  label_ago: orain dela
-  label_contains: dauka
-  label_not_contains: ez dauka
-  label_day_plural: egun
-  label_repository: Biltegia
-  label_repository_plural: Biltegiak
-  label_browse: Arakatu
-  label_modification: "aldaketa %{count}"
-  label_modification_plural: "%{count} aldaketa"
-  label_branch: Adarra
-  label_tag: Etiketa 
-  label_revision: Berrikuspena
-  label_revision_plural: Berrikuspenak
-  label_revision_id: "%{value} berrikuspen"
-  label_associated_revisions: Elkartutako berrikuspenak
-  label_added: gehituta
-  label_modified: aldatuta
-  label_copied: kopiatuta
-  label_renamed: berrizendatuta
-  label_deleted: ezabatuta
-  label_latest_revision: Azken berrikuspena
-  label_latest_revision_plural: Azken berrikuspenak
-  label_view_revisions: Berrikuspenak ikusi
-  label_view_all_revisions: Berrikuspen guztiak ikusi
-  label_max_size: Tamaina maximoa
-  label_sort_highest: Goraino mugitu
-  label_sort_higher: Gora mugitu
-  label_sort_lower: Behera mugitu
-  label_sort_lowest: Beheraino mugitu
-  label_roadmap: Ibilbide-mapa
-  label_roadmap_due_in: "Epea: %{value}"
-  label_roadmap_overdue: "%{value} berandu"
-  label_roadmap_no_issues: Ez dago zereginik bertsio honetan
-  label_search: Bilatu
-  label_result_plural: Emaitzak
-  label_all_words: hitz guztiak
-  label_wiki: Wikia
-  label_wiki_edit: Wiki edizioa
-  label_wiki_edit_plural: Wiki edizioak
-  label_wiki_page: Wiki orria
-  label_wiki_page_plural: Wiki orriak
-  label_index_by_title: Izenburuaren araberako indizea
-  label_index_by_date: Dataren araberako indizea
-  label_current_version: Uneko bertsioa
-  label_preview: Aurreikusi
-  label_feed_plural: Jarioak
-  label_changes_details: Aldaketa guztien xehetasunak
-  label_issue_tracking: Zeregin jarraipena
-  label_spent_time: Igarotako denbora
-  label_f_hour: "ordu %{value}"
-  label_f_hour_plural: "%{value} ordu"
-  label_time_tracking: Denbora jarraipena
-  label_change_plural: Aldaketak
-  label_statistics: Estatistikak
-  label_commits_per_month: Commit-ak hilabeteka
-  label_commits_per_author: Commit-ak egileka
-  label_view_diff: Ezberdintasunak ikusi
-  label_diff_inline: barnean
-  label_diff_side_by_side: aldez alde
-  label_options: Aukerak
-  label_copy_workflow_from: Kopiatu workflow-a hemendik
-  label_permissions_report: Baimenen txostena
-  label_watched_issues: Behatutako zereginak
-  label_related_issues: Erlazionatutako zereginak
-  label_applied_status: Aplikatutako egoera
-  label_loading: Kargatzen...
-  label_relation_new: Erlazio berria
-  label_relation_delete: Erlazioa ezabatu
-  label_relates_to: erlazionatuta dago
-  label_duplicates: bikoizten du
-  label_duplicated_by: honek bikoiztuta
-  label_blocks: blokeatzen du
-  label_blocked_by: honek blokeatuta
-  label_precedes: aurretik doa
-  label_follows: jarraitzen du
-  label_end_to_start: bukaeratik hasierara
-  label_end_to_end: bukaeratik bukaerara
-  label_start_to_start: hasieratik hasierhasieratik bukaerara
-  label_start_to_end: hasieratik bukaerara
-  label_stay_logged_in: Saioa mantendu
-  label_disabled: ezgaituta
-  label_show_completed_versions: Bukatutako bertsioak ikusi
-  label_me: ni
-  label_board: Foroa
-  label_board_new: Foro berria
-  label_board_plural: Foroak
-  label_topic_plural: Gaiak
-  label_message_plural: Mezuak
-  label_message_last: Azken mezua
-  label_message_new: Mezu berria
-  label_message_posted: Mesua gehituta
-  label_reply_plural: Erantzunak
-  label_send_information: Erabiltzaileai kontuaren informazioa bidali
-  label_year: Urtea
-  label_month: Hilabetea
-  label_week: Astea
-  label_date_from: Nork
-  label_date_to: Nori
-  label_language_based: Erabiltzailearen hizkuntzaren arabera
-  label_sort_by: "Ordenazioa: %{value}"
-  label_send_test_email: Frogako mezua bidali
-  label_feeds_access_key: RSS atzipen giltza
-  label_missing_feeds_access_key: RSS atzipen giltza falta da
-  label_feeds_access_key_created_on: "RSS atzipen giltza orain dela %{value} sortuta"
-  label_module_plural: Moduluak
-  label_added_time_by: "%{author}, orain dela %{age} gehituta"
-  label_updated_time_by: "%{author}, orain dela %{age} eguneratuta"
-  label_updated_time: "Orain dela %{value} eguneratuta"
-  label_jump_to_a_project: Joan proiektura...
-  label_file_plural: Fitxategiak
-  label_changeset_plural: Aldaketak
-  label_default_columns: Lehenetsitako zutabeak
-  label_no_change_option: (Aldaketarik ez)
-  label_bulk_edit_selected_issues: Hautatutako zereginak batera editatu
-  label_theme: Itxura
-  label_default: Lehenetsia
-  label_search_titles_only: Izenburuetan bakarrik bilatu
-  label_user_mail_option_all: "Nire proiektu guztietako gertakari guztientzat"
-  label_user_mail_option_selected: "Hautatutako proiektuetako edozein gertakarientzat..."
-  label_user_mail_no_self_notified: "Ez dut nik egiten ditudan aldeketen jakinarazpenik jaso nahi"
-  label_registration_activation_by_email: kontuak epostaz gaitu
-  label_registration_manual_activation: kontuak eskuz gaitu
-  label_registration_automatic_activation: kontuak automatikoki gaitu
-  label_display_per_page: "Orriko: %{value}"
-  label_age: Adina
-  label_change_properties: Propietateak aldatu
-  label_general: Orokorra
-  label_more: Gehiago
-  label_scm: IKK
-  label_plugins: Pluginak
-  label_ldap_authentication: LDAP autentikazioa
-  label_downloads_abbr: Desk.
-  label_optional_description: Aukerako deskribapena
-  label_add_another_file: Beste fitxategia gehitu
-  label_preferences: Hobespenak
-  label_chronological_order: Orden kronologikoan
-  label_reverse_chronological_order: Alderantzizko orden kronologikoan
-  label_planning: Planifikazioa
-  label_incoming_emails: Sarrerako epostak
-  label_generate_key: Giltza sortu
-  label_issue_watchers: Behatzaileak
-  label_example: Adibidea
-  label_display: Bistaratzea
-  label_sort: Ordenatu
-  label_ascending: Gorantz
-  label_descending: Beherantz
-  label_date_from_to: "%{start}-tik %{end}-ra"
-  label_wiki_content_added: Wiki orria gehituta
-  label_wiki_content_updated: Wiki orria eguneratuta
-  label_group: Taldea
-  label_group_plural: Taldeak
-  label_group_new: Talde berria
-  label_time_entry_plural: Igarotako denbora
-  label_version_sharing_none: Ez partekatuta
-  label_version_sharing_descendants: Azpiproiektuekin
-  label_version_sharing_hierarchy: Proiektu Hierarkiarekin
-  label_version_sharing_tree: Proiektu zuhaitzarekin
-  label_version_sharing_system: Proiektu guztiekin
-  label_update_issue_done_ratios: Zereginen burututako erlazioa eguneratu
-  label_copy_source: Iturburua
-  label_copy_target: Helburua
-  label_copy_same_as_target: Helburuaren berdina
-  label_display_used_statuses_only: Aztarnari honetan erabiltzen diren egoerak bakarrik erakutsi
-  label_api_access_key: API atzipen giltza
-  label_missing_api_access_key: API atzipen giltza falta da
-  label_api_access_key_created_on: "API atzipen giltza sortuta orain dela %{value}"
-  
-  button_login: Saioa hasi
-  button_submit: Bidali
-  button_save: Gorde
-  button_check_all: Guztiak markatu
-  button_uncheck_all: Guztiak desmarkatu
-  button_delete: Ezabatu
-  button_create: Sortu
-  button_create_and_continue: Sortu eta jarraitu
-  button_test: Frogatu
-  button_edit: Editatu
-  button_add: Gehitu
-  button_change: Aldatu
-  button_apply: Aplikatu
-  button_clear: Garbitu
-  button_lock: Blokeatu
-  button_unlock: Desblokeatu
-  button_download: Deskargatu
-  button_list: Zerrenda
-  button_view: Ikusi
-  button_move: Mugitu
-  button_move_and_follow: Mugitu eta jarraitu
-  button_back: Atzera
-  button_cancel: Ezeztatu
-  button_activate: Gahitu
-  button_sort: Ordenatu
-  button_log_time: Denbora erregistratu
-  button_rollback: Itzuli bertsio honetara
-  button_watch: Behatu
-  button_unwatch: Behatzen utzi
-  button_reply: Erantzun
-  button_archive: Artxibatu
-  button_unarchive: Desartxibatu
-  button_reset: Berrezarri
-  button_rename: Berrizendatu
-  button_change_password: Pasahitza aldatu
-  button_copy: Kopiatu
-  button_copy_and_follow: Kopiatu eta jarraitu
-  button_annotate: Anotatu
-  button_update: Eguneratu
-  button_configure: Konfiguratu
-  button_quote: Aipatu
-  button_duplicate: Bikoiztu
-  button_show: Ikusi
-  
-  status_active: gaituta
-  status_registered: izena emanda
-  status_locked: blokeatuta
-  
-  version_status_open: irekita
-  version_status_locked: blokeatuta
-  version_status_closed: itxita
-
-  field_active: Gaituta
-  
-  text_select_mail_notifications: Jakinarazpenak zein ekintzetarako bidaliko diren hautatu.
-  text_regexp_info: adib. ^[A-Z0-9]+$
-  text_min_max_length_info: 0k mugarik gabe esan nahi du
-  text_project_destroy_confirmation: Ziur zaude proiektu hau eta erlazionatutako datu guztiak ezabatu nahi dituzula?
-  text_subprojects_destroy_warning: "%{value} azpiproiektuak ere ezabatuko dira."
-  text_workflow_edit: Hautatu rola eta aztarnaria workflow-a editatzeko
-  text_are_you_sure: Ziur zaude?
-  text_journal_changed: "%{label} %{old}-(e)tik %{new}-(e)ra aldatuta"
-  text_journal_set_to: "%{label}-k %{value} balioa hartu du"
-  text_journal_deleted: "%{label} ezabatuta (%{old})"
-  text_journal_added: "%{label} %{value} gehituta"
-  text_tip_issue_begin_day: gaur hasten diren zereginak
-  text_tip_issue_end_day: gaur bukatzen diren zereginak
-  text_tip_issue_begin_end_day: gaur hasi eta bukatzen diren zereginak
-  text_project_identifier_info: 'Letra xeheak (a-z), zenbakiak eta marrak erabil daitezke bakarrik.<br />Gorde eta gero identifikadorea ezin da aldatu.'
-  text_caracters_maximum: "%{count} karaktere gehienez."
-  text_caracters_minimum: "Gutxienez %{count} karaktereetako luzerakoa izan behar du."
-  text_length_between: "Luzera %{min} eta %{max} karaktereen artekoa."
-  text_tracker_no_workflow: Ez da workflow-rik definitu aztarnari honentzako
-  text_unallowed_characters: Debekatutako karaktereak
-  text_comma_separated: Balio anitz izan daitezke (komaz banatuta).
-  text_line_separated: Balio anitz izan daitezke (balio bakoitza lerro batean).
-  text_issues_ref_in_commit_messages: Commit-en mezuetan zereginak erlazionatu eta konpontzen
-  text_issue_added: "%{id} zeregina %{author}-(e)k jakinarazi du."
-  text_issue_updated: "%{id} zeregina %{author}-(e)k eguneratu du."
-  text_wiki_destroy_confirmation: Ziur zaude wiki hau eta bere eduki guztiak ezabatu nahi dituzula?
-  text_issue_category_destroy_question: "Zeregin batzuk (%{count}) kategoria honetara esleituta daude. Zer egin nahi duzu?"
-  text_issue_category_destroy_assignments: Kategoria esleipenak kendu
-  text_issue_category_reassign_to: Zereginak kategoria honetara esleitu
-  text_user_mail_option: "Hautatu gabeko proiektuetan, behatzen edo parte hartzen duzun gauzei buruzko jakinarazpenak jasoko dituzu (adib. zu egile zaren edo esleituta dituzun zereginak)."
-  text_no_configuration_data: "Rolak, aztarnariak, zeregin egoerak eta workflow-ak ez dira oraindik konfiguratu.\nOso gomendagarria de lehenetsitako kkonfigurazioa kargatzea. Kargatu eta gero aldatu ahalko duzu."
-  text_load_default_configuration: Lehenetsitako konfigurazioa kargatu
-  text_status_changed_by_changeset: "%{value} aldaketan aplikatuta."
-  text_issues_destroy_confirmation: 'Ziur zaude hautatutako zeregina(k) ezabatu nahi dituzula?'
-  text_select_project_modules: 'Hautatu proiektu honetan gaitu behar diren moduluak:'
-  text_default_administrator_account_changed: Lehenetsitako kudeatzaile kontua aldatuta
-  text_file_repository_writable: Eranskinen direktorioan idatz daiteke
-  text_plugin_assets_writable: Pluginen baliabideen direktorioan idatz daiteke
-  text_rmagick_available: RMagick eskuragarri (aukerazkoa)
-  text_destroy_time_entries_question: "%{hours} orduei buruz berri eman zen zuk ezabatzera zoazen zereginean. Zer egin nahi duzu?"
-  text_destroy_time_entries: Ezabatu berri emandako orduak
-  text_assign_time_entries_to_project: Berri emandako orduak proiektura esleitu
-  text_reassign_time_entries: 'Berri emandako orduak zeregin honetara esleitu:'
-  text_user_wrote: "%{value}-(e)k idatzi zuen:"
-  text_enumeration_destroy_question: "%{count} objetu balio honetara esleituta daude."
-  text_enumeration_category_reassign_to: 'Beste balio honetara esleitu:'
-  text_email_delivery_not_configured: "Eposta bidalketa ez dago konfiguratuta eta jakinarazpenak ezgaituta daude.\nKonfiguratu zure SMTP zerbitzaria config/configuration.yml-n eta aplikazioa berrabiarazi hauek gaitzeko."
-  text_repository_usernames_mapping: "Hautatu edo eguneratu Redmineko erabiltzailea biltegiko egunkarietan topatzen diren erabiltzaile izenekin erlazionatzeko.\nRedmine-n eta biltegian erabiltzaile izen edo eposta berdina duten erabiltzaileak automatikoki erlazionatzen dira."
-  text_diff_truncated: '... Diff hau moztua izan da erakus daitekeen tamaina maximoa gainditu duelako.'
-  text_custom_field_possible_values_info: 'Lerro bat balio bakoitzeko'
-  text_wiki_page_destroy_question: "Orri honek %{descendants} orri seme eta ondorengo ditu. Zer egin nahi duzu?"
-  text_wiki_page_nullify_children: "Orri semeak erro orri moduan mantendu"
-  text_wiki_page_destroy_children: "Orri semeak eta beraien ondorengo guztiak ezabatu"
-  text_wiki_page_reassign_children: "Orri semeak orri guraso honetara esleitu"
-  text_own_membership_delete_confirmation: "Zure baimen batzuk (edo guztiak) kentzera zoaz eta baliteke horren ondoren proiektu hau ezin editatzea.\n Ziur zaude jarraitu nahi duzula?"
-  
-  default_role_manager: Kudeatzailea
-  default_role_developer: Garatzailea
-  default_role_reporter: Berriemailea
-  default_tracker_bug: Errorea
-  default_tracker_feature: Eginbidea
-  default_tracker_support: Laguntza
-  default_issue_status_new: Berria
-  default_issue_status_in_progress: Lanean
-  default_issue_status_resolved: Ebatzita
-  default_issue_status_feedback: Berrelikadura
-  default_issue_status_closed: Itxita
-  default_issue_status_rejected: Baztertua
-  default_doc_category_user: Erabiltzaile dokumentazioa
-  default_doc_category_tech: Dokumentazio teknikoa
-  default_priority_low: Baxua
-  default_priority_normal: Normala
-  default_priority_high: Altua
-  default_priority_urgent: Larria
-  default_priority_immediate: Berehalakoa
-  default_activity_design: Diseinua
-  default_activity_development: Garapena
-  
-  enumeration_issue_priorities: Zeregin lehentasunak
-  enumeration_doc_categories: Dokumentu kategoriak
-  enumeration_activities: Jarduerak (denbora kontrola))
-  enumeration_system_activity: Sistemako Jarduera
-  label_board_sticky: Itsaskorra
-  label_board_locked: Blokeatuta
-  permission_export_wiki_pages: Wiki orriak esportatu
-  setting_cache_formatted_text: Formatudun testua katxeatu
-  permission_manage_project_activities: Proiektuaren jarduerak kudeatu
-  error_unable_delete_issue_status: Ezine da zereginaren egoera ezabatu
-  label_profile: Profila
-  permission_manage_subtasks: Azpiatazak kudeatu
-  field_parent_issue: Zeregin gurasoa
-  label_subtask_plural: Azpiatazak
-  label_project_copy_notifications: Proiektua kopiatzen den bitartean eposta jakinarazpenak bidali
-  error_can_not_delete_custom_field: Ezin da eremu pertsonalizatua ezabatu
-  error_unable_to_connect: Ezin da konektatu (%{value})
-  error_can_not_remove_role: Rol hau erabiltzen hari da eta ezin da ezabatu.
-  error_can_not_delete_tracker: Aztarnari honek zereginak ditu eta ezin da ezabatu.
-  field_principal: Ekintzaile
-  label_my_page_block: "Nire orriko blokea"
-  notice_failed_to_save_members: "Kidea(k) gordetzean errorea: %{errors}."
-  text_zoom_out: Zooma txikiagotu
-  text_zoom_in: Zooma handiagotu
-  notice_unable_delete_time_entry: "Ezin da hautatutako denbora erregistroa ezabatu."
-  label_overall_spent_time: Igarotako denbora guztira
-  field_time_entries: "Denbora erregistratu"
-  project_module_gantt: Gantt
-  project_module_calendar: Egutegia
-  button_edit_associated_wikipage: "Esleitutako wiki orria editatu: %{page_title}"
-  text_are_you_sure_with_children: "Zeregina eta azpi zeregin guztiak ezabatu?"
-  field_text: Testu eremua
-  label_user_mail_option_only_owner: "Jabea naizen gauzetarako barrarik"
-  setting_default_notification_option: "Lehenetsitako ohartarazpen aukera"
-  label_user_mail_option_only_my_events: "Behatzen ditudan edo partaide naizen gauzetarako bakarrik"
-  label_user_mail_option_only_assigned: "Niri esleitutako gauzentzat bakarrik"
-  label_user_mail_option_none: "Gertakaririk ez"
-  field_member_of_group: "Esleituta duenaren taldea"
-  field_assigned_to_role: "Esleituta duenaren rola"
-  notice_not_authorized_archived_project: "Atzitu nahi duzun proiektua artxibatua izan da."
-  label_principal_search: "Bilatu erabiltzaile edo taldea:"
-  label_user_search: "Erabiltzailea bilatu:"
-  field_visible: Ikusgai
-  setting_emails_header: "Eposten goiburua"
-  setting_commit_logtime_activity_id: "Erregistratutako denboraren jarduera"
-  text_time_logged_by_changeset: "%{value} aldaketan egindakoa."
-  setting_commit_logtime_enabled: "Erregistrutako denbora gaitu"
-  notice_gantt_chart_truncated: Grafikoa moztu da bistara daitekeen elementuen kopuru maximoa gainditu delako (%{max})
-  setting_gantt_items_limit: "Gantt grafikoan bistara daitekeen elementu kopuru maximoa"
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+# Redmine EU language
+# Author: Ales Zabala Alava (Shagi), <shagi@gisa-elkartea.org>
+# 2010-01-25
+# Distributed under the same terms as the Redmine itself.
+eu:
+  direction: ltr
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%Y/%m/%d"
+      short: "%b %d"
+      long: "%Y %B %d"
+      
+    day_names: [Igandea, Astelehena, Asteartea, Asteazkena, Osteguna, Ostirala, Larunbata]
+    abbr_day_names: [Ig., Al., Ar., Az., Og., Or., La.]
+      
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, Urtarrila, Otsaila, Martxoa, Apirila, Maiatza, Ekaina, Uztaila, Abuztua, Iraila, Urria, Azaroa, Abendua]
+    abbr_month_names: [~, Urt, Ots, Mar, Api, Mai, Eka, Uzt, Abu, Ira, Urr, Aza, Abe]
+    # Used in date_select and datime_select.
+    order:
+      - :year
+      - :month
+      - :day
+
+  time:
+    formats:
+      default: "%Y/%m/%d %H:%M"
+      time: "%H:%M"
+      short: "%b %d %H:%M"
+      long: "%Y %B %d %H:%M"
+    am: "am"
+    pm: "pm"
+      
+  datetime:
+    distance_in_words:
+      half_a_minute: "minutu erdi"
+      less_than_x_seconds:
+        one:   "segundu bat baino gutxiago"
+        other: "%{count} segundu baino gutxiago"
+      x_seconds:
+        one:   "segundu 1"
+        other: "%{count} segundu"
+      less_than_x_minutes:
+        one:   "minutu bat baino gutxiago"
+        other: "%{count} minutu baino gutxiago"
+      x_minutes:
+        one:   "minutu 1"
+        other: "%{count} minutu"
+      about_x_hours:
+        one:   "ordu 1 inguru"
+        other: "%{count} ordu inguru"
+      x_days:
+        one:   "egun 1"
+        other: "%{count} egun"
+      about_x_months:
+        one:   "hilabete 1 inguru"
+        other: "%{count} hilabete inguru"
+      x_months:
+        one:   "hilabete 1"
+        other: "%{count} hilabete"
+      about_x_years:
+        one:   "urte 1 inguru"
+        other: "%{count} urte inguru"
+      over_x_years:
+        one:   "urte 1 baino gehiago"
+        other: "%{count} urte baino gehiago"
+      almost_x_years:
+        one:   "ia urte 1"
+        other: "ia %{count} urte"
+
+  number:
+    format:
+      separator: "."
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Byte"
+            other: "Byte"
+          kb: "KB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+        
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "eta"
+      skip_last_comma: false
+      
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "Errore batek %{model} hau godetzea galarazi du."
+          other:  "%{count} errorek %{model} hau gordetzea galarazi dute."
+      messages:
+        inclusion: "ez dago zerrendan"
+        exclusion: "erreserbatuta dago"
+        invalid: "baliogabea da"
+        confirmation: "ez du berrespenarekin bat egiten"
+        accepted: "onartu behar da"
+        empty: "ezin da hutsik egon"
+        blank: "ezin da hutsik egon"
+        too_long: "luzeegia da (maximoa %{count} karaktere dira)"
+        too_short: "laburregia da (minimoa %{count} karaktere dira)"
+        wrong_length: "luzera ezegokia da (%{count} karakter izan beharko litzake)"
+        taken: "dagoeneko hartuta dago"
+        not_a_number: "ez da zenbaki bat"
+        not_a_date: "ez da baliozko data"
+        greater_than: "%{count} baino handiagoa izan behar du"
+        greater_than_or_equal_to: "%{count} edo handiagoa izan behar du"
+        equal_to: "%{count} izan behar du"
+        less_than: "%{count} baino gutxiago izan behar du"
+        less_than_or_equal_to: "%{count} edo gutxiago izan behar du"
+        odd: "bakoitia izan behar du"
+        even: "bikoitia izan behar du"
+        greater_than_start_date: "hasiera data baino handiagoa izan behar du"
+        not_same_project: "ez dago proiektu berdinean"
+        circular_dependency: "Erlazio honek mendekotasun zirkular bat sortuko luke"
+        cant_link_an_issue_with_a_descendant: "Zeregin bat ezin da bere azpiataza batekin estekatu."
+
+  actionview_instancetag_blank_option: Hautatu mesedez
+  
+  general_text_No: 'Ez'
+  general_text_Yes: 'Bai'
+  general_text_no: 'ez'
+  general_text_yes: 'bai'
+  general_lang_name: 'Euskara'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '1'
+  
+  notice_account_updated: Kontua ongi eguneratu da.
+  notice_account_invalid_creditentials: Erabiltzaile edo pasahitz ezegokia
+  notice_account_password_updated: Pasahitza ongi eguneratu da.
+  notice_account_wrong_password: Pasahitz ezegokia.
+  notice_account_register_done: Kontua ongi sortu da. Kontua gaitzeko klikatu epostan adierazi zaizun estekan.
+  notice_account_unknown_email: Erabiltzaile ezezaguna.
+  notice_can_t_change_password: Kontu honek kanpoko autentikazio bat erabiltzen du. Ezinezkoa da pasahitza aldatzea.
+  notice_account_lost_email_sent: Pasahitz berria aukeratzeko jarraibideak dituen eposta bat bidali zaizu.
+  notice_account_activated: Zure kontua gaituta dago. Orain saioa has dezakezu
+  notice_successful_create: Sortze arrakastatsua.
+  notice_successful_update: Eguneratze arrakastatsua.
+  notice_successful_delete: Ezabaketa arrakastatsua.
+  notice_successful_connection: Konexio arrakastatsua.
+  notice_file_not_found: Atzitu nahi duzun orria ez da exisitzen edo ezabatua izan da.
+  notice_locking_conflict: Beste erabiltzaile batek datuak eguneratu ditu.
+  notice_not_authorized: Ez duzu orri hau atzitzeko baimenik.
+  notice_email_sent: "%{value} helbidera eposta bat bidali da"
+  notice_email_error: "Errorea eposta bidaltzean (%{value})"
+  notice_feeds_access_key_reseted: Zure RSS atzipen giltza berrezarri da.
+  notice_api_access_key_reseted: Zure API atzipen giltza berrezarri da.
+  notice_failed_to_save_issues: "Hautatutako %{total} zereginetatik %{count} ezin izan dira konpondu: %{ids}."
+  notice_no_issue_selected: "Ez da zereginik hautatu! Mesedez, editatu nahi dituzun arazoak markatu."
+  notice_account_pending: "Zure kontua sortu da, orain kudeatzailearen onarpenaren zain dago."
+  notice_default_data_loaded: Lehenetsitako konfigurazioa ongi kargatu da.
+  notice_unable_delete_version: Ezin da bertsioa ezabatu.
+  notice_issue_done_ratios_updated: Burututako zereginen erlazioa eguneratu da.
+  
+  error_can_t_load_default_data: "Ezin izan da lehenetsitako konfigurazioa kargatu: %{value}"
+  error_scm_not_found: "Sarrera edo berrikuspena ez da biltegian topatu."
+  error_scm_command_failed: "Errorea gertatu da biltegia atzitzean: %{value}"
+  error_scm_annotate: "Sarrera ez da existitzen edo ezin da anotatu."
+  error_issue_not_found_in_project: 'Zeregina ez da topatu edo ez da proiektu honetakoa'
+  error_no_tracker_in_project: 'Proiektu honek ez du aztarnaririk esleituta. Mesedez egiaztatu Proiektuaren ezarpenak.'
+  error_no_default_issue_status: 'Zereginek ez dute lehenetsitako egoerarik.  Mesedez egiaztatu zure konfigurazioa ("Kudeaketa -> Arazoen egoerak" atalera joan).'
+  error_can_not_reopen_issue_on_closed_version: 'Itxitako bertsio batera esleitutako zereginak ezin dira berrireki'
+  error_can_not_archive_project: Proiektu hau ezin da artxibatu
+  error_issue_done_ratios_not_updated: "Burututako zereginen erlazioa ez da eguneratu."
+  error_workflow_copy_source: 'Mesedez hautatu iturburuko aztarnari edo rola'
+  error_workflow_copy_target: 'Mesedez hautatu helburuko aztarnari(ak) edo rola(k)'
+  
+  warning_attachments_not_saved: "%{count} fitxategi ezin izan d(ir)a gorde."
+  
+  mail_subject_lost_password: "Zure %{value} pasahitza"
+  mail_body_lost_password: 'Zure pasahitza aldatzeko hurrengo estekan klikatu:'
+  mail_subject_register: "Zure %{value} kontuaren gaitzea"
+  mail_body_register: 'Zure kontua gaitzeko hurrengo estekan klikatu:'
+  mail_body_account_information_external: "Zure %{value} kontua erabil dezakezu saioa hasteko."
+  mail_body_account_information: Zure kontuaren informazioa
+  mail_subject_account_activation_request: "%{value} kontu gaitzeko eskaera"
+  mail_body_account_activation_request: "Erabiltzaile berri bat (%{value}) erregistratu da. Kontua zure onarpenaren zain dago:"
+  mail_subject_reminder: "%{count} arazo hurrengo %{days} egunetan amaitzen d(ir)a"
+  mail_body_reminder: "Zuri esleituta dauden %{count} arazo hurrengo %{days} egunetan amaitzen d(ir)a:"
+  mail_subject_wiki_content_added: "'%{id}' wiki orria gehitu da"
+  mail_body_wiki_content_added: "%{author}-(e)k '%{id}' wiki orria gehitu du."
+  mail_subject_wiki_content_updated: "'%{id}' wiki orria eguneratu da"
+  mail_body_wiki_content_updated: "%{author}-(e)k '%{id}' wiki orria eguneratu du."
+  
+  gui_validation_error: akats 1
+  gui_validation_error_plural: "%{count} akats"
+  
+  field_name: Izena
+  field_description: Deskribapena
+  field_summary: Laburpena
+  field_is_required: Beharrezkoa
+  field_firstname: Izena
+  field_lastname: Abizenak
+  field_mail: Eposta
+  field_filename: Fitxategia
+  field_filesize: Tamaina
+  field_downloads: Deskargak
+  field_author: Egilea
+  field_created_on: Sortuta
+  field_updated_on: Eguneratuta
+  field_field_format: Formatua
+  field_is_for_all: Proiektu guztietarako
+  field_possible_values: Balio posibleak
+  field_regexp: Expresio erregularra
+  field_min_length: Luzera minimoa
+  field_max_length: Luzera maxioma
+  field_value: Balioa
+  field_category: Kategoria
+  field_title: Izenburua
+  field_project: Proiektua
+  field_issue: Zeregina
+  field_status: Egoera
+  field_notes: Oharrak
+  field_is_closed: Itxitako arazoa
+  field_is_default: Lehenetsitako balioa
+  field_tracker: Aztarnaria
+  field_subject: Gaia
+  field_due_date: Amaiera data
+  field_assigned_to: Esleituta
+  field_priority: Lehentasuna
+  field_fixed_version: Helburuko bertsioa
+  field_user: Erabiltzilea
+  field_role: Rola
+  field_homepage: Orri nagusia
+  field_is_public: Publikoa
+  field_parent: "Honen azpiproiektua:"
+  field_is_in_chlog: Zereginak aldaketa egunkarian ikusten dira
+  field_is_in_roadmap: Arazoak ibilbide-mapan erakutsi
+  field_login: Erabiltzaile izena
+  field_mail_notification: Eposta jakinarazpenak
+  field_admin: Kudeatzailea
+  field_last_login_on: Azken konexioa
+  field_language: Hizkuntza
+  field_effective_date: Data
+  field_password: Pasahitza
+  field_new_password: Pasahitz berria
+  field_password_confirmation: Berrespena
+  field_version: Bertsioa
+  field_type: Mota
+  field_host: Ostalaria
+  field_port: Portua
+  field_account: Kontua
+  field_base_dn: Base DN
+  field_attr_login: Erabiltzaile atributua
+  field_attr_firstname: Izena atributua
+  field_attr_lastname: Abizenak atributua
+  field_attr_mail: Eposta atributua
+  field_onthefly: Zuzeneko erabiltzaile sorrera
+  field_start_date: Hasiera
+  field_done_ratio: Egindako %
+  field_auth_source: Autentikazio modua
+  field_hide_mail: Nire eposta helbidea ezkutatu
+  field_comments: Iruzkina
+  field_url: URL
+  field_start_page: Hasierako orria
+  field_subproject: Azpiproiektua
+  field_hours: Ordu
+  field_activity: Jarduera
+  field_spent_on: Data
+  field_identifier: Identifikatzailea
+  field_is_filter: Iragazki moduan erabilita
+  field_issue_to: Erlazionatutako zereginak
+  field_delay: Atzerapena
+  field_assignable: Arazoak rol honetara esleitu daitezke
+  field_redirect_existing_links: Existitzen diren estekak berbideratu
+  field_estimated_hours: Estimatutako denbora
+  field_column_names: Zutabeak
+  field_time_zone: Ordu zonaldea
+  field_searchable: Bilagarria
+  field_default_value: Lehenetsitako balioa
+  field_comments_sorting: Iruzkinak erakutsi
+  field_parent_title: Orri gurasoa
+  field_editable: Editagarria
+  field_watcher: Behatzailea
+  field_identity_url: OpenID URLa
+  field_content: Edukia
+  field_group_by: Emaitzak honegatik taldekatu
+  field_sharing: Partekatzea
+
+  setting_app_title: Aplikazioaren izenburua
+  setting_app_subtitle: Aplikazioaren azpizenburua
+  setting_welcome_text: Ongietorriko testua
+  setting_default_language: Lehenetsitako hizkuntza
+  setting_login_required: Autentikazioa derrigorrezkoa
+  setting_self_registration: Norberak erregistratu
+  setting_attachment_max_size: Eranskinen tamaina max.
+  setting_issues_export_limit: Zereginen esportatze limitea
+  setting_mail_from: Igorlearen eposta helbidea
+  setting_bcc_recipients: Hartzaileak ezkutuko kopian (bcc)
+  setting_plain_text_mail: Testu soileko epostak (HTML-rik ez)
+  setting_host_name: Ostalari izena eta bidea
+  setting_text_formatting: Testu formatua
+  setting_wiki_compression: Wikiaren historia konprimitu
+  setting_feeds_limit: Jarioaren edukiera limitea
+  setting_default_projects_public: Proiektu berriak defektuz publikoak dira
+  setting_autofetch_changesets: Commit-ak automatikoki hartu
+  setting_sys_api_enabled: Biltegien kudeaketarako WS gaitu
+  setting_commit_ref_keywords: Erreferentzien gako-hitzak
+  setting_commit_fix_keywords: Konpontze gako-hitzak
+  setting_autologin: Saioa automatikoki hasi
+  setting_date_format: Data formatua
+  setting_time_format: Ordu formatua
+  setting_cross_project_issue_relations: Zereginak proiektuen artean erlazionatzea baimendu
+  setting_issue_list_default_columns: Zereginen zerrendan defektuz ikusten diren zutabeak
+  setting_repositories_encodings: Biltegien kodeketak
+  setting_emails_footer: Eposten oina
+  setting_protocol: Protokoloa
+  setting_per_page_options: Orriko objektuen aukerak
+  setting_user_format: Erabiltzaileak erakusteko formatua
+  setting_activity_days_default: Proiektuen jardueran erakusteko egunak
+  setting_display_subprojects_issues: Azpiproiektuen zereginak proiektu nagusian erakutsi defektuz
+  setting_enabled_scm: Gaitutako IKKak
+  setting_mail_handler_body_delimiters: "Lerro hauteko baten ondoren epostak moztu"
+  setting_mail_handler_api_enabled: Sarrerako epostentzako WS gaitu
+  setting_mail_handler_api_key: API giltza
+  setting_sequential_project_identifiers: Proiektuen identifikadore sekuentzialak sortu
+  setting_gravatar_enabled: Erabili Gravatar erabiltzaile ikonoak
+  setting_gravatar_default: Lehenetsitako Gravatar irudia
+  setting_diff_max_lines_displayed: Erakutsiko diren diff lerro kopuru maximoa
+  setting_file_max_size_displayed: Barnean erakuzten diren testu fitxategien tamaina maximoa
+  setting_repository_log_display_limit: Egunkari fitxategian erakutsiko diren berrikuspen kopuru maximoa.
+  setting_openid: Baimendu OpenID saio hasiera eta erregistatzea
+  setting_password_min_length: Pasahitzen luzera minimoa
+  setting_new_project_user_role_id: Proiektu berriak sortzerakoan kudeatzaile ez diren erabiltzaileei esleitutako rola
+  setting_default_projects_modules: Proiektu berrientzako defektuz gaitutako moduluak
+  setting_issue_done_ratio: "Zereginen burututako tasa kalkulatzean erabili:"
+  setting_issue_done_ratio_issue_field: Zeregin eremua erabili
+  setting_issue_done_ratio_issue_status: Zeregin egoera erabili
+  setting_start_of_week: "Egutegiak noiz hasi:"
+  setting_rest_api_enabled: Gaitu REST web zerbitzua
+  
+  permission_add_project: Proiektua sortu
+  permission_add_subprojects: Azpiproiektuak sortu
+  permission_edit_project: Proiektua editatu
+  permission_select_project_modules: Proiektuaren moduluak hautatu
+  permission_manage_members: Kideak kudeatu
+  permission_manage_versions: Bertsioak kudeatu
+  permission_manage_categories: Arazoen kategoriak kudeatu
+  permission_view_issues: Zereginak ikusi
+  permission_add_issues: Zereginak gehitu
+  permission_edit_issues: Zereginak aldatu
+  permission_manage_issue_relations: Zereginen erlazioak kudeatu
+  permission_add_issue_notes: Oharrak gehitu
+  permission_edit_issue_notes: Oharrak aldatu
+  permission_edit_own_issue_notes: Nork bere oharrak aldatu
+  permission_move_issues: Zereginak mugitu
+  permission_delete_issues: Zereginak ezabatu
+  permission_manage_public_queries: Galdera publikoak kudeatu
+  permission_save_queries: Galderak gorde
+  permission_view_gantt: Gantt grafikoa ikusi
+  permission_view_calendar: Egutegia ikusi
+  permission_view_issue_watchers: Behatzaileen zerrenda ikusi
+  permission_add_issue_watchers: Behatzaileak gehitu
+  permission_delete_issue_watchers: Behatzaileak ezabatu
+  permission_log_time: Igarotako denbora erregistratu
+  permission_view_time_entries: Igarotako denbora ikusi
+  permission_edit_time_entries: Denbora egunkariak editatu
+  permission_edit_own_time_entries: Nork bere denbora egunkariak editatu
+  permission_manage_news: Berriak kudeatu
+  permission_comment_news: Berrien iruzkinak egin
+  permission_manage_documents: Dokumentuak kudeatu
+  permission_view_documents: Dokumentuak ikusi
+  permission_manage_files: Fitxategiak kudeatu
+  permission_view_files: Fitxategiak ikusi
+  permission_manage_wiki: Wikia kudeatu
+  permission_rename_wiki_pages: Wiki orriak berrizendatu
+  permission_delete_wiki_pages: Wiki orriak ezabatu
+  permission_view_wiki_pages: Wikia ikusi
+  permission_view_wiki_edits: Wikiaren historia ikusi
+  permission_edit_wiki_pages: Wiki orriak editatu
+  permission_delete_wiki_pages_attachments: Eranskinak ezabatu
+  permission_protect_wiki_pages: Wiki orriak babestu
+  permission_manage_repository: Biltegiak kudeatu
+  permission_browse_repository: Biltegia arakatu
+  permission_view_changesets: Aldaketak ikusi
+  permission_commit_access: Commit atzipena
+  permission_manage_boards: Foroak kudeatu
+  permission_view_messages: Mezuak ikusi
+  permission_add_messages: Mezuak bidali
+  permission_edit_messages: Mezuak aldatu
+  permission_edit_own_messages: Nork bere mezuak aldatu
+  permission_delete_messages: Mezuak ezabatu
+  permission_delete_own_messages: Nork bere mezuak ezabatu
+  
+  project_module_issue_tracking: Zereginen jarraipena
+  project_module_time_tracking: Denbora jarraipena
+  project_module_news: Berriak
+  project_module_documents: Dokumentuak
+  project_module_files: Fitxategiak
+  project_module_wiki: Wiki
+  project_module_repository: Biltegia
+  project_module_boards: Foroak
+  
+  label_user: Erabiltzailea
+  label_user_plural: Erabiltzaileak
+  label_user_new: Erabiltzaile berria
+  label_user_anonymous: Ezezaguna
+  label_project: Proiektua
+  label_project_new: Proiektu berria
+  label_project_plural: Proiektuak
+  label_x_projects:
+    zero:  proiekturik ez
+    one:   proiektu bat
+    other: "%{count} proiektu"
+  label_project_all: Proiektu guztiak
+  label_project_latest: Azken proiektuak
+  label_issue: Zeregina
+  label_issue_new: Zeregin berria
+  label_issue_plural: Zereginak
+  label_issue_view_all: Zeregin guztiak ikusi
+  label_issues_by: "Zereginak honengatik: %{value}"
+  label_issue_added: Zeregina gehituta
+  label_issue_updated: Zeregina eguneratuta
+  label_document: Dokumentua
+  label_document_new: Dokumentu berria
+  label_document_plural: Dokumentuak
+  label_document_added: Dokumentua gehituta
+  label_role: Rola
+  label_role_plural: Rolak
+  label_role_new: Rol berria
+  label_role_and_permissions: Rolak eta baimenak
+  label_member: Kidea
+  label_member_new: Kide berria
+  label_member_plural: Kideak
+  label_tracker: Aztarnaria
+  label_tracker_plural: Aztarnariak
+  label_tracker_new: Aztarnari berria
+  label_workflow: Lan-fluxua
+  label_issue_status: Zeregin egoera
+  label_issue_status_plural: Zeregin egoerak
+  label_issue_status_new: Egoera berria
+  label_issue_category: Zeregin kategoria
+  label_issue_category_plural: Zeregin kategoriak
+  label_issue_category_new: Kategoria berria
+  label_custom_field: Eremu pertsonalizatua
+  label_custom_field_plural: Eremu pertsonalizatuak
+  label_custom_field_new: Eremu pertsonalizatu berria
+  label_enumerations: Enumerazioak
+  label_enumeration_new: Balio berria
+  label_information: Informazioa
+  label_information_plural: Informazioa
+  label_please_login: Saioa hasi mesedez
+  label_register: Erregistratu
+  label_login_with_open_id_option: edo OpenID-rekin saioa hasi
+  label_password_lost: Pasahitza galduta
+  label_home: Hasiera
+  label_my_page: Nire orria
+  label_my_account: Nire kontua
+  label_my_projects: Nire proiektuak
+  label_administration: Kudeaketa
+  label_login: Saioa hasi
+  label_logout: Saioa bukatu
+  label_help: Laguntza
+  label_reported_issues: Berri emandako zereginak
+  label_assigned_to_me_issues: Niri esleitutako arazoak
+  label_last_login: Azken konexioa
+  label_registered_on: Noiz erregistratuta
+  label_activity: Jarduerak
+  label_overall_activity: Jarduera guztiak
+  label_user_activity: "%{value}-(r)en jarduerak"
+  label_new: Berria
+  label_logged_as: "Sartutako erabiltzailea:"
+  label_environment: Ingurune
+  label_authentication: Autentikazioa
+  label_auth_source: Autentikazio modua
+  label_auth_source_new: Autentikazio modu berria
+  label_auth_source_plural: Autentikazio moduak
+  label_subproject_plural: Azpiproiektuak
+  label_subproject_new: Azpiproiektu berria
+  label_and_its_subprojects: "%{value} eta bere azpiproiektuak"
+  label_min_max_length: Luzera min - max
+  label_list: Zerrenda
+  label_date: Data
+  label_integer: Osokoa
+  label_float: Koma higikorrekoa
+  label_boolean: Boolearra
+  label_string: Testua
+  label_text: Testu luzea
+  label_attribute: Atributua
+  label_attribute_plural: Atributuak
+  label_download: "Deskarga %{count}"
+  label_download_plural: "%{count} Deskarga"
+  label_no_data: Ez dago erakusteko daturik
+  label_change_status: Egoera aldatu
+  label_history: Historikoa
+  label_attachment: Fitxategia
+  label_attachment_new: Fitxategi berria
+  label_attachment_delete: Fitxategia ezabatu
+  label_attachment_plural: Fitxategiak
+  label_file_added: Fitxategia gehituta
+  label_report: Berri ematea
+  label_report_plural: Berri emateak
+  label_news: Berria
+  label_news_new: Berria gehitu
+  label_news_plural: Berriak
+  label_news_latest: Azken berriak
+  label_news_view_all: Berri guztiak ikusi
+  label_news_added: Berria gehituta
+  label_change_log: Aldaketa egunkaria
+  label_settings: Ezarpenak
+  label_overview: Gainbegirada
+  label_version: Bertsioa
+  label_version_new: Bertsio berria
+  label_version_plural: Bertsioak
+  label_close_versions: Burututako bertsioak itxi
+  label_confirmation: Baieztapena
+  label_export_to: 'Eskuragarri baita:'
+  label_read: Irakurri...
+  label_public_projects: Proiektu publikoak
+  label_open_issues: irekita
+  label_open_issues_plural: irekiak
+  label_closed_issues: itxita
+  label_closed_issues_plural: itxiak
+  label_x_open_issues_abbr_on_total:
+    zero:  0 irekita / %{total}
+    one:   1 irekita / %{total}
+    other: "%{count} irekiak / %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 irekita
+    one:   1 irekita
+    other: "%{count} irekiak"
+  label_x_closed_issues_abbr:
+    zero:  0 itxita
+    one:   1 itxita
+    other: "%{count} itxiak"
+  label_total: Guztira
+  label_permissions: Baimenak
+  label_current_status: Uneko egoera
+  label_new_statuses_allowed: Baimendutako egoera berriak
+  label_all: guztiak
+  label_none: ezer
+  label_nobody: inor
+  label_next: Hurrengoa
+  label_previous: Aurrekoak
+  label_used_by: Erabilita
+  label_details: Xehetasunak
+  label_add_note: Oharra gehitu
+  label_per_page: Orriko
+  label_calendar: Egutegia
+  label_months_from: hilabete noiztik
+  label_gantt: Gantt
+  label_internal: Barnekoa
+  label_last_changes: "azken %{count} aldaketak"
+  label_change_view_all: Aldaketa guztiak ikusi
+  label_personalize_page: Orri hau pertsonalizatu
+  label_comment: Iruzkin
+  label_comment_plural: Iruzkinak
+  label_x_comments:
+    zero: iruzkinik ez
+    one: iruzkin 1
+    other: "%{count} iruzkin"
+  label_comment_add: Iruzkina gehitu
+  label_comment_added: Iruzkina gehituta
+  label_comment_delete: Iruzkinak ezabatu
+  label_query: Galdera pertsonalizatua
+  label_query_plural: Pertsonalizatutako galderak
+  label_query_new: Galdera berria
+  label_filter_add: Iragazkia gehitu
+  label_filter_plural: Iragazkiak
+  label_equals: da
+  label_not_equals: ez da
+  label_in_less_than: baino gutxiagotan
+  label_in_more_than: baino gehiagotan
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: hauetan
+  label_today: gaur
+  label_all_time: denbora guztia
+  label_yesterday: atzo
+  label_this_week: aste honetan
+  label_last_week: pasadan astean
+  label_last_n_days: "azken %{count} egunetan"
+  label_this_month: hilabete hau
+  label_last_month: pasadan hilabetea
+  label_this_year: urte hau
+  label_date_range: Data tartea
+  label_less_than_ago: egun hauek baino gutxiago
+  label_more_than_ago: egun hauek baino gehiago
+  label_ago: orain dela
+  label_contains: dauka
+  label_not_contains: ez dauka
+  label_day_plural: egun
+  label_repository: Biltegia
+  label_repository_plural: Biltegiak
+  label_browse: Arakatu
+  label_modification: "aldaketa %{count}"
+  label_modification_plural: "%{count} aldaketa"
+  label_branch: Adarra
+  label_tag: Etiketa 
+  label_revision: Berrikuspena
+  label_revision_plural: Berrikuspenak
+  label_revision_id: "%{value} berrikuspen"
+  label_associated_revisions: Elkartutako berrikuspenak
+  label_added: gehituta
+  label_modified: aldatuta
+  label_copied: kopiatuta
+  label_renamed: berrizendatuta
+  label_deleted: ezabatuta
+  label_latest_revision: Azken berrikuspena
+  label_latest_revision_plural: Azken berrikuspenak
+  label_view_revisions: Berrikuspenak ikusi
+  label_view_all_revisions: Berrikuspen guztiak ikusi
+  label_max_size: Tamaina maximoa
+  label_sort_highest: Goraino mugitu
+  label_sort_higher: Gora mugitu
+  label_sort_lower: Behera mugitu
+  label_sort_lowest: Beheraino mugitu
+  label_roadmap: Ibilbide-mapa
+  label_roadmap_due_in: "Epea: %{value}"
+  label_roadmap_overdue: "%{value} berandu"
+  label_roadmap_no_issues: Ez dago zereginik bertsio honetan
+  label_search: Bilatu
+  label_result_plural: Emaitzak
+  label_all_words: hitz guztiak
+  label_wiki: Wikia
+  label_wiki_edit: Wiki edizioa
+  label_wiki_edit_plural: Wiki edizioak
+  label_wiki_page: Wiki orria
+  label_wiki_page_plural: Wiki orriak
+  label_index_by_title: Izenburuaren araberako indizea
+  label_index_by_date: Dataren araberako indizea
+  label_current_version: Uneko bertsioa
+  label_preview: Aurreikusi
+  label_feed_plural: Jarioak
+  label_changes_details: Aldaketa guztien xehetasunak
+  label_issue_tracking: Zeregin jarraipena
+  label_spent_time: Igarotako denbora
+  label_f_hour: "ordu %{value}"
+  label_f_hour_plural: "%{value} ordu"
+  label_time_tracking: Denbora jarraipena
+  label_change_plural: Aldaketak
+  label_statistics: Estatistikak
+  label_commits_per_month: Commit-ak hilabeteka
+  label_commits_per_author: Commit-ak egileka
+  label_view_diff: Ezberdintasunak ikusi
+  label_diff_inline: barnean
+  label_diff_side_by_side: aldez alde
+  label_options: Aukerak
+  label_copy_workflow_from: Kopiatu workflow-a hemendik
+  label_permissions_report: Baimenen txostena
+  label_watched_issues: Behatutako zereginak
+  label_related_issues: Erlazionatutako zereginak
+  label_applied_status: Aplikatutako egoera
+  label_loading: Kargatzen...
+  label_relation_new: Erlazio berria
+  label_relation_delete: Erlazioa ezabatu
+  label_relates_to: erlazionatuta dago
+  label_duplicates: bikoizten du
+  label_duplicated_by: honek bikoiztuta
+  label_blocks: blokeatzen du
+  label_blocked_by: honek blokeatuta
+  label_precedes: aurretik doa
+  label_follows: jarraitzen du
+  label_end_to_start: bukaeratik hasierara
+  label_end_to_end: bukaeratik bukaerara
+  label_start_to_start: hasieratik hasierhasieratik bukaerara
+  label_start_to_end: hasieratik bukaerara
+  label_stay_logged_in: Saioa mantendu
+  label_disabled: ezgaituta
+  label_show_completed_versions: Bukatutako bertsioak ikusi
+  label_me: ni
+  label_board: Foroa
+  label_board_new: Foro berria
+  label_board_plural: Foroak
+  label_topic_plural: Gaiak
+  label_message_plural: Mezuak
+  label_message_last: Azken mezua
+  label_message_new: Mezu berria
+  label_message_posted: Mezua gehituta
+  label_reply_plural: Erantzunak
+  label_send_information: Erabiltzaileai kontuaren informazioa bidali
+  label_year: Urtea
+  label_month: Hilabetea
+  label_week: Astea
+  label_date_from: Nork
+  label_date_to: Nori
+  label_language_based: Erabiltzailearen hizkuntzaren arabera
+  label_sort_by: "Ordenazioa: %{value}"
+  label_send_test_email: Frogako mezua bidali
+  label_feeds_access_key: RSS atzipen giltza
+  label_missing_feeds_access_key: RSS atzipen giltza falta da
+  label_feeds_access_key_created_on: "RSS atzipen giltza orain dela %{value} sortuta"
+  label_module_plural: Moduluak
+  label_added_time_by: "%{author}, orain dela %{age} gehituta"
+  label_updated_time_by: "%{author}, orain dela %{age} eguneratuta"
+  label_updated_time: "Orain dela %{value} eguneratuta"
+  label_jump_to_a_project: Joan proiektura...
+  label_file_plural: Fitxategiak
+  label_changeset_plural: Aldaketak
+  label_default_columns: Lehenetsitako zutabeak
+  label_no_change_option: (Aldaketarik ez)
+  label_bulk_edit_selected_issues: Hautatutako zereginak batera editatu
+  label_theme: Itxura
+  label_default: Lehenetsia
+  label_search_titles_only: Izenburuetan bakarrik bilatu
+  label_user_mail_option_all: "Nire proiektu guztietako gertakari guztientzat"
+  label_user_mail_option_selected: "Hautatutako proiektuetako edozein gertakarientzat..."
+  label_user_mail_no_self_notified: "Ez dut nik egiten ditudan aldeketen jakinarazpenik jaso nahi"
+  label_registration_activation_by_email: kontuak epostaz gaitu
+  label_registration_manual_activation: kontuak eskuz gaitu
+  label_registration_automatic_activation: kontuak automatikoki gaitu
+  label_display_per_page: "Orriko: %{value}"
+  label_age: Adina
+  label_change_properties: Propietateak aldatu
+  label_general: Orokorra
+  label_more: Gehiago
+  label_scm: IKK
+  label_plugins: Pluginak
+  label_ldap_authentication: LDAP autentikazioa
+  label_downloads_abbr: Desk.
+  label_optional_description: Aukerako deskribapena
+  label_add_another_file: Beste fitxategia gehitu
+  label_preferences: Hobespenak
+  label_chronological_order: Orden kronologikoan
+  label_reverse_chronological_order: Alderantzizko orden kronologikoan
+  label_planning: Planifikazioa
+  label_incoming_emails: Sarrerako epostak
+  label_generate_key: Giltza sortu
+  label_issue_watchers: Behatzaileak
+  label_example: Adibidea
+  label_display: Bistaratzea
+  label_sort: Ordenatu
+  label_ascending: Gorantz
+  label_descending: Beherantz
+  label_date_from_to: "%{start}-tik %{end}-ra"
+  label_wiki_content_added: Wiki orria gehituta
+  label_wiki_content_updated: Wiki orria eguneratuta
+  label_group: Taldea
+  label_group_plural: Taldeak
+  label_group_new: Talde berria
+  label_time_entry_plural: Igarotako denbora
+  label_version_sharing_none: Ez partekatuta
+  label_version_sharing_descendants: Azpiproiektuekin
+  label_version_sharing_hierarchy: Proiektu Hierarkiarekin
+  label_version_sharing_tree: Proiektu zuhaitzarekin
+  label_version_sharing_system: Proiektu guztiekin
+  label_update_issue_done_ratios: Zereginen burututako erlazioa eguneratu
+  label_copy_source: Iturburua
+  label_copy_target: Helburua
+  label_copy_same_as_target: Helburuaren berdina
+  label_display_used_statuses_only: Aztarnari honetan erabiltzen diren egoerak bakarrik erakutsi
+  label_api_access_key: API atzipen giltza
+  label_missing_api_access_key: API atzipen giltza falta da
+  label_api_access_key_created_on: "API atzipen giltza sortuta orain dela %{value}"
+  
+  button_login: Saioa hasi
+  button_submit: Bidali
+  button_save: Gorde
+  button_check_all: Guztiak markatu
+  button_uncheck_all: Guztiak desmarkatu
+  button_delete: Ezabatu
+  button_create: Sortu
+  button_create_and_continue: Sortu eta jarraitu
+  button_test: Frogatu
+  button_edit: Editatu
+  button_add: Gehitu
+  button_change: Aldatu
+  button_apply: Aplikatu
+  button_clear: Garbitu
+  button_lock: Blokeatu
+  button_unlock: Desblokeatu
+  button_download: Deskargatu
+  button_list: Zerrenda
+  button_view: Ikusi
+  button_move: Mugitu
+  button_move_and_follow: Mugitu eta jarraitu
+  button_back: Atzera
+  button_cancel: Ezeztatu
+  button_activate: Gahitu
+  button_sort: Ordenatu
+  button_log_time: Denbora erregistratu
+  button_rollback: Itzuli bertsio honetara
+  button_watch: Behatu
+  button_unwatch: Behatzen utzi
+  button_reply: Erantzun
+  button_archive: Artxibatu
+  button_unarchive: Desartxibatu
+  button_reset: Berrezarri
+  button_rename: Berrizendatu
+  button_change_password: Pasahitza aldatu
+  button_copy: Kopiatu
+  button_copy_and_follow: Kopiatu eta jarraitu
+  button_annotate: Anotatu
+  button_update: Eguneratu
+  button_configure: Konfiguratu
+  button_quote: Aipatu
+  button_duplicate: Bikoiztu
+  button_show: Ikusi
+  
+  status_active: gaituta
+  status_registered: izena emanda
+  status_locked: blokeatuta
+  
+  version_status_open: irekita
+  version_status_locked: blokeatuta
+  version_status_closed: itxita
+
+  field_active: Gaituta
+  
+  text_select_mail_notifications: Jakinarazpenak zein ekintzetarako bidaliko diren hautatu.
+  text_regexp_info: adib. ^[A-Z0-9]+$
+  text_min_max_length_info: 0k mugarik gabe esan nahi du
+  text_project_destroy_confirmation: Ziur zaude proiektu hau eta erlazionatutako datu guztiak ezabatu nahi dituzula?
+  text_subprojects_destroy_warning: "%{value} azpiproiektuak ere ezabatuko dira."
+  text_workflow_edit: Hautatu rola eta aztarnaria workflow-a editatzeko
+  text_are_you_sure: Ziur zaude?
+  text_journal_changed: "%{label} %{old}-(e)tik %{new}-(e)ra aldatuta"
+  text_journal_set_to: "%{label}-k %{value} balioa hartu du"
+  text_journal_deleted: "%{label} ezabatuta (%{old})"
+  text_journal_added: "%{label} %{value} gehituta"
+  text_tip_issue_begin_day: gaur hasten diren zereginak
+  text_tip_issue_end_day: gaur bukatzen diren zereginak
+  text_tip_issue_begin_end_day: gaur hasi eta bukatzen diren zereginak
+  text_project_identifier_info: 'Letra xeheak (a-z), zenbakiak eta marrak erabil daitezke bakarrik.<br />Gorde eta gero identifikadorea ezin da aldatu.'
+  text_caracters_maximum: "%{count} karaktere gehienez."
+  text_caracters_minimum: "Gutxienez %{count} karaktereetako luzerakoa izan behar du."
+  text_length_between: "Luzera %{min} eta %{max} karaktereen artekoa."
+  text_tracker_no_workflow: Ez da workflow-rik definitu aztarnari honentzako
+  text_unallowed_characters: Debekatutako karaktereak
+  text_comma_separated: Balio anitz izan daitezke (komaz banatuta).
+  text_line_separated: Balio anitz izan daitezke (balio bakoitza lerro batean).
+  text_issues_ref_in_commit_messages: Commit-en mezuetan zereginak erlazionatu eta konpontzen
+  text_issue_added: "%{id} zeregina %{author}-(e)k jakinarazi du."
+  text_issue_updated: "%{id} zeregina %{author}-(e)k eguneratu du."
+  text_wiki_destroy_confirmation: Ziur zaude wiki hau eta bere eduki guztiak ezabatu nahi dituzula?
+  text_issue_category_destroy_question: "Zeregin batzuk (%{count}) kategoria honetara esleituta daude. Zer egin nahi duzu?"
+  text_issue_category_destroy_assignments: Kategoria esleipenak kendu
+  text_issue_category_reassign_to: Zereginak kategoria honetara esleitu
+  text_user_mail_option: "Hautatu gabeko proiektuetan, behatzen edo parte hartzen duzun gauzei buruzko jakinarazpenak jasoko dituzu (adib. zu egile zaren edo esleituta dituzun zereginak)."
+  text_no_configuration_data: "Rolak, aztarnariak, zeregin egoerak eta workflow-ak ez dira oraindik konfiguratu.\nOso gomendagarria de lehenetsitako kkonfigurazioa kargatzea. Kargatu eta gero aldatu ahalko duzu."
+  text_load_default_configuration: Lehenetsitako konfigurazioa kargatu
+  text_status_changed_by_changeset: "%{value} aldaketan aplikatuta."
+  text_issues_destroy_confirmation: 'Ziur zaude hautatutako zeregina(k) ezabatu nahi dituzula?'
+  text_select_project_modules: 'Hautatu proiektu honetan gaitu behar diren moduluak:'
+  text_default_administrator_account_changed: Lehenetsitako kudeatzaile kontua aldatuta
+  text_file_repository_writable: Eranskinen direktorioan idatz daiteke
+  text_plugin_assets_writable: Pluginen baliabideen direktorioan idatz daiteke
+  text_rmagick_available: RMagick eskuragarri (aukerazkoa)
+  text_destroy_time_entries_question: "%{hours} orduei buruz berri eman zen zuk ezabatzera zoazen zereginean. Zer egin nahi duzu?"
+  text_destroy_time_entries: Ezabatu berri emandako orduak
+  text_assign_time_entries_to_project: Berri emandako orduak proiektura esleitu
+  text_reassign_time_entries: 'Berri emandako orduak zeregin honetara esleitu:'
+  text_user_wrote: "%{value}-(e)k idatzi zuen:"
+  text_enumeration_destroy_question: "%{count} objetu balio honetara esleituta daude."
+  text_enumeration_category_reassign_to: 'Beste balio honetara esleitu:'
+  text_email_delivery_not_configured: "Eposta bidalketa ez dago konfiguratuta eta jakinarazpenak ezgaituta daude.\nKonfiguratu zure SMTP zerbitzaria config/configuration.yml-n eta aplikazioa berrabiarazi hauek gaitzeko."
+  text_repository_usernames_mapping: "Hautatu edo eguneratu Redmineko erabiltzailea biltegiko egunkarietan topatzen diren erabiltzaile izenekin erlazionatzeko.\nRedmine-n eta biltegian erabiltzaile izen edo eposta berdina duten erabiltzaileak automatikoki erlazionatzen dira."
+  text_diff_truncated: '... Diff hau moztua izan da erakus daitekeen tamaina maximoa gainditu duelako.'
+  text_custom_field_possible_values_info: 'Lerro bat balio bakoitzeko'
+  text_wiki_page_destroy_question: "Orri honek %{descendants} orri seme eta ondorengo ditu. Zer egin nahi duzu?"
+  text_wiki_page_nullify_children: "Orri semeak erro orri moduan mantendu"
+  text_wiki_page_destroy_children: "Orri semeak eta beraien ondorengo guztiak ezabatu"
+  text_wiki_page_reassign_children: "Orri semeak orri guraso honetara esleitu"
+  text_own_membership_delete_confirmation: "Zure baimen batzuk (edo guztiak) kentzera zoaz eta baliteke horren ondoren proiektu hau ezin editatzea.\n Ziur zaude jarraitu nahi duzula?"
+  
+  default_role_manager: Kudeatzailea
+  default_role_developer: Garatzailea
+  default_role_reporter: Berriemailea
+  default_tracker_bug: Errorea
+  default_tracker_feature: Eginbidea
+  default_tracker_support: Laguntza
+  default_issue_status_new: Berria
+  default_issue_status_in_progress: Lanean
+  default_issue_status_resolved: Ebatzita
+  default_issue_status_feedback: Berrelikadura
+  default_issue_status_closed: Itxita
+  default_issue_status_rejected: Baztertua
+  default_doc_category_user: Erabiltzaile dokumentazioa
+  default_doc_category_tech: Dokumentazio teknikoa
+  default_priority_low: Baxua
+  default_priority_normal: Normala
+  default_priority_high: Altua
+  default_priority_urgent: Larria
+  default_priority_immediate: Berehalakoa
+  default_activity_design: Diseinua
+  default_activity_development: Garapena
+  
+  enumeration_issue_priorities: Zeregin lehentasunak
+  enumeration_doc_categories: Dokumentu kategoriak
+  enumeration_activities: Jarduerak (denbora kontrola))
+  enumeration_system_activity: Sistemako Jarduera
+  label_board_sticky: Itsaskorra
+  label_board_locked: Blokeatuta
+  permission_export_wiki_pages: Wiki orriak esportatu
+  setting_cache_formatted_text: Formatudun testua katxeatu
+  permission_manage_project_activities: Proiektuaren jarduerak kudeatu
+  error_unable_delete_issue_status: Ezine da zereginaren egoera ezabatu
+  label_profile: Profila
+  permission_manage_subtasks: Azpiatazak kudeatu
+  field_parent_issue: Zeregin gurasoa
+  label_subtask_plural: Azpiatazak
+  label_project_copy_notifications: Proiektua kopiatzen den bitartean eposta jakinarazpenak bidali
+  error_can_not_delete_custom_field: Ezin da eremu pertsonalizatua ezabatu
+  error_unable_to_connect: Ezin da konektatu (%{value})
+  error_can_not_remove_role: Rol hau erabiltzen hari da eta ezin da ezabatu.
+  error_can_not_delete_tracker: Aztarnari honek zereginak ditu eta ezin da ezabatu.
+  field_principal: Ekintzaile
+  label_my_page_block: "Nire orriko blokea"
+  notice_failed_to_save_members: "Kidea(k) gordetzean errorea: %{errors}."
+  text_zoom_out: Zooma txikiagotu
+  text_zoom_in: Zooma handiagotu
+  notice_unable_delete_time_entry: "Ezin da hautatutako denbora erregistroa ezabatu."
+  label_overall_spent_time: Igarotako denbora guztira
+  field_time_entries: "Denbora erregistratu"
+  project_module_gantt: Gantt
+  project_module_calendar: Egutegia
+  button_edit_associated_wikipage: "Esleitutako wiki orria editatu: %{page_title}"
+  text_are_you_sure_with_children: "Zeregina eta azpi zeregin guztiak ezabatu?"
+  field_text: Testu eremua
+  label_user_mail_option_only_owner: "Jabea naizen gauzetarako barrarik"
+  setting_default_notification_option: "Lehenetsitako ohartarazpen aukera"
+  label_user_mail_option_only_my_events: "Behatzen ditudan edo partaide naizen gauzetarako bakarrik"
+  label_user_mail_option_only_assigned: "Niri esleitutako gauzentzat bakarrik"
+  label_user_mail_option_none: "Gertakaririk ez"
+  field_member_of_group: "Esleituta duenaren taldea"
+  field_assigned_to_role: "Esleituta duenaren rola"
+  notice_not_authorized_archived_project: "Atzitu nahi duzun proiektua artxibatua izan da."
+  label_principal_search: "Bilatu erabiltzaile edo taldea:"
+  label_user_search: "Erabiltzailea bilatu:"
+  field_visible: Ikusgai
+  setting_emails_header: "Eposten goiburua"
+  setting_commit_logtime_activity_id: "Erregistratutako denboraren jarduera"
+  text_time_logged_by_changeset: "%{value} aldaketan egindakoa."
+  setting_commit_logtime_enabled: "Erregistrutako denbora gaitu"
+  notice_gantt_chart_truncated: Grafikoa moztu da bistara daitekeen elementuen kopuru maximoa gainditu delako (%{max})
+  setting_gantt_items_limit: "Gantt grafikoan bistara daitekeen elementu kopuru maximoa"
+  field_warn_on_leaving_unsaved: Gorde gabeko testua duen orri batetik ateratzen naizenean ohartarazi
+  text_warn_on_leaving_unsaved: Uneko orritik joaten bazara gorde gabeko testua galduko da.
+  label_my_queries: Nire galdera pertsonalizatuak
+  text_journal_changed_no_detail: "%{label} eguneratuta"
+  label_news_comment_added: Berri batera iruzkina gehituta
+  button_expand_all: Guztia zabaldu
+  button_collapse_all: Guztia tolestu
+  label_additional_workflow_transitions_for_assignee: Erabiltzaileak esleitua duenean baimendutako transtsizio gehigarriak
+  label_additional_workflow_transitions_for_author: Erabiltzailea egilea denean baimendutako transtsizio gehigarriak
+  label_bulk_edit_selected_time_entries: Hautatutako denbora egunkariak batera editatu
+  text_time_entries_destroy_confirmation: Ziur zaude hautatutako denbora egunkariak ezabatu nahi dituzula?
+  label_role_anonymous: Ezezaguna
+  label_role_non_member: Ez kidea
+  label_issue_note_added: Oharra gehituta
+  label_issue_status_updated: Egoera eguneratuta
+  label_issue_priority_updated: Lehentasuna eguneratuta
+  label_issues_visibility_own: Erabiltzaileak sortu edo esleituta dituen zereginak
+  field_issues_visibility: Zeregin ikusgarritasuna
+  label_issues_visibility_all: Zeregin guztiak
+  permission_set_own_issues_private: Nork bere zereginak publiko edo pribatu jarri
+  field_is_private: Pribatu
+  permission_set_issues_private: Zereginak publiko edo pribatu jarri
+  label_issues_visibility_public: Pribatu ez diren zeregin guztiak
+  text_issues_destroy_descendants_confirmation: Honek %{count} azpiataza ezabatuko ditu baita ere.
+  field_commit_logs_encoding: Commit-en egunkarien kodetzea
+  field_scm_path_encoding: Bidearen kodeketa
+  text_scm_path_encoding_note: "Lehentsita: UTF-8"
+  field_path_to_repository: Biltegirako bidea
+  field_root_directory: Erro direktorioa
+  field_cvs_module: Modulua
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Biltegi locala (adib. /hgrepo, c:\hgrepo)
+  text_scm_command: Komandoa
+  text_scm_command_version: Bertsioa
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/fa.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/fa.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -17,16 +17,19 @@
     month_names: [~, ژانویه, فوریه, مارس, آوریل, مه, ژوئن, ژوئیه, اوت, سپتامبر, اکتبر, نوامبر, دسامبر]
     abbr_month_names: [~, ژان, فور, مار, آور, مه, ژوئن, ژوئیه, اوت, سپت, اکت, نوا, دسا]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
-      default: "%Y/%m/%d %p %I:%M"
-      time: "%p %I:%M"
+      default: "%Y/%m/%d - %H:%M"
+      time: "%H:%M"
       short: "%d %b %H:%M"
-      long: "%B %d, %Y %H:%M"
-    am: "ق.ظ"
-    pm: "ب.ظ"
+      long: "%d %B %Y ساعت %H:%M"
+    am: "صبح"
+    pm: "عصر"
       
   datetime:
     distance_in_words:
@@ -207,7 +210,7 @@
   gui_validation_error_plural: "%{count} ایراد"
   
   field_name: نام
-  field_description: توضیح
+  field_description: یادداشت
   field_summary: خلاصه
   field_is_required: الزامی
   field_firstname: نام کوچک
@@ -231,7 +234,7 @@
   field_project: پروژه
   field_issue: پیامد
   field_status: وضعیت
-  field_notes: یادداشت‌ها
+  field_notes: یادداشت
   field_is_closed: پیامد بسته شده
   field_is_default: مقدار پیش‌گزیده
   field_tracker: پیگرد
@@ -246,7 +249,7 @@
   field_homepage: برگه خانه
   field_is_public: همگانی
   field_parent: پروژه پدر
-  field_is_in_roadmap: این پیامدها در نقشه راه نشان داده شوند
+  field_is_in_roadmap: این پیامدها در چشم‌انداز نشان داده شوند
   field_login: ورود
   field_mail_notification: آگاه سازی‌های ایمیلی
   field_admin: سرپرست
@@ -276,7 +279,7 @@
   field_start_page: برگه آغاز
   field_subproject: زیر پروژه
   field_hours: ساعت‌
-  field_activity: فعالیت
+  field_activity: گزارش
   field_spent_on: در تاریخ
   field_identifier: شناسه
   field_is_filter: پالایش پذیر
@@ -330,13 +333,12 @@
   setting_cross_project_issue_relations: توانایی وابستگی میان پروژه‌ای پیامدها
   setting_issue_list_default_columns: ستون‌های پیش‌گزیده نمایش داده شده در فهرست پیامدها
   setting_repositories_encodings: کدگذاری انباره‌ها
-  setting_commit_logs_encoding: کدگذاری پیام‌های انباره
   setting_emails_header: سرنویس ایمیل‌ها
   setting_emails_footer: پانویس ایمیل‌ها
   setting_protocol: پیوندنامه
   setting_per_page_options: گزینه‌های اندازه داده‌های هر برگ
   setting_user_format: قالب نمایشی کاربران
-  setting_activity_days_default: روزهای نمایش داده شده در فعالیت پروژه
+  setting_activity_days_default: روزهای نمایش داده شده در گزارش پروژه
   setting_display_subprojects_issues: پیش‌گزیده نمایش پیامدهای زیرپروژه در پروژه پدر
   setting_enabled_scm: فعالسازی SCM
   setting_mail_handler_body_delimiters: "بریدن ایمیل‌ها پس از یکی از این ردیف‌ها"
@@ -360,7 +362,7 @@
   setting_cache_formatted_text: نهان سازی نوشته‌های قالب بندی شده
   setting_default_notification_option: آگاه سازی پیش‌گزیده
   setting_commit_logtime_enabled: فعالسازی زمان گذاشته شده
-  setting_commit_logtime_activity_id: فعالیت زمان گذاشته شده
+  setting_commit_logtime_activity_id: کار زمان گذاشته شده
   setting_gantt_items_limit: بیشترین شمار بخش‌های نمایش داده شده در نمودار گانت
   
   permission_add_project: ساخت پروژه
@@ -368,15 +370,15 @@
   permission_edit_project: ویرایش پروژه
   permission_select_project_modules: گزینش پیمانه‌های پروژه
   permission_manage_members: سرپرستی اعضا
-  permission_manage_project_activities: سرپرستی فعالیت‌های پروژه
+  permission_manage_project_activities: سرپرستی کارهای پروژه
   permission_manage_versions: سرپرستی نگارش‌ها
   permission_manage_categories: سرپرستی دسته‌های پیامد
   permission_view_issues: دیدن پیامدها
   permission_add_issues: افزودن پیامدها
   permission_edit_issues: ویرایش پیامدها
   permission_manage_issue_relations: سرپرستی وابستگی پیامدها
-  permission_add_issue_notes: افزودن یادداشت‌ها
-  permission_edit_issue_notes: ویرایش یادداشت‌ها
+  permission_add_issue_notes: افزودن یادداشت
+  permission_edit_issue_notes: ویرایش یادداشت
   permission_edit_own_issue_notes: ویرایش یادداشت خود
   permission_move_issues: جابجایی پیامدها
   permission_delete_issues: پاک کردن پیامدها
@@ -447,7 +449,7 @@
   label_issue_new: پیامد تازه
   label_issue_plural: پیامد
   label_issue_view_all: دیدن همه پیامدها
-  label_issues_by: "پیامدهای دست%{value}"
+  label_issues_by: "دسته‌بندی پیامدها با %{value}"
   label_issue_added: پیامد افزوده شد
   label_issue_updated: پیامد بروز شد
   label_document: نوشتار
@@ -495,9 +497,9 @@
   label_assigned_to_me_issues: پیامدهای واگذار شده به من
   label_last_login: آخرین ورود
   label_registered_on: نام نویسی شده در
-  label_activity: فعالیت
-  label_overall_activity: فعالیت روی هم رفته
-  label_user_activity: "فعالیت %{value}"
+  label_activity: گزارش
+  label_overall_activity: گزارش روی هم رفته
+  label_user_activity: "گزارش %{value}"
   label_new: تازه
   label_logged_as: "نام کاربری:"
   label_environment: محیط
@@ -537,7 +539,7 @@
   label_news_view_all: دیدن همه رویدادها
   label_news_added: رویداد افزوده شد
   label_settings: پیکربندی
-  label_overview: دورنما
+  label_overview: در یک نگاه
   label_version: نگارش
   label_version_new: نگارش تازه
   label_version_plural: نگارش
@@ -644,7 +646,7 @@
   label_sort_higher: بردن به بالا
   label_sort_lower: بردن به پایین
   label_sort_lowest: بردن به پایان
-  label_roadmap: نقشه راه
+  label_roadmap: چشم‌انداز
   label_roadmap_due_in: "سررسید در %{value}"
   label_roadmap_overdue: "%{value} دیرکرد"
   label_roadmap_no_issues: هیچ پیامدی برای این نگارش نیست
@@ -754,7 +756,7 @@
   label_plugins: افزونه‌ها
   label_ldap_authentication: شناساییLDAP
   label_downloads_abbr: دریافت
-  label_optional_description: توضیح اختیاری
+  label_optional_description: یادداشت دلخواه
   label_add_another_file: افزودن پرونده دیگر
   label_preferences: پسندها
   label_chronological_order: به ترتیب تاریخ
@@ -933,13 +935,47 @@
   
   enumeration_issue_priorities: برتری‌های پیامد
   enumeration_doc_categories: دسته‌های نوشتار
-  enumeration_activities: فعالیت‌ها (پیگیری زمان)
-  enumeration_system_activity: فعالیت سامانه
+  enumeration_activities: کارها (پیگیری زمان)
+  enumeration_system_activity: کار سامانه
 
-  text_tip_issue_begin_day: issue beginning this day
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_tip_issue_begin_end_day: issue beginning and ending this day
-  text_tip_issue_end_day: issue ending this day
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  text_tip_issue_begin_day: پیامد در این روز آغاز می‌شود
+  field_warn_on_leaving_unsaved: هنگام ترک برگه‌ای که نوشته‌های آن نگهداری نشده، به من هشدار بده
+  text_tip_issue_begin_end_day: پیامد در این روز آغاز می‌شود و پایان می‌پذیرد
+  text_tip_issue_end_day: پیامد در این روز پایان می‌پذیرد
+  text_warn_on_leaving_unsaved: این برگه دارای نوشته‌های نگهداری نشده است که اگر آن را ترک کنید، از میان می‌روند.
+  label_my_queries: جستارهای سفارشی من
+  text_journal_changed_no_detail: "%{label} بروز شد"
+  label_news_comment_added: دیدگاه به یک رویداد افزوده شد
+  button_expand_all: باز کردن همه
+  button_collapse_all: بستن همه
+  label_additional_workflow_transitions_for_assignee: زمانی که به کاربر واگذار شده، گذارهای بیشتر پذیرفته می‌شود
+  label_additional_workflow_transitions_for_author: زمانی که کاربر نویسنده است، گذارهای بیشتر پذیرفته می‌شود
+  label_bulk_edit_selected_time_entries: ویرایش دسته‌ای زمان‌های گزارش شده گزینش شده
+  text_time_entries_destroy_confirmation: آیا می‌خواهید زمان‌های گزارش شده گزینش شده پاک شوند؟
+  label_role_anonymous: ناشناس
+  label_role_non_member: غیر عضو
+  label_issue_note_added: یادداشت افزوده شد
+  label_issue_status_updated: وضعیت بروز شد
+  label_issue_priority_updated: برتری بروز شد
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: کدگذاری پیام‌های انباره
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/fi.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/fi.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -13,7 +13,10 @@
     abbr_day_names: [Su, Ma, Ti, Ke, To, Pe, La]
     month_names: [~, Tammikuu, Helmikuu, Maaliskuu, Huhtikuu, Toukokuu, Kesäkuu, Heinäkuu, Elokuu, Syyskuu, Lokakuu, Marraskuu, Joulukuu]
     abbr_month_names: [~, Tammi, Helmi, Maalis, Huhti, Touko, Kesä, Heinä, Elo, Syys, Loka, Marras, Joulu]
-    order: [:day, :month, :year]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -159,7 +162,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-15
-  general_pdf_encoding: ISO-8859-15
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: Tilin päivitys onnistui.
@@ -263,7 +266,7 @@
   field_attr_mail: Sähköpostinmääre
   field_onthefly: Automaattinen käyttäjien luonti
   field_start_date: Alku
-  field_done_ratio: % Tehty
+  field_done_ratio: "% Tehty"
   field_auth_source: Varmennusmuoto
   field_hide_mail: Piiloita sähköpostiosoitteeni
   field_comments: Kommentti
@@ -755,7 +758,6 @@
   label_issue_watchers: Tapahtuman seuraajat
   button_quote: Vastaa
   setting_sequential_project_identifiers: Luo peräkkäiset projektien tunnisteet
-  setting_commit_logs_encoding: Tee viestien koodaus
   notice_unable_delete_version: Version poisto epäonnistui
   label_renamed: uudelleennimetty
   label_copied: kopioitu
@@ -961,3 +963,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Tee viestien koodaus
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/fr.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/fr.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -17,7 +17,10 @@
     abbr_day_names: [dim, lun, mar, mer, jeu, ven, sam]
     month_names: [~, janvier, février, mars, avril, mai, juin, juillet, août, septembre, octobre, novembre, décembre]
     abbr_month_names: [~, jan., fév., mar., avr., mai, juin, juil., août, sept., oct., nov., déc.]
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
   
   time:
     formats:
@@ -151,7 +154,7 @@
   general_csv_separator: ';'
   general_csv_decimal_separator: ','
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: Le compte a été mis à jour avec succès.
@@ -275,7 +278,7 @@
   field_attr_mail: Attribut Email
   field_onthefly: Création des utilisateurs à la volée
   field_start_date: Début
-  field_done_ratio: % réalisé
+  field_done_ratio: "% réalisé"
   field_auth_source: Mode d'authentification
   field_hide_mail: Cacher mon adresse mail
   field_comments: Commentaire
@@ -308,7 +311,10 @@
   field_parent_issue: Tâche parente
   field_visible: Visible
   field_warn_on_leaving_unsaved: "M'avertir lorsque je quitte une page contenant du texte non sauvegardé"
-  
+  field_issues_visibility: Visibilité des demandes
+  field_is_private: Privée
+  field_commit_logs_encoding: Encodage des messages de commit
+
   setting_app_title: Titre de l'application
   setting_app_subtitle: Sous-titre de l'application
   setting_welcome_text: Texte d'accueil
@@ -335,7 +341,6 @@
   setting_cross_project_issue_relations: Autoriser les relations entre demandes de différents projets
   setting_issue_list_default_columns: Colonnes affichées par défaut sur la liste des demandes
   setting_repositories_encodings: Encodages des dépôts
-  setting_commit_logs_encoding: Encodage des messages de commit
   setting_emails_footer: Pied-de-page des emails
   setting_protocol: Protocole
   setting_per_page_options: Options d'objets affichés par page
@@ -377,6 +382,8 @@
   permission_add_issues: Créer des demandes
   permission_edit_issues: Modifier les demandes
   permission_manage_issue_relations: Gérer les relations
+  permission_set_issues_private: Rendre les demandes publiques ou privées
+  permission_set_own_issues_private: Rendre ses propres demandes publiques ou privées
   permission_add_issue_notes: Ajouter des notes
   permission_edit_issue_notes: Modifier les notes
   permission_edit_own_issue_notes: Modifier ses propres notes
@@ -462,6 +469,8 @@
   label_role_plural: Rôles
   label_role_new: Nouveau rôle
   label_role_and_permissions: Rôles et permissions
+  label_role_anonymous: Anonyme
+  label_role_non_member: Non membre
   label_member: Membre
   label_member_new: Nouveau membre
   label_member_plural: Membres
@@ -540,6 +549,7 @@
   label_news_latest: Dernières annonces
   label_news_view_all: Voir toutes les annonces
   label_news_added: Annonce ajoutée
+  label_news_comment_added: Commentaire ajouté à une annonce
   label_settings: Configuration
   label_overview: Aperçu
   label_version: Version
@@ -786,12 +796,19 @@
   label_project_copy_notifications: Envoyer les notifications durant la copie du projet
   label_principal_search: "Rechercher un utilisateur ou un groupe :"
   label_user_search: "Rechercher un utilisateur :"
+  label_additional_workflow_transitions_for_author: Autorisations supplémentaires lorsque l'utilisateur a créé la demande
+  label_additional_workflow_transitions_for_assignee: Autorisations supplémentaires lorsque la demande est assignée à l'utilisateur
+  label_issues_visibility_all: Toutes les demandes
+  label_issues_visibility_public: Toutes les demandes non privées
+  label_issues_visibility_own: Demandes créées par ou assignées à l'utilisateur
   
   button_login: Connexion
   button_submit: Soumettre
   button_save: Sauvegarder
   button_check_all: Tout cocher
   button_uncheck_all: Tout décocher
+  button_collapse_all: Plier tout
+  button_expand_all: Déplier tout
   button_delete: Supprimer
   button_create: Créer
   button_create_and_continue: Créer et continuer
@@ -869,7 +886,8 @@
   text_load_default_configuration: Charger le paramétrage par défaut
   text_status_changed_by_changeset: "Appliqué par commit %{value}."
   text_time_logged_by_changeset: "Appliqué par commit %{value}"
-  text_issues_destroy_confirmation: 'Êtes-vous sûr de vouloir supprimer le(s) demandes(s) selectionnée(s) ?'
+  text_issues_destroy_confirmation: 'Êtes-vous sûr de vouloir supprimer la ou les demandes(s) selectionnée(s) ?'
+  text_issues_destroy_descendants_confirmation: "Cela entrainera également la suppression de %{count} sous-tâche(s)."
   text_select_project_modules: 'Sélectionner les modules à activer pour ce projet :'
   text_default_administrator_account_changed: Compte administrateur par défaut changé
   text_file_repository_writable: Répertoire de stockage des fichiers accessible en écriture
@@ -944,7 +962,7 @@
   text_zoom_in: Zoom avant
   notice_unable_delete_time_entry: Impossible de supprimer le temps passé.
   label_overall_spent_time: Temps passé global
-  field_time_entries: Log time
+  field_time_entries: Temps passé
   project_module_gantt: Gantt
   project_module_calendar: Calendrier
   button_edit_associated_wikipage: "Modifier la page wiki associée: %{page_title}"
@@ -957,4 +975,19 @@
   label_user_mail_option_none: Aucune notification
   field_member_of_group: Groupe de l'assigné
   field_assigned_to_role: Rôle de l'assigné
-  setting_emails_header: Emails header
+  setting_emails_header: En-tête des emails
+  label_bulk_edit_selected_time_entries: Modifier les temps passés sélectionnées
+  text_time_entries_destroy_confirmation: "Etes-vous sûr de vouloir supprimer les temps passés sélectionnés ?"
+  field_scm_path_encoding: Encodage des chemins
+  text_scm_path_encoding_note: "Défaut : UTF-8"
+  field_path_to_repository: Chemin du dépôt
+  field_root_directory: Répertoire racine
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: "Dépôt nu (bare) et local (exemples : /gitrepo, c:\gitrepo)"
+  text_mercurial_repository_note: "Dépôt local (exemples : /hgrepo, c:\hgrepo)"
+  text_scm_command: Commande
+  text_scm_command_version: Version
+  label_git_report_last_commit: Afficher le dernier commit des fichiers et répertoires
+  text_scm_config: Vous pouvez configurer les commandes des SCM dans config/configuration.yml. Redémarrer l'application après modification.
+  text_scm_command_not_available: Ce SCM n'est pas disponible. Vérifier les paramètres dans la section administration.
--- a/config/locales/.svn/text-base/gl.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/gl.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -55,7 +55,10 @@
     abbr_day_names:   [Dom, Lun, Mar, Mer, Xov, Ven, Sab]
     month_names:      [~, Xaneiro, Febreiro, Marzo, Abril, Maio, Xunio, Xullo, Agosto, Setembro, Outubro, Novembro, Decembro]
     abbr_month_names: [~, Xan, Feb, Maz, Abr, Mai, Xun, Xul, Ago, Set, Out, Nov, Dec]
-    order:            [:day, :month, :year]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -241,7 +244,7 @@
   field_default_value: Estado por defecto
   field_delay: Retraso
   field_description: Descrición
-  field_done_ratio: % Realizado
+  field_done_ratio: "% Realizado"
   field_downloads: Descargas
   field_due_date: Data fin
   field_effective_date: Data
@@ -310,7 +313,7 @@
   general_csv_separator: ';'
   general_first_day_of_week: '1'
   general_lang_name: 'Galego'
-  general_pdf_encoding: ISO-8859-15
+  general_pdf_encoding: UTF-8
   general_text_No: 'Non'
   general_text_Yes: 'Si'
   general_text_no: 'non'
@@ -654,7 +657,7 @@
   notice_default_data_loaded: Configuración por defecto cargada correctamente.
   notice_email_error: "Ocorreu un error enviando o correo (%{value})"
   notice_email_sent: "Enviouse un correo a %{value}"
-  notice_failed_to_save_issues: "Imposible gravar %s petición(s) en %{count} seleccionado: %{ids}."
+  notice_failed_to_save_issues: "Imposible gravar %{count} petición(s) de %{total} seleccionada(s): %{ids}."
   notice_feeds_access_key_reseted: A súa clave de acceso para RSS reiniciouse.
   notice_file_not_found: A páxina á que tenta acceder non existe.
   notice_locking_conflict: Os datos modificáronse por outro usuario.
@@ -729,7 +732,6 @@
   setting_autologin: Conexión automática
   setting_bcc_recipients: Ocultar as copias de carbón (bcc)
   setting_commit_fix_keywords: Palabras clave para a corrección
-  setting_commit_logs_encoding: Codificación das mensaxes de commit
   setting_commit_ref_keywords: Palabras clave para a referencia
   setting_cross_project_issue_relations: Permitir relacionar peticións de distintos proxectos
   setting_date_format: Formato da data
@@ -952,3 +954,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Codificación das mensaxes de commit
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/he.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/he.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -15,7 +15,10 @@
     abbr_day_names: ["א'", "ב'", "ג'", "ד'", "ה'", "ו'", "ש'"]
     month_names: [~, ינואר, פברואר, מרץ, אפריל, מאי, יוני, יולי, אוגוסט, ספטמבר, אוקטובר, נובמבר, דצמבר]
     abbr_month_names: [~, יאנ, פבר, מרץ, אפר, מאי, יונ, יול, אוג, ספט, אוק, נוב, דצמ]
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -139,7 +142,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-8
-  general_pdf_encoding: ISO-8859-8
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '7'
 
   notice_account_updated: החשבון עודכן בהצלחה!
@@ -163,7 +166,7 @@
   notice_email_error: "ארעה שגיאה בעת שליחת הדואל (%{value})"
   notice_feeds_access_key_reseted: מפתח ה־RSS שלך אופס.
   notice_api_access_key_reseted: מפתח הגישה שלך ל־API אופס.
-  notice_failed_to_save_issues: "נכשרת בשמירת %{count} נושא\ים ב %{total} נבחרו: %{ids}."
+  notice_failed_to_save_issues: "נכשרת בשמירת %{count} נושאים ב %{total} נבחרו: %{ids}."
   notice_failed_to_save_members: "כשלון בשמירת חבר(ים): %{errors}."
   notice_no_issue_selected: "לא נבחר אף נושא! בחר בבקשה את הנושאים שברצונך לערוך."
   notice_account_pending: "החשבון שלך נוצר ועתה מחכה לאישור מנהל המערכת."
@@ -271,7 +274,7 @@
   field_attr_mail: תכונת דוא"ל
   field_onthefly: יצירת משתמשים זריזה
   field_start_date: תאריך התחלה
-  field_done_ratio: % גמור
+  field_done_ratio: "% גמור"
   field_auth_source: מקור הזדהות
   field_hide_mail: החבא את כתובת הדוא"ל שלי
   field_comments: הערות
@@ -330,7 +333,6 @@
   setting_cross_project_issue_relations: הרשה קישור נושאים בין פרויקטים
   setting_issue_list_default_columns: עמודות ברירת מחדל המוצגות ברשימת הנושאים
   setting_repositories_encodings: קידוד המאגרים
-  setting_commit_logs_encoding: קידוד הודעות הפקדה
   setting_emails_footer: תחתית דוא"ל
   setting_protocol: פרוטוקול
   setting_per_page_options: אפשרויות אוביקטים לפי דף
@@ -846,7 +848,7 @@
   text_regexp_info: כגון. ^[A-Z0-9]+$
   text_min_max_length_info: 0 משמעו ללא הגבלות
   text_project_destroy_confirmation: האם אתה בטוח שברצונך למחוק את הפרויקט ואת כל המידע הקשור אליו?
-  text_subprojects_destroy_warning: "תת־הפרויקט\ים: %{value} ימחקו גם כן."
+  text_subprojects_destroy_warning: "תת־הפרויקטים: %{value} ימחקו גם כן."
   text_workflow_edit: בחר תפקיד וסיווג כדי לערוך את זרימת העבודה
   text_are_you_sure: האם אתה בטוח?
   text_are_you_sure_with_children: האם למחוק את הנושא ואת כל בניו?
@@ -876,7 +878,7 @@
   text_no_configuration_data: "לא הוגדרה תצורה עבור תפקידים, סיווגים, מצבי נושא וזרימת עבודה.\nמומלץ מאד לטעון את תצורת ברירת המחדל. תוכל לשנותה מאוחר יותר."
   text_load_default_configuration: טען את אפשרויות ברירת המחדל
   text_status_changed_by_changeset: "הוחל בסדרת השינויים %{value}."
-  text_issues_destroy_confirmation: 'האם אתה בטוח שברצונך למחוק את הנושא\ים?'
+  text_issues_destroy_confirmation: 'האם אתה בטוח שברצונך למחוק את הנושאים?'
   text_select_project_modules: 'בחר מודולים להחיל על פרויקט זה:'
   text_default_administrator_account_changed: מנהל המערכת ברירת המחדל שונה
   text_file_repository_writable: מאגר הקבצים ניתן לכתיבה
@@ -945,3 +947,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: קידוד הודעות הפקדה
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/hr.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/hr.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -19,7 +19,10 @@
     month_names: [~, Sijecanj, Veljaca, Ožujak, Travanj, Svibanj, Lipanj, Srpanj, Kolovoz, Rujan, Listopad, Studeni, Prosinac]
     abbr_month_names: [~, Sij, Velj, Ožu, Tra, Svi, Lip, Srp, Kol, Ruj, List, Stu, Pro]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -132,8 +135,8 @@
   general_lang_name: 'Hrvatski'
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
-  general_csv_encoding: utf8
-  general_pdf_encoding: utf8
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '7'
   
   notice_account_updated: Vaš profil je uspješno promijenjen.
@@ -258,7 +261,7 @@
   field_attr_mail: Atribut e-pošte
   field_onthefly: "Izrada korisnika \"u hodu\""
   field_start_date: Pocetak
-  field_done_ratio: % Učinjeno
+  field_done_ratio: "% Učinjeno"
   field_auth_source: Vrsta prijavljivanja
   field_hide_mail: Sakrij moju adresu e-pošte
   field_comments: Komentar
@@ -313,7 +316,6 @@
   setting_cross_project_issue_relations: Dozvoli povezivanje predmeta izmedu različitih projekata
   setting_issue_list_default_columns: Stupci prikazani na listi predmeta
   setting_repositories_encodings: Kodna stranica
-  setting_commit_logs_encoding: Commit messages encoding
   setting_emails_footer: Zaglavlje e-pošte
   setting_protocol: Protokol
   setting_per_page_options: Objekata po stranici opcija
@@ -947,3 +949,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/hu.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/hu.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -16,7 +16,10 @@
     abbr_day_names: [v., h., k., sze., cs., p., szo.]
     month_names: [~, január, február, március, április, május, június, július, augusztus, szeptember, október, november, december]
     abbr_month_names: [~, jan., febr., márc., ápr., máj., jún., júl., aug., szept., okt., nov., dec.]
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -155,7 +158,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-2
-  general_pdf_encoding: ISO-8859-2
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: A fiók adatai sikeresen frissítve.
@@ -751,7 +754,6 @@
   text_email_delivery_not_configured: "Az E-mail küldés nincs konfigurálva, és az értesítések ki vannak kapcsolva.\nÁllítsd be az SMTP szervert a config/configuration.yml fájlban és indítsd újra az alkalmazást, hogy érvénybe lépjen."
   field_parent_title: Szülő oldal
   label_issue_watchers: Megfigyelők
-  setting_commit_logs_encoding: Commit üzenetek kódlapja
   button_quote: Hozzászólás / Idézet
   setting_sequential_project_identifiers: Szekvenciális projekt azonosítók generálása
   notice_unable_delete_version: A verziót nem lehet törölni
@@ -931,31 +933,65 @@
   text_zoom_out: Kicsinyít
   text_zoom_in: Nagyít
   notice_unable_delete_time_entry: Az időrögzítés nem törölhető
-  label_overall_spent_time: Összes rászánt idő
-  field_time_entries: Log time
+  label_overall_spent_time: Összes ráfordított idő
+  field_time_entries: Idő rögzítés
   project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  project_module_calendar: Naptár
+  button_edit_associated_wikipage: "Hozzárendelt Wiki oldal szerkesztése: %{page_title}"
+  text_are_you_sure_with_children: A feladat törlése az összes alfeladattal együtt?
+  field_text: Szöveg mező
+  label_user_mail_option_only_owner: Csak arról, aminek én vagyok a tulajdonosa
+  setting_default_notification_option: Alapértelmezett értesítési beállítások
+  label_user_mail_option_only_my_events: Csak az általam megfigyelt dolgokról vagy amiben részt veszek
+  label_user_mail_option_only_assigned: Csak a hozzámrendelt dolgokról
+  label_user_mail_option_none: Semilyen eseményről
+  field_member_of_group: Hozzárendelt csoport
+  field_assigned_to_role: Hozzárendelt szerepkör
+  notice_not_authorized_archived_project: A projekt, amihez hozzá szeretnél férni archiválva lett.
+  label_principal_search: "Felhasználó vagy csoport keresése:"
+  label_user_search: "Felhasználó keresése:"
+  field_visible: Látható
+  setting_emails_header: Emailek fejléce
+  setting_commit_logtime_activity_id: A rögzített időhöz tartozó tevékenység
+  text_time_logged_by_changeset: Alkalmazva a %{value} changeset-ben.
+  setting_commit_logtime_enabled: Időrögzítés engedélyezése
+  notice_gantt_chart_truncated: A diagram le lett vágva, mert elérte a maximálisan megjeleníthető elemek számát (%{max})
+  setting_gantt_items_limit: A gantt diagrammon megjeleníthető maximális elemek száma
+  field_warn_on_leaving_unsaved: Figyelmeztessen, nem mentett módosításokat tartalmazó oldal elhagyásakor
+  text_warn_on_leaving_unsaved: A jelenlegi oldal nem mentett módosításokat tartalmaz, ami elvész, ha elhagyja az oldalt.
+  label_my_queries: Egyéni lekérdezéseim
+  text_journal_changed_no_detail: "%{label} módosítva"
+  label_news_comment_added: Megjegyzés hozzáadva a hírhez
+  button_expand_all: Mindet kibont
+  button_collapse_all: Mindet összecsuk
+  label_additional_workflow_transitions_for_assignee: További átmenetek engedélyezettek, ha a felhasználó a hozzárendelt
+  label_additional_workflow_transitions_for_author: További átmenetek engedélyezettek, ha a felhasználó a szerző
+  label_bulk_edit_selected_time_entries: A kiválasztott idő bejegyzések csoportos szerkesztése
+  text_time_entries_destroy_confirmation: Biztos benne, hogy törölni szeretné a kiválasztott idő bejegyzés(eke)t?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Nem tag
+  label_issue_note_added: Jegyzet hozzáadva
+  label_issue_status_updated: Állapot módosítva
+  label_issue_priority_updated: Prioritás módosítva
+  label_issues_visibility_own: A felhasználó által létrehozott vagy hozzárendelt feladatok
+  field_issues_visibility: Feladatok láthatósága
+  label_issues_visibility_all: Minden feladat
+  permission_set_own_issues_private: Saját feladatok beállítása nyilvánosra vagy privátra
+  field_is_private: Privát
+  permission_set_issues_private: Feladatok beállítása nyilvánosra vagy privátra
+  label_issues_visibility_public: Minden nem privát feladat
+  text_issues_destroy_descendants_confirmation: Ezzel törölni fog %{count} alfeladatot is.
+  field_commit_logs_encoding: Commit üzenetek kódlapja
+  field_scm_path_encoding: Elérési útvonal kódlapja
+  text_scm_path_encoding_note: "Alapértelmezett: UTF-8"
+  field_path_to_repository: A repository elérési útja
+  field_root_directory: Gyökér könyvtár
+  field_cvs_module: Modul
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Helyi repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Parancs
+  text_scm_command_version: Verzió
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/id.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/id.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -14,7 +14,10 @@
       
     month_names: [~, Januari, Februari, Maret, April, Mei, Juni, Juli, Agustus, September, Oktober, November, Desember]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, Mei, Jun, Jul, Agu, Sep, Okt, Nov, Des]
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -135,7 +138,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '7'
   
   notice_account_updated: Akun sudah berhasil diperbarui.
@@ -256,7 +259,7 @@
   field_attr_mail: Atribut email
   field_onthefly: Pembuatan pengguna seketika
   field_start_date: Mulai
-  field_done_ratio: % Selesai
+  field_done_ratio: "% Selesai"
   field_auth_source: Mode otentikasi
   field_hide_mail: Sembunyikan email saya
   field_comments: Komentar
@@ -312,7 +315,6 @@
   setting_cross_project_issue_relations: Perbolehkan kaitan masalah proyek berbeda
   setting_issue_list_default_columns: Kolom default ditampilkan di daftar masalah
   setting_repositories_encodings: Repositories encodings
-  setting_commit_logs_encoding: Commit messages encoding
   setting_emails_footer: Footer untuk email
   setting_protocol: Protokol
   setting_per_page_options: Pilihan obyek per halaman
@@ -948,3 +950,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/it.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/it.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -16,7 +16,10 @@
     abbr_day_names: [Dom, Lun, Mar, Mer, Gio, Ven, Sab]
     month_names: [~, Gennaio, Febbraio, Marzo, Aprile, Maggio, Giugno, Luglio, Agosto, Settembre, Ottobre, Novembre, Dicembre]
     abbr_month_names: [~, Gen, Feb, Mar, Apr, Mag, Giu, Lug, Ago, Set, Ott, Nov, Dic]
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
   
   time:
     formats:
@@ -136,10 +139,10 @@
   general_text_no: 'no'
   general_text_yes: 'sì'
   general_lang_name: 'Italiano'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
+  general_csv_separator: ';'
+  general_csv_decimal_separator: ','
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: L'utente è stato aggiornato.
@@ -234,7 +237,7 @@
   field_attr_mail: Attributo email
   field_onthefly: Creazione utente "al volo"
   field_start_date: Inizio
-  field_done_ratio: % completato
+  field_done_ratio: "% completato"
   field_auth_source: Modalità di autenticazione
   field_hide_mail: Nascondi il mio indirizzo email
   field_comments: Commento
@@ -733,7 +736,6 @@
   text_email_delivery_not_configured: "La consegna via email non è configurata e le notifiche sono disabilitate.\nConfigura il tuo server SMTP in config/configuration.yml e riavvia l'applicazione per abilitarle."
   field_parent_title: Pagina principale
   label_issue_watchers: Osservatori
-  setting_commit_logs_encoding: Codifica dei messaggi di commit
   button_quote: Quota
   setting_sequential_project_identifiers: Genera progetti con identificativi in sequenza
   notice_unable_delete_version: Impossibile eliminare la versione
@@ -941,3 +943,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Codifica dei messaggi di commit
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/ja.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/ja.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,4 +1,4 @@
-# Japanese translations for Ruby on Rails 
+# Japanese translations for Ruby on Rails
 # by Akira Matsuda (ronnie@dio.jp)
 # AR error messages are basically taken from Ruby-GetText-Package. Thanks to Masao Mutoh.
 
@@ -12,15 +12,18 @@
       default: "%Y/%m/%d"
       short: "%m/%d"
       long: "%Y年%m月%d日(%a)"
-      
+
     day_names: [日曜日, 月曜日, 火曜日, 水曜日, 木曜日, 金曜日, 土曜日]
     abbr_day_names: [日, 月, 火, 水, 木, 金, 土]
-      
+
     # Don't forget the nil at the beginning; there's no such thing as a 0th month
     month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
     abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -30,7 +33,7 @@
       long: "%Y年%m月%d日(%a) %H時%M分%S秒 %Z"
     am: "午前"
     pm: "午後"
-      
+
   datetime:
     distance_in_words:
       half_a_minute: "30秒前後"
@@ -105,13 +108,12 @@
           gb: "GB"
           tb: "TB"
 
-        
 # Used in array.to_sentence.
   support:
     array:
       sentence_connector: "及び"
       skip_last_comma: true
-      
+
   activerecord:
     errors:
       template:
@@ -147,7 +149,7 @@
         cant_link_an_issue_with_a_descendant: "指定したチケットとは親子関係になっているため関連づけられません"
 
   actionview_instancetag_blank_option: 選んでください
-  
+
   general_text_No: 'いいえ'
   general_text_Yes: 'はい'
   general_text_no: 'いいえ'
@@ -158,7 +160,7 @@
   general_csv_encoding: CP932
   general_pdf_encoding: CP932
   general_first_day_of_week: '7'
-  
+
   notice_account_updated: アカウントが更新されました。
   notice_account_invalid_creditentials: ユーザ名もしくはパスワードが無効
   notice_account_password_updated: パスワードが更新されました。
@@ -189,7 +191,7 @@
   notice_unable_delete_time_entry: 作業時間を削除できません
   notice_issue_done_ratios_updated: チケットの進捗が更新されました。
   notice_gantt_chart_truncated: ガントチャートは、最大表示項目数(%{max})を超えたたため切り捨てられました。
-  
+
   error_can_t_load_default_data: "デフォルト設定がロードできませんでした: %{value}"
   error_scm_not_found: リポジトリに、エントリ/リビジョンが存在しません。
   error_scm_command_failed: "リポジトリへアクセスしようとしてエラーになりました: %{value}"
@@ -207,9 +209,9 @@
   error_workflow_copy_source: 'コピー元となるトラッカーまたはロールを選択してください'
   error_workflow_copy_target: 'コピー先となるトラッカーとロールを選択してください'
   error_can_not_delete_tracker: 'このトラッカーは使用されています。削除できません。'
-  
+
   warning_attachments_not_saved: "%{count}個の添付ファイルが保存できませんでした。"
-  
+
   mail_subject_lost_password: "%{value} パスワード再発行"
   mail_body_lost_password: 'パスワードを変更するには、以下のリンクをクリックしてください:'
   mail_subject_register: "%{value} アカウント登録の確認"
@@ -224,10 +226,10 @@
   mail_body_wiki_content_added: "%{author} によってWikiページ %{id} が追加されました。"
   mail_subject_wiki_content_updated: "Wikiページ %{id} が更新されました"
   mail_body_wiki_content_updated: "%{author} によってWikiページ %{id} が更新されました。"
-  
+
   gui_validation_error: 1件のエラー
   gui_validation_error_plural: "%{count}件のエラー"
-  
+
   field_name: 名称
   field_description: 説明
   field_summary: サマリー
@@ -325,7 +327,14 @@
   field_assigned_to_role: 担当者のロール
   field_text: テキスト
   field_visible: 表示
-  
+  field_warn_on_leaving_unsaved: データを保存せずにページから移動するときに警告
+  field_commit_logs_encoding: コミットメッセージのエンコーディング
+  field_scm_path_encoding: パスのエンコーディング
+  field_path_to_repository: リポジトリのパス
+  field_root_directory: ルートディレクトリ
+  field_cvsroot: CVSROOT
+  field_cvs_module: モジュール
+
   setting_app_title: アプリケーションのタイトル
   setting_app_subtitle: アプリケーションのサブタイトル
   setting_welcome_text: ウェルカムメッセージ
@@ -353,7 +362,6 @@
   setting_cross_project_issue_relations: 異なるプロジェクトのチケット間で関係の設定を許可
   setting_issue_list_default_columns: チケットの一覧で表示する項目
   setting_repositories_encodings: リポジトリのエンコーディング
-  setting_commit_logs_encoding: コミットメッセージのエンコーディング
   setting_emails_header: メールのヘッダ
   setting_emails_footer: メールのフッタ
   setting_protocol: プロトコル
@@ -384,7 +392,7 @@
   setting_commit_logtime_enabled: コミット時に作業時間を記録する
   setting_commit_logtime_activity_id: 作業時間の作業分類
   setting_gantt_items_limit: ガントチャート最大表示項目数
-  
+
   permission_add_project: プロジェクトの追加
   permission_add_subprojects: サブプロジェクトの追加
   permission_edit_project: プロジェクトの編集
@@ -440,7 +448,7 @@
   permission_delete_messages: メッセージの削除
   permission_delete_own_messages: 自身が記入したメッセージの削除
   permission_manage_subtasks: 子チケットの管理
-  
+
   project_module_issue_tracking: チケットトラッキング
   project_module_time_tracking: 時間トラッキング
   project_module_news: ニュース
@@ -451,7 +459,7 @@
   project_module_boards: フォーラム
   project_module_gantt: ガントチャート
   project_module_calendar: カレンダー
-  
+
   label_user: ユーザ
   label_user_plural: ユーザ
   label_user_new: 新しいユーザ
@@ -469,7 +477,7 @@
   label_issue: チケット
   label_issue_new: 新しいチケット
   label_issue_plural: チケット
-  label_issue_view_all: 全てのチケットを見る
+  label_issue_view_all: すべてのチケットを見る
   label_issues_by: "%{value} 別のチケット"
   label_issue_added: チケットが追加されました
   label_issue_updated: チケットが更新されました
@@ -519,7 +527,7 @@
   label_last_login: 最近の接続
   label_registered_on: 登録日
   label_activity: 活動
-  label_overall_activity: 全ての活動
+  label_overall_activity: すべての活動
   label_user_activity: "%{value} の活動"
   label_new: 新しく作成
   label_logged_as: ログイン中:
@@ -557,8 +565,9 @@
   label_news_new: ニュースを追加
   label_news_plural: ニュース
   label_news_latest: 最新ニュース
-  label_news_view_all: 全てのニュースを見る
+  label_news_view_all: すべてのニュースを見る
   label_news_added: ニュースが追加されました
+  label_news_comment_added: ニュースにコメントが追加されました
   label_settings: 設定
   label_overview: 概要
   label_version: バージョン
@@ -589,7 +598,7 @@
   label_permissions: 権限
   label_current_status: 現在のステータス
   label_new_statuses_allowed: ステータスの移行先
-  label_all: 全て
+  label_all: すべて
   label_none: なし
   label_nobody: 無記名
   label_next: 次
@@ -603,7 +612,7 @@
   label_gantt: ガントチャート
   label_internal: 内部
   label_last_changes: "最新の変更 %{count}件"
-  label_change_view_all: 全ての変更を見る
+  label_change_view_all: すべての変更を見る
   label_personalize_page: このページをパーソナライズする
   label_comment: コメント
   label_comment_plural: コメント
@@ -617,6 +626,7 @@
   label_query: カスタムクエリ
   label_query_plural: カスタムクエリ
   label_query_new: 新しいクエリ
+  label_my_queries: マイカスタムクエリ
   label_filter_add: フィルタ追加
   label_filter_plural: フィルタ
   label_equals: 等しい
@@ -629,13 +639,13 @@
   label_today: 今日
   label_all_time: 全期間
   label_yesterday: 昨日
-  label_this_week: この週
+  label_this_week: 今週
   label_last_week: 先週
-  label_last_n_days: "最後の%{count}日間"
+  label_last_n_days: "直近%{count}日間"
   label_this_month: 今月
   label_last_month: 先月
   label_this_year: 今年
-  label_date_range: 日付の範囲
+  label_date_range: 期間
   label_less_than_ago: が今日より○日前以降
   label_more_than_ago: が今日より○日前以前
   label_ago: 日前
@@ -661,7 +671,7 @@
   label_latest_revision: 最新リビジョン
   label_latest_revision_plural: 最新リビジョン
   label_view_revisions: リビジョンを見る
-  label_view_all_revisions: 全てのリビジョンを見る
+  label_view_all_revisions: すべてのリビジョンを見る
   label_max_size: 最大サイズ
   label_sort_highest: 一番上へ
   label_sort_higher: 上へ
@@ -687,7 +697,7 @@
   label_changes_details: 全変更の詳細
   label_issue_tracking: チケットトラッキング
   label_spent_time: 作業時間の記録
-  label_overall_spent_time: 全ての作業時間の記録
+  label_overall_spent_time: すべての作業時間の記録
   label_f_hour: "%{value}時間"
   label_f_hour_plural: "%{value}時間"
   label_time_tracking: 時間トラッキング
@@ -758,8 +768,8 @@
   label_theme: テーマ
   label_default: 既定
   label_search_titles_only: タイトルのみ
-  label_user_mail_option_all: "参加しているプロジェクトの全ての通知"
-  label_user_mail_option_selected: "選択したプロジェクトの全ての通知..."
+  label_user_mail_option_all: "参加しているプロジェクトのすべての通知"
+  label_user_mail_option_selected: "選択したプロジェクトのすべての通知..."
   label_user_mail_option_none: "通知しない"
   label_user_mail_option_only_my_events: "ウォッチまたは関係している事柄のみ"
   label_user_mail_option_only_assigned: "自分が担当している事柄のみ"
@@ -815,12 +825,15 @@
   label_project_copy_notifications: コピーしたチケットのメール通知を送信する
   label_principal_search: "ユーザまたはグループの検索:"
   label_user_search: "ユーザの検索:"
-  
+  label_git_report_last_commit: ファイルとディレクトリの最新コミットを表示する
+
   button_login: ログイン
   button_submit: 変更
   button_save: 保存
-  button_check_all: 全てにチェックをつける
-  button_uncheck_all: 全てのチェックを外す
+  button_check_all: すべてにチェックをつける
+  button_uncheck_all: すべてのチェックを外す
+  button_expand_all: 展開
+  button_collapse_all: 折りたたみ
   button_delete: 削除
   button_create: 作成
   button_create_and_continue: 連続作成
@@ -870,16 +883,17 @@
   version_status_closed: 終了
 
   field_active: 有効
-  
+
   text_select_mail_notifications: どのメール通知を送信するか、アクションを選択してください。
   text_regexp_info: 例) ^[A-Z0-9]+$
   text_min_max_length_info: 0だと無制限になります
-  text_project_destroy_confirmation: 本当にこのプロジェクトと関連データを削除してもよろしいですか?
+  text_project_destroy_confirmation: 本当にこのプロジェクトと関連データを削除しますか?
   text_subprojects_destroy_warning: "サブプロジェクト %{value} も削除されます。"
   text_workflow_edit: ワークフローを編集するロールとトラッカーを選んでください
   text_are_you_sure: よろしいですか?
-  text_are_you_sure_with_children: チケットとその子チケット全てを削除しますか?
+  text_are_you_sure_with_children: チケットとその子チケットすべてを削除しますか?
   text_journal_changed: "%{label} を %{old} から %{new} に変更"
+  text_journal_changed_no_detail: "%{label} を更新"
   text_journal_set_to: "%{label} を %{value} にセット"
   text_journal_deleted: "%{label} を削除 (%{old})"
   text_journal_added: "%{label} %{value} を追加"
@@ -897,7 +911,7 @@
   text_issues_ref_in_commit_messages: コミットメッセージ内でチケットの参照/修正
   text_issue_added: "チケット %{id} が %{author} によって報告されました。"
   text_issue_updated: "チケット %{id} が %{author} によって更新されました。"
-  text_wiki_destroy_confirmation: 本当にこのwikiとその内容の全てを削除しますか?
+  text_wiki_destroy_confirmation: 本当にこのwikiとその内容のすべてを削除しますか?
   text_issue_category_destroy_question: "%{count}件のチケットがこのカテゴリに割り当てられています。"
   text_issue_category_destroy_assignments: カテゴリの割り当てを削除する
   text_issue_category_reassign_to: チケットをこのカテゴリに再割り当てする
@@ -927,10 +941,18 @@
   text_wiki_page_nullify_children: "子ページをメインページ配下に移動する"
   text_wiki_page_destroy_children: "配下の子孫ページも削除する"
   text_wiki_page_reassign_children: "子ページを次の親ページの配下に移動する"
-  text_own_membership_delete_confirmation: "いくつかまたはすべての権限をあなた自身から剥奪しようとしているため、このプロジェクトを編集できなくなるかもしれません。\n本当に続けてもよろしいですか?"
+  text_own_membership_delete_confirmation: "一部またはすべての権限を自分自身から剥奪しようとしているため、このプロジェクトを編集できなくなる可能性があります。\n本当に続けますか?"
   text_zoom_in: 拡大
   text_zoom_out: 縮小
-  
+  text_warn_on_leaving_unsaved: このページから移動すると、保存されていないデータが失われます。
+  text_scm_path_encoding_note: "デフォルト: UTF-8"
+  text_git_repository_note: "Bare、かつ、ローカルリポジトリ (例: /gitrepo, c:\gitrepo)"
+  text_mercurial_repository_note: "ローカルリポジトリ (例: /hgrepo, c:\hgrepo)"
+  text_scm_command: コマンド
+  text_scm_command_version: バージョン
+  text_scm_config: バージョン管理システムのコマンドをconfig/configuration.ymlで設定できます。設定後、Redmineを再起動してください。
+  text_scm_command_not_available: バージョン管理システムのコマンドが利用できません。管理画面にて設定を確認してください。
+
   default_role_manager: 管理者
   default_role_developer: 開発者
   default_role_reporter: 報告者
@@ -957,7 +979,22 @@
   enumeration_doc_categories: 文書カテゴリ
   enumeration_activities: 作業分類 (時間トラッキング)
   enumeration_system_activity: システム作業分類
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  label_additional_workflow_transitions_for_assignee: チケット担当者に追加で許可する遷移
+  label_additional_workflow_transitions_for_author: チケット作成者に追加で許可する遷移
+  label_bulk_edit_selected_time_entries: 作業時間の一括編集
+  text_time_entries_destroy_confirmation: 本当に選択した作業時間を削除しますか?
+
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+
+  label_issue_note_added: 注記が追加されました
+  label_issue_status_updated: ステータスが更新されました
+  label_issue_priority_updated: 優先度が更新されました
+  label_issues_visibility_own: 作成者か担当者であるチケット
+  field_issues_visibility: 表示できるチケット
+  label_issues_visibility_all: すべてのチケット
+  permission_set_own_issues_private: 自分のチケットをプライベートに設定
+  field_is_private: プライベート
+  permission_set_issues_private: チケットをプライベートに設定
+  label_issues_visibility_public: プライベートチケット以外
+  text_issues_destroy_descendants_confirmation: %{count}個の子チケットも削除されます。
--- a/config/locales/.svn/text-base/ko.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/ko.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -21,7 +21,10 @@
     month_names: [~, 1월, 2월, 3월, 4월, 5월, 6월, 7월, 8월, 9월, 10월, 11월, 12월]
     abbr_month_names: [~, 1월, 2월, 3월, 4월, 5월, 6월, 7월, 8월, 9월, 10월, 11월, 12월]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -355,7 +358,6 @@
   setting_cross_project_issue_relations: 다른 프로젝트의 일감과 연결하는 것을 허용
   setting_issue_list_default_columns: 일감 목록에 표시할 항목 
   setting_repositories_encodings:  저장소 인코딩
-  setting_commit_logs_encoding: 제출(commit) 기록 인코딩
   setting_emails_footer: 메일 꼬리
   setting_protocol: 프로토콜
   setting_per_page_options: 목록에서, 한 페이지에 표시할 행
@@ -992,3 +994,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: 제출(commit) 기록 인코딩
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/lt.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/lt.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -22,7 +22,10 @@
     month_names: [~, sausio, vasario, kovo, balandžio, gegužės, birželio, liepos, rugpjūčio, rugsėjo, spalio, lapkričio, gruodžio]
     abbr_month_names: [~, Sau, Vas, Kov, Bal, Geg, Bir, Lie, Rgp, Rgs, Spa, Lap, Grd]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -311,7 +314,7 @@
   field_attr_mail: Elektroninio pašto požymis
   field_onthefly: Automatinis vartotojų registravimas
   field_start_date: Pradėti
-  field_done_ratio: % atlikta
+  field_done_ratio: "% atlikta"
   field_auth_source: Autentiškumo nustatymo būdas
   field_hide_mail: Paslėpkite mano elektroninio pašto adresą
   field_comments: Komentaras
@@ -368,7 +371,6 @@
   setting_cross_project_issue_relations: Leisti tarprojektinius darbų ryšius
   setting_issue_list_default_columns: Numatytosios skiltys darbų sąraše
   setting_repositories_encodings: Saugyklos koduotė
-  setting_commit_logs_encoding: Commit pranešimų koduotė
   setting_emails_footer: elektroninio pašto puslapinė poraštė
   setting_protocol: Protokolas
   setting_per_page_options: Įrašų puslapyje nustatimas
@@ -1000,3 +1002,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit pranešimų koduotė
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/lv.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/lv.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,937 +1,973 @@
-# translated by Dzintars Bergs (dzintars.bergs@gmail.com)
-
-lv:
-  direction: ltr
-  date:
-    formats:
-      default: "%d.%m.%Y"
-      short: "%d %b"
-      long: "%d %B %Y"
-      
-    day_names: [Svētdiena, Pirmdiena, Otrdiena, Trešdiena, Ceturtdiena, Piektdiena, Sestdiena]
-    abbr_day_names: [Sv, Pr, Ot, Tr, Ct, Pk, St]
-      
-    month_names: [~, Janvāris, Februāris, Marts, Aprīlis , Maijs, Jūnijs, Jūlijs, Augusts, Septembris, Oktobris, Novembris, Decembris]
-    abbr_month_names: [~, Jan, Feb, Mar, Apr, Mai, Jūn, Jūl, Aug, Sep, Okt, Nov, Dec]
-    order: [ :day, :month, :year ]
-
-  time:
-    formats:
-      default: "%a, %d %b %Y, %H:%M:%S %z"
-      time: "%H:%M"
-      short: "%d %b, %H:%M"
-      long: "%B %d, %Y %H:%M"
-    am: "rītā"
-    pm: "vakarā"
-      
-  datetime:
-    distance_in_words:
-      half_a_minute: "pus minūte"
-      less_than_x_seconds:
-        one:   "mazāk kā 1 sekunde"
-        other: "mazāk kā %{count} sekundes"
-      x_seconds:
-        one:   "1 sekunde"
-        other: "%{count} sekundes"
-      less_than_x_minutes:
-        one:   "mazāk kā minūte"
-        other: "mazāk kā %{count} minūtes"
-      x_minutes:
-        one:   "1 minūte"
-        other: "%{count} minūtes"
-      about_x_hours:
-        one:   "aptuveni 1 stunda"
-        other: "aptuveni %{count} stundas"
-      x_days:
-        one:   "1 diena"
-        other: "%{count} dienas"
-      about_x_months:
-        one:   "aptuveni 1 mēnesis"
-        other: "aptuveni %{count} mēneši"
-      x_months:
-        one:   "1 mēnesis"
-        other: "%{count} mēneši"
-      about_x_years:
-        one:   "aptuveni 1 gads"
-        other: "aptuveni %{count} gadi"
-      over_x_years:
-        one:   "ilgāk par 1 gadu"
-        other: "ilgāk par %{count} gadiem"
-      almost_x_years:
-        one:   "gandrīz 1 gadu"
-        other: "gandrīz %{count} gadus"
-
-  number:
-    format:
-      separator: "."
-      delimiter: ""
-      precision: 3
-    human:
-      format:
-        delimiter: " "
-        precision: 1
-      storage_units:
-        format: "%n %u"
-        units:
-          byte:
-            one: "Baits"
-            other: "Baiti"
-          kb: "KB"
-          mb: "MB"
-          gb: "GB"
-          tb: "TB"
-
-        
-  support:
-    array:
-      sentence_connector: "un"
-      skip_last_comma: false
-      
-  activerecord:
-    errors:
-      template:
-        header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
-      messages:
-        inclusion: "nav iekļauts sarakstā"
-        exclusion: "ir rezervēts"
-        invalid: "nederīgs"
-        confirmation: "apstiprinājums nesakrīt"
-        accepted: "jābūt akceptētam"
-        empty: "nevar būt tukšs"
-        blank: "nevar būt neaizpildīts"
-        too_long: "ir pārāk gara(š) (maksimālais garums ir %{count} simboli)"
-        too_short: "ir pārāk īsa(s) (minimālais garums ir %{count} simboli)"
-        wrong_length: "ir nepareiza garuma (vajadzētu būt %{count} simboli)"
-        taken: "eksistē"
-        not_a_number: "nav skaitlis"
-        not_a_date: "nav derīgs datums"
-        greater_than: "jābūt lielākam par %{count}"
-        greater_than_or_equal_to: "jābūt lielākam vai vienādam ar %{count}"
-        equal_to: "jābūt vienādam ar %{count}"
-        less_than: "jābūt mazākam kā %{count}"
-        less_than_or_equal_to: "jābūt mazākam vai vienādam ar %{count}"
-        odd: "jāatšķirās"
-        even: "jāsakrīt"
-        greater_than_start_date: "jābūt vēlākam par sākuma datumu"
-        not_same_project: "nepieder pie tā paša projekta"
-        circular_dependency: "Šī relācija radītu ciklisku atkarību"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
-
-  actionview_instancetag_blank_option: Izvēlieties
-  
-  general_text_No: 'Nē'
-  general_text_Yes: 'Jā'
-  general_text_no: 'nē'
-  general_text_yes: 'jā'
-  general_lang_name: 'Latvian (Latviešu)'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
-  general_csv_encoding: UTF-8
-  general_pdf_encoding: UTF-8
-  general_first_day_of_week: '1'
-  
-  notice_account_updated: Konts tika atjaunots veiksmīgi.
-  notice_account_invalid_creditentials: Nepareizs lietotāja vārds vai parole.
-  notice_account_password_updated: Parole tika veiksmīgi atjaunota.
-  notice_account_wrong_password: Nepareiza parole
-  notice_account_register_done: Konts veiksmīgi izveidots. Lai aktivizētu kontu, spiediet uz saites, kas Jums tika nosūtīta.
-  notice_account_unknown_email: Nezināms lietotājs
-  notice_can_t_change_password: Šis konts izmanto ārēju pilnvarošanas avotu. Nav iespējams nomainīt paroli.
-  notice_account_lost_email_sent: Jums tika nosūtīts e-pasts ar instrukcijām, kā izveidot jaunu paroli.
-  notice_account_activated: Jūsu konts ir aktivizēts. Varat pieslēgties sistēmai.
-  notice_successful_create: Veiksmīga izveide.
-  notice_successful_update: Veiksmīga atjaunošana.
-  notice_successful_delete: Veiksmīga dzēšana.
-  notice_successful_connection: Veiksmīgs savienojums.
-  notice_file_not_found: Lapa, ko Jūs mēģināt atvērt, neeksistē vai ir pārvietota.
-  notice_locking_conflict: Datus ir atjaunojis cits lietotājs.
-  notice_not_authorized: Jums nav tiesību piekļūt šai lapai.
-  notice_email_sent: "E-pasts tika nosūtīts uz %{value}"
-  notice_email_error: "Kļūda sūtot e-pastu (%{value})"
-  notice_feeds_access_key_reseted: Jūsu RSS pieejas atslēga tika iestatīta sākuma stāvoklī.
-  notice_api_access_key_reseted: Jūsu API pieejas atslēga tika iestatīta sākuma stāvoklī.
-  notice_failed_to_save_issues: "Neizdevās saglabāt %{count} uzdevumu(us) no %{total} izvēlēti: %{ids}."
-  notice_no_issue_selected: "Nav izvēlēts uzdevums! Lūdzu, atzīmējiet uzdevumus, kurus vēlaties rediģēt!"
-  notice_account_pending: "Jūsu konts tika izveidots un šobrīd gaida administratora apstiprinājumu."
-  notice_default_data_loaded: Noklusētā konfigurācija tika veiksmīgi ielādēta.
-  notice_unable_delete_version: Neizdevās dzēst versiju.
-  notice_issue_done_ratios_updated: Uzdevuma izpildes koeficients atjaunots.
-  
-  error_can_t_load_default_data: "Nevar ielādēt noklusētos konfigurācijas datus: %{value}"
-  error_scm_not_found: "Ieraksts vai versija nebija repozitorijā."
-  error_scm_command_failed: "Mēģinot piekļūt repozitorijam, notika kļūda: %{value}"
-  error_scm_annotate: "Ieraksts neeksistē vai tam nevar tikt pievienots paskaidrojums."
-  error_issue_not_found_in_project: 'Uzdevums netika atrasts vai nepieder šim projektam.'
-  error_no_tracker_in_project: 'Neviens trakeris nav saistīts ar šo projektu. Pārbaudiet projekta iestatījumus.'
-  error_no_default_issue_status: 'Nav definēts uzdevuma noklusētais statuss. Pārbaudiet konfigurāciju (Ejat uz: "Administrācija -> Uzdevumu statusi")!'
-  error_can_not_reopen_issue_on_closed_version: 'Nevar pievienot atsauksmi uzdevumam, kas saistīts ar slēgtu versiju.'
-  error_can_not_archive_project: Šis projekts nevar tikt arhivēts
-  error_issue_done_ratios_not_updated: "Uzdevuma izpildes koeficients nav atjaunots."
-  error_workflow_copy_source: 'Lūdzu izvēlieties avota trakeri vai lomu'
-  error_workflow_copy_target: 'Lūdzu izvēlēties mērķa trakeri(us) un lomu(as)'
-  
-  warning_attachments_not_saved: "%{count} datnes netika saglabātas."
-  
-  mail_subject_lost_password: "Jūsu %{value} parole"
-  mail_body_lost_password: 'Lai mainītu paroli, spiediet uz šīs saites:'
-  mail_subject_register: "Jūsu %{value} konta aktivizācija"
-  mail_body_register: 'Lai izveidotu kontu, spiediet uz šīs saites:'
-  mail_body_account_information_external: "Varat izmantot Jūsu %{value} kontu, lai pieslēgtos."
-  mail_body_account_information: Jūsu konta informācija
-  mail_subject_account_activation_request: "%{value} konta aktivizācijas pieprasījums"
-  mail_body_account_activation_request: "Jauns lietotājs (%{value}) ir reģistrēts. Lietotāja konts gaida Jūsu apstiprinājumu:"
-  mail_subject_reminder: "%{count} uzdevums(i) sagaidāms(i) tuvākajās %{days} dienās"
-  mail_body_reminder: "%{count} uzdevums(i), kurš(i) ir nozīmēts(i) Jums, sagaidāms(i) tuvākajās %{days} dienās:"
-  mail_subject_wiki_content_added: "'%{id}' Wiki lapa pievienota"
-  mail_body_wiki_content_added: "The '%{id}' Wiki lapu pievienojis %{author}."
-  mail_subject_wiki_content_updated: "'%{id}' Wiki lapa atjaunota"
-  mail_body_wiki_content_updated: "The '%{id}' Wiki lapu atjaunojis %{author}."
-  
-  gui_validation_error: 1 kļūda
-  gui_validation_error_plural: "%{count} kļūdas"
-  
-  field_name: Nosaukums
-  field_description: Apraksts
-  field_summary: Kopsavilkums
-  field_is_required: Nepieciešams
-  field_firstname: Vārds
-  field_lastname: Uzvārds
-  field_mail: "E-pasts"
-  field_filename: Datne
-  field_filesize: Izmērs
-  field_downloads: Lejupielādes
-  field_author: Autors
-  field_created_on: Izveidots
-  field_updated_on: Atjaunots
-  field_field_format: Formāts
-  field_is_for_all: Visiem projektiem
-  field_possible_values: Iespējamās vērtības
-  field_regexp: Regulārā izteiksme
-  field_min_length: Minimālais garums
-  field_max_length: Maksimālais garums
-  field_value: Vērtība
-  field_category: Kategorija
-  field_title: Nosaukums
-  field_project: Projekts
-  field_issue: Uzdevums
-  field_status: Statuss
-  field_notes: Piezīmes
-  field_is_closed: Uzdevums slēgts
-  field_is_default: Noklusētā vērtība
-  field_tracker: Trakeris
-  field_subject: Temats
-  field_due_date: Sagaidāmais datums
-  field_assigned_to: Piešķirts
-  field_priority: Prioritāte
-  field_fixed_version: Mērķa versija
-  field_user: Lietotājs
-  field_role: Loma
-  field_homepage: Vietne
-  field_is_public: Publisks
-  field_parent: Apakšprojekts projektam
-  field_is_in_roadmap: Ceļvedī parādītie uzdevumi
-  field_login: Pieslēgties
-  field_mail_notification: "E-pasta paziņojumi"
-  field_admin: Administrators
-  field_last_login_on: Pēdējo reizi pieslēdzies
-  field_language: Valoda
-  field_effective_date: Datums
-  field_password: Parole
-  field_new_password: Janā parole
-  field_password_confirmation: Paroles apstiprinājums
-  field_version: Versija
-  field_type: Tips
-  field_host: Hosts
-  field_port: Ports
-  field_account: Konts
-  field_base_dn: Base DN
-  field_attr_login: Pieslēgšanās atribūts
-  field_attr_firstname: Vārda atribūts
-  field_attr_lastname: Uzvārda atribūts
-  field_attr_mail: "E-pasta atribūts"
-  field_onthefly: "Lietotāja izveidošana on-the-fly"
-  field_start_date: Sākuma datums
-  field_done_ratio: % padarīti
-  field_auth_source: Pilnvarošanas režīms
-  field_hide_mail: "Paslēpt manu e-pasta adresi"
-  field_comments: Komentārs
-  field_url: URL
-  field_start_page: Sākuma lapa
-  field_subproject: Apakšprojekts
-  field_hours: Stundas
-  field_activity: Aktivitāte
-  field_spent_on: Datums
-  field_identifier: Identifikators
-  field_is_filter: Izmantots kā filtrs
-  field_issue_to: Saistīts uzdevums
-  field_delay: Kavējums
-  field_assignable: Uzdevums var tikt piesaistīts šai lomai
-  field_redirect_existing_links: Pāradresēt eksistējošās saites
-  field_estimated_hours: Paredzētais laiks
-  field_column_names: Kolonnas
-  field_time_zone: Laika zona
-  field_searchable: Meklējams
-  field_default_value: Noklusētā vērtība
-  field_comments_sorting: Rādīt komentārus
-  field_parent_title: Vecāka lapa
-  field_editable: Rediģējams
-  field_watcher: Vērotājs
-  field_identity_url: OpenID URL
-  field_content: Saturs
-  field_group_by: Grupēt rezultātus pēc
-  field_sharing: Koplietošana
-  
-  setting_app_title: Programmas nosaukums
-  setting_app_subtitle: Programmas apakš-nosaukums
-  setting_welcome_text: Sveiciena teksts
-  setting_default_language: Noklusētā valoda
-  setting_login_required: Nepieciešama pilnvarošana
-  setting_self_registration: Pašreģistrēšanās
-  setting_attachment_max_size: Pielikuma maksimālais izmērs
-  setting_issues_export_limit: Uzdevumu eksporta ierobežojums
-  setting_mail_from: "E-pasta adrese informācijas nosūtīšanai"
-  setting_bcc_recipients: "Saņēmēju adreses neparādīsies citu saņēmēju vēstulēs (bcc)"
-  setting_plain_text_mail: "Vēstule brīvā tekstā (bez HTML)"
-  setting_host_name: Hosta nosaukums un piekļuves ceļš
-  setting_text_formatting: Teksta formatēšana
-  setting_wiki_compression: Wiki vēstures saspiešana
-  setting_feeds_limit: Barotnes satura ierobežojums
-  setting_default_projects_public: Jaunie projekti noklusēti ir publiski pieejami
-  setting_autofetch_changesets: "Automātiski lietot jaunāko versiju, pieslēdzoties repozitorijam (Autofetch)"
-  setting_sys_api_enabled: Ieslēgt WS repozitoriju menedžmentam
-  setting_commit_ref_keywords: Norādes atslēgvārdi
-  setting_commit_fix_keywords:  Fiksējošie atslēgvārdi
-  setting_autologin: Automātiskā pieslēgšanās
-  setting_date_format: Datuma formāts
-  setting_time_format: Laika formāts
-  setting_cross_project_issue_relations: "Atļaut starp-projektu uzdevumu relācijas"
-  setting_issue_list_default_columns: Noklusēti rādītās kolonnas uzdevumu sarakstā
-  setting_repositories_encodings: Repozitoriju kodējumi
-  setting_commit_logs_encoding: Kodēt ziņojumus
-  setting_emails_footer: "E-pastu kājene"
-  setting_protocol: Protokols
-  setting_per_page_options: Objekti vienā lapā
-  setting_user_format: Lietotāju rādīšanas formāts
-  setting_activity_days_default: Dienus skaits aktivitāšu rādīšanai aktivitāšu sadaļā
-  setting_display_subprojects_issues: Rādīt apakšprojekta uzdevumus galvenajā projektā pēc noklusējuma
-  setting_enabled_scm: Lietot SCM
-  setting_mail_handler_body_delimiters: "Saīsināt pēc vienas no šim rindām"
-  setting_mail_handler_api_enabled: "Lietot WS ienākošajiem e-pastiem"
-  setting_mail_handler_api_key: API atslēga
-  setting_sequential_project_identifiers: Ģenerēt secīgus projektu identifikatorus
-  setting_gravatar_enabled: Izmantot Gravatar lietotāju ikonas
-  setting_gravatar_default: Noklusētais Gravatar attēls
-  setting_diff_max_lines_displayed: Maksimālais rādīto diff rindu skaits
-  setting_file_max_size_displayed: Maksimālais izmērs iekļautajiem teksta failiem
-  setting_repository_log_display_limit: Maksimālais žurnāla datnē rādīto revīziju skaits
-  setting_openid: Atļaut OpenID pieslēgšanos un reģistrēšanos
-  setting_password_min_length: Minimālais paroles garums
-  setting_new_project_user_role_id: Loma, kura tiek piešķirta ne-administratora lietotājam, kurš izveido projektu
-  setting_default_projects_modules: Noklusētie lietotie moduļi jaunam projektam
-  setting_issue_done_ratio: Aprēķināt uzdevuma izpildes koeficientu ar
-  setting_issue_done_ratio_issue_field: uzdevuma lauku
-  setting_issue_done_ratio_issue_status: uzdevuma statusu
-  setting_start_of_week: Sākt kalendāru ar
-  setting_rest_api_enabled: Lietot REST web-servisu
-  setting_cache_formatted_text: Kešot formatētu tekstu
-  
-  permission_add_project: Izveidot projektu
-  permission_add_subprojects: Izveidot apakšprojektu
-  permission_edit_project: Rediģēt projektu
-  permission_select_project_modules: Izvēlēties projekta moduļus
-  permission_manage_members: Pārvaldīt dalībniekus
-  permission_manage_project_activities: Pārvaldīt projekta aktivitātes
-  permission_manage_versions: Pārvaldīt versijas
-  permission_manage_categories: Pārvaldīt uzdevumu kategorijas
-  permission_view_issues: Apskatīt uzdevumus
-  permission_add_issues: Pievienot uzdevumus
-  permission_edit_issues: Rediģēt uzdevumus
-  permission_manage_issue_relations: Pārvaldīt uzdevumu relācijas
-  permission_add_issue_notes: Pievienot piezīmes
-  permission_edit_issue_notes: Rediģēt piezīmes
-  permission_edit_own_issue_notes: Rediģēt paša piezīmes
-  permission_move_issues: Pārvietot uzdevumus
-  permission_delete_issues: Dzēst uzdevumus
-  permission_manage_public_queries: Pārvaldīt publiskos pieprasījumus
-  permission_save_queries: Saglabāt pieprasījumus
-  permission_view_gantt: Skatīt Ganta diagrammu
-  permission_view_calendar: Skatīt kalendāru
-  permission_view_issue_watchers: Skatīt vērotāju sarakstu
-  permission_add_issue_watchers: Pievienot vērotājus
-  permission_delete_issue_watchers: Dzēst vērotājus
-  permission_log_time: Piereģistrēt pavadīto laiku
-  permission_view_time_entries: Skatīt pavadīto laiku
-  permission_edit_time_entries: Rdiģēt laika reģistrus
-  permission_edit_own_time_entries:  Rediģēt savus laika reģistrus
-  permission_manage_news: Pārvaldīt jaunumus
-  permission_comment_news: Komentēt jaunumus
-  permission_manage_documents: Pārvaldīt dokumentus
-  permission_view_documents: Skatīt dokumentus
-  permission_manage_files: Pārvaldīt failus
-  permission_view_files: Skatīt failus
-  permission_manage_wiki: Pārvaldīt wiki
-  permission_rename_wiki_pages: Pārsaukt wiki lapas
-  permission_delete_wiki_pages: Dzēst wiki lapas
-  permission_view_wiki_pages: Skatīt wiki
-  permission_view_wiki_edits: Skatīt wiki vēsturi
-  permission_edit_wiki_pages: Rdiģēt wiki lapas
-  permission_delete_wiki_pages_attachments: Dzēst pielikumus
-  permission_protect_wiki_pages: Projekta wiki lapas
-  permission_manage_repository: Pārvaldīt repozitoriju
-  permission_browse_repository: Pārlūkot repozitoriju
-  permission_view_changesets: Skatīt izmaiņu kopumus  
-  permission_commit_access: Atļaut piekļuvi
-  permission_manage_boards: Pārvaldīt ziņojumu dēļus
-  permission_view_messages: Skatīt ziņas
-  permission_add_messages: Publicēt ziņas
-  permission_edit_messages: Rediģēt ziņas
-  permission_edit_own_messages: Rediģēt savas ziņas
-  permission_delete_messages: Dzēst ziņas
-  permission_delete_own_messages: Dzēst savas ziņas
-  permission_export_wiki_pages: Eksportēt Wiki lapas
-  
-  project_module_issue_tracking: Uzdevumu uzskaite
-  project_module_time_tracking: Laika uzskaite
-  project_module_news: Jaunumi
-  project_module_documents: Dokumenti
-  project_module_files: Datnes
-  project_module_wiki: Wiki
-  project_module_repository: Repozitorijs
-  project_module_boards: Ziņojumu dēļi
-  
-  label_user: Lietotājs
-  label_user_plural: Lietotāji
-  label_user_new: Jauns lietotājs
-  label_user_anonymous: Anonīms
-  label_project: Projekts
-  label_project_new: Jauns projekts
-  label_project_plural: Projekti
-  label_x_projects:
-    zero:  nav projektu
-    one:   1 projekts
-    other: "%{count} projekti"
-  label_project_all: Visi projekti
-  label_project_latest: Jaunākie projekti
-  label_issue: Uzdevums
-  label_issue_new: Jauns uzdevums
-  label_issue_plural: Uzdevumi
-  label_issue_view_all: Skatīt visus uzdevumus
-  label_issues_by: "Kārtot pēc %{value}"
-  label_issue_added: Uzdevums pievienots
-  label_issue_updated: Uzdevums atjaunots
-  label_document: Dokuments
-  label_document_new: Jauns dokuments
-  label_document_plural: Dokumenti
-  label_document_added: Dokuments pievienots
-  label_role: Loma
-  label_role_plural: Lomas
-  label_role_new: Jauna loma
-  label_role_and_permissions: Lomas un atļaujas
-  label_member: Dalībnieks
-  label_member_new: Jauns dalībnieks
-  label_member_plural: Dalībnieki
-  label_tracker: Trakeris
-  label_tracker_plural: Trakeri
-  label_tracker_new: Jauns trakeris
-  label_workflow: Darba gaita
-  label_issue_status: Uzdevuma statuss
-  label_issue_status_plural: Uzdevumu statusi
-  label_issue_status_new: Jauns statuss
-  label_issue_category: Uzdevuma kategorija
-  label_issue_category_plural: Uzdevumu kategorijas
-  label_issue_category_new: Jauna kategorija
-  label_custom_field: Pielāgojams lauks
-  label_custom_field_plural: Pielāgojami lauki
-  label_custom_field_new: Jauns pielāgojams lauks
-  label_enumerations: Uzskaitījumi
-  label_enumeration_new: Jauna vērtība
-  label_information: Informācija
-  label_information_plural: Informācija
-  label_please_login: Lūdzu pieslēdzieties
-  label_register: Reģistrēties
-  label_login_with_open_id_option: vai pieslēgties ar OpenID
-  label_password_lost: Nozaudēta parole
-  label_home: Sākums
-  label_my_page: Mana lapa
-  label_my_account: Mans konts
-  label_my_projects: Mani projekti
-  label_administration: Administrācija
-  label_login: Pieslēgties
-  label_logout: Atslēgties
-  label_help: Palīdzība
-  label_reported_issues: Ziņotie uzdevumi
-  label_assigned_to_me_issues: Man piesaistītie uzdevumi
-  label_last_login: Pēdējā pieslēgšanās
-  label_registered_on: Reģistrējies
-  label_activity: Aktivitāte
-  label_overall_activity: Kopējās aktivitātes
-  label_user_activity: "Lietotāja %{value} aktivitātes"
-  label_new: Jauns
-  label_logged_as: Pieslēdzies kā
-  label_environment: Vide
-  label_authentication: Pilnvarošana
-  label_auth_source: Pilnvarošanas režīms
-  label_auth_source_new: Jauns pilnvarošanas režīms
-  label_auth_source_plural: Pilnvarošanas režīmi
-  label_subproject_plural: Apakšprojekti
-  label_subproject_new: Jauns apakšprojekts
-  label_and_its_subprojects: "%{value} un tā apakšprojekti"
-  label_min_max_length: Minimālais - Maksimālais garums
-  label_list: Saraksts
-  label_date: Datums
-  label_integer: Vesels skaitlis
-  label_float: Decimālskaitlis
-  label_boolean: Patiesuma vērtība
-  label_string: Teksts
-  label_text: Garš teksts
-  label_attribute: Atribūts
-  label_attribute_plural: Atribūti
-  label_download: "%{count} Lejupielāde"
-  label_download_plural: "%{count} Lejupielādes"
-  label_no_data: Nav datu, ko parādīt
-  label_change_status: Mainīt statusu
-  label_history: Vēsture
-  label_attachment: Pielikums
-  label_attachment_new: Jauns pielikums
-  label_attachment_delete: Dzēst pielikumu
-  label_attachment_plural: Pielikumi
-  label_file_added: Lauks pievienots
-  label_report: Atskaite
-  label_report_plural: Atskaites
-  label_news: Ziņa
-  label_news_new: Pievienot ziņu
-  label_news_plural: Ziņas
-  label_news_latest: Jaunākās ziņas
-  label_news_view_all: Skatīt visas ziņas
-  label_news_added: Ziņas pievienotas
-  label_settings: Iestatījumi
-  label_overview: Pārskats
-  label_version: Versija
-  label_version_new: Jauna versija
-  label_version_plural: Versijas
-  label_close_versions: Aizvērt pabeigtās versijas
-  label_confirmation: Apstiprinājums
-  label_export_to: 'Pieejams arī:'
-  label_read: Lasīt...
-  label_public_projects: Publiskie projekti
-  label_open_issues: atvērts
-  label_open_issues_plural: atvērti
-  label_closed_issues: slēgts
-  label_closed_issues_plural: slēgti
-  label_x_open_issues_abbr_on_total:
-    zero:  0 atvērti / %{total}
-    one:   1 atvērts / %{total}
-    other: "%{count} atvērti / %{total}"
-  label_x_open_issues_abbr:
-    zero:  0 atvērti
-    one:   1 atvērts
-    other: "%{count} atvērti"
-  label_x_closed_issues_abbr:
-    zero:  0 slēgti
-    one:   1 slēgts
-    other: "%{count} slēgti"
-  label_total: Kopā
-  label_permissions: Atļaujas
-  label_current_status: Pašreizējais statuss
-  label_new_statuses_allowed: Jauni statusi atļauti
-  label_all: visi
-  label_none: neviens
-  label_nobody: nekas
-  label_next: Nākošais
-  label_previous: Iepriekšējais
-  label_used_by: Izmanto
-  label_details: Detaļas
-  label_add_note: Pievienot piezīmi
-  label_per_page: katrā lapā
-  label_calendar: Kalendārs
-  label_months_from: mēneši no
-  label_gantt: Ganta diagramma
-  label_internal: Iekšējais
-  label_last_changes: "pēdējās %{count} izmaiņas"
-  label_change_view_all: Skatīt visas izmaiņas
-  label_personalize_page: Pielāgot šo lapu
-  label_comment: Komentārs
-  label_comment_plural: Komentāri
-  label_x_comments:
-    zero: nav komentāru
-    one: 1 komentārs
-    other: "%{count} komentāri"
-  label_comment_add: Pievienot komentāru
-  label_comment_added: Komentārs pievienots
-  label_comment_delete: Dzēst komentārus
-  label_query: Pielāgots pieprasījums
-  label_query_plural: Pielāgoti pieprasījumi
-  label_query_new: Jauns pieprasījums
-  label_filter_add: Pievienot filtru
-  label_filter_plural: Filtri
-  label_equals: ir
-  label_not_equals: nav
-  label_in_less_than: ir mazāk kā
-  label_in_more_than: ir vairāk kā
-  label_greater_or_equal: '>='
-  label_less_or_equal: '<='
-  label_in: iekš
-  label_today: šodien
-  label_all_time: visu laiku
-  label_yesterday: vakar
-  label_this_week: šonedēļ
-  label_last_week: pagājušo šonedēļ
-  label_last_n_days: "pēdējās %{count} dienas"
-  label_this_month: šomēnes
-  label_last_month: pagājušo mēnes
-  label_this_year: šogad
-  label_date_range: Datumu apgabals
-  label_less_than_ago: mazāk kā dienas iepriekš
-  label_more_than_ago: vairāk kā dienas iepriekš
-  label_ago: dienas iepriekš
-  label_contains: satur
-  label_not_contains: nesatur
-  label_day_plural: dienas
-  label_repository: Repozitorijs
-  label_repository_plural: Repozitoriji
-  label_browse: Pārlūkot
-  label_modification: "%{count} izmaiņa"
-  label_modification_plural: "%{count} izmaiņas"
-  label_branch: Zars
-  label_tag: Birka 
-  label_revision: Revīzija
-  label_revision_plural: Revīzijas
-  label_revision_id: "Revīzija %{value}"
-  label_associated_revisions: Saistītās revīzijas
-  label_added: pievienots
-  label_modified: modificēts
-  label_copied: nokopēts
-  label_renamed: pārsaukts
-  label_deleted: dzēsts
-  label_latest_revision: Pēdējā revīzija
-  label_latest_revision_plural: Pēdējās revīzijas
-  label_view_revisions: Skatīt revīzijas
-  label_view_all_revisions: Skatīt visas revīzijas
-  label_max_size: Maksimālais izmērs
-  label_sort_highest: Pārvietot uz augšu
-  label_sort_higher: Pārvietot soli augšup
-  label_sort_lower: Pārvietot uz leju
-  label_sort_lowest: Pārvietot vienu soli uz leju
-  label_roadmap: Ceļvedis
-  label_roadmap_due_in: "Sagaidāms pēc %{value}"
-  label_roadmap_overdue: "nokavēts %{value}"
-  label_roadmap_no_issues: Šai versijai nav uzdevumu
-  label_search: Meklēt
-  label_result_plural: Rezultāti
-  label_all_words: Visi vārdi
-  label_wiki: Wiki
-  label_wiki_edit: Wiki labojums
-  label_wiki_edit_plural: Wiki labojumi
-  label_wiki_page: Wiki lapa
-  label_wiki_page_plural: Wiki lapas
-  label_index_by_title: Indeksēt pēc nosaukuma
-  label_index_by_date: Indeksēt pēc datuma
-  label_current_version: Tekošā versija
-  label_preview: Priekšskatījums
-  label_feed_plural: Barotnes
-  label_changes_details: Visu izmaiņu detaļas
-  label_issue_tracking: Uzdevumu uzskaite
-  label_spent_time: Pavadītais laiks
-  label_f_hour: "%{value} stunda"
-  label_f_hour_plural: "%{value} stundas"
-  label_time_tracking: Laika uzskaite
-  label_change_plural: Izmaiņas
-  label_statistics: Statistika
-  label_commits_per_month: Nodevumi mēnesī
-  label_commits_per_author: Nodevumi no autora
-  label_view_diff: Skatīt atšķirības
-  label_diff_inline: iekļauts
-  label_diff_side_by_side: blakus
-  label_options: Opcijas
-  label_copy_workflow_from: Kopēt darba plūsmu no
-  label_permissions_report: Atļauju atskaite
-  label_watched_issues: Vērotie uzdevumi
-  label_related_issues: Saistītie uzdevumi
-  label_applied_status: Piešķirtais statuss
-  label_loading: Lādējas...
-  label_relation_new: Jauna relācija
-  label_relation_delete: Dzēst relāciju
-  label_relates_to: saistīts ar
-  label_duplicates: dublikāti
-  label_duplicated_by: dublējas ar
-  label_blocks: bloķē
-  label_blocked_by: nobloķējis
-  label_precedes: pirms
-  label_follows: seko
-  label_end_to_start: no beigām uz sākumu
-  label_end_to_end: no beigām uz beigām
-  label_start_to_start: no sākuma uz sākumu
-  label_start_to_end: no sākuma uz beigām
-  label_stay_logged_in: Atcerēties mani
-  label_disabled: izslēgts
-  label_show_completed_versions: Rādīt pabeigtās versijas
-  label_me: es
-  label_board: Forums
-  label_board_new: Jauns forums
-  label_board_plural: Forumi
-  label_board_locked: Slēgts
-  label_board_sticky: Svarīgs
-  label_topic_plural: Tēmas
-  label_message_plural: Ziņas
-  label_message_last: Pēdējā ziņa
-  label_message_new: Jauna ziņa
-  label_message_posted: Ziņa pievienota
-  label_reply_plural: Atbildes
-  label_send_information: Sūtīt konta informāciju lietotājam
-  label_year: Gads
-  label_month: Mēnesis
-  label_week: Nedēļa
-  label_date_from: No
-  label_date_to: Kam
-  label_language_based: Izmantot lietotāja valodu
-  label_sort_by: "Kārtot pēc %{value}"
-  label_send_test_email: "Sūtīt testa e-pastu"
-  label_feeds_access_key: RSS piekļuves atslēga
-  label_missing_feeds_access_key: Trūkst RSS piekļuves atslēgas
-  label_feeds_access_key_created_on: "RSS piekļuves atslēga izveidota pirms %{value}"
-  label_module_plural: Moduļi
-  label_added_time_by: "Pievienojis %{author} pirms %{age}"
-  label_updated_time_by: "Atjaunojis %{author} pirms %{age}"
-  label_updated_time: "Atjaunots pirms %{value}"
-  label_jump_to_a_project: Pāriet uz projektu...
-  label_file_plural: Datnes
-  label_changeset_plural: Izmaiņu kopumi
-  label_default_columns: Noklusētās kolonnas
-  label_no_change_option: (Nav izmaiņu)
-  label_bulk_edit_selected_issues: Labot visus izvēlētos uzdevumus
-  label_theme: Tēma
-  label_default: Noklusēts
-  label_search_titles_only: Meklēt tikai nosaukumos
-  label_user_mail_option_all: "Par visiem notikumiem visos manos projektos"
-  label_user_mail_option_selected: "Par visiem notikumiem tikai izvēlētajos projektos..."
-  label_user_mail_no_self_notified: "Neziņot man par izmaiņām, kuras veicu es pats"
-  label_registration_activation_by_email: "konta aktivizācija caur e-pastu"
-  label_registration_manual_activation: manuālā konta aktivizācija
-  label_registration_automatic_activation: automātiskā konta aktivizācija
-  label_display_per_page: "Rādīt vienā lapā: %{value}"
-  label_age: Vecums
-  label_change_properties: Mainīt atribūtus
-  label_general: Galvenais
-  label_more: Vēl
-  label_scm: SCM
-  label_plugins: Spraudņi
-  label_ldap_authentication: LDAP pilnvarošana
-  label_downloads_abbr: L-lād.
-  label_optional_description: "Apraksts (neobligāts)"
-  label_add_another_file: Pievienot citu failu
-  label_preferences: Priekšrocības
-  label_chronological_order: Hronoloģiskā kārtībā
-  label_reverse_chronological_order: Apgriezti hronoloģiskā kārtībā
-  label_planning: Plānošana
-  label_incoming_emails: "Ienākošie e-pasti"
-  label_generate_key: Ģenerēt atslēgu
-  label_issue_watchers: Vērotāji
-  label_example: Piemērs
-  label_display: Rādīt
-  label_sort: Kārtot
-  label_ascending: Augoši
-  label_descending: Dilstoši
-  label_date_from_to: "No %{start} līdz %{end}"
-  label_wiki_content_added: Wiki lapa pievienota
-  label_wiki_content_updated: Wiki lapa atjaunota
-  label_group: Grupa
-  label_group_plural: Grupas
-  label_group_new: Jauna grupa
-  label_time_entry_plural: Pavadītais laiks
-  label_version_sharing_none: Nav koplietošanai
-  label_version_sharing_descendants: Ar apakšprojektiem
-  label_version_sharing_hierarchy: Ar projektu hierarhiju
-  label_version_sharing_tree: Ar projekta koku
-  label_version_sharing_system: Ar visiem projektiem
-  label_update_issue_done_ratios: Atjaunot uzdevuma veikuma attiecību
-  label_copy_source: Avots
-  label_copy_target: Mērķis
-  label_copy_same_as_target: Tāds pats kā mērķis
-  label_display_used_statuses_only: "Rādīt tikai statusus, ko lieto šis trakeris"
-  label_api_access_key: API pieejas atslēga
-  label_missing_api_access_key: Trūkst API pieejas atslēga
-  label_api_access_key_created_on: "API pieejas atslēga izveidota pirms %{value}"
-  
-  button_login: Pieslēgties
-  button_submit: Nosūtīt
-  button_save: Saglabāt
-  button_check_all: Atzīmēt visu
-  button_uncheck_all: Noņemt visus atzīmējumus
-  button_delete: Dzēst
-  button_create: Izveidot
-  button_create_and_continue: Izveidot un turpināt
-  button_test: Testēt
-  button_edit: Labot
-  button_add: Pievienot
-  button_change: Mainīt
-  button_apply: Apstiprināt
-  button_clear: Notīrīt
-  button_lock: Slēgt
-  button_unlock: Atslēgt
-  button_download: Lejuplādēt
-  button_list: Saraksts
-  button_view: Skats
-  button_move: Pārvietot
-  button_move_and_follow: Pārvietot un sekot
-  button_back: Atpakaļ
-  button_cancel: Atcelt
-  button_activate: Aktivizēt
-  button_sort: Kārtot
-  button_log_time: Ilgs laiks
-  button_rollback: Atjaunot uz šo versiju
-  button_watch: Vērot
-  button_unwatch: Nevērot
-  button_reply: Atbildēt
-  button_archive: Arhivēt
-  button_unarchive: Atarhivēt
-  button_reset: Atiestatīt
-  button_rename: Pārsaukt
-  button_change_password: Mainīt paroli
-  button_copy: Kopēt
-  button_copy_and_follow: Kopēt un sekot
-  button_annotate: Pierakstīt paskaidrojumu
-  button_update: Atjaunot
-  button_configure: Konfigurēt
-  button_quote: Citāts
-  button_duplicate: Dublēt
-  button_show: Rādīt
-  
-  status_active: aktīvs
-  status_registered: reģistrēts
-  status_locked: slēgts
-  
-  version_status_open: atvērta
-  version_status_locked: slēgta
-  version_status_closed: aizvērta
-
-  field_active: Aktīvs
-  
-  text_select_mail_notifications: "Izvēlieties darbības, par kurām vēlaties saņemt ziņojumus e-pastā"
-  text_regexp_info: "piem. ^[A-Z0-9]+$"
-  text_min_max_length_info: "0 nozīmē, ka nav ierobežojumu"
-  text_project_destroy_confirmation: "Vai tiešām vēlaties dzēst šo projektu un ar to saistītos datus?"
-  text_subprojects_destroy_warning: "Tā apakšprojekts(i): %{value} arī tiks dzēsts(i)."
-  text_workflow_edit: Lai labotu darba plūsmu, izvēlieties lomu un trakeri
-  text_are_you_sure: "Vai esat pārliecināts?"
-  text_journal_changed: "%{label} mainīts no %{old} uz %{new}"
-  text_journal_set_to: "%{label} iestatīts uz %{value}"
-  text_journal_deleted: "%{label} dzēsts (%{old})"
-  text_journal_added: "%{label} %{value} pievienots"
-  text_tip_issue_begin_day: uzdevums sākas šodien
-  text_tip_issue_end_day: uzdevums beidzas šodien
-  text_tip_issue_begin_end_day: uzdevums sākas un beidzas šodien
-  text_project_identifier_info: 'Tikai mazie burti (a-z), cipari un domuzīmes ir atļauti.<br />Kad saglabāts, identifikators nevar tikt mainīts.'
-  text_caracters_maximum: "%{count} simboli maksimāli."
-  text_caracters_minimum: "Jābūt vismaz %{count} simbolu garumā."
-  text_length_between: "Garums starp %{min} un %{max} simboliem."
-  text_tracker_no_workflow: Šim trakerim nav definēta darba plūsma
-  text_unallowed_characters: Neatļauti simboli
-  text_comma_separated: "Atļautas vairākas vērtības (atdalīt ar komatu)."
-  text_line_separated: "Atļautas vairākas vērtības (rakstīt katru savā rindā)."
-  text_issues_ref_in_commit_messages: "Izmaiņu salīdzināšana izejot no ziņojumiem"
-  text_issue_added: "Uzdevumu %{id} pievienojis %{author}."
-  text_issue_updated: "Uzdevumu %{id} atjaunojis %{author}."
-  text_wiki_destroy_confirmation: "Vai esat drošs, ka vēlaties dzēst šo wiki un visu tās saturu?"
-  text_issue_category_destroy_question: "Daži uzdevumi (%{count}) ir nozīmēti šai kategorijai. Ko Jūs vēlaties darīt?"
-  text_issue_category_destroy_assignments: Dzēst kategoriju nozīmējumus
-  text_issue_category_reassign_to: Nozīmēt uzdevumus šai kategorijai
-  text_user_mail_option: "No neizvēlētajiem projektiem Jūs saņemsiet ziņojumus e-pastā tikai par notikumiem, kuriem Jūs sekojat vai kuros esat iesaistīts." 
-  text_no_configuration_data: "Lomas, trakeri, uzdevumu statusi un darba plūsmas vēl nav konfigurētas.\nĻoti ieteicams ielādēt noklusēto konfigurāciju. Pēc ielādēšanas to būs iespējams modificēt."
-  text_load_default_configuration: Ielādēt noklusēto konfigurāciju
-  text_status_changed_by_changeset: "Apstiprināts izmaiņu kopumā %{value}."
-  text_issues_destroy_confirmation: 'Vai tiešām vēlaties dzēst izvēlēto uzdevumu(us)?'
-  text_select_project_modules: 'Izvēlieties moduļus šim projektam:'
-  text_default_administrator_account_changed: Noklusētais administratora konts mainīts
-  text_file_repository_writable: Pielikumu direktorijā atļauts rakstīt
-  text_plugin_assets_writable: Spraudņu kataloga direktorijā atļauts rakstīt
-  text_rmagick_available: "RMagick pieejams (neobligāts)"
-  text_destroy_time_entries_question: "%{hours} stundas tika ziņotas par uzdevumu, ko vēlaties dzēst. Ko darīt?"
-  text_destroy_time_entries: Dzēst ziņotās stundas
-  text_assign_time_entries_to_project: Piešķirt ziņotās stundas projektam
-  text_reassign_time_entries: 'Piešķirt ziņotās stundas uzdevumam:'
-  text_user_wrote: "%{value} rakstīja:"
-  text_enumeration_destroy_question: "%{count} objekti ir piešķirti šai vērtībai."
-  text_enumeration_category_reassign_to: 'Piešķirt tos šai vērtībai:'
-  text_email_delivery_not_configured: "E-pastu nosūtīšana nav konfigurēta, un ziņojumi ir izslēgti.\nKonfigurējiet savu SMTP serveri datnē config/configuration.yml un pārstartējiet lietotni."
-  text_repository_usernames_mapping: "Izvēlieties vai atjaunojiet Redmine lietotāju, saistītu ar katru lietotājvārdu, kas atrodams repozitorija žurnālā.\nLietotāji ar to pašu Redmine un repozitorija lietotājvārdu būs saistīti automātiski."
-  text_diff_truncated: '... Šis diff tika nošķelts, jo tas pārsniedz maksimālo izmēru, ko var parādīt.'
-  text_custom_field_possible_values_info: 'Katra vērtības savā rindā'
-  text_wiki_page_destroy_question: "Šij lapai ir %{descendants} apakšlapa(as) un pēcnācēji. Ko darīt?"
-  text_wiki_page_nullify_children: "Paturēt apakšlapas kā pamatlapas"
-  text_wiki_page_destroy_children: "Dzēst apakšlapas un visus pēcnācējus"
-  text_wiki_page_reassign_children: "Piešķirt apakšlapas šai lapai"
-  text_own_membership_delete_confirmation: "Jūs tūlīt dzēsīsiet dažas vai visas atļaujas, un Jums pēc tam var nebūt atļauja labot šo projektu.\nVai turpināt?"
-  
-  default_role_manager: Menedžeris
-  default_role_developer: Izstrādātājs
-  default_role_reporter: Ziņotājs
-  default_tracker_bug: Kļūda
-  default_tracker_feature: Iezīme
-  default_tracker_support: Atbalsts
-  default_issue_status_new: Jauns
-  default_issue_status_in_progress: Attīstībā
-  default_issue_status_resolved: Atrisināts
-  default_issue_status_feedback: Atsauksmes
-  default_issue_status_closed: Slēgts
-  default_issue_status_rejected: Noraidīts
-  default_doc_category_user: Lietotāja dokumentācija
-  default_doc_category_tech: Tehniskā dokumentācija
-  default_priority_low: Zema
-  default_priority_normal: Normāla
-  default_priority_high: Augsta
-  default_priority_urgent: Steidzama
-  default_priority_immediate: Tūlītēja
-  default_activity_design: Dizains
-  default_activity_development: Izstrādāšana
-  
-  enumeration_issue_priorities: Uzdevumu prioritātes
-  enumeration_doc_categories: Dokumentu kategorijas
-  enumeration_activities: Aktivitātes (laika uzskaite)
-  enumeration_system_activity: Sistēmas aktivitātes
-
-  error_can_not_delete_custom_field: Unable to delete custom field
-  permission_manage_subtasks: Manage subtasks
-  label_profile: Profile
-  error_unable_to_connect: Unable to connect (%{value})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  field_parent_issue: Parent task
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_subtask_plural: Subtasks
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
-  label_project_copy_notifications: Send email notifications during the project copy
-  field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
-  project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+# translated by Dzintars Bergs (dzintars.bergs@gmail.com)
+
+lv:
+  direction: ltr
+  date:
+    formats:
+      default: "%d.%m.%Y"
+      short: "%d %b"
+      long: "%d %B %Y"
+      
+    day_names: [Svētdiena, Pirmdiena, Otrdiena, Trešdiena, Ceturtdiena, Piektdiena, Sestdiena]
+    abbr_day_names: [Sv, Pr, Ot, Tr, Ct, Pk, St]
+      
+    month_names: [~, Janvāris, Februāris, Marts, Aprīlis , Maijs, Jūnijs, Jūlijs, Augusts, Septembris, Oktobris, Novembris, Decembris]
+    abbr_month_names: [~, Jan, Feb, Mar, Apr, Mai, Jūn, Jūl, Aug, Sep, Okt, Nov, Dec]
+    order:
+      - :day
+      - :month
+      - :year
+
+  time:
+    formats:
+      default: "%a, %d %b %Y, %H:%M:%S %z"
+      time: "%H:%M"
+      short: "%d %b, %H:%M"
+      long: "%B %d, %Y %H:%M"
+    am: "rītā"
+    pm: "vakarā"
+      
+  datetime:
+    distance_in_words:
+      half_a_minute: "pus minūte"
+      less_than_x_seconds:
+        one:   "mazāk kā 1 sekunde"
+        other: "mazāk kā %{count} sekundes"
+      x_seconds:
+        one:   "1 sekunde"
+        other: "%{count} sekundes"
+      less_than_x_minutes:
+        one:   "mazāk kā minūte"
+        other: "mazāk kā %{count} minūtes"
+      x_minutes:
+        one:   "1 minūte"
+        other: "%{count} minūtes"
+      about_x_hours:
+        one:   "aptuveni 1 stunda"
+        other: "aptuveni %{count} stundas"
+      x_days:
+        one:   "1 diena"
+        other: "%{count} dienas"
+      about_x_months:
+        one:   "aptuveni 1 mēnesis"
+        other: "aptuveni %{count} mēneši"
+      x_months:
+        one:   "1 mēnesis"
+        other: "%{count} mēneši"
+      about_x_years:
+        one:   "aptuveni 1 gads"
+        other: "aptuveni %{count} gadi"
+      over_x_years:
+        one:   "ilgāk par 1 gadu"
+        other: "ilgāk par %{count} gadiem"
+      almost_x_years:
+        one:   "gandrīz 1 gadu"
+        other: "gandrīz %{count} gadus"
+
+  number:
+    format:
+      separator: "."
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: " "
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Baits"
+            other: "Baiti"
+          kb: "KB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+        
+  support:
+    array:
+      sentence_connector: "un"
+      skip_last_comma: false
+      
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "1 error prohibited this %{model} from being saved"
+          other:  "%{count} errors prohibited this %{model} from being saved"
+      messages:
+        inclusion: "nav iekļauts sarakstā"
+        exclusion: "ir rezervēts"
+        invalid: "nederīgs"
+        confirmation: "apstiprinājums nesakrīt"
+        accepted: "jābūt akceptētam"
+        empty: "nevar būt tukšs"
+        blank: "nevar būt neaizpildīts"
+        too_long: "ir pārāk gara(š) (maksimālais garums ir %{count} simboli)"
+        too_short: "ir pārāk īsa(s) (minimālais garums ir %{count} simboli)"
+        wrong_length: "ir nepareiza garuma (vajadzētu būt %{count} simboli)"
+        taken: "eksistē"
+        not_a_number: "nav skaitlis"
+        not_a_date: "nav derīgs datums"
+        greater_than: "jābūt lielākam par %{count}"
+        greater_than_or_equal_to: "jābūt lielākam vai vienādam ar %{count}"
+        equal_to: "jābūt vienādam ar %{count}"
+        less_than: "jābūt mazākam kā %{count}"
+        less_than_or_equal_to: "jābūt mazākam vai vienādam ar %{count}"
+        odd: "jāatšķirās"
+        even: "jāsakrīt"
+        greater_than_start_date: "jābūt vēlākam par sākuma datumu"
+        not_same_project: "nepieder pie tā paša projekta"
+        circular_dependency: "Šī relācija radītu ciklisku atkarību"
+        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+
+  actionview_instancetag_blank_option: Izvēlieties
+  
+  general_text_No: 'Nē'
+  general_text_Yes: 'Jā'
+  general_text_no: 'nē'
+  general_text_yes: 'jā'
+  general_lang_name: 'Latvian (Latviešu)'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '1'
+  
+  notice_account_updated: Konts tika atjaunots veiksmīgi.
+  notice_account_invalid_creditentials: Nepareizs lietotāja vārds vai parole.
+  notice_account_password_updated: Parole tika veiksmīgi atjaunota.
+  notice_account_wrong_password: Nepareiza parole
+  notice_account_register_done: Konts veiksmīgi izveidots. Lai aktivizētu kontu, spiediet uz saites, kas Jums tika nosūtīta.
+  notice_account_unknown_email: Nezināms lietotājs
+  notice_can_t_change_password: Šis konts izmanto ārēju pilnvarošanas avotu. Nav iespējams nomainīt paroli.
+  notice_account_lost_email_sent: Jums tika nosūtīts e-pasts ar instrukcijām, kā izveidot jaunu paroli.
+  notice_account_activated: Jūsu konts ir aktivizēts. Varat pieslēgties sistēmai.
+  notice_successful_create: Veiksmīga izveide.
+  notice_successful_update: Veiksmīga atjaunošana.
+  notice_successful_delete: Veiksmīga dzēšana.
+  notice_successful_connection: Veiksmīgs savienojums.
+  notice_file_not_found: Lapa, ko Jūs mēģināt atvērt, neeksistē vai ir pārvietota.
+  notice_locking_conflict: Datus ir atjaunojis cits lietotājs.
+  notice_not_authorized: Jums nav tiesību piekļūt šai lapai.
+  notice_email_sent: "E-pasts tika nosūtīts uz %{value}"
+  notice_email_error: "Kļūda sūtot e-pastu (%{value})"
+  notice_feeds_access_key_reseted: Jūsu RSS pieejas atslēga tika iestatīta sākuma stāvoklī.
+  notice_api_access_key_reseted: Jūsu API pieejas atslēga tika iestatīta sākuma stāvoklī.
+  notice_failed_to_save_issues: "Neizdevās saglabāt %{count} uzdevumu(us) no %{total} izvēlēti: %{ids}."
+  notice_no_issue_selected: "Nav izvēlēts uzdevums! Lūdzu, atzīmējiet uzdevumus, kurus vēlaties rediģēt!"
+  notice_account_pending: "Jūsu konts tika izveidots un šobrīd gaida administratora apstiprinājumu."
+  notice_default_data_loaded: Noklusētā konfigurācija tika veiksmīgi ielādēta.
+  notice_unable_delete_version: Neizdevās dzēst versiju.
+  notice_issue_done_ratios_updated: Uzdevuma izpildes koeficients atjaunots.
+  
+  error_can_t_load_default_data: "Nevar ielādēt noklusētos konfigurācijas datus: %{value}"
+  error_scm_not_found: "Ieraksts vai versija nebija repozitorijā."
+  error_scm_command_failed: "Mēģinot piekļūt repozitorijam, notika kļūda: %{value}"
+  error_scm_annotate: "Ieraksts neeksistē vai tam nevar tikt pievienots paskaidrojums."
+  error_issue_not_found_in_project: 'Uzdevums netika atrasts vai nepieder šim projektam.'
+  error_no_tracker_in_project: 'Neviens trakeris nav saistīts ar šo projektu. Pārbaudiet projekta iestatījumus.'
+  error_no_default_issue_status: 'Nav definēts uzdevuma noklusētais statuss. Pārbaudiet konfigurāciju (Ejat uz: "Administrācija -> Uzdevumu statusi")!'
+  error_can_not_reopen_issue_on_closed_version: 'Nevar pievienot atsauksmi uzdevumam, kas saistīts ar slēgtu versiju.'
+  error_can_not_archive_project: Šis projekts nevar tikt arhivēts
+  error_issue_done_ratios_not_updated: "Uzdevuma izpildes koeficients nav atjaunots."
+  error_workflow_copy_source: 'Lūdzu izvēlieties avota trakeri vai lomu'
+  error_workflow_copy_target: 'Lūdzu izvēlēties mērķa trakeri(us) un lomu(as)'
+  
+  warning_attachments_not_saved: "%{count} datnes netika saglabātas."
+  
+  mail_subject_lost_password: "Jūsu %{value} parole"
+  mail_body_lost_password: 'Lai mainītu paroli, spiediet uz šīs saites:'
+  mail_subject_register: "Jūsu %{value} konta aktivizācija"
+  mail_body_register: 'Lai izveidotu kontu, spiediet uz šīs saites:'
+  mail_body_account_information_external: "Varat izmantot Jūsu %{value} kontu, lai pieslēgtos."
+  mail_body_account_information: Jūsu konta informācija
+  mail_subject_account_activation_request: "%{value} konta aktivizācijas pieprasījums"
+  mail_body_account_activation_request: "Jauns lietotājs (%{value}) ir reģistrēts. Lietotāja konts gaida Jūsu apstiprinājumu:"
+  mail_subject_reminder: "%{count} uzdevums(i) sagaidāms(i) tuvākajās %{days} dienās"
+  mail_body_reminder: "%{count} uzdevums(i), kurš(i) ir nozīmēts(i) Jums, sagaidāms(i) tuvākajās %{days} dienās:"
+  mail_subject_wiki_content_added: "'%{id}' Wiki lapa pievienota"
+  mail_body_wiki_content_added: "The '%{id}' Wiki lapu pievienojis %{author}."
+  mail_subject_wiki_content_updated: "'%{id}' Wiki lapa atjaunota"
+  mail_body_wiki_content_updated: "The '%{id}' Wiki lapu atjaunojis %{author}."
+  
+  gui_validation_error: 1 kļūda
+  gui_validation_error_plural: "%{count} kļūdas"
+  
+  field_name: Nosaukums
+  field_description: Apraksts
+  field_summary: Kopsavilkums
+  field_is_required: Nepieciešams
+  field_firstname: Vārds
+  field_lastname: Uzvārds
+  field_mail: "E-pasts"
+  field_filename: Datne
+  field_filesize: Izmērs
+  field_downloads: Lejupielādes
+  field_author: Autors
+  field_created_on: Izveidots
+  field_updated_on: Atjaunots
+  field_field_format: Formāts
+  field_is_for_all: Visiem projektiem
+  field_possible_values: Iespējamās vērtības
+  field_regexp: Regulārā izteiksme
+  field_min_length: Minimālais garums
+  field_max_length: Maksimālais garums
+  field_value: Vērtība
+  field_category: Kategorija
+  field_title: Nosaukums
+  field_project: Projekts
+  field_issue: Uzdevums
+  field_status: Statuss
+  field_notes: Piezīmes
+  field_is_closed: Uzdevums slēgts
+  field_is_default: Noklusētā vērtība
+  field_tracker: Trakeris
+  field_subject: Temats
+  field_due_date: Sagaidāmais datums
+  field_assigned_to: Piešķirts
+  field_priority: Prioritāte
+  field_fixed_version: Mērķa versija
+  field_user: Lietotājs
+  field_role: Loma
+  field_homepage: Vietne
+  field_is_public: Publisks
+  field_parent: Apakšprojekts projektam
+  field_is_in_roadmap: Ceļvedī parādītie uzdevumi
+  field_login: Pieslēgties
+  field_mail_notification: "E-pasta paziņojumi"
+  field_admin: Administrators
+  field_last_login_on: Pēdējo reizi pieslēdzies
+  field_language: Valoda
+  field_effective_date: Datums
+  field_password: Parole
+  field_new_password: Janā parole
+  field_password_confirmation: Paroles apstiprinājums
+  field_version: Versija
+  field_type: Tips
+  field_host: Hosts
+  field_port: Ports
+  field_account: Konts
+  field_base_dn: Base DN
+  field_attr_login: Pieslēgšanās atribūts
+  field_attr_firstname: Vārda atribūts
+  field_attr_lastname: Uzvārda atribūts
+  field_attr_mail: "E-pasta atribūts"
+  field_onthefly: "Lietotāja izveidošana on-the-fly"
+  field_start_date: Sākuma datums
+  field_done_ratio: "% padarīti"
+  field_auth_source: Pilnvarošanas režīms
+  field_hide_mail: "Paslēpt manu e-pasta adresi"
+  field_comments: Komentārs
+  field_url: URL
+  field_start_page: Sākuma lapa
+  field_subproject: Apakšprojekts
+  field_hours: Stundas
+  field_activity: Aktivitāte
+  field_spent_on: Datums
+  field_identifier: Identifikators
+  field_is_filter: Izmantots kā filtrs
+  field_issue_to: Saistīts uzdevums
+  field_delay: Kavējums
+  field_assignable: Uzdevums var tikt piesaistīts šai lomai
+  field_redirect_existing_links: Pāradresēt eksistējošās saites
+  field_estimated_hours: Paredzētais laiks
+  field_column_names: Kolonnas
+  field_time_zone: Laika zona
+  field_searchable: Meklējams
+  field_default_value: Noklusētā vērtība
+  field_comments_sorting: Rādīt komentārus
+  field_parent_title: Vecāka lapa
+  field_editable: Rediģējams
+  field_watcher: Vērotājs
+  field_identity_url: OpenID URL
+  field_content: Saturs
+  field_group_by: Grupēt rezultātus pēc
+  field_sharing: Koplietošana
+  
+  setting_app_title: Programmas nosaukums
+  setting_app_subtitle: Programmas apakš-nosaukums
+  setting_welcome_text: Sveiciena teksts
+  setting_default_language: Noklusētā valoda
+  setting_login_required: Nepieciešama pilnvarošana
+  setting_self_registration: Pašreģistrēšanās
+  setting_attachment_max_size: Pielikuma maksimālais izmērs
+  setting_issues_export_limit: Uzdevumu eksporta ierobežojums
+  setting_mail_from: "E-pasta adrese informācijas nosūtīšanai"
+  setting_bcc_recipients: "Saņēmēju adreses neparādīsies citu saņēmēju vēstulēs (bcc)"
+  setting_plain_text_mail: "Vēstule brīvā tekstā (bez HTML)"
+  setting_host_name: Hosta nosaukums un piekļuves ceļš
+  setting_text_formatting: Teksta formatēšana
+  setting_wiki_compression: Wiki vēstures saspiešana
+  setting_feeds_limit: Barotnes satura ierobežojums
+  setting_default_projects_public: Jaunie projekti noklusēti ir publiski pieejami
+  setting_autofetch_changesets: "Automātiski lietot jaunāko versiju, pieslēdzoties repozitorijam (Autofetch)"
+  setting_sys_api_enabled: Ieslēgt WS repozitoriju menedžmentam
+  setting_commit_ref_keywords: Norādes atslēgvārdi
+  setting_commit_fix_keywords:  Fiksējošie atslēgvārdi
+  setting_autologin: Automātiskā pieslēgšanās
+  setting_date_format: Datuma formāts
+  setting_time_format: Laika formāts
+  setting_cross_project_issue_relations: "Atļaut starp-projektu uzdevumu relācijas"
+  setting_issue_list_default_columns: Noklusēti rādītās kolonnas uzdevumu sarakstā
+  setting_repositories_encodings: Repozitoriju kodējumi
+  setting_emails_footer: "E-pastu kājene"
+  setting_protocol: Protokols
+  setting_per_page_options: Objekti vienā lapā
+  setting_user_format: Lietotāju rādīšanas formāts
+  setting_activity_days_default: Dienus skaits aktivitāšu rādīšanai aktivitāšu sadaļā
+  setting_display_subprojects_issues: Rādīt apakšprojekta uzdevumus galvenajā projektā pēc noklusējuma
+  setting_enabled_scm: Lietot SCM
+  setting_mail_handler_body_delimiters: "Saīsināt pēc vienas no šim rindām"
+  setting_mail_handler_api_enabled: "Lietot WS ienākošajiem e-pastiem"
+  setting_mail_handler_api_key: API atslēga
+  setting_sequential_project_identifiers: Ģenerēt secīgus projektu identifikatorus
+  setting_gravatar_enabled: Izmantot Gravatar lietotāju ikonas
+  setting_gravatar_default: Noklusētais Gravatar attēls
+  setting_diff_max_lines_displayed: Maksimālais rādīto diff rindu skaits
+  setting_file_max_size_displayed: Maksimālais izmērs iekļautajiem teksta failiem
+  setting_repository_log_display_limit: Maksimālais žurnāla datnē rādīto revīziju skaits
+  setting_openid: Atļaut OpenID pieslēgšanos un reģistrēšanos
+  setting_password_min_length: Minimālais paroles garums
+  setting_new_project_user_role_id: Loma, kura tiek piešķirta ne-administratora lietotājam, kurš izveido projektu
+  setting_default_projects_modules: Noklusētie lietotie moduļi jaunam projektam
+  setting_issue_done_ratio: Aprēķināt uzdevuma izpildes koeficientu ar
+  setting_issue_done_ratio_issue_field: uzdevuma lauku
+  setting_issue_done_ratio_issue_status: uzdevuma statusu
+  setting_start_of_week: Sākt kalendāru ar
+  setting_rest_api_enabled: Lietot REST web-servisu
+  setting_cache_formatted_text: Kešot formatētu tekstu
+  
+  permission_add_project: Izveidot projektu
+  permission_add_subprojects: Izveidot apakšprojektu
+  permission_edit_project: Rediģēt projektu
+  permission_select_project_modules: Izvēlēties projekta moduļus
+  permission_manage_members: Pārvaldīt dalībniekus
+  permission_manage_project_activities: Pārvaldīt projekta aktivitātes
+  permission_manage_versions: Pārvaldīt versijas
+  permission_manage_categories: Pārvaldīt uzdevumu kategorijas
+  permission_view_issues: Apskatīt uzdevumus
+  permission_add_issues: Pievienot uzdevumus
+  permission_edit_issues: Rediģēt uzdevumus
+  permission_manage_issue_relations: Pārvaldīt uzdevumu relācijas
+  permission_add_issue_notes: Pievienot piezīmes
+  permission_edit_issue_notes: Rediģēt piezīmes
+  permission_edit_own_issue_notes: Rediģēt paša piezīmes
+  permission_move_issues: Pārvietot uzdevumus
+  permission_delete_issues: Dzēst uzdevumus
+  permission_manage_public_queries: Pārvaldīt publiskos pieprasījumus
+  permission_save_queries: Saglabāt pieprasījumus
+  permission_view_gantt: Skatīt Ganta diagrammu
+  permission_view_calendar: Skatīt kalendāru
+  permission_view_issue_watchers: Skatīt vērotāju sarakstu
+  permission_add_issue_watchers: Pievienot vērotājus
+  permission_delete_issue_watchers: Dzēst vērotājus
+  permission_log_time: Piereģistrēt pavadīto laiku
+  permission_view_time_entries: Skatīt pavadīto laiku
+  permission_edit_time_entries: Rdiģēt laika reģistrus
+  permission_edit_own_time_entries:  Rediģēt savus laika reģistrus
+  permission_manage_news: Pārvaldīt jaunumus
+  permission_comment_news: Komentēt jaunumus
+  permission_manage_documents: Pārvaldīt dokumentus
+  permission_view_documents: Skatīt dokumentus
+  permission_manage_files: Pārvaldīt failus
+  permission_view_files: Skatīt failus
+  permission_manage_wiki: Pārvaldīt wiki
+  permission_rename_wiki_pages: Pārsaukt wiki lapas
+  permission_delete_wiki_pages: Dzēst wiki lapas
+  permission_view_wiki_pages: Skatīt wiki
+  permission_view_wiki_edits: Skatīt wiki vēsturi
+  permission_edit_wiki_pages: Rdiģēt wiki lapas
+  permission_delete_wiki_pages_attachments: Dzēst pielikumus
+  permission_protect_wiki_pages: Projekta wiki lapas
+  permission_manage_repository: Pārvaldīt repozitoriju
+  permission_browse_repository: Pārlūkot repozitoriju
+  permission_view_changesets: Skatīt izmaiņu kopumus  
+  permission_commit_access: Atļaut piekļuvi
+  permission_manage_boards: Pārvaldīt ziņojumu dēļus
+  permission_view_messages: Skatīt ziņas
+  permission_add_messages: Publicēt ziņas
+  permission_edit_messages: Rediģēt ziņas
+  permission_edit_own_messages: Rediģēt savas ziņas
+  permission_delete_messages: Dzēst ziņas
+  permission_delete_own_messages: Dzēst savas ziņas
+  permission_export_wiki_pages: Eksportēt Wiki lapas
+  
+  project_module_issue_tracking: Uzdevumu uzskaite
+  project_module_time_tracking: Laika uzskaite
+  project_module_news: Jaunumi
+  project_module_documents: Dokumenti
+  project_module_files: Datnes
+  project_module_wiki: Wiki
+  project_module_repository: Repozitorijs
+  project_module_boards: Ziņojumu dēļi
+  
+  label_user: Lietotājs
+  label_user_plural: Lietotāji
+  label_user_new: Jauns lietotājs
+  label_user_anonymous: Anonīms
+  label_project: Projekts
+  label_project_new: Jauns projekts
+  label_project_plural: Projekti
+  label_x_projects:
+    zero:  nav projektu
+    one:   1 projekts
+    other: "%{count} projekti"
+  label_project_all: Visi projekti
+  label_project_latest: Jaunākie projekti
+  label_issue: Uzdevums
+  label_issue_new: Jauns uzdevums
+  label_issue_plural: Uzdevumi
+  label_issue_view_all: Skatīt visus uzdevumus
+  label_issues_by: "Kārtot pēc %{value}"
+  label_issue_added: Uzdevums pievienots
+  label_issue_updated: Uzdevums atjaunots
+  label_document: Dokuments
+  label_document_new: Jauns dokuments
+  label_document_plural: Dokumenti
+  label_document_added: Dokuments pievienots
+  label_role: Loma
+  label_role_plural: Lomas
+  label_role_new: Jauna loma
+  label_role_and_permissions: Lomas un atļaujas
+  label_member: Dalībnieks
+  label_member_new: Jauns dalībnieks
+  label_member_plural: Dalībnieki
+  label_tracker: Trakeris
+  label_tracker_plural: Trakeri
+  label_tracker_new: Jauns trakeris
+  label_workflow: Darba gaita
+  label_issue_status: Uzdevuma statuss
+  label_issue_status_plural: Uzdevumu statusi
+  label_issue_status_new: Jauns statuss
+  label_issue_category: Uzdevuma kategorija
+  label_issue_category_plural: Uzdevumu kategorijas
+  label_issue_category_new: Jauna kategorija
+  label_custom_field: Pielāgojams lauks
+  label_custom_field_plural: Pielāgojami lauki
+  label_custom_field_new: Jauns pielāgojams lauks
+  label_enumerations: Uzskaitījumi
+  label_enumeration_new: Jauna vērtība
+  label_information: Informācija
+  label_information_plural: Informācija
+  label_please_login: Lūdzu pieslēdzieties
+  label_register: Reģistrēties
+  label_login_with_open_id_option: vai pieslēgties ar OpenID
+  label_password_lost: Nozaudēta parole
+  label_home: Sākums
+  label_my_page: Mana lapa
+  label_my_account: Mans konts
+  label_my_projects: Mani projekti
+  label_administration: Administrācija
+  label_login: Pieslēgties
+  label_logout: Atslēgties
+  label_help: Palīdzība
+  label_reported_issues: Ziņotie uzdevumi
+  label_assigned_to_me_issues: Man piesaistītie uzdevumi
+  label_last_login: Pēdējā pieslēgšanās
+  label_registered_on: Reģistrējies
+  label_activity: Aktivitāte
+  label_overall_activity: Kopējās aktivitātes
+  label_user_activity: "Lietotāja %{value} aktivitātes"
+  label_new: Jauns
+  label_logged_as: Pieslēdzies kā
+  label_environment: Vide
+  label_authentication: Pilnvarošana
+  label_auth_source: Pilnvarošanas režīms
+  label_auth_source_new: Jauns pilnvarošanas režīms
+  label_auth_source_plural: Pilnvarošanas režīmi
+  label_subproject_plural: Apakšprojekti
+  label_subproject_new: Jauns apakšprojekts
+  label_and_its_subprojects: "%{value} un tā apakšprojekti"
+  label_min_max_length: Minimālais - Maksimālais garums
+  label_list: Saraksts
+  label_date: Datums
+  label_integer: Vesels skaitlis
+  label_float: Decimālskaitlis
+  label_boolean: Patiesuma vērtība
+  label_string: Teksts
+  label_text: Garš teksts
+  label_attribute: Atribūts
+  label_attribute_plural: Atribūti
+  label_download: "%{count} Lejupielāde"
+  label_download_plural: "%{count} Lejupielādes"
+  label_no_data: Nav datu, ko parādīt
+  label_change_status: Mainīt statusu
+  label_history: Vēsture
+  label_attachment: Pielikums
+  label_attachment_new: Jauns pielikums
+  label_attachment_delete: Dzēst pielikumu
+  label_attachment_plural: Pielikumi
+  label_file_added: Lauks pievienots
+  label_report: Atskaite
+  label_report_plural: Atskaites
+  label_news: Ziņa
+  label_news_new: Pievienot ziņu
+  label_news_plural: Ziņas
+  label_news_latest: Jaunākās ziņas
+  label_news_view_all: Skatīt visas ziņas
+  label_news_added: Ziņas pievienotas
+  label_settings: Iestatījumi
+  label_overview: Pārskats
+  label_version: Versija
+  label_version_new: Jauna versija
+  label_version_plural: Versijas
+  label_close_versions: Aizvērt pabeigtās versijas
+  label_confirmation: Apstiprinājums
+  label_export_to: 'Pieejams arī:'
+  label_read: Lasīt...
+  label_public_projects: Publiskie projekti
+  label_open_issues: atvērts
+  label_open_issues_plural: atvērti
+  label_closed_issues: slēgts
+  label_closed_issues_plural: slēgti
+  label_x_open_issues_abbr_on_total:
+    zero:  0 atvērti / %{total}
+    one:   1 atvērts / %{total}
+    other: "%{count} atvērti / %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 atvērti
+    one:   1 atvērts
+    other: "%{count} atvērti"
+  label_x_closed_issues_abbr:
+    zero:  0 slēgti
+    one:   1 slēgts
+    other: "%{count} slēgti"
+  label_total: Kopā
+  label_permissions: Atļaujas
+  label_current_status: Pašreizējais statuss
+  label_new_statuses_allowed: Jauni statusi atļauti
+  label_all: visi
+  label_none: neviens
+  label_nobody: nekas
+  label_next: Nākošais
+  label_previous: Iepriekšējais
+  label_used_by: Izmanto
+  label_details: Detaļas
+  label_add_note: Pievienot piezīmi
+  label_per_page: katrā lapā
+  label_calendar: Kalendārs
+  label_months_from: mēneši no
+  label_gantt: Ganta diagramma
+  label_internal: Iekšējais
+  label_last_changes: "pēdējās %{count} izmaiņas"
+  label_change_view_all: Skatīt visas izmaiņas
+  label_personalize_page: Pielāgot šo lapu
+  label_comment: Komentārs
+  label_comment_plural: Komentāri
+  label_x_comments:
+    zero: nav komentāru
+    one: 1 komentārs
+    other: "%{count} komentāri"
+  label_comment_add: Pievienot komentāru
+  label_comment_added: Komentārs pievienots
+  label_comment_delete: Dzēst komentārus
+  label_query: Pielāgots pieprasījums
+  label_query_plural: Pielāgoti pieprasījumi
+  label_query_new: Jauns pieprasījums
+  label_filter_add: Pievienot filtru
+  label_filter_plural: Filtri
+  label_equals: ir
+  label_not_equals: nav
+  label_in_less_than: ir mazāk kā
+  label_in_more_than: ir vairāk kā
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: iekš
+  label_today: šodien
+  label_all_time: visu laiku
+  label_yesterday: vakar
+  label_this_week: šonedēļ
+  label_last_week: pagājušo šonedēļ
+  label_last_n_days: "pēdējās %{count} dienas"
+  label_this_month: šomēnes
+  label_last_month: pagājušo mēnes
+  label_this_year: šogad
+  label_date_range: Datumu apgabals
+  label_less_than_ago: mazāk kā dienas iepriekš
+  label_more_than_ago: vairāk kā dienas iepriekš
+  label_ago: dienas iepriekš
+  label_contains: satur
+  label_not_contains: nesatur
+  label_day_plural: dienas
+  label_repository: Repozitorijs
+  label_repository_plural: Repozitoriji
+  label_browse: Pārlūkot
+  label_modification: "%{count} izmaiņa"
+  label_modification_plural: "%{count} izmaiņas"
+  label_branch: Zars
+  label_tag: Birka 
+  label_revision: Revīzija
+  label_revision_plural: Revīzijas
+  label_revision_id: "Revīzija %{value}"
+  label_associated_revisions: Saistītās revīzijas
+  label_added: pievienots
+  label_modified: modificēts
+  label_copied: nokopēts
+  label_renamed: pārsaukts
+  label_deleted: dzēsts
+  label_latest_revision: Pēdējā revīzija
+  label_latest_revision_plural: Pēdējās revīzijas
+  label_view_revisions: Skatīt revīzijas
+  label_view_all_revisions: Skatīt visas revīzijas
+  label_max_size: Maksimālais izmērs
+  label_sort_highest: Pārvietot uz augšu
+  label_sort_higher: Pārvietot soli augšup
+  label_sort_lower: Pārvietot uz leju
+  label_sort_lowest: Pārvietot vienu soli uz leju
+  label_roadmap: Ceļvedis
+  label_roadmap_due_in: "Sagaidāms pēc %{value}"
+  label_roadmap_overdue: "nokavēts %{value}"
+  label_roadmap_no_issues: Šai versijai nav uzdevumu
+  label_search: Meklēt
+  label_result_plural: Rezultāti
+  label_all_words: Visi vārdi
+  label_wiki: Wiki
+  label_wiki_edit: Wiki labojums
+  label_wiki_edit_plural: Wiki labojumi
+  label_wiki_page: Wiki lapa
+  label_wiki_page_plural: Wiki lapas
+  label_index_by_title: Indeksēt pēc nosaukuma
+  label_index_by_date: Indeksēt pēc datuma
+  label_current_version: Tekošā versija
+  label_preview: Priekšskatījums
+  label_feed_plural: Barotnes
+  label_changes_details: Visu izmaiņu detaļas
+  label_issue_tracking: Uzdevumu uzskaite
+  label_spent_time: Pavadītais laiks
+  label_f_hour: "%{value} stunda"
+  label_f_hour_plural: "%{value} stundas"
+  label_time_tracking: Laika uzskaite
+  label_change_plural: Izmaiņas
+  label_statistics: Statistika
+  label_commits_per_month: Nodevumi mēnesī
+  label_commits_per_author: Nodevumi no autora
+  label_view_diff: Skatīt atšķirības
+  label_diff_inline: iekļauts
+  label_diff_side_by_side: blakus
+  label_options: Opcijas
+  label_copy_workflow_from: Kopēt darba plūsmu no
+  label_permissions_report: Atļauju atskaite
+  label_watched_issues: Vērotie uzdevumi
+  label_related_issues: Saistītie uzdevumi
+  label_applied_status: Piešķirtais statuss
+  label_loading: Lādējas...
+  label_relation_new: Jauna relācija
+  label_relation_delete: Dzēst relāciju
+  label_relates_to: saistīts ar
+  label_duplicates: dublikāti
+  label_duplicated_by: dublējas ar
+  label_blocks: bloķē
+  label_blocked_by: nobloķējis
+  label_precedes: pirms
+  label_follows: seko
+  label_end_to_start: no beigām uz sākumu
+  label_end_to_end: no beigām uz beigām
+  label_start_to_start: no sākuma uz sākumu
+  label_start_to_end: no sākuma uz beigām
+  label_stay_logged_in: Atcerēties mani
+  label_disabled: izslēgts
+  label_show_completed_versions: Rādīt pabeigtās versijas
+  label_me: es
+  label_board: Forums
+  label_board_new: Jauns forums
+  label_board_plural: Forumi
+  label_board_locked: Slēgts
+  label_board_sticky: Svarīgs
+  label_topic_plural: Tēmas
+  label_message_plural: Ziņas
+  label_message_last: Pēdējā ziņa
+  label_message_new: Jauna ziņa
+  label_message_posted: Ziņa pievienota
+  label_reply_plural: Atbildes
+  label_send_information: Sūtīt konta informāciju lietotājam
+  label_year: Gads
+  label_month: Mēnesis
+  label_week: Nedēļa
+  label_date_from: No
+  label_date_to: Kam
+  label_language_based: Izmantot lietotāja valodu
+  label_sort_by: "Kārtot pēc %{value}"
+  label_send_test_email: "Sūtīt testa e-pastu"
+  label_feeds_access_key: RSS piekļuves atslēga
+  label_missing_feeds_access_key: Trūkst RSS piekļuves atslēgas
+  label_feeds_access_key_created_on: "RSS piekļuves atslēga izveidota pirms %{value}"
+  label_module_plural: Moduļi
+  label_added_time_by: "Pievienojis %{author} pirms %{age}"
+  label_updated_time_by: "Atjaunojis %{author} pirms %{age}"
+  label_updated_time: "Atjaunots pirms %{value}"
+  label_jump_to_a_project: Pāriet uz projektu...
+  label_file_plural: Datnes
+  label_changeset_plural: Izmaiņu kopumi
+  label_default_columns: Noklusētās kolonnas
+  label_no_change_option: (Nav izmaiņu)
+  label_bulk_edit_selected_issues: Labot visus izvēlētos uzdevumus
+  label_theme: Tēma
+  label_default: Noklusēts
+  label_search_titles_only: Meklēt tikai nosaukumos
+  label_user_mail_option_all: "Par visiem notikumiem visos manos projektos"
+  label_user_mail_option_selected: "Par visiem notikumiem tikai izvēlētajos projektos..."
+  label_user_mail_no_self_notified: "Neziņot man par izmaiņām, kuras veicu es pats"
+  label_registration_activation_by_email: "konta aktivizācija caur e-pastu"
+  label_registration_manual_activation: manuālā konta aktivizācija
+  label_registration_automatic_activation: automātiskā konta aktivizācija
+  label_display_per_page: "Rādīt vienā lapā: %{value}"
+  label_age: Vecums
+  label_change_properties: Mainīt atribūtus
+  label_general: Galvenais
+  label_more: Vēl
+  label_scm: SCM
+  label_plugins: Spraudņi
+  label_ldap_authentication: LDAP pilnvarošana
+  label_downloads_abbr: L-lād.
+  label_optional_description: "Apraksts (neobligāts)"
+  label_add_another_file: Pievienot citu failu
+  label_preferences: Priekšrocības
+  label_chronological_order: Hronoloģiskā kārtībā
+  label_reverse_chronological_order: Apgriezti hronoloģiskā kārtībā
+  label_planning: Plānošana
+  label_incoming_emails: "Ienākošie e-pasti"
+  label_generate_key: Ģenerēt atslēgu
+  label_issue_watchers: Vērotāji
+  label_example: Piemērs
+  label_display: Rādīt
+  label_sort: Kārtot
+  label_ascending: Augoši
+  label_descending: Dilstoši
+  label_date_from_to: "No %{start} līdz %{end}"
+  label_wiki_content_added: Wiki lapa pievienota
+  label_wiki_content_updated: Wiki lapa atjaunota
+  label_group: Grupa
+  label_group_plural: Grupas
+  label_group_new: Jauna grupa
+  label_time_entry_plural: Pavadītais laiks
+  label_version_sharing_none: Nav koplietošanai
+  label_version_sharing_descendants: Ar apakšprojektiem
+  label_version_sharing_hierarchy: Ar projektu hierarhiju
+  label_version_sharing_tree: Ar projekta koku
+  label_version_sharing_system: Ar visiem projektiem
+  label_update_issue_done_ratios: Atjaunot uzdevuma veikuma attiecību
+  label_copy_source: Avots
+  label_copy_target: Mērķis
+  label_copy_same_as_target: Tāds pats kā mērķis
+  label_display_used_statuses_only: "Rādīt tikai statusus, ko lieto šis trakeris"
+  label_api_access_key: API pieejas atslēga
+  label_missing_api_access_key: Trūkst API pieejas atslēga
+  label_api_access_key_created_on: "API pieejas atslēga izveidota pirms %{value}"
+  
+  button_login: Pieslēgties
+  button_submit: Nosūtīt
+  button_save: Saglabāt
+  button_check_all: Atzīmēt visu
+  button_uncheck_all: Noņemt visus atzīmējumus
+  button_delete: Dzēst
+  button_create: Izveidot
+  button_create_and_continue: Izveidot un turpināt
+  button_test: Testēt
+  button_edit: Labot
+  button_add: Pievienot
+  button_change: Mainīt
+  button_apply: Apstiprināt
+  button_clear: Notīrīt
+  button_lock: Slēgt
+  button_unlock: Atslēgt
+  button_download: Lejuplādēt
+  button_list: Saraksts
+  button_view: Skats
+  button_move: Pārvietot
+  button_move_and_follow: Pārvietot un sekot
+  button_back: Atpakaļ
+  button_cancel: Atcelt
+  button_activate: Aktivizēt
+  button_sort: Kārtot
+  button_log_time: Ilgs laiks
+  button_rollback: Atjaunot uz šo versiju
+  button_watch: Vērot
+  button_unwatch: Nevērot
+  button_reply: Atbildēt
+  button_archive: Arhivēt
+  button_unarchive: Atarhivēt
+  button_reset: Atiestatīt
+  button_rename: Pārsaukt
+  button_change_password: Mainīt paroli
+  button_copy: Kopēt
+  button_copy_and_follow: Kopēt un sekot
+  button_annotate: Pierakstīt paskaidrojumu
+  button_update: Atjaunot
+  button_configure: Konfigurēt
+  button_quote: Citāts
+  button_duplicate: Dublēt
+  button_show: Rādīt
+  
+  status_active: aktīvs
+  status_registered: reģistrēts
+  status_locked: slēgts
+  
+  version_status_open: atvērta
+  version_status_locked: slēgta
+  version_status_closed: aizvērta
+
+  field_active: Aktīvs
+  
+  text_select_mail_notifications: "Izvēlieties darbības, par kurām vēlaties saņemt ziņojumus e-pastā"
+  text_regexp_info: "piem. ^[A-Z0-9]+$"
+  text_min_max_length_info: "0 nozīmē, ka nav ierobežojumu"
+  text_project_destroy_confirmation: "Vai tiešām vēlaties dzēst šo projektu un ar to saistītos datus?"
+  text_subprojects_destroy_warning: "Tā apakšprojekts(i): %{value} arī tiks dzēsts(i)."
+  text_workflow_edit: Lai labotu darba plūsmu, izvēlieties lomu un trakeri
+  text_are_you_sure: "Vai esat pārliecināts?"
+  text_journal_changed: "%{label} mainīts no %{old} uz %{new}"
+  text_journal_set_to: "%{label} iestatīts uz %{value}"
+  text_journal_deleted: "%{label} dzēsts (%{old})"
+  text_journal_added: "%{label} %{value} pievienots"
+  text_tip_issue_begin_day: uzdevums sākas šodien
+  text_tip_issue_end_day: uzdevums beidzas šodien
+  text_tip_issue_begin_end_day: uzdevums sākas un beidzas šodien
+  text_project_identifier_info: 'Tikai mazie burti (a-z), cipari un domuzīmes ir atļauti.<br />Kad saglabāts, identifikators nevar tikt mainīts.'
+  text_caracters_maximum: "%{count} simboli maksimāli."
+  text_caracters_minimum: "Jābūt vismaz %{count} simbolu garumā."
+  text_length_between: "Garums starp %{min} un %{max} simboliem."
+  text_tracker_no_workflow: Šim trakerim nav definēta darba plūsma
+  text_unallowed_characters: Neatļauti simboli
+  text_comma_separated: "Atļautas vairākas vērtības (atdalīt ar komatu)."
+  text_line_separated: "Atļautas vairākas vērtības (rakstīt katru savā rindā)."
+  text_issues_ref_in_commit_messages: "Izmaiņu salīdzināšana izejot no ziņojumiem"
+  text_issue_added: "Uzdevumu %{id} pievienojis %{author}."
+  text_issue_updated: "Uzdevumu %{id} atjaunojis %{author}."
+  text_wiki_destroy_confirmation: "Vai esat drošs, ka vēlaties dzēst šo wiki un visu tās saturu?"
+  text_issue_category_destroy_question: "Daži uzdevumi (%{count}) ir nozīmēti šai kategorijai. Ko Jūs vēlaties darīt?"
+  text_issue_category_destroy_assignments: Dzēst kategoriju nozīmējumus
+  text_issue_category_reassign_to: Nozīmēt uzdevumus šai kategorijai
+  text_user_mail_option: "No neizvēlētajiem projektiem Jūs saņemsiet ziņojumus e-pastā tikai par notikumiem, kuriem Jūs sekojat vai kuros esat iesaistīts." 
+  text_no_configuration_data: "Lomas, trakeri, uzdevumu statusi un darba plūsmas vēl nav konfigurētas.\nĻoti ieteicams ielādēt noklusēto konfigurāciju. Pēc ielādēšanas to būs iespējams modificēt."
+  text_load_default_configuration: Ielādēt noklusēto konfigurāciju
+  text_status_changed_by_changeset: "Apstiprināts izmaiņu kopumā %{value}."
+  text_issues_destroy_confirmation: 'Vai tiešām vēlaties dzēst izvēlēto uzdevumu(us)?'
+  text_select_project_modules: 'Izvēlieties moduļus šim projektam:'
+  text_default_administrator_account_changed: Noklusētais administratora konts mainīts
+  text_file_repository_writable: Pielikumu direktorijā atļauts rakstīt
+  text_plugin_assets_writable: Spraudņu kataloga direktorijā atļauts rakstīt
+  text_rmagick_available: "RMagick pieejams (neobligāts)"
+  text_destroy_time_entries_question: "%{hours} stundas tika ziņotas par uzdevumu, ko vēlaties dzēst. Ko darīt?"
+  text_destroy_time_entries: Dzēst ziņotās stundas
+  text_assign_time_entries_to_project: Piešķirt ziņotās stundas projektam
+  text_reassign_time_entries: 'Piešķirt ziņotās stundas uzdevumam:'
+  text_user_wrote: "%{value} rakstīja:"
+  text_enumeration_destroy_question: "%{count} objekti ir piešķirti šai vērtībai."
+  text_enumeration_category_reassign_to: 'Piešķirt tos šai vērtībai:'
+  text_email_delivery_not_configured: "E-pastu nosūtīšana nav konfigurēta, un ziņojumi ir izslēgti.\nKonfigurējiet savu SMTP serveri datnē config/configuration.yml un pārstartējiet lietotni."
+  text_repository_usernames_mapping: "Izvēlieties vai atjaunojiet Redmine lietotāju, saistītu ar katru lietotājvārdu, kas atrodams repozitorija žurnālā.\nLietotāji ar to pašu Redmine un repozitorija lietotājvārdu būs saistīti automātiski."
+  text_diff_truncated: '... Šis diff tika nošķelts, jo tas pārsniedz maksimālo izmēru, ko var parādīt.'
+  text_custom_field_possible_values_info: 'Katra vērtības savā rindā'
+  text_wiki_page_destroy_question: "Šij lapai ir %{descendants} apakšlapa(as) un pēcnācēji. Ko darīt?"
+  text_wiki_page_nullify_children: "Paturēt apakšlapas kā pamatlapas"
+  text_wiki_page_destroy_children: "Dzēst apakšlapas un visus pēcnācējus"
+  text_wiki_page_reassign_children: "Piešķirt apakšlapas šai lapai"
+  text_own_membership_delete_confirmation: "Jūs tūlīt dzēsīsiet dažas vai visas atļaujas, un Jums pēc tam var nebūt atļauja labot šo projektu.\nVai turpināt?"
+  
+  default_role_manager: Menedžeris
+  default_role_developer: Izstrādātājs
+  default_role_reporter: Ziņotājs
+  default_tracker_bug: Kļūda
+  default_tracker_feature: Iezīme
+  default_tracker_support: Atbalsts
+  default_issue_status_new: Jauns
+  default_issue_status_in_progress: Attīstībā
+  default_issue_status_resolved: Atrisināts
+  default_issue_status_feedback: Atsauksmes
+  default_issue_status_closed: Slēgts
+  default_issue_status_rejected: Noraidīts
+  default_doc_category_user: Lietotāja dokumentācija
+  default_doc_category_tech: Tehniskā dokumentācija
+  default_priority_low: Zema
+  default_priority_normal: Normāla
+  default_priority_high: Augsta
+  default_priority_urgent: Steidzama
+  default_priority_immediate: Tūlītēja
+  default_activity_design: Dizains
+  default_activity_development: Izstrādāšana
+  
+  enumeration_issue_priorities: Uzdevumu prioritātes
+  enumeration_doc_categories: Dokumentu kategorijas
+  enumeration_activities: Aktivitātes (laika uzskaite)
+  enumeration_system_activity: Sistēmas aktivitātes
+
+  error_can_not_delete_custom_field: Unable to delete custom field
+  permission_manage_subtasks: Manage subtasks
+  label_profile: Profile
+  error_unable_to_connect: Unable to connect (%{value})
+  error_can_not_remove_role: This role is in use and can not be deleted.
+  field_parent_issue: Parent task
+  error_unable_delete_issue_status: Unable to delete issue status
+  label_subtask_plural: Subtasks
+  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
+  label_project_copy_notifications: Send email notifications during the project copy
+  field_principal: Principal
+  label_my_page_block: My page block
+  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
+  text_zoom_out: Zoom out
+  text_zoom_in: Zoom in
+  notice_unable_delete_time_entry: Unable to delete time log entry.
+  label_overall_spent_time: Overall spent time
+  field_time_entries: Log time
+  project_module_gantt: Gantt
+  project_module_calendar: Calendar
+  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
+  text_are_you_sure_with_children: Delete issue and all child issues?
+  field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
+  setting_commit_logtime_activity_id: Activity for logged time
+  text_time_logged_by_changeset: Applied in changeset %{value}.
+  setting_commit_logtime_enabled: Enable time logging
+  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
+  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kodēt ziņojumus
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/mk.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/mk.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,942 +1,978 @@
-mk:
-  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
-  direction: ltr
-  date:
-    formats:
-      # Use the strftime parameters for formats.
-      # When no format has been given, it uses default.
-      # You can provide other formats here if you like!
-      default: "%d/%m/%Y"
-      short: "%d %b"
-      long: "%d %B, %Y"
-
-    day_names: [недела, понеделник, вторник, среда, четврток, петок, сабота]
-    abbr_day_names: [нед, пон, вто, сре, чет, пет, саб]
-
-    # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, јануари, февруари, март, април, мај, јуни, јули, август, септември, октомври, ноември, декември]
-    abbr_month_names: [~, јан, фев, мар, апр, мај, јун, јул, авг, сеп, окт, ное, дек]
-    # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
-
-  time:
-    formats:
-      default: "%d/%m/%Y %H:%M"
-      time: "%H:%M"
-      short: "%d %b %H:%M"
-      long: "%d %B, %Y %H:%M"
-    am: "предпладне"
-    pm: "попладне"
-
-  datetime:
-    distance_in_words:
-      half_a_minute: "пола минута"
-      less_than_x_seconds:
-        one:   "помалку од 1 секунда"
-        other: "помалку од %{count} секунди"
-      x_seconds:
-        one:   "1 секунда"
-        other: "%{count} секунди"
-      less_than_x_minutes:
-        one:   "помалку од 1 минута"
-        other: "помалку од %{count} минути"
-      x_minutes:
-        one:   "1 минута"
-        other: "%{count} минути"
-      about_x_hours:
-        one:   "околу 1 час"
-        other: "околу %{count} часа"
-      x_days:
-        one:   "1 ден"
-        other: "%{count} дена"
-      about_x_months:
-        one:   "околу 1 месец"
-        other: "околу %{count} месеци"
-      x_months:
-        one:   "1 месец"
-        other: "%{count} месеци"
-      about_x_years:
-        one:   "околу 1 година"
-        other: "околу %{count} години"
-      over_x_years:
-        one:   "преку 1 година"
-        other: "преку %{count} години"
-      almost_x_years:
-        one:   "скоро 1 година"
-        other: "скоро %{count} години"
-
-  number:
-    # Default format for numbers
-    format:
-      separator: "."
-      delimiter: ""
-      precision: 3
-    human:
-      format:
-        delimiter: ""
-        precision: 1
-      storage_units:
-        format: "%n %u"
-        units:
-          byte:
-            one: "Byte"
-            other: "Bytes"
-          kb: "KB"
-          mb: "MB"
-          gb: "GB"
-          tb: "TB"
-
-
-# Used in array.to_sentence.
-  support:
-    array:
-      sentence_connector: "и"
-      skip_last_comma: false
-
-  activerecord:
-    errors:
-      template:
-        header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
-      messages:
-        inclusion: "не е вклучено во листата"
-        exclusion: "е резервирано"
-        invalid: "е невалидно"
-        confirmation: "не се совпаѓа со потврдата"
-        accepted: "мора да е прифатено"
-        empty: "неможе да е празно"
-        blank: "неможе да е празно"
-        too_long: "е предолго (макс. %{count} знаци)"
-        too_short: "е прекратко (мин. %{count} знаци)"
-        wrong_length: "е погрешна должина (треба да е  %{count} знаци)"
-        taken: "е веќе зафатено"
-        not_a_number: "не е број"
-        not_a_date: "не е валидна дата"
-        greater_than: "мора да е поголемо од %{count}"
-        greater_than_or_equal_to: "мора да е поголемо или еднакво на %{count}"
-        equal_to: "мора да е еднакво на %{count}"
-        less_than: "мора да е помало од %{count}"
-        less_than_or_equal_to: "мора да е помало или еднакво на %{count}"
-        odd: "мора да е непарно"
-        even: "мора да е парно"
-        greater_than_start_date: "мора да е поголема од почетната дата"
-        not_same_project: "не припаѓа на истиот проект"
-        circular_dependency: "Оваа врска ќе креира кружна зависност"
-        cant_link_an_issue_with_a_descendant: "Задача неможе да се поврзе со една од нејзините подзадачи"
-
-  actionview_instancetag_blank_option: Изберете
-
-  general_text_No: 'Не'
-  general_text_Yes: 'Да'
-  general_text_no: 'не'
-  general_text_yes: 'да'
-  general_lang_name: 'Macedonian (Македонски)'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
-  general_csv_encoding: UTF-8
-  general_pdf_encoding: UTF-8
-  general_first_day_of_week: '1'
-
-  notice_account_updated: Профилот е успешно ажуриран.
-  notice_account_invalid_creditentials: Неточен корисник или лозинка
-  notice_account_password_updated: Лозинката е успешно ажурирана.
-  notice_account_wrong_password: Погрешна лозинка
-  notice_account_register_done: Профилот е успешно креиран. За активација, клкнете на врската што ви е пратена по е-пошта.
-  notice_account_unknown_email: Непознат корисник.
-  notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
-  notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
-  notice_account_activated: Your account has been activated. You can now log in.
-  notice_successful_create: Успешно креирање.
-  notice_successful_update: Успешно ажурирање.
-  notice_successful_delete: Успешно бришење.
-  notice_successful_connection: Успешна конекција.
-  notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
-  notice_locking_conflict: Data has been updated by another user.
-  notice_not_authorized: You are not authorized to access this page.
-  notice_email_sent: "Е-порака е пратена на %{value}"
-  notice_email_error: "Се случи грешка при праќање на е-пораката (%{value})"
-  notice_feeds_access_key_reseted: Вашиот RSS клуч за пристап е reset.
-  notice_api_access_key_reseted: Вашиот API клуч за пристап е reset.
-  notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
-  notice_account_pending: "Your account was created and is now pending administrator approval."
-  notice_default_data_loaded: Default configuration successfully loaded.
-  notice_unable_delete_version: Unable to delete version.
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-
-  error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
-  error_scm_not_found: "The entry or revision was not found in the repository."
-  error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
-  error_scm_annotate: "The entry does not exist or can not be annotated."
-  error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
-  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
-  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_can_not_delete_tracker: "This tracker contains issues and can't be deleted."
-  error_can_not_remove_role: "This role is in use and can not be deleted."
-  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
-  error_can_not_archive_project: This project can not be archived
-  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
-  error_workflow_copy_source: 'Please select a source tracker or role'
-  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
-  error_unable_delete_issue_status: 'Unable to delete issue status'
-  error_unable_to_connect: "Unable to connect (%{value})"
-  warning_attachments_not_saved: "%{count} file(s) could not be saved."
-
-  mail_subject_lost_password: "Вашата %{value} лозинка"
-  mail_body_lost_password: 'To change your password, click on the following link:'
-  mail_subject_register: "Your %{value} account activation"
-  mail_body_register: 'To activate your account, click on the following link:'
-  mail_body_account_information_external: "You can use your %{value} account to log in."
-  mail_body_account_information: Your account information
-  mail_subject_account_activation_request: "%{value} account activation request"
-  mail_body_account_activation_request: "Нов корисник (%{value}) е регистриран. The account is pending your approval:"
-  mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
-  mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
-  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
-  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
-  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
-
-  gui_validation_error: 1 грешка
-  gui_validation_error_plural: "%{count} грешки"
-
-  field_name: Име
-  field_description: Опис
-  field_summary: Краток опис
-  field_is_required: Задолжително
-  field_firstname: Име
-  field_lastname: Презиме
-  field_mail: Е-пошта
-  field_filename: Датотека
-  field_filesize: Големина
-  field_downloads: Превземања
-  field_author: Автор
-  field_created_on: Креиран
-  field_updated_on: Ажурирано
-  field_field_format: Формат
-  field_is_for_all: За сите проекти
-  field_possible_values: Можни вредности
-  field_regexp: Regular expression
-  field_min_length: Минимална должина
-  field_max_length: Максимална должина
-  field_value: Вредност
-  field_category: Категорија
-  field_title: Наслов
-  field_project: Проект
-  field_issue: Задача
-  field_status: Статус
-  field_notes: Белешки
-  field_is_closed: Задачата е затворена
-  field_is_default: Default value
-  field_tracker: Tracker
-  field_subject: Наслов
-  field_due_date: Краен рок
-  field_assigned_to: Доделена на
-  field_priority: Приоритет
-  field_fixed_version: Target version
-  field_user: Корисник
-  field_principal: Principal
-  field_role: Улога
-  field_homepage: Веб страна
-  field_is_public: Јавен
-  field_parent: Подпроект на
-  field_is_in_roadmap: Issues displayed in roadmap
-  field_login: Корисник
-  field_mail_notification: Известувања по e-пошта
-  field_admin: Администратор
-  field_last_login_on: Последна најава
-  field_language: Јазик
-  field_effective_date: Дата
-  field_password: Лозинка
-  field_new_password: Нова лозинка
-  field_password_confirmation: Потврда
-  field_version: Верзија
-  field_type: Тип
-  field_host: Хост
-  field_port: Порт
-  field_account: Account
-  field_base_dn: Base DN
-  field_attr_login: Login attribute
-  field_attr_firstname: Firstname attribute
-  field_attr_lastname: Lastname attribute
-  field_attr_mail: Email attribute
-  field_onthefly: Моментално (On-the-fly) креирање на корисници
-  field_start_date: Почеток
-  field_done_ratio: % Завршено
-  field_auth_source: Режим на автентикација
-  field_hide_mail: Криј ја мојата адреса на е-пошта
-  field_comments: Коментар
-  field_url: URL
-  field_start_page: Почетна страна
-  field_subproject: Подпроект
-  field_hours: Часови
-  field_activity: Активност
-  field_spent_on: Дата
-  field_identifier: Идентификатор
-  field_is_filter: Користи како филтер
-  field_issue_to: Поврзана задача
-  field_delay: Доцнење
-  field_assignable: На оваа улога може да се доделуваат задачи
-  field_redirect_existing_links: Пренасочи ги постоечките врски
-  field_estimated_hours: Проценето време
-  field_column_names: Колони
-  field_time_entries: Бележи време
-  field_time_zone: Временска зона
-  field_searchable: Може да се пребарува
-  field_default_value: Default value
-  field_comments_sorting: Прикажувај коментари
-  field_parent_title: Parent page
-  field_editable: Може да се уредува
-  field_watcher: Watcher
-  field_identity_url: OpenID URL
-  field_content: Содржина
-  field_group_by: Групирај ги резултатите според
-  field_sharing: Споделување
-  field_parent_issue: Parent task
-
-  setting_app_title: Наслов на апликацијата
-  setting_app_subtitle: Поднаслов на апликацијата
-  setting_welcome_text: Текст за добредојде
-  setting_default_language: Default јазик
-  setting_login_required: Задолжителна автентикација
-  setting_self_registration: Само-регистрација
-  setting_attachment_max_size: Макс. големина на прилог
-  setting_issues_export_limit: Issues export limit
-  setting_mail_from: Emission email address
-  setting_bcc_recipients: Blind carbon copy recipients (bcc)
-  setting_plain_text_mail: Текстуални е-пораки (без HTML)
-  setting_host_name: Име на хост и патека
-  setting_text_formatting: Форматирање на текст
-  setting_wiki_compression: Компресија на историјата на вики
-  setting_feeds_limit: Feed content limit
-  setting_default_projects_public: Новите проекти се иницијално јавни
-  setting_autofetch_changesets: Autofetch commits
-  setting_sys_api_enabled: Enable WS for repository management
-  setting_commit_ref_keywords: Referencing keywords
-  setting_commit_fix_keywords: Fixing keywords
-  setting_autologin: Автоматска најава
-  setting_date_format: Формат на дата
-  setting_time_format: Формат на време
-  setting_cross_project_issue_relations: Дозволи релации на задачи меѓу проекти
-  setting_issue_list_default_columns: Default columns displayed on the issue list
-  setting_repositories_encodings: Repositories encodings
-  setting_commit_logs_encoding: Commit messages encoding
-  setting_emails_footer: Emails footer
-  setting_protocol: Протокол
-  setting_per_page_options: Objects per page options
-  setting_user_format: Приказ на корисниците
-  setting_activity_days_default: Денови прикажана во активноста на проектот
-  setting_display_subprojects_issues: Прикажи ги задачите на подпроектите во главните проекти
-  setting_enabled_scm: Овозможи SCM
-  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
-  setting_mail_handler_api_enabled: Enable WS for incoming emails
-  setting_mail_handler_api_key: API клуч
-  setting_sequential_project_identifiers: Генерирај последователни идентификатори на проекти
-  setting_gravatar_enabled: Користи Gravatar кориснички икони
-  setting_gravatar_default: Default Gravatar image
-  setting_diff_max_lines_displayed: Max number of diff lines displayed
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_openid: Дозволи OpenID најава и регистрација
-  setting_password_min_length: Мин. должина на лозинка
-  setting_new_project_user_role_id: Улога доделена на неадминистраторски корисник кој креира проект
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_field: Use the issue field
-  setting_issue_done_ratio_issue_status: Use the issue status
-  setting_start_of_week: Start calendars on
-  setting_rest_api_enabled: Enable REST web service
-  setting_cache_formatted_text: Cache formatted text
-
-  permission_add_project: Креирај проекти
-  permission_add_subprojects: Креирај подпроекти
-  permission_edit_project: Уреди проект
-  permission_select_project_modules: Изберете модули за проект
-  permission_manage_members: Manage members
-  permission_manage_project_activities: Manage project activities
-  permission_manage_versions: Manage versions
-  permission_manage_categories: Manage issue categories
-  permission_view_issues: Прегледај задачи
-  permission_add_issues: Додавај задачи
-  permission_edit_issues: Уредувај задачи
-  permission_manage_issue_relations: Manage issue relations
-  permission_add_issue_notes: Додавај белешки
-  permission_edit_issue_notes: Уредувај белешки
-  permission_edit_own_issue_notes: Уредувај сопствени белешки
-  permission_move_issues: Преместувај задачи
-  permission_delete_issues: Бриши задачи
-  permission_manage_public_queries: Manage public queries
-  permission_save_queries: Save queries
-  permission_view_gantt: View gantt chart
-  permission_view_calendar: View calendar
-  permission_view_issue_watchers: View watchers list
-  permission_add_issue_watchers: Add watchers
-  permission_delete_issue_watchers: Delete watchers
-  permission_log_time: Бележи потрошено време
-  permission_view_time_entries: Прегледај потрошено време
-  permission_edit_time_entries: Уредувај белешки за потрошено време
-  permission_edit_own_time_entries: Уредувај сопствени белешки за потрошено време
-  permission_manage_news: Manage news
-  permission_comment_news: Коментирај на вести
-  permission_manage_documents: Manage documents
-  permission_view_documents: Прегледувај документи
-  permission_manage_files: Manage files
-  permission_view_files: Прегледувај датотеки
-  permission_manage_wiki: Manage wiki
-  permission_rename_wiki_pages: Преименувај вики страници
-  permission_delete_wiki_pages: Бриши вики страници
-  permission_view_wiki_pages: Прегледувај вики
-  permission_view_wiki_edits: Прегледувај вики историја
-  permission_edit_wiki_pages: Уредувај вики страници
-  permission_delete_wiki_pages_attachments: Бриши прилози
-  permission_protect_wiki_pages: Заштитувај вики страници
-  permission_manage_repository: Manage repository
-  permission_browse_repository: Browse repository
-  permission_view_changesets: View changesets
-  permission_commit_access: Commit access
-  permission_manage_boards: Manage boards
-  permission_view_messages: View messages
-  permission_add_messages: Post messages
-  permission_edit_messages: Уредувај пораки
-  permission_edit_own_messages: Уредувај сопствени пораки
-  permission_delete_messages: Бриши пораки
-  permission_delete_own_messages: Бриши сопствени пораки
-  permission_export_wiki_pages: Export wiki pages
-  permission_manage_subtasks: Manage subtasks
-
-  project_module_issue_tracking: Следење на задачи
-  project_module_time_tracking: Следење на време
-  project_module_news: Вести
-  project_module_documents: Документи
-  project_module_files: Датотеки
-  project_module_wiki: Вики
-  project_module_repository: Repository
-  project_module_boards: Форуми
-  project_module_calendar: Календар
-  project_module_gantt: Gantt
-
-  label_user: Корисник
-  label_user_plural: Корисници
-  label_user_new: Нов корисник
-  label_user_anonymous: Анонимен
-  label_project: Проект
-  label_project_new: Нов проект
-  label_project_plural: Проекти
-  label_x_projects:
-    zero:  нема проекти
-    one:   1 проект
-    other: "%{count} проекти"
-  label_project_all: Сите проекти
-  label_project_latest: Последните проекти
-  label_issue: Задача
-  label_issue_new: Нова задача
-  label_issue_plural: Задачи
-  label_issue_view_all: Прегледај ги сите задачи
-  label_issues_by: "Задачи по %{value}"
-  label_issue_added: Задачата е додадена
-  label_issue_updated: Задачата е ажурирана
-  label_document: Документ
-  label_document_new: Нов документ
-  label_document_plural: Документи
-  label_document_added: Документот е додаден
-  label_role: Улога
-  label_role_plural: Улоги
-  label_role_new: Нова улога
-  label_role_and_permissions: Улоги и овластувања
-  label_member: Член
-  label_member_new: Нов член
-  label_member_plural: Членови
-  label_tracker: Tracker
-  label_tracker_plural: Trackers
-  label_tracker_new: New tracker
-  label_workflow: Workflow
-  label_issue_status: Статус на задача
-  label_issue_status_plural: Статуси на задачи
-  label_issue_status_new: Нов статус
-  label_issue_category: Категорија на задача
-  label_issue_category_plural: Категории на задачи
-  label_issue_category_new: Нова категорија
-  label_custom_field: Прилагодено поле
-  label_custom_field_plural: Прилагодени полиња
-  label_custom_field_new: Ново прилагодено поле
-  label_enumerations: Enumerations
-  label_enumeration_new: Нова вредност
-  label_information: Информација
-  label_information_plural: Информации
-  label_please_login: Најави се
-  label_register: Регистрирај се
-  label_login_with_open_id_option: или најави се со OpenID
-  label_password_lost: Изгубена лозинка
-  label_home: Почетна
-  label_my_page: Мојата страна
-  label_my_account: Мојот профил
-  label_my_projects: Мои проекти
-  label_my_page_block: Блок елемент
-  label_administration: Администрација
-  label_login: Најави се
-  label_logout: Одјави се
-  label_help: Помош
-  label_reported_issues: Пријавени задачи
-  label_assigned_to_me_issues: Задачи доделени на мене
-  label_last_login: Последна најава
-  label_registered_on: Регистриран на
-  label_activity: Активност
-  label_overall_activity: Севкупна активност
-  label_user_activity: "Активност на %{value}"
-  label_new: Нова
-  label_logged_as: Најавени сте како
-  label_environment: Опкружување
-  label_authentication: Автентикација
-  label_auth_source: Режим на автентикација
-  label_auth_source_new: Нов режим на автентикација
-  label_auth_source_plural: Режими на автентикација
-  label_subproject_plural: Подпроекти
-  label_subproject_new: Нов подпроект
-  label_and_its_subprojects: "%{value} и неговите подпроекти"
-  label_min_max_length: Мин. - Макс. должина
-  label_list: Листа
-  label_date: Дата
-  label_integer: Integer
-  label_float: Float
-  label_boolean: Boolean
-  label_string: Текст
-  label_text: Долг текст
-  label_attribute: Атрибут
-  label_attribute_plural: Атрибути
-  label_download: "%{count} превземање"
-  label_download_plural: "%{count} превземања"
-  label_no_data: Нема податоци за прикажување
-  label_change_status: Промени статус
-  label_history: Историја
-  label_attachment: Датотека
-  label_attachment_new: Нова датотека
-  label_attachment_delete: Избриши датотека
-  label_attachment_plural: Датотеки
-  label_file_added: Датотеката е додадена
-  label_report: Извештај
-  label_report_plural: Извештаи
-  label_news: Новост
-  label_news_new: Додади новост
-  label_news_plural: Новости
-  label_news_latest: Последни новости
-  label_news_view_all: Прегледај ги сите новости
-  label_news_added: Новостта е додадена
-  label_settings: Settings
-  label_overview: Преглед
-  label_version: Верзија
-  label_version_new: Нова верзија
-  label_version_plural: Верзии
-  label_close_versions: Затвори ги завршените врзии
-  label_confirmation: Потврда
-  label_export_to: 'Достапно и во:'
-  label_read: Прочитај...
-  label_public_projects: Јавни проекти
-  label_open_issues: отворена
-  label_open_issues_plural: отворени
-  label_closed_issues: затворена
-  label_closed_issues_plural: затворени
-  label_x_open_issues_abbr_on_total:
-    zero:  0 отворени / %{total}
-    one:   1 отворена / %{total}
-    other: "%{count} отворени / %{total}"
-  label_x_open_issues_abbr:
-    zero:  0 отворени
-    one:   1 отворена
-    other: "%{count} отворени"
-  label_x_closed_issues_abbr:
-    zero:  0 затворени
-    one:   1 затворена
-    other: "%{count} затворени"
-  label_total: Вкупно
-  label_permissions: Овластувања
-  label_current_status: Моментален статус
-  label_new_statuses_allowed: Дозволени нови статуси
-  label_all: сите
-  label_none: ниеден
-  label_nobody: никој
-  label_next: Следно
-  label_previous: Претходно
-  label_used_by: Користено од
-  label_details: Детали
-  label_add_note: Додади белешка
-  label_per_page: По страна
-  label_calendar: Календар
-  label_months_from: месеци од
-  label_gantt: Gantt
-  label_internal: Internal
-  label_last_changes: "последни %{count} промени"
-  label_change_view_all: Прегледај ги сите промени
-  label_personalize_page: Прилагоди ја странава
-  label_comment: Коментар
-  label_comment_plural: Коментари
-  label_x_comments:
-    zero: нема коментари
-    one: 1 коментар
-    other: "%{count} коментари"
-  label_comment_add: Додади коментар
-  label_comment_added: Коментарот е додаден
-  label_comment_delete: Избриши коментари
-  label_query: Custom query
-  label_query_plural: Custom queries
-  label_query_new: New query
-  label_filter_add: Додади филтер
-  label_filter_plural: Филтри
-  label_equals: е
-  label_not_equals: не е
-  label_in_less_than: за помалку од
-  label_in_more_than: за повеќе од
-  label_greater_or_equal: '>='
-  label_less_or_equal: '<='
-  label_in: во
-  label_today: денес
-  label_all_time: цело време
-  label_yesterday: вчера
-  label_this_week: оваа недела
-  label_last_week: минатата недела
-  label_last_n_days: "последните %{count} дена"
-  label_this_month: овој месец
-  label_last_month: минатиот месец
-  label_this_year: оваа година
-  label_date_range: Date range
-  label_less_than_ago: пред помалку од денови
-  label_more_than_ago: пред повеќе од денови
-  label_ago: пред денови
-  label_contains: содржи
-  label_not_contains: не содржи
-  label_day_plural: денови
-  label_repository: Складиште
-  label_repository_plural: Складишта
-  label_browse: Прелистувај
-  label_modification: "%{count} промени"
-  label_modification_plural: "%{count} промени"
-  label_branch: Гранка
-  label_tag: Tag
-  label_revision: Ревизија
-  label_revision_plural: Ревизии
-  label_revision_id: "Ревизија %{value}"
-  label_associated_revisions: Associated revisions
-  label_added: added
-  label_modified: modified
-  label_copied: copied
-  label_renamed: renamed
-  label_deleted: deleted
-  label_latest_revision: Последна ревизија
-  label_latest_revision_plural: Последни ревизии
-  label_view_revisions: Прегледај ги ревизиите
-  label_view_all_revisions: Прегледај ги сите ревизии
-  label_max_size: Макс. големина
-  label_sort_highest: Премести најгоре
-  label_sort_higher: Премести нагоре
-  label_sort_lower: Премести надоле
-  label_sort_lowest: Премести најдоле
-  label_roadmap: Roadmap
-  label_roadmap_due_in: "Due in %{value}"
-  label_roadmap_overdue: "Касни %{value}"
-  label_roadmap_no_issues: Нема задачи за оваа верзија
-  label_search: Барај
-  label_result_plural: Резултати
-  label_all_words: Сите зборови
-  label_wiki: Вики
-  label_wiki_edit: Вики уредување
-  label_wiki_edit_plural: Вики уредувања
-  label_wiki_page: Вики страница
-  label_wiki_page_plural: Вики страници
-  label_index_by_title: Индекс по наслов
-  label_index_by_date: Индекс по дата
-  label_current_version: Current version
-  label_preview: Preview
-  label_feed_plural: Feeds
-  label_changes_details: Детали за сите промени
-  label_issue_tracking: Следење на задачи
-  label_spent_time: Потрошено време
-  label_overall_spent_time: Вкупно потрошено време
-  label_f_hour: "%{value} час"
-  label_f_hour_plural: "%{value} часа"
-  label_time_tracking: Следење на време
-  label_change_plural: Промени
-  label_statistics: Статистики
-  label_commits_per_month: Commits per month
-  label_commits_per_author: Commits per author
-  label_view_diff: View differences
-  label_diff_inline: inline
-  label_diff_side_by_side: side by side
-  label_options: Опции
-  label_copy_workflow_from: Copy workflow from
-  label_permissions_report: Permissions report
-  label_watched_issues: Watched issues
-  label_related_issues: Поврзани задачи
-  label_applied_status: Applied status
-  label_loading: Loading...
-  label_relation_new: Нова релација
-  label_relation_delete: Избриши релација
-  label_relates_to: related to
-  label_duplicates: дупликати
-  label_duplicated_by: duplicated by
-  label_blocks: blocks
-  label_blocked_by: блокирано од
-  label_precedes: претходи
-  label_follows: следи
-  label_end_to_start: крај до почеток
-  label_end_to_end: крај до крај
-  label_start_to_start: почеток до почеток
-  label_start_to_end: почеток до крај
-  label_stay_logged_in: Останете најавени
-  label_disabled: disabled
-  label_show_completed_versions: Show completed versions
-  label_me: јас
-  label_board: Форум
-  label_board_new: Нов форум
-  label_board_plural: Форуми
-  label_board_locked: Заклучен
-  label_board_sticky: Sticky
-  label_topic_plural: Теми
-  label_message_plural: Пораки
-  label_message_last: Последна порака
-  label_message_new: Нова порака
-  label_message_posted: Поракате е додадена
-  label_reply_plural: Одговори
-  label_send_information: Испрати ги информациите за профилот на корисникот
-  label_year: Година
-  label_month: Месец
-  label_week: Недела
-  label_date_from: Од
-  label_date_to: До
-  label_language_based: Според јазикот на корисникот
-  label_sort_by: "Подреди според %{value}"
-  label_send_test_email: Испрати тест е-порака
-  label_feeds_access_key: RSS клуч за пристап
-  label_missing_feeds_access_key: Недостика RSS клуч за пристап
-  label_feeds_access_key_created_on: "RSS клучот за пристап креиран пред %{value}"
-  label_module_plural: Модули
-  label_added_time_by: "Додадено од %{author} пред %{age}"
-  label_updated_time_by: "Ажурирано од %{author} пред %{age}"
-  label_updated_time: "Ажурирано пред %{value}"
-  label_jump_to_a_project: Префрли се на проект...
-  label_file_plural: Датотеки
-  label_changeset_plural: Changesets
-  label_default_columns: Основни колони
-  label_no_change_option: (Без промена)
-  label_bulk_edit_selected_issues: Групно уредување на задачи
-  label_theme: Тема
-  label_default: Default
-  label_search_titles_only: Пребарувај само наслови
-  label_user_mail_option_all: "За било кој настан во сите мои проекти"
-  label_user_mail_option_selected: "За било кој настан само во избраните проекти..."
-  label_user_mail_no_self_notified: "Не ме известувај за промените што јас ги правам"
-  label_registration_activation_by_email: активација на профил преку е-пошта
-  label_registration_manual_activation: мануелна активација на профил
-  label_registration_automatic_activation: автоматска активација на профил
-  label_display_per_page: "По страна: %{value}"
-  label_age: Age
-  label_change_properties: Change properties
-  label_general: Општо
-  label_more: Повеќе
-  label_scm: SCM
-  label_plugins: Додатоци
-  label_ldap_authentication: LDAP автентикација
-  label_downloads_abbr: Превземања
-  label_optional_description: Опис (незадолжително)
-  label_add_another_file: Додади уште една датотека
-  label_preferences: Preferences
-  label_chronological_order: Во хронолошки ред
-  label_reverse_chronological_order: In reverse chronological order
-  label_planning: Планирање
-  label_incoming_emails: Дојдовни е-пораки
-  label_generate_key: Генерирај клуч
-  label_issue_watchers: Watchers
-  label_example: Пример
-  label_display: Прикажи
-  label_sort: Подреди
-  label_ascending: Растечки
-  label_descending: Опаѓачки
-  label_date_from_to: Од %{start} до %{end}
-  label_wiki_content_added: Вики страница додадена
-  label_wiki_content_updated: Вики страница ажурирана
-  label_group: Група
-  label_group_plural: Групи
-  label_group_new: Нова група
-  label_time_entry_plural: Потрошено време
-  label_version_sharing_none: Не споделено
-  label_version_sharing_descendants: Со сите подпроекти
-  label_version_sharing_hierarchy: Со хиерархијата на проектот
-  label_version_sharing_tree: Со дрвото на проектот
-  label_version_sharing_system: Со сите проекти
-  label_update_issue_done_ratios: Update issue done ratios
-  label_copy_source: Извор
-  label_copy_target: Дестинација
-  label_copy_same_as_target: Исто како дестинацијата
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_api_access_key: API клуч за пристап
-  label_missing_api_access_key: Недостига API клуч за пристап
-  label_api_access_key_created_on: "API клучот за пристап е креиран пред %{value}"
-  label_profile: Профил
-  label_subtask_plural: Подзадачи
-  label_project_copy_notifications: Праќај известувања по е-пошта при копирање на проект
-
-  button_login: Најави се
-  button_submit: Испрати
-  button_save: Зачувај
-  button_check_all: Штиклирај ги сите
-  button_uncheck_all: Одштиклирај ги сите
-  button_delete: Избриши
-  button_create: Креирај
-  button_create_and_continue: Креирај и продолжи
-  button_test: Тест
-  button_edit: Уреди
-  button_add: Додади
-  button_change: Промени
-  button_apply: Примени
-  button_clear: Избриши
-  button_lock: Заклучи
-  button_unlock: Отклучи
-  button_download: Превземи
-  button_list: List
-  button_view: Прегледај
-  button_move: Премести
-  button_move_and_follow: Премести и следи
-  button_back: Back
-  button_cancel: Откажи
-  button_activate: Активирај
-  button_sort: Подреди
-  button_log_time: Бележи време
-  button_rollback: Rollback to this version
-  button_watch: Следи
-  button_unwatch: Не следи
-  button_reply: Одговори
-  button_archive: Архивирај
-  button_unarchive: Одархивирај
-  button_reset: Reset
-  button_rename: Преименувај
-  button_change_password: Промени лозинка
-  button_copy: Копирај
-  button_copy_and_follow: Копирај и следи
-  button_annotate: Annotate
-  button_update: Ажурирај
-  button_configure: Конфигурирај
-  button_quote: Цитирај
-  button_duplicate: Копирај
-  button_show: Show
-
-  status_active: активни
-  status_registered: регистрирани
-  status_locked: заклучени
-
-  version_status_open: отворени
-  version_status_locked: заклучени
-  version_status_closed: затворени
-
-  field_active: Active
-
-  text_select_mail_notifications: Изберете за кои настани да се праќаат известувања по е-пошта да се праќаат.
-  text_regexp_info: eg. ^[A-Z0-9]+$
-  text_min_max_length_info: 0 значи без ограничување
-  text_project_destroy_confirmation: Дали сте сигурни дека сакате да го избришете проектот и сите поврзани податоци?
-  text_subprojects_destroy_warning: "Неговите подпроекти: %{value} исто така ќе бидат избришани."
-  text_workflow_edit: Select a role and a tracker to edit the workflow
-  text_are_you_sure: Дали сте сигурни?
-  text_journal_changed: "%{label} променето од %{old} во %{new}"
-  text_journal_set_to: "%{label} set to %{value}"
-  text_journal_deleted: "%{label} избришан (%{old})"
-  text_journal_added: "%{label} %{value} додаден"
-  text_tip_issue_begin_day: задачи што почнуваат овој ден
-  text_tip_issue_end_day: задачи што завршуваат овој ден
-  text_tip_issue_begin_end_day: задачи што почнуваат и завршуваат овој ден
-  text_project_identifier_info: 'Само мали букви (a-z), бројки и dashes се дозволени<br />По зачувувањето, идентификаторот неможе да се смени.'
-  text_caracters_maximum: "%{count} знаци максимум."
-  text_caracters_minimum: "Мора да е најмалку %{count} знаци долго."
-  text_length_between: "Должина помеѓу %{min} и %{max} знаци."
-  text_tracker_no_workflow: No workflow defined for this tracker
-  text_unallowed_characters: Недозволени знаци
-  text_comma_separated: Дозволени се повеќе вредности (разделени со запирка).
-  text_line_separated: Дозволени се повеќе вредности (една линија за секоја вредност).
-  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
-  text_issue_added: "Задачата %{id} е пријавена од %{author}."
-  text_issue_updated: "Задачата %{id} е ажурирана од %{author}."
-  text_wiki_destroy_confirmation: Дали сте сигурни дека сакате да го избришете ова вики и целата негова содржина?
-  text_issue_category_destroy_question: "Некои задачи (%{count}) се доделени на оваа категорија. Што сакате да правите?"
-  text_issue_category_destroy_assignments: Remove category assignments
-  text_issue_category_reassign_to: Додели ги задачите на оваа категорија
-  text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
-  text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
-  text_load_default_configuration: Load the default configuration
-  text_status_changed_by_changeset: "Applied in changeset %{value}."
-  text_issues_destroy_confirmation: 'Дали сте сигурни дека сакате да ги избришете избраните задачи?'
-  text_select_project_modules: 'Изберете модули за овој проект:'
-  text_default_administrator_account_changed: Default administrator account changed
-  text_file_repository_writable: Во папката за прилози може да се запишува
-  text_plugin_assets_writable: Во папката за додатоци може да се запишува
-  text_rmagick_available: RMagick available (незадолжително)
-  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do ?"
-  text_destroy_time_entries: Delete reported hours
-  text_assign_time_entries_to_project: Додели ги пријавените часови на проектот
-  text_reassign_time_entries: 'Reassign reported hours to this issue:'
-  text_user_wrote: "%{value} напиша:"
-  text_enumeration_destroy_question: "%{count} objects are assigned to this value."
-  text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_email_delivery_not_configured: "Доставата по е-пошта не е конфигурирана, и известувањата се оневозможени.\nКонфигурирајте го Вашиот  SMTP сервер во config/configuration.yml и рестартирајте ја апликацијата."
-  text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
-  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-  text_custom_field_possible_values_info: 'One line for each value'
-  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
-  text_wiki_page_nullify_children: "Keep child pages as root pages"
-  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
-  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
-  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
-  text_zoom_in: Zoom in
-  text_zoom_out: Zoom out
-
-  default_role_manager: Менаџер
-  default_role_developer: Developer
-  default_role_reporter: Reporter
-  default_tracker_bug: Грешка
-  default_tracker_feature: Функционалност
-  default_tracker_support: Поддршка
-  default_issue_status_new: Нова
-  default_issue_status_in_progress: Во прогрес
-  default_issue_status_resolved: Разрешена
-  default_issue_status_feedback: Feedback
-  default_issue_status_closed: Затворена
-  default_issue_status_rejected: Одбиена
-  default_doc_category_user: Корисничка документација
-  default_doc_category_tech: Техничка документација
-  default_priority_low: Низок
-  default_priority_normal: Нормален
-  default_priority_high: Висок
-  default_priority_urgent: Итно
-  default_priority_immediate: Веднаш
-  default_activity_design: Дизајн
-  default_activity_development: Развој
-
-  enumeration_issue_priorities: Приоритети на задача
-  enumeration_doc_categories: Категории на документ
-  enumeration_activities: Активности (следење на време)
-  enumeration_system_activity: Системска активност
-
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+mk:
+  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
+  direction: ltr
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%d/%m/%Y"
+      short: "%d %b"
+      long: "%d %B, %Y"
+
+    day_names: [недела, понеделник, вторник, среда, четврток, петок, сабота]
+    abbr_day_names: [нед, пон, вто, сре, чет, пет, саб]
+
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, јануари, февруари, март, април, мај, јуни, јули, август, септември, октомври, ноември, декември]
+    abbr_month_names: [~, јан, фев, мар, апр, мај, јун, јул, авг, сеп, окт, ное, дек]
+    # Used in date_select and datime_select.
+    order:
+      - :day
+      - :month
+      - :year
+
+  time:
+    formats:
+      default: "%d/%m/%Y %H:%M"
+      time: "%H:%M"
+      short: "%d %b %H:%M"
+      long: "%d %B, %Y %H:%M"
+    am: "предпладне"
+    pm: "попладне"
+
+  datetime:
+    distance_in_words:
+      half_a_minute: "пола минута"
+      less_than_x_seconds:
+        one:   "помалку од 1 секунда"
+        other: "помалку од %{count} секунди"
+      x_seconds:
+        one:   "1 секунда"
+        other: "%{count} секунди"
+      less_than_x_minutes:
+        one:   "помалку од 1 минута"
+        other: "помалку од %{count} минути"
+      x_minutes:
+        one:   "1 минута"
+        other: "%{count} минути"
+      about_x_hours:
+        one:   "околу 1 час"
+        other: "околу %{count} часа"
+      x_days:
+        one:   "1 ден"
+        other: "%{count} дена"
+      about_x_months:
+        one:   "околу 1 месец"
+        other: "околу %{count} месеци"
+      x_months:
+        one:   "1 месец"
+        other: "%{count} месеци"
+      about_x_years:
+        one:   "околу 1 година"
+        other: "околу %{count} години"
+      over_x_years:
+        one:   "преку 1 година"
+        other: "преку %{count} години"
+      almost_x_years:
+        one:   "скоро 1 година"
+        other: "скоро %{count} години"
+
+  number:
+    # Default format for numbers
+    format:
+      separator: "."
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Byte"
+            other: "Bytes"
+          kb: "KB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "и"
+      skip_last_comma: false
+
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "1 error prohibited this %{model} from being saved"
+          other:  "%{count} errors prohibited this %{model} from being saved"
+      messages:
+        inclusion: "не е вклучено во листата"
+        exclusion: "е резервирано"
+        invalid: "е невалидно"
+        confirmation: "не се совпаѓа со потврдата"
+        accepted: "мора да е прифатено"
+        empty: "неможе да е празно"
+        blank: "неможе да е празно"
+        too_long: "е предолго (макс. %{count} знаци)"
+        too_short: "е прекратко (мин. %{count} знаци)"
+        wrong_length: "е погрешна должина (треба да е  %{count} знаци)"
+        taken: "е веќе зафатено"
+        not_a_number: "не е број"
+        not_a_date: "не е валидна дата"
+        greater_than: "мора да е поголемо од %{count}"
+        greater_than_or_equal_to: "мора да е поголемо или еднакво на %{count}"
+        equal_to: "мора да е еднакво на %{count}"
+        less_than: "мора да е помало од %{count}"
+        less_than_or_equal_to: "мора да е помало или еднакво на %{count}"
+        odd: "мора да е непарно"
+        even: "мора да е парно"
+        greater_than_start_date: "мора да е поголема од почетната дата"
+        not_same_project: "не припаѓа на истиот проект"
+        circular_dependency: "Оваа врска ќе креира кружна зависност"
+        cant_link_an_issue_with_a_descendant: "Задача неможе да се поврзе со една од нејзините подзадачи"
+
+  actionview_instancetag_blank_option: Изберете
+
+  general_text_No: 'Не'
+  general_text_Yes: 'Да'
+  general_text_no: 'не'
+  general_text_yes: 'да'
+  general_lang_name: 'Macedonian (Македонски)'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '1'
+
+  notice_account_updated: Профилот е успешно ажуриран.
+  notice_account_invalid_creditentials: Неточен корисник или лозинка
+  notice_account_password_updated: Лозинката е успешно ажурирана.
+  notice_account_wrong_password: Погрешна лозинка
+  notice_account_register_done: Профилот е успешно креиран. За активација, клкнете на врската што ви е пратена по е-пошта.
+  notice_account_unknown_email: Непознат корисник.
+  notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
+  notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
+  notice_account_activated: Your account has been activated. You can now log in.
+  notice_successful_create: Успешно креирање.
+  notice_successful_update: Успешно ажурирање.
+  notice_successful_delete: Успешно бришење.
+  notice_successful_connection: Успешна конекција.
+  notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
+  notice_locking_conflict: Data has been updated by another user.
+  notice_not_authorized: You are not authorized to access this page.
+  notice_email_sent: "Е-порака е пратена на %{value}"
+  notice_email_error: "Се случи грешка при праќање на е-пораката (%{value})"
+  notice_feeds_access_key_reseted: Вашиот RSS клуч за пристап е reset.
+  notice_api_access_key_reseted: Вашиот API клуч за пристап е reset.
+  notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
+  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
+  notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
+  notice_account_pending: "Your account was created and is now pending administrator approval."
+  notice_default_data_loaded: Default configuration successfully loaded.
+  notice_unable_delete_version: Unable to delete version.
+  notice_unable_delete_time_entry: Unable to delete time log entry.
+  notice_issue_done_ratios_updated: Issue done ratios updated.
+
+  error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
+  error_scm_not_found: "The entry or revision was not found in the repository."
+  error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
+  error_scm_annotate: "The entry does not exist or can not be annotated."
+  error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
+  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
+  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
+  error_can_not_delete_custom_field: Unable to delete custom field
+  error_can_not_delete_tracker: "This tracker contains issues and can't be deleted."
+  error_can_not_remove_role: "This role is in use and can not be deleted."
+  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
+  error_can_not_archive_project: This project can not be archived
+  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
+  error_workflow_copy_source: 'Please select a source tracker or role'
+  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
+  error_unable_delete_issue_status: 'Unable to delete issue status'
+  error_unable_to_connect: "Unable to connect (%{value})"
+  warning_attachments_not_saved: "%{count} file(s) could not be saved."
+
+  mail_subject_lost_password: "Вашата %{value} лозинка"
+  mail_body_lost_password: 'To change your password, click on the following link:'
+  mail_subject_register: "Your %{value} account activation"
+  mail_body_register: 'To activate your account, click on the following link:'
+  mail_body_account_information_external: "You can use your %{value} account to log in."
+  mail_body_account_information: Your account information
+  mail_subject_account_activation_request: "%{value} account activation request"
+  mail_body_account_activation_request: "Нов корисник (%{value}) е регистриран. The account is pending your approval:"
+  mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
+  mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
+  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
+  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
+  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
+
+  gui_validation_error: 1 грешка
+  gui_validation_error_plural: "%{count} грешки"
+
+  field_name: Име
+  field_description: Опис
+  field_summary: Краток опис
+  field_is_required: Задолжително
+  field_firstname: Име
+  field_lastname: Презиме
+  field_mail: Е-пошта
+  field_filename: Датотека
+  field_filesize: Големина
+  field_downloads: Превземања
+  field_author: Автор
+  field_created_on: Креиран
+  field_updated_on: Ажурирано
+  field_field_format: Формат
+  field_is_for_all: За сите проекти
+  field_possible_values: Можни вредности
+  field_regexp: Regular expression
+  field_min_length: Минимална должина
+  field_max_length: Максимална должина
+  field_value: Вредност
+  field_category: Категорија
+  field_title: Наслов
+  field_project: Проект
+  field_issue: Задача
+  field_status: Статус
+  field_notes: Белешки
+  field_is_closed: Задачата е затворена
+  field_is_default: Default value
+  field_tracker: Tracker
+  field_subject: Наслов
+  field_due_date: Краен рок
+  field_assigned_to: Доделена на
+  field_priority: Приоритет
+  field_fixed_version: Target version
+  field_user: Корисник
+  field_principal: Principal
+  field_role: Улога
+  field_homepage: Веб страна
+  field_is_public: Јавен
+  field_parent: Подпроект на
+  field_is_in_roadmap: Issues displayed in roadmap
+  field_login: Корисник
+  field_mail_notification: Известувања по e-пошта
+  field_admin: Администратор
+  field_last_login_on: Последна најава
+  field_language: Јазик
+  field_effective_date: Дата
+  field_password: Лозинка
+  field_new_password: Нова лозинка
+  field_password_confirmation: Потврда
+  field_version: Верзија
+  field_type: Тип
+  field_host: Хост
+  field_port: Порт
+  field_account: Account
+  field_base_dn: Base DN
+  field_attr_login: Login attribute
+  field_attr_firstname: Firstname attribute
+  field_attr_lastname: Lastname attribute
+  field_attr_mail: Email attribute
+  field_onthefly: Моментално (On-the-fly) креирање на корисници
+  field_start_date: Почеток
+  field_done_ratio: "% Завршено"
+  field_auth_source: Режим на автентикација
+  field_hide_mail: Криј ја мојата адреса на е-пошта
+  field_comments: Коментар
+  field_url: URL
+  field_start_page: Почетна страна
+  field_subproject: Подпроект
+  field_hours: Часови
+  field_activity: Активност
+  field_spent_on: Дата
+  field_identifier: Идентификатор
+  field_is_filter: Користи како филтер
+  field_issue_to: Поврзана задача
+  field_delay: Доцнење
+  field_assignable: На оваа улога може да се доделуваат задачи
+  field_redirect_existing_links: Пренасочи ги постоечките врски
+  field_estimated_hours: Проценето време
+  field_column_names: Колони
+  field_time_entries: Бележи време
+  field_time_zone: Временска зона
+  field_searchable: Може да се пребарува
+  field_default_value: Default value
+  field_comments_sorting: Прикажувај коментари
+  field_parent_title: Parent page
+  field_editable: Може да се уредува
+  field_watcher: Watcher
+  field_identity_url: OpenID URL
+  field_content: Содржина
+  field_group_by: Групирај ги резултатите според
+  field_sharing: Споделување
+  field_parent_issue: Parent task
+
+  setting_app_title: Наслов на апликацијата
+  setting_app_subtitle: Поднаслов на апликацијата
+  setting_welcome_text: Текст за добредојде
+  setting_default_language: Default јазик
+  setting_login_required: Задолжителна автентикација
+  setting_self_registration: Само-регистрација
+  setting_attachment_max_size: Макс. големина на прилог
+  setting_issues_export_limit: Issues export limit
+  setting_mail_from: Emission email address
+  setting_bcc_recipients: Blind carbon copy recipients (bcc)
+  setting_plain_text_mail: Текстуални е-пораки (без HTML)
+  setting_host_name: Име на хост и патека
+  setting_text_formatting: Форматирање на текст
+  setting_wiki_compression: Компресија на историјата на вики
+  setting_feeds_limit: Feed content limit
+  setting_default_projects_public: Новите проекти се иницијално јавни
+  setting_autofetch_changesets: Autofetch commits
+  setting_sys_api_enabled: Enable WS for repository management
+  setting_commit_ref_keywords: Referencing keywords
+  setting_commit_fix_keywords: Fixing keywords
+  setting_autologin: Автоматска најава
+  setting_date_format: Формат на дата
+  setting_time_format: Формат на време
+  setting_cross_project_issue_relations: Дозволи релации на задачи меѓу проекти
+  setting_issue_list_default_columns: Default columns displayed on the issue list
+  setting_repositories_encodings: Repositories encodings
+  setting_emails_footer: Emails footer
+  setting_protocol: Протокол
+  setting_per_page_options: Objects per page options
+  setting_user_format: Приказ на корисниците
+  setting_activity_days_default: Денови прикажана во активноста на проектот
+  setting_display_subprojects_issues: Прикажи ги задачите на подпроектите во главните проекти
+  setting_enabled_scm: Овозможи SCM
+  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
+  setting_mail_handler_api_enabled: Enable WS for incoming emails
+  setting_mail_handler_api_key: API клуч
+  setting_sequential_project_identifiers: Генерирај последователни идентификатори на проекти
+  setting_gravatar_enabled: Користи Gravatar кориснички икони
+  setting_gravatar_default: Default Gravatar image
+  setting_diff_max_lines_displayed: Max number of diff lines displayed
+  setting_file_max_size_displayed: Max size of text files displayed inline
+  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
+  setting_openid: Дозволи OpenID најава и регистрација
+  setting_password_min_length: Мин. должина на лозинка
+  setting_new_project_user_role_id: Улога доделена на неадминистраторски корисник кој креира проект
+  setting_default_projects_modules: Default enabled modules for new projects
+  setting_issue_done_ratio: Calculate the issue done ratio with
+  setting_issue_done_ratio_issue_field: Use the issue field
+  setting_issue_done_ratio_issue_status: Use the issue status
+  setting_start_of_week: Start calendars on
+  setting_rest_api_enabled: Enable REST web service
+  setting_cache_formatted_text: Cache formatted text
+
+  permission_add_project: Креирај проекти
+  permission_add_subprojects: Креирај подпроекти
+  permission_edit_project: Уреди проект
+  permission_select_project_modules: Изберете модули за проект
+  permission_manage_members: Manage members
+  permission_manage_project_activities: Manage project activities
+  permission_manage_versions: Manage versions
+  permission_manage_categories: Manage issue categories
+  permission_view_issues: Прегледај задачи
+  permission_add_issues: Додавај задачи
+  permission_edit_issues: Уредувај задачи
+  permission_manage_issue_relations: Manage issue relations
+  permission_add_issue_notes: Додавај белешки
+  permission_edit_issue_notes: Уредувај белешки
+  permission_edit_own_issue_notes: Уредувај сопствени белешки
+  permission_move_issues: Преместувај задачи
+  permission_delete_issues: Бриши задачи
+  permission_manage_public_queries: Manage public queries
+  permission_save_queries: Save queries
+  permission_view_gantt: View gantt chart
+  permission_view_calendar: View calendar
+  permission_view_issue_watchers: View watchers list
+  permission_add_issue_watchers: Add watchers
+  permission_delete_issue_watchers: Delete watchers
+  permission_log_time: Бележи потрошено време
+  permission_view_time_entries: Прегледај потрошено време
+  permission_edit_time_entries: Уредувај белешки за потрошено време
+  permission_edit_own_time_entries: Уредувај сопствени белешки за потрошено време
+  permission_manage_news: Manage news
+  permission_comment_news: Коментирај на вести
+  permission_manage_documents: Manage documents
+  permission_view_documents: Прегледувај документи
+  permission_manage_files: Manage files
+  permission_view_files: Прегледувај датотеки
+  permission_manage_wiki: Manage wiki
+  permission_rename_wiki_pages: Преименувај вики страници
+  permission_delete_wiki_pages: Бриши вики страници
+  permission_view_wiki_pages: Прегледувај вики
+  permission_view_wiki_edits: Прегледувај вики историја
+  permission_edit_wiki_pages: Уредувај вики страници
+  permission_delete_wiki_pages_attachments: Бриши прилози
+  permission_protect_wiki_pages: Заштитувај вики страници
+  permission_manage_repository: Manage repository
+  permission_browse_repository: Browse repository
+  permission_view_changesets: View changesets
+  permission_commit_access: Commit access
+  permission_manage_boards: Manage boards
+  permission_view_messages: View messages
+  permission_add_messages: Post messages
+  permission_edit_messages: Уредувај пораки
+  permission_edit_own_messages: Уредувај сопствени пораки
+  permission_delete_messages: Бриши пораки
+  permission_delete_own_messages: Бриши сопствени пораки
+  permission_export_wiki_pages: Export wiki pages
+  permission_manage_subtasks: Manage subtasks
+
+  project_module_issue_tracking: Следење на задачи
+  project_module_time_tracking: Следење на време
+  project_module_news: Вести
+  project_module_documents: Документи
+  project_module_files: Датотеки
+  project_module_wiki: Вики
+  project_module_repository: Repository
+  project_module_boards: Форуми
+  project_module_calendar: Календар
+  project_module_gantt: Gantt
+
+  label_user: Корисник
+  label_user_plural: Корисници
+  label_user_new: Нов корисник
+  label_user_anonymous: Анонимен
+  label_project: Проект
+  label_project_new: Нов проект
+  label_project_plural: Проекти
+  label_x_projects:
+    zero:  нема проекти
+    one:   1 проект
+    other: "%{count} проекти"
+  label_project_all: Сите проекти
+  label_project_latest: Последните проекти
+  label_issue: Задача
+  label_issue_new: Нова задача
+  label_issue_plural: Задачи
+  label_issue_view_all: Прегледај ги сите задачи
+  label_issues_by: "Задачи по %{value}"
+  label_issue_added: Задачата е додадена
+  label_issue_updated: Задачата е ажурирана
+  label_document: Документ
+  label_document_new: Нов документ
+  label_document_plural: Документи
+  label_document_added: Документот е додаден
+  label_role: Улога
+  label_role_plural: Улоги
+  label_role_new: Нова улога
+  label_role_and_permissions: Улоги и овластувања
+  label_member: Член
+  label_member_new: Нов член
+  label_member_plural: Членови
+  label_tracker: Tracker
+  label_tracker_plural: Trackers
+  label_tracker_new: New tracker
+  label_workflow: Workflow
+  label_issue_status: Статус на задача
+  label_issue_status_plural: Статуси на задачи
+  label_issue_status_new: Нов статус
+  label_issue_category: Категорија на задача
+  label_issue_category_plural: Категории на задачи
+  label_issue_category_new: Нова категорија
+  label_custom_field: Прилагодено поле
+  label_custom_field_plural: Прилагодени полиња
+  label_custom_field_new: Ново прилагодено поле
+  label_enumerations: Enumerations
+  label_enumeration_new: Нова вредност
+  label_information: Информација
+  label_information_plural: Информации
+  label_please_login: Најави се
+  label_register: Регистрирај се
+  label_login_with_open_id_option: или најави се со OpenID
+  label_password_lost: Изгубена лозинка
+  label_home: Почетна
+  label_my_page: Мојата страна
+  label_my_account: Мојот профил
+  label_my_projects: Мои проекти
+  label_my_page_block: Блок елемент
+  label_administration: Администрација
+  label_login: Најави се
+  label_logout: Одјави се
+  label_help: Помош
+  label_reported_issues: Пријавени задачи
+  label_assigned_to_me_issues: Задачи доделени на мене
+  label_last_login: Последна најава
+  label_registered_on: Регистриран на
+  label_activity: Активност
+  label_overall_activity: Севкупна активност
+  label_user_activity: "Активност на %{value}"
+  label_new: Нова
+  label_logged_as: Најавени сте како
+  label_environment: Опкружување
+  label_authentication: Автентикација
+  label_auth_source: Режим на автентикација
+  label_auth_source_new: Нов режим на автентикација
+  label_auth_source_plural: Режими на автентикација
+  label_subproject_plural: Подпроекти
+  label_subproject_new: Нов подпроект
+  label_and_its_subprojects: "%{value} и неговите подпроекти"
+  label_min_max_length: Мин. - Макс. должина
+  label_list: Листа
+  label_date: Дата
+  label_integer: Integer
+  label_float: Float
+  label_boolean: Boolean
+  label_string: Текст
+  label_text: Долг текст
+  label_attribute: Атрибут
+  label_attribute_plural: Атрибути
+  label_download: "%{count} превземање"
+  label_download_plural: "%{count} превземања"
+  label_no_data: Нема податоци за прикажување
+  label_change_status: Промени статус
+  label_history: Историја
+  label_attachment: Датотека
+  label_attachment_new: Нова датотека
+  label_attachment_delete: Избриши датотека
+  label_attachment_plural: Датотеки
+  label_file_added: Датотеката е додадена
+  label_report: Извештај
+  label_report_plural: Извештаи
+  label_news: Новост
+  label_news_new: Додади новост
+  label_news_plural: Новости
+  label_news_latest: Последни новости
+  label_news_view_all: Прегледај ги сите новости
+  label_news_added: Новостта е додадена
+  label_settings: Settings
+  label_overview: Преглед
+  label_version: Верзија
+  label_version_new: Нова верзија
+  label_version_plural: Верзии
+  label_close_versions: Затвори ги завршените врзии
+  label_confirmation: Потврда
+  label_export_to: 'Достапно и во:'
+  label_read: Прочитај...
+  label_public_projects: Јавни проекти
+  label_open_issues: отворена
+  label_open_issues_plural: отворени
+  label_closed_issues: затворена
+  label_closed_issues_plural: затворени
+  label_x_open_issues_abbr_on_total:
+    zero:  0 отворени / %{total}
+    one:   1 отворена / %{total}
+    other: "%{count} отворени / %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 отворени
+    one:   1 отворена
+    other: "%{count} отворени"
+  label_x_closed_issues_abbr:
+    zero:  0 затворени
+    one:   1 затворена
+    other: "%{count} затворени"
+  label_total: Вкупно
+  label_permissions: Овластувања
+  label_current_status: Моментален статус
+  label_new_statuses_allowed: Дозволени нови статуси
+  label_all: сите
+  label_none: ниеден
+  label_nobody: никој
+  label_next: Следно
+  label_previous: Претходно
+  label_used_by: Користено од
+  label_details: Детали
+  label_add_note: Додади белешка
+  label_per_page: По страна
+  label_calendar: Календар
+  label_months_from: месеци од
+  label_gantt: Gantt
+  label_internal: Internal
+  label_last_changes: "последни %{count} промени"
+  label_change_view_all: Прегледај ги сите промени
+  label_personalize_page: Прилагоди ја странава
+  label_comment: Коментар
+  label_comment_plural: Коментари
+  label_x_comments:
+    zero: нема коментари
+    one: 1 коментар
+    other: "%{count} коментари"
+  label_comment_add: Додади коментар
+  label_comment_added: Коментарот е додаден
+  label_comment_delete: Избриши коментари
+  label_query: Custom query
+  label_query_plural: Custom queries
+  label_query_new: New query
+  label_filter_add: Додади филтер
+  label_filter_plural: Филтри
+  label_equals: е
+  label_not_equals: не е
+  label_in_less_than: за помалку од
+  label_in_more_than: за повеќе од
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: во
+  label_today: денес
+  label_all_time: цело време
+  label_yesterday: вчера
+  label_this_week: оваа недела
+  label_last_week: минатата недела
+  label_last_n_days: "последните %{count} дена"
+  label_this_month: овој месец
+  label_last_month: минатиот месец
+  label_this_year: оваа година
+  label_date_range: Date range
+  label_less_than_ago: пред помалку од денови
+  label_more_than_ago: пред повеќе од денови
+  label_ago: пред денови
+  label_contains: содржи
+  label_not_contains: не содржи
+  label_day_plural: денови
+  label_repository: Складиште
+  label_repository_plural: Складишта
+  label_browse: Прелистувај
+  label_modification: "%{count} промени"
+  label_modification_plural: "%{count} промени"
+  label_branch: Гранка
+  label_tag: Tag
+  label_revision: Ревизија
+  label_revision_plural: Ревизии
+  label_revision_id: "Ревизија %{value}"
+  label_associated_revisions: Associated revisions
+  label_added: added
+  label_modified: modified
+  label_copied: copied
+  label_renamed: renamed
+  label_deleted: deleted
+  label_latest_revision: Последна ревизија
+  label_latest_revision_plural: Последни ревизии
+  label_view_revisions: Прегледај ги ревизиите
+  label_view_all_revisions: Прегледај ги сите ревизии
+  label_max_size: Макс. големина
+  label_sort_highest: Премести најгоре
+  label_sort_higher: Премести нагоре
+  label_sort_lower: Премести надоле
+  label_sort_lowest: Премести најдоле
+  label_roadmap: Roadmap
+  label_roadmap_due_in: "Due in %{value}"
+  label_roadmap_overdue: "Касни %{value}"
+  label_roadmap_no_issues: Нема задачи за оваа верзија
+  label_search: Барај
+  label_result_plural: Резултати
+  label_all_words: Сите зборови
+  label_wiki: Вики
+  label_wiki_edit: Вики уредување
+  label_wiki_edit_plural: Вики уредувања
+  label_wiki_page: Вики страница
+  label_wiki_page_plural: Вики страници
+  label_index_by_title: Индекс по наслов
+  label_index_by_date: Индекс по дата
+  label_current_version: Current version
+  label_preview: Preview
+  label_feed_plural: Feeds
+  label_changes_details: Детали за сите промени
+  label_issue_tracking: Следење на задачи
+  label_spent_time: Потрошено време
+  label_overall_spent_time: Вкупно потрошено време
+  label_f_hour: "%{value} час"
+  label_f_hour_plural: "%{value} часа"
+  label_time_tracking: Следење на време
+  label_change_plural: Промени
+  label_statistics: Статистики
+  label_commits_per_month: Commits per month
+  label_commits_per_author: Commits per author
+  label_view_diff: View differences
+  label_diff_inline: inline
+  label_diff_side_by_side: side by side
+  label_options: Опции
+  label_copy_workflow_from: Copy workflow from
+  label_permissions_report: Permissions report
+  label_watched_issues: Watched issues
+  label_related_issues: Поврзани задачи
+  label_applied_status: Applied status
+  label_loading: Loading...
+  label_relation_new: Нова релација
+  label_relation_delete: Избриши релација
+  label_relates_to: related to
+  label_duplicates: дупликати
+  label_duplicated_by: duplicated by
+  label_blocks: blocks
+  label_blocked_by: блокирано од
+  label_precedes: претходи
+  label_follows: следи
+  label_end_to_start: крај до почеток
+  label_end_to_end: крај до крај
+  label_start_to_start: почеток до почеток
+  label_start_to_end: почеток до крај
+  label_stay_logged_in: Останете најавени
+  label_disabled: disabled
+  label_show_completed_versions: Show completed versions
+  label_me: јас
+  label_board: Форум
+  label_board_new: Нов форум
+  label_board_plural: Форуми
+  label_board_locked: Заклучен
+  label_board_sticky: Sticky
+  label_topic_plural: Теми
+  label_message_plural: Пораки
+  label_message_last: Последна порака
+  label_message_new: Нова порака
+  label_message_posted: Поракате е додадена
+  label_reply_plural: Одговори
+  label_send_information: Испрати ги информациите за профилот на корисникот
+  label_year: Година
+  label_month: Месец
+  label_week: Недела
+  label_date_from: Од
+  label_date_to: До
+  label_language_based: Според јазикот на корисникот
+  label_sort_by: "Подреди според %{value}"
+  label_send_test_email: Испрати тест е-порака
+  label_feeds_access_key: RSS клуч за пристап
+  label_missing_feeds_access_key: Недостика RSS клуч за пристап
+  label_feeds_access_key_created_on: "RSS клучот за пристап креиран пред %{value}"
+  label_module_plural: Модули
+  label_added_time_by: "Додадено од %{author} пред %{age}"
+  label_updated_time_by: "Ажурирано од %{author} пред %{age}"
+  label_updated_time: "Ажурирано пред %{value}"
+  label_jump_to_a_project: Префрли се на проект...
+  label_file_plural: Датотеки
+  label_changeset_plural: Changesets
+  label_default_columns: Основни колони
+  label_no_change_option: (Без промена)
+  label_bulk_edit_selected_issues: Групно уредување на задачи
+  label_theme: Тема
+  label_default: Default
+  label_search_titles_only: Пребарувај само наслови
+  label_user_mail_option_all: "За било кој настан во сите мои проекти"
+  label_user_mail_option_selected: "За било кој настан само во избраните проекти..."
+  label_user_mail_no_self_notified: "Не ме известувај за промените што јас ги правам"
+  label_registration_activation_by_email: активација на профил преку е-пошта
+  label_registration_manual_activation: мануелна активација на профил
+  label_registration_automatic_activation: автоматска активација на профил
+  label_display_per_page: "По страна: %{value}"
+  label_age: Age
+  label_change_properties: Change properties
+  label_general: Општо
+  label_more: Повеќе
+  label_scm: SCM
+  label_plugins: Додатоци
+  label_ldap_authentication: LDAP автентикација
+  label_downloads_abbr: Превземања
+  label_optional_description: Опис (незадолжително)
+  label_add_another_file: Додади уште една датотека
+  label_preferences: Preferences
+  label_chronological_order: Во хронолошки ред
+  label_reverse_chronological_order: In reverse chronological order
+  label_planning: Планирање
+  label_incoming_emails: Дојдовни е-пораки
+  label_generate_key: Генерирај клуч
+  label_issue_watchers: Watchers
+  label_example: Пример
+  label_display: Прикажи
+  label_sort: Подреди
+  label_ascending: Растечки
+  label_descending: Опаѓачки
+  label_date_from_to: Од %{start} до %{end}
+  label_wiki_content_added: Вики страница додадена
+  label_wiki_content_updated: Вики страница ажурирана
+  label_group: Група
+  label_group_plural: Групи
+  label_group_new: Нова група
+  label_time_entry_plural: Потрошено време
+  label_version_sharing_none: Не споделено
+  label_version_sharing_descendants: Со сите подпроекти
+  label_version_sharing_hierarchy: Со хиерархијата на проектот
+  label_version_sharing_tree: Со дрвото на проектот
+  label_version_sharing_system: Со сите проекти
+  label_update_issue_done_ratios: Update issue done ratios
+  label_copy_source: Извор
+  label_copy_target: Дестинација
+  label_copy_same_as_target: Исто како дестинацијата
+  label_display_used_statuses_only: Only display statuses that are used by this tracker
+  label_api_access_key: API клуч за пристап
+  label_missing_api_access_key: Недостига API клуч за пристап
+  label_api_access_key_created_on: "API клучот за пристап е креиран пред %{value}"
+  label_profile: Профил
+  label_subtask_plural: Подзадачи
+  label_project_copy_notifications: Праќај известувања по е-пошта при копирање на проект
+
+  button_login: Најави се
+  button_submit: Испрати
+  button_save: Зачувај
+  button_check_all: Штиклирај ги сите
+  button_uncheck_all: Одштиклирај ги сите
+  button_delete: Избриши
+  button_create: Креирај
+  button_create_and_continue: Креирај и продолжи
+  button_test: Тест
+  button_edit: Уреди
+  button_add: Додади
+  button_change: Промени
+  button_apply: Примени
+  button_clear: Избриши
+  button_lock: Заклучи
+  button_unlock: Отклучи
+  button_download: Превземи
+  button_list: List
+  button_view: Прегледај
+  button_move: Премести
+  button_move_and_follow: Премести и следи
+  button_back: Back
+  button_cancel: Откажи
+  button_activate: Активирај
+  button_sort: Подреди
+  button_log_time: Бележи време
+  button_rollback: Rollback to this version
+  button_watch: Следи
+  button_unwatch: Не следи
+  button_reply: Одговори
+  button_archive: Архивирај
+  button_unarchive: Одархивирај
+  button_reset: Reset
+  button_rename: Преименувај
+  button_change_password: Промени лозинка
+  button_copy: Копирај
+  button_copy_and_follow: Копирај и следи
+  button_annotate: Annotate
+  button_update: Ажурирај
+  button_configure: Конфигурирај
+  button_quote: Цитирај
+  button_duplicate: Копирај
+  button_show: Show
+
+  status_active: активни
+  status_registered: регистрирани
+  status_locked: заклучени
+
+  version_status_open: отворени
+  version_status_locked: заклучени
+  version_status_closed: затворени
+
+  field_active: Active
+
+  text_select_mail_notifications: Изберете за кои настани да се праќаат известувања по е-пошта да се праќаат.
+  text_regexp_info: eg. ^[A-Z0-9]+$
+  text_min_max_length_info: 0 значи без ограничување
+  text_project_destroy_confirmation: Дали сте сигурни дека сакате да го избришете проектот и сите поврзани податоци?
+  text_subprojects_destroy_warning: "Неговите подпроекти: %{value} исто така ќе бидат избришани."
+  text_workflow_edit: Select a role and a tracker to edit the workflow
+  text_are_you_sure: Дали сте сигурни?
+  text_journal_changed: "%{label} променето од %{old} во %{new}"
+  text_journal_set_to: "%{label} set to %{value}"
+  text_journal_deleted: "%{label} избришан (%{old})"
+  text_journal_added: "%{label} %{value} додаден"
+  text_tip_issue_begin_day: задачи што почнуваат овој ден
+  text_tip_issue_end_day: задачи што завршуваат овој ден
+  text_tip_issue_begin_end_day: задачи што почнуваат и завршуваат овој ден
+  text_project_identifier_info: 'Само мали букви (a-z), бројки и dashes се дозволени<br />По зачувувањето, идентификаторот неможе да се смени.'
+  text_caracters_maximum: "%{count} знаци максимум."
+  text_caracters_minimum: "Мора да е најмалку %{count} знаци долго."
+  text_length_between: "Должина помеѓу %{min} и %{max} знаци."
+  text_tracker_no_workflow: No workflow defined for this tracker
+  text_unallowed_characters: Недозволени знаци
+  text_comma_separated: Дозволени се повеќе вредности (разделени со запирка).
+  text_line_separated: Дозволени се повеќе вредности (една линија за секоја вредност).
+  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
+  text_issue_added: "Задачата %{id} е пријавена од %{author}."
+  text_issue_updated: "Задачата %{id} е ажурирана од %{author}."
+  text_wiki_destroy_confirmation: Дали сте сигурни дека сакате да го избришете ова вики и целата негова содржина?
+  text_issue_category_destroy_question: "Некои задачи (%{count}) се доделени на оваа категорија. Што сакате да правите?"
+  text_issue_category_destroy_assignments: Remove category assignments
+  text_issue_category_reassign_to: Додели ги задачите на оваа категорија
+  text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
+  text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
+  text_load_default_configuration: Load the default configuration
+  text_status_changed_by_changeset: "Applied in changeset %{value}."
+  text_issues_destroy_confirmation: 'Дали сте сигурни дека сакате да ги избришете избраните задачи?'
+  text_select_project_modules: 'Изберете модули за овој проект:'
+  text_default_administrator_account_changed: Default administrator account changed
+  text_file_repository_writable: Во папката за прилози може да се запишува
+  text_plugin_assets_writable: Во папката за додатоци може да се запишува
+  text_rmagick_available: RMagick available (незадолжително)
+  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do ?"
+  text_destroy_time_entries: Delete reported hours
+  text_assign_time_entries_to_project: Додели ги пријавените часови на проектот
+  text_reassign_time_entries: 'Reassign reported hours to this issue:'
+  text_user_wrote: "%{value} напиша:"
+  text_enumeration_destroy_question: "%{count} objects are assigned to this value."
+  text_enumeration_category_reassign_to: 'Reassign them to this value:'
+  text_email_delivery_not_configured: "Доставата по е-пошта не е конфигурирана, и известувањата се оневозможени.\nКонфигурирајте го Вашиот  SMTP сервер во config/configuration.yml и рестартирајте ја апликацијата."
+  text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
+  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
+  text_custom_field_possible_values_info: 'One line for each value'
+  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
+  text_wiki_page_nullify_children: "Keep child pages as root pages"
+  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
+  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
+  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
+  text_zoom_in: Zoom in
+  text_zoom_out: Zoom out
+
+  default_role_manager: Менаџер
+  default_role_developer: Developer
+  default_role_reporter: Reporter
+  default_tracker_bug: Грешка
+  default_tracker_feature: Функционалност
+  default_tracker_support: Поддршка
+  default_issue_status_new: Нова
+  default_issue_status_in_progress: Во прогрес
+  default_issue_status_resolved: Разрешена
+  default_issue_status_feedback: Feedback
+  default_issue_status_closed: Затворена
+  default_issue_status_rejected: Одбиена
+  default_doc_category_user: Корисничка документација
+  default_doc_category_tech: Техничка документација
+  default_priority_low: Низок
+  default_priority_normal: Нормален
+  default_priority_high: Висок
+  default_priority_urgent: Итно
+  default_priority_immediate: Веднаш
+  default_activity_design: Дизајн
+  default_activity_development: Развој
+
+  enumeration_issue_priorities: Приоритети на задача
+  enumeration_doc_categories: Категории на документ
+  enumeration_activities: Активности (следење на време)
+  enumeration_system_activity: Системска активност
+
+  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
+  text_are_you_sure_with_children: Delete issue and all child issues?
+  field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
+  setting_commit_logtime_activity_id: Activity for logged time
+  text_time_logged_by_changeset: Applied in changeset %{value}.
+  setting_commit_logtime_enabled: Enable time logging
+  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
+  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/mn.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/mn.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,943 +1,979 @@
-mn:
-  direction: ltr
-  date:
-    formats:
-      # Use the strftime parameters for formats.
-      # When no format has been given, it uses default.
-      # You can provide other formats here if you like!
-      default: "%Y/%m/%d"
-      short: "%b %d"
-      long: "%Y, %B %d"
-      
-    day_names: [Даваа, Мягмар, Лхагва, Пүрэв, Баасан, Бямба, Ням]
-    abbr_day_names: [Дав, Мяг, Лха, Пүр, Бсн, Бям, Ням]
-      
-    # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, 1-р сар, 2-р сар, 3-р сар, 4-р сар, 5-р сар, 6-р сар, 7-р сар, 8-р сар, 9-р сар, 10-р сар, 11-р сар, 12-р сар]
-    abbr_month_names: [~, 1сар, 2сар, 3сар, 4сар, 5сар, 6сар, 7сар, 8сар, 9сар, 10сар, 11сар, 12сар]
-    # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
-
-  time:
-    formats:
-      default: "%Y/%m/%d %I:%M %p"
-      time: "%I:%M %p"
-      short: "%d %b %H:%M"
-      long: "%Y, %B %d %H:%M"
-    am: "am"
-    pm: "pm"
-      
-  datetime:
-    distance_in_words:
-      half_a_minute: "хагас минут"
-      less_than_x_seconds:
-        one:   "секунд орчим"
-        other: "%{count} секундээс бага хугацаа"
-      x_seconds:
-        one:   "1 секунд"
-        other: "%{count} секунд"
-      less_than_x_minutes:
-        one:   "минутаас бага хугацаа"
-        other: "%{count} минутаас бага хугацаа"
-      x_minutes:
-        one:   "1 минут"
-        other: "%{count} минут"
-      about_x_hours:
-        one:   "1 цаг орчим"
-        other: "ойролцоогоор %{count} цаг"
-      x_days:
-        one:   "1 өдөр"
-        other: "%{count} өдөр"
-      about_x_months:
-        one:   "1 сар орчим"
-        other: "ойролцоогоор %{count} сар"
-      x_months:
-        one:   "1 сар"
-        other: "%{count} сар"
-      about_x_years:
-        one:   "ойролцоогоор 1 жил"
-        other: "ойролцоогоор %{count} жил"
-      over_x_years:
-        one:   "1 жилээс их"
-        other: "%{count} жилээс их"
-      almost_x_years:
-        one:   "бараг 1 жил"
-        other: "бараг %{count} жил"
-
-  number:
-    format:
-      separator: "."
-      delimiter: ""
-      precision: 3
-    human:
-      format:
-        delimiter: ""
-        precision: 1
-      storage_units:
-        format: "%n %u"
-        units:
-          byte:
-            one: "Байт"
-            other: "Байт"
-          kb: "KB"
-          mb: "MB"
-          gb: "GB"
-          tb: "TB"
-
-        
-# Used in array.to_sentence.
-  support:
-    array:
-      sentence_connector: "бас"
-      skip_last_comma: false
-      
-  activerecord:
-    errors:
-      template:
-        header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
-      messages:
-        inclusion: "жагсаалтад заагдаагүй байна"
-        exclusion: "нөөцлөгдсөн"
-        invalid: "буруу"
-        confirmation: "баталгаажсан өгөгдөлтэй таарахгүй байна"
-        accepted: "хүлээж авах ёстой"
-        empty: "хоосон байж болохгүй"
-        blank: "бланк байж болохгүй"
-        too_long: "дэндүү урт байна (хамгийн ихдээ %{count} тэмдэгт)"
-        too_short: "дэндүү богино байна (хамгийн багадаа %{count} тэмдэгт)"
-        wrong_length: "буруу урттай байна (заавал %{count} тэмдэгт)"
-        taken: "аль хэдийнэ авсан байна"
-        not_a_number: "тоо биш байна"
-        not_a_date: "зөв огноо биш байна"
-        greater_than: "%{count} их байх ёстой"
-        greater_than_or_equal_to: "must be greater than or equal to %{count}"
-        equal_to: "must be equal to %{count}"
-        less_than: "must be less than %{count}"
-        less_than_or_equal_to: "must be less than or equal to %{count}"
-        odd: "заавал сондгой"
-        even: "заавал тэгш"
-        greater_than_start_date: "must be greater than start date"
-        not_same_project: "нэг ижил төсөлд хамаарахгүй байна"
-        circular_dependency: "Энэ харьцаа нь гинжин(рекурсив) харьцаа үүсгэх юм байна"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
-
-  actionview_instancetag_blank_option: Сонгоно уу
-  
-  general_text_No: 'Үгүй'
-  general_text_Yes: 'Тийм'
-  general_text_no: 'үгүй'
-  general_text_yes: 'тийм'
-  general_lang_name: 'Mongolian (Монгол)'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
-  general_csv_encoding: UTF-8
-  general_pdf_encoding: UTF-8
-  general_first_day_of_week: '7'
-  
-  notice_account_updated: Дансыг амжилттай өөрчиллөө.
-  notice_account_invalid_creditentials: Хэрэглэгчийн нэр эсвэл нууц үг буруу байна
-  notice_account_password_updated: Нууц үгийг амжилттай өөрчиллөө.
-  notice_account_wrong_password: Буруу нууц үг
-  notice_account_register_done: Шинэ хэрэглэгч амжилттай үүсгэлээ. Идэвхжүүлэхийн тулд, бидний тань луу илгээсэн мэйл дотор байгаа холбоос дээр дараарай.
-  notice_account_unknown_email: Үл мэдэгдэх хэрэглэгч.
-  notice_can_t_change_password: Энэ эрх гадаад нэвтрэлтэд ашигладаг учраас нууц үгийг өөрчлөх боломжгүй.
-  notice_account_lost_email_sent: Бид таньд мэйлээр нууц үгээ өөрчлөх зааврыг илгээсэн байгаа.
-  notice_account_activated: Таны данс идэвхжлээ. Одоо нэвтэрч орж болно.
-  notice_successful_create: Амжилттай үүсгэлээ.
-  notice_successful_update: Амжилттай өөрчиллөө.
-  notice_successful_delete: Амжилттай устгалаа.
-  notice_successful_connection: Амжилттай холбогдлоо.
-  notice_file_not_found: Таны үзэх гэсэн хуудас байхгүй юмуу устгагдсан байна.
-  notice_locking_conflict: Өгөгдлийг өөр хүн өөрчилсөн байна.
-  notice_not_authorized: Танд энэ хуудсыг үзэх эрх байхгүй байна.
-  notice_email_sent: "%{value} - руу мэйл илгээлээ"
-  notice_email_error: "Мэйл илгээхэд алдаа гарлаа (%{value})"
-  notice_feeds_access_key_reseted: Таны RSS хандалтын түлхүүрийг дахин эхлүүллээ.
-  notice_api_access_key_reseted: Your API access key was reset.
-  notice_failed_to_save_issues: "%{total} асуудал сонгогдсоноос %{count} асуудлыг нь хадгалахад алдаа гарлаа: %{ids}."
-  notice_no_issue_selected: "Ямар ч асуудал сонгогдоогүй байна! Засварлах асуудлуудаа сонгоно уу."
-  notice_account_pending: "Таны дансыг үүсгэж дууслаа, администратор баталгаажуулах хүртэл хүлээнэ үү."
-  notice_default_data_loaded: Стандарт тохиргоог амжилттай ачааллаа.
-  notice_unable_delete_version: Хувилбарыг устгах боломжгүй.
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  
-  error_can_t_load_default_data: "Стандарт тохиргоог ачаалж чадсангүй: %{value}"
-  error_scm_not_found: "Repository дотор тухайн бичлэг эсвэл хувилбарыг олсонгүй."
-  error_scm_command_failed: "Repository-д хандахад алдаа гарлаа:  %{value}"
-  error_scm_annotate: "Бичлэг байхгүй байна, эсвэл бичлэгт тайлбар хавсаргаж болохгүй."
-  error_issue_not_found_in_project: 'Сонгосон асуудал энэ төсөлд хамаардаггүй юм уу эсвэл системд байхгүй байна.'
-  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
-  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
-  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
-  error_can_not_archive_project: This project can not be archived
-  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
-  error_workflow_copy_source: 'Please select a source tracker or role'
-  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
-  
-  warning_attachments_not_saved: "%{count} file(s) файлыг хадгалж чадсангүй."
-  
-  mail_subject_lost_password: "Таны %{value} нууц үг"
-  mail_body_lost_password: 'Нууц үгээ өөрчлөхийн тулд доорх холбоос дээр дарна уу:'
-  mail_subject_register: "Таны %{value} дансыг идэвхжүүлэх"
-  mail_body_register: 'Дансаа идэвхжүүлэхийн тулд доорх холбоос дээр дарна уу:'
-  mail_body_account_information_external: "Та өөрийнхөө %{value} дансыг ашиглаж холбогдож болно."
-  mail_body_account_information: Таны дансны тухай мэдээлэл
-  mail_subject_account_activation_request: "%{value} дансыг идэвхжүүлэх хүсэлт"
-  mail_body_account_activation_request: "Шинэ хэрэглэгч (%{value}) бүртгүүлсэн байна. Таны баталгаажуулахыг хүлээж байна:"
-  mail_subject_reminder: "Дараагийн өдрүүдэд %{count} асуудлыг шийдэх хэрэгтэй (%{days})"
-  mail_body_reminder: "Танд оноогдсон %{count} асуудлуудыг дараагийн %{days} өдрүүдэд шийдэх хэрэгтэй:"
-  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
-  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
-  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
-  
-  gui_validation_error: 1 алдаа
-  gui_validation_error_plural: "%{count} алдаа"
-  
-  field_name: Нэр
-  field_description: Тайлбар
-  field_summary: Дүгнэлт
-  field_is_required: Зайлшгүй
-  field_firstname: Таны нэр
-  field_lastname: Овог
-  field_mail: Имэйл
-  field_filename: Файл
-  field_filesize: Хэмжээ
-  field_downloads: Татаж авах зүйлс
-  field_author: Зохиогч
-  field_created_on: Үүссэн
-  field_updated_on: Өөрчилсөн
-  field_field_format: Формат
-  field_is_for_all: Бүх төслийн хувьд
-  field_possible_values: Боломжтой утгууд
-  field_regexp: Энгийн илэрхийлэл
-  field_min_length: Минимум урт
-  field_max_length: Максимум урт
-  field_value: Утга
-  field_category: Төрөл
-  field_title: Гарчиг
-  field_project: Төсөл
-  field_issue: Асуудал
-  field_status: Төлөв
-  field_notes: Тэмдэглэлүүд
-  field_is_closed: Асуудал хаагдсан
-  field_is_default: Стандарт утга
-  field_tracker: Чиглэл
-  field_subject: Гарчиг
-  field_due_date: Дуусах огноо
-  field_assigned_to: Оноогдсон
-  field_priority: Зэрэглэл
-  field_fixed_version: Хувилбар
-  field_user: Хэрэглэгч
-  field_role: Хандалтын эрх
-  field_homepage: Нүүр хуудас
-  field_is_public: Олон нийтийн
-  field_parent: Эцэг төсөл нь
-  field_is_in_roadmap: Асуудлуудыг явцын зураг дээр харуулах
-  field_login: Нэвтрэх нэр
-  field_mail_notification: Имэйл мэдэгдлүүд
-  field_admin: Администратор
-  field_last_login_on: Сүүлийн холбоо
-  field_language: Хэл
-  field_effective_date: Огноо
-  field_password: Нууц үг
-  field_new_password: Шннэ нууц үг
-  field_password_confirmation: Баталгаажуулах
-  field_version: Хувилбар
-  field_type: Төрөл
-  field_host: Хост
-  field_port: Порт
-  field_account: Данс
-  field_base_dn: Үндсэн ДН
-  field_attr_login: Нэвтрэх аттрибут
-  field_attr_firstname: Таны нэр аттрибут
-  field_attr_lastname: Овог аттрибут
-  field_attr_mail: Имэйл аттрибут
-  field_onthefly: Хүссэн үедээ хэрэглэгч үүсгэх
-  field_start_date: Эхлэл
-  field_done_ratio: %% Гүйцэтгэсэн
-  field_auth_source: Нэвтрэх арга
-  field_hide_mail: Миний имэйл хаягийг нуу
-  field_comments: Тайлбар
-  field_url: URL Хаяг
-  field_start_page: Тэргүүн хуудас
-  field_subproject: Дэд төсөл
-  field_hours: Цаг
-  field_activity: Үйл ажиллагаа
-  field_spent_on: Огноо
-  field_identifier: Төслийн глобал нэр
-  field_is_filter: Шүүлтүүр болгон хэрэглэгддэг
-  field_issue_to: Хамаатай асуудал
-  field_delay: Хоцролт
-  field_assignable: Энэ хандалтын эрхэд асуудлуудыг оноож өгч болно
-  field_redirect_existing_links: Байгаа холбоосуудыг дахин чиглүүлэх
-  field_estimated_hours: Барагцаалсан цаг
-  field_column_names: Баганууд
-  field_time_zone: Цагын бүс
-  field_searchable: Хайж болох
-  field_default_value: Стандарт утга
-  field_comments_sorting: Тайлбаруудыг харуул
-  field_parent_title: Эцэг хуудас
-  field_editable: Засварлагдана
-  field_watcher: Харна
-  field_identity_url: OpenID URL
-  field_content: Агуулга
-  field_group_by: Үр дүнгээр бүлэглэх
-  field_sharing: Sharing
-  
-  setting_app_title: Программын гарчиг
-  setting_app_subtitle: Программын дэд гарчиг
-  setting_welcome_text: Мэндчилгээ
-  setting_default_language: Стандарт хэл
-  setting_login_required: Нэвтрэх шаардлагатай
-  setting_self_registration: Өөрийгөө бүртгүүлэх
-  setting_attachment_max_size: Хавсралт файлын дээд хэмжээ
-  setting_issues_export_limit: Асуудал экспортлох хязгаар
-  setting_mail_from: Ямар имэйл хаяг үүсгэх
-  setting_bcc_recipients: BCC талбарын хаягууд (bcc)
-  setting_plain_text_mail: дан текст мэйл (HTML биш)
-  setting_host_name: Хостын нэр болон зам
-  setting_text_formatting: Текст хэлбэржүүлэлт
-  setting_wiki_compression: Вики хуудсуудын түүх дээр шахалт хийх
-  setting_feeds_limit: Фийд агуулгын хязгаар
-  setting_default_projects_public: Шинэ төслүүд автоматаар олон нийтийнх байна
-  setting_autofetch_changesets: Комитуудыг автоматаар татаж авах
-  setting_sys_api_enabled: Репозитори менежментэд зориулан WS-ийг идэвхжүүлэх
-  setting_commit_ref_keywords: Хамааруулах түлхүүр үгс
-  setting_commit_fix_keywords: Зоолттой түлхүүр үгс
-  setting_autologin: Компьютер дээр санах
-  setting_date_format: Огнооны формат
-  setting_time_format: Цагийн формат
-  setting_cross_project_issue_relations: Төсөл хооронд асуудал хамааруулахыг зөвшөөрөх
-  setting_issue_list_default_columns: Асуудлуудыг харуулах стандарт баганууд
-  setting_repositories_encodings: Репозиторийн энкодинг
-  setting_commit_logs_encoding: Коммит хийх үед харуулах текстүүдийн энкодинг
-  setting_emails_footer: Имэйлүүдийн хөл хэсэг
-  setting_protocol: Протокол
-  setting_per_page_options: Нэг хуудсанд байх обьектуудын тохиргоо
-  setting_user_format: Хэрэглэгчдийг харуулах формат
-  setting_activity_days_default: Төслийн үйл ажиллагаа хэсэгт үзүүлэх өдрийн тоо
-  setting_display_subprojects_issues: Дэд төслүүдийн асуудлуудыг автоматаар гол төсөл дээр харуулах
-  setting_enabled_scm: SCM - ийг идэвхжүүлэх
-  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
-  setting_mail_handler_api_enabled: Ирсэн мэйлүүдийн хувьд WS-ийг идэвхжүүлэх
-  setting_mail_handler_api_key: API түлхүүр
-  setting_sequential_project_identifiers: Дэс дараалсан төслийн глобал нэр үүсгэж байх
-  setting_gravatar_enabled: Gravatar дүрсүүдийг хэрэглэгчдэд хэрэглэж байх
-  setting_gravatar_default: Default Gravatar image
-  setting_diff_max_lines_displayed: Ялгаатай мөрүүдийн тоо (дээд тал нь)
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_openid: Allow OpenID login and registration
-  setting_password_min_length: Minimum password length
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_field: Use the issue field
-  setting_issue_done_ratio_issue_status: Use the issue status
-  setting_start_of_week: Start calendars on
-  setting_rest_api_enabled: Enable REST web service
-  setting_cache_formatted_text: Cache formatted text
-  
-  permission_add_project: Create project
-  permission_add_subprojects: Create subprojects
-  permission_edit_project: Төслийг засварлах
-  permission_select_project_modules: Төслийн модулуудийг сонгоно уу
-  permission_manage_members: Системийн хэрэглэгчид
-  permission_manage_project_activities: Manage project activities
-  permission_manage_versions: Хувилбарууд
-  permission_manage_categories: Асуудлын ангиллууд
-  permission_view_issues: Асуудлуудыг харах
-  permission_add_issues: Асуудлууд нэмэх
-  permission_edit_issues: Асуудлуудыг засварлах
-  permission_manage_issue_relations: Асуудлын хамаарлыг зохицуулах
-  permission_add_issue_notes: Тэмдэглэл нэмэх
-  permission_edit_issue_notes: Тэмдэглэлүүд засварлах
-  permission_edit_own_issue_notes: Өөрийн үлдээсэн тэмдэглэлүүдийг засварлах
-  permission_move_issues: Асуудлуудыг зөөх
-  permission_delete_issues: Асуудлуудыг устгах
-  permission_manage_public_queries: Олон нийтийн асуултууд
-  permission_save_queries: Асуултуудыг хадгалах
-  permission_view_gantt: Гант диаграмыг үзэх
-  permission_view_calendar: Календарь үзэх
-  permission_view_issue_watchers: Ажиглагчдын жагсаалтыг харах
-  permission_add_issue_watchers: Ажиглагчид нэмэх
-  permission_delete_issue_watchers: Ажиглагчдыг устгах
-  permission_log_time: Зарцуулсан хугацааг лог хийх
-  permission_view_time_entries: Зарцуулсан хугацааг харах
-  permission_edit_time_entries: Хугацааны логуудыг засварлах
-  permission_edit_own_time_entries: Өөрийн хугацааны логуудыг засварлах
-  permission_manage_news: Мэдээ мэдээллүүд
-  permission_comment_news: Мэдээнд тайлбар үлдээх
-  permission_manage_documents: Бичиг баримтууд
-  permission_view_documents: Бичиг баримтуудыг харах
-  permission_manage_files: Файлууд
-  permission_view_files: Файлуудыг харах
-  permission_manage_wiki: Вики удирдах
-  permission_rename_wiki_pages: Вики хуудсуудыг дахиж нэрлэх
-  permission_delete_wiki_pages: Вики хуудсуудыг устгах
-  permission_view_wiki_pages: Вики үзэх
-  permission_view_wiki_edits: Вики түүх үзэх
-  permission_edit_wiki_pages: Вики хуудсуудыг засварлах
-  permission_delete_wiki_pages_attachments: Хавсралтуудыг устгах
-  permission_protect_wiki_pages: Вики хуудсуудыг хамгаалах
-  permission_manage_repository: Репозитори
-  permission_browse_repository: Репозиторийг үзэх
-  permission_view_changesets: Өөрчлөлтүүдийг харах
-  permission_commit_access: Коммит хандалт
-  permission_manage_boards: Самбарууд
-  permission_view_messages: Зурвасуудыг харах
-  permission_add_messages: Зурвас илгээх
-  permission_edit_messages: Зурвасуудыг засварлах
-  permission_edit_own_messages: Өөрийн зурвасуудыг засварлах
-  permission_delete_messages: Зурвасуудыг устгах
-  permission_delete_own_messages: Өөрийн зурвасуудыг устгах
-  permission_export_wiki_pages: Вики хуудсуудыг экспорт хийх
-  
-  project_module_issue_tracking: Асуудал хянах
-  project_module_time_tracking: Хугацаа хянах
-  project_module_news: Мэдээ мэдээллүүд
-  project_module_documents: Бичиг баримтууд
-  project_module_files: Файлууд
-  project_module_wiki: Вики
-  project_module_repository: Репозитори
-  project_module_boards: Самбарууд
-  
-  label_user: Хэрэглэгч
-  label_user_plural: Хэрэглэгчид
-  label_user_new: Шинэ хэрэглэгч
-  label_user_anonymous: Хамаагүй хэрэглэгч
-  label_project: Төсөл
-  label_project_new: Шинэ төсөл
-  label_project_plural: Төслүүд
-  label_x_projects:
-    zero:  төсөл байхгүй
-    one:   1 төсөл
-    other: "%{count} төслүүд"
-  label_project_all: Бүх Төслүүд
-  label_project_latest: Сүүлийн үеийн төслүүд
-  label_issue: Асуудал
-  label_issue_new: Шинэ асуудал
-  label_issue_plural: Асуудлууд
-  label_issue_view_all: Бүх асуудлуудыг харах
-  label_issues_by: "%{value} - н асуудлууд"
-  label_issue_added: Асуудал нэмэгдлээ
-  label_issue_updated: Асуудал өөрчлөгдлөө
-  label_document: Бичиг баримт
-  label_document_new: Шинэ бичиг баримт
-  label_document_plural: Бичиг баримтууд
-  label_document_added: Бичиг баримт нэмэгдлээ
-  label_role: Хандалтын эрх
-  label_role_plural: Хандалтын эрхүүд
-  label_role_new: Шинэ хандалтын эрх
-  label_role_and_permissions: Хандалтын эрхүүд болон зөвшөөрлүүд
-  label_member: Гишүүн
-  label_member_new: Шинэ гишүүн
-  label_member_plural: Гишүүд
-  label_tracker: Чиглэл
-  label_tracker_plural: Чиглэлүүд
-  label_tracker_new: Шинэ чиглэл
-  label_workflow: Ажлын дараалал
-  label_issue_status: Асуудлын төлөв
-  label_issue_status_plural: Асуудлын төлвүүд
-  label_issue_status_new: Шинэ төлөв
-  label_issue_category: Асуудлын ангилал
-  label_issue_category_plural: Асуудлын ангиллууд
-  label_issue_category_new: Шинэ ангилал
-  label_custom_field: Хэрэглэгчийн тодорхойлсон талбар
-  label_custom_field_plural: Хэрэглэгчийн тодорхойлсон талбарууд
-  label_custom_field_new: Шинээр хэрэглэгчийн тодорхойлсон талбар үүсгэх
-  label_enumerations: Ангиллууд
-  label_enumeration_new: Шинэ утга
-  label_information: Мэдээлэл
-  label_information_plural: Мэдээллүүд
-  label_please_login: Нэвтэрч орно уу
-  label_register: Бүртгүүлэх
-  label_login_with_open_id_option: or login with OpenID
-  label_password_lost: Нууц үгээ алдсан
-  label_home: Нүүр
-  label_my_page: Миний хуудас
-  label_my_account: Миний данс
-  label_my_projects: Миний төслүүд
-  label_administration: Админ хэсэг
-  label_login: Нэвтрэх
-  label_logout: Гарах
-  label_help: Тусламж
-  label_reported_issues: Мэдэгдсэн асуудлууд
-  label_assigned_to_me_issues: Надад оноогдсон асуудлууд
-  label_last_login: Сүүлийн холболт
-  label_registered_on: Бүртгүүлсэн огноо
-  label_activity: Үйл ажиллагаа
-  label_overall_activity: Ерөнхий үйл ажиллагаа
-  label_user_activity: "%{value}-ийн үйл ажиллагаа"
-  label_new: Шинэ
-  label_logged_as: Холбогдсон нэр
-  label_environment: Орчин
-  label_authentication: Нэвтрэх
-  label_auth_source: Нэвтрэх арга
-  label_auth_source_new: Шинэ нэвтрэх арга
-  label_auth_source_plural: Нэвтрэх аргууд
-  label_subproject_plural: Дэд төслүүд
-  label_subproject_new: Шинэ дэд төсөл
-  label_and_its_subprojects: "%{value} болон холбогдох дэд төслүүд"
-  label_min_max_length: Дээд - Доод урт
-  label_list: Жагсаалт
-  label_date: Огноо
-  label_integer: Бүхэл тоо
-  label_float: Бутархай тоо
-  label_boolean: Үнэн худал утга
-  label_string: Текст
-  label_text: Урт текст
-  label_attribute: Аттрибут
-  label_attribute_plural: Аттрибутууд
-  label_download: "%{count} Татаж авсан зүйл"
-  label_download_plural: "%{count} Татаж авсан зүйлс"
-  label_no_data: Үзүүлэх өгөгдөл байхгүй байна
-  label_change_status: Төлвийг өөрчлөх
-  label_history: Түүх
-  label_attachment: Файл
-  label_attachment_new: Шинэ файл
-  label_attachment_delete: Файл устгах
-  label_attachment_plural: Файлууд
-  label_file_added: Файл нэмэгдлээ
-  label_report: Тайлан
-  label_report_plural: Тайлангууд 
-  label_news: Мэдээ
-  label_news_new: Шинэ мэдээ
-  label_news_plural: Мэдээ
-  label_news_latest: Сүүлийн үеийн мэдээнүүд
-  label_news_view_all: Бүх мэдээг харах
-  label_news_added: Мэдээ нэмэгдлээ
-  label_change_log: Өөрчлөлтийн лог
-  label_settings: Тохиргоо
-  label_overview: Эхлэл
-  label_version: Хувилбар
-  label_version_new: Шинэ хувилбар
-  label_version_plural: Хувилбарууд
-  label_close_versions: Гүйцэт хувилбаруудыг хаалаа
-  label_confirmation: Баталгаажуулах
-  label_export_to: 'Өөр авч болох формат:'
-  label_read: Унших...
-  label_public_projects: Олон нийтийн төслүүд
-  label_open_issues: нээлттэй
-  label_open_issues_plural: нээлттэй
-  label_closed_issues: хаалттай
-  label_closed_issues_plural: хаалттай
-  label_x_open_issues_abbr_on_total:
-    zero:  0 нээлттэй / %{total}
-    one:   1 нээлттэй / %{total}
-    other: "%{count} нээлттэй / %{total}"
-  label_x_open_issues_abbr:
-    zero:  0 нээлттэй
-    one:   1 нээлттэй
-    other: "%{count} нээлттэй"
-  label_x_closed_issues_abbr:
-    zero:  0 хаалттай
-    one:   1 хаалттай
-    other: "%{count} хаалттай"
-  label_total: Нийт
-  label_permissions: Зөвшөөрлүүд
-  label_current_status: Одоогийн төлөв
-  label_new_statuses_allowed: Шинээр олгож болох төлвүүд
-  label_all: бүгд
-  label_none: хоосон
-  label_nobody: хэн ч биш
-  label_next: Дараагийн
-  label_previous: Өмнөх
-  label_used_by: Хэрэглэгддэг
-  label_details: Дэлгэрэнгүй
-  label_add_note: Тэмдэглэл нэмэх
-  label_per_page: Нэг хуудсанд
-  label_calendar: Календарь
-  label_months_from: Саруудыг хаанаас
-  label_gantt: Гант диаграм
-  label_internal: Дотоод
-  label_last_changes: "сүүлийн %{count} өөрчлөлтүүд"
-  label_change_view_all: Бүх өөрчлөлтүүдийг харах
-  label_personalize_page: Энэ хуудсыг өөрт зориулан өөрчлөх
-  label_comment: Тайлбар
-  label_comment_plural: Тайлбарууд
-  label_x_comments:
-    zero: сэтгэгдэл байхгүй
-    one: 1 сэтгэгдэлтэй
-    other: "%{count} сэтгэгдэлтэй"
-  label_comment_add: Тайлбар нэмэх
-  label_comment_added: Тайлбар нэмэгдлээ
-  label_comment_delete: Тайлбарууд устгах
-  label_query: Хэрэглэгчийн тодорхойлсон асуулт
-  label_query_plural: Хэрэглэгчийн тодорхойлсон асуултууд
-  label_query_new: Шинээр хэрэглэгчийн тодорхойлсон асуулт үүсгэх
-  label_filter_add: Шүүлтүүр нэмэх
-  label_filter_plural: Шүүлтүүрүүд
-  label_equals: бол
-  label_not_equals: биш
-  label_in_less_than: аас бага
-  label_in_more_than: аас их
-  label_greater_or_equal: '>='
-  label_less_or_equal: '<='
-  label_in: дотор
-  label_today: өнөөдөр
-  label_all_time: бүх хугацаа
-  label_yesterday: өчигдөр
-  label_this_week: энэ долоо хоног
-  label_last_week: өнгөрсөн долоо хоног
-  label_last_n_days: "сүүлийн %{count} өдрүүд"
-  label_this_month: энэ сар
-  label_last_month: сүүлийн сар
-  label_this_year: энэ жил
-  label_date_range: Хязгаар огноо
-  label_less_than_ago: бага өдрийн дотор
-  label_more_than_ago: их өдрийн дотор
-  label_ago: өдрийн өмнө
-  label_contains: агуулж байгаа
-  label_not_contains: агуулаагүй
-  label_day_plural: өдрүүд
-  label_repository: Репозитори
-  label_repository_plural: Репозиторууд
-  label_browse: Үзэх
-  label_modification: "%{count} өөрчлөлт"
-  label_modification_plural: "%{count} өөрчлөлтүүд"
-  label_branch: Салбар
-  label_tag: Шошго 
-  label_revision: Хувилбар
-  label_revision_plural: Хувилбарууд
-  label_revision_id: "%{value} Хувилбар"
-  label_associated_revisions: Хамааралтай хувилбарууд
-  label_added: нэмэгдсэн
-  label_modified: өөрчлөгдсөн
-  label_copied: хуулсан
-  label_renamed: нэрийг нь өөрчилсөн
-  label_deleted: устгасан
-  label_latest_revision: Сүүлийн үеийн хувилбар
-  label_latest_revision_plural: Сүүлийн үеийн хувилбарууд
-  label_view_revisions: Хувилбаруудыг харах
-  label_view_all_revisions: Бүх хувилбаруудыг харах
-  label_max_size: Maximum size
-  label_sort_highest: Хамгийн дээр
-  label_sort_higher: Дээш нь
-  label_sort_lower: Доош нь
-  label_sort_lowest: Хамгийн доор
-  label_roadmap: Хөтөч
-  label_roadmap_due_in: "%{value} дотор дуусгах"
-  label_roadmap_overdue: "%{value} оройтсон"
-  label_roadmap_no_issues: Энэ хувилбарт асуудал байхгүй байна
-  label_search: Хайх
-  label_result_plural: Үр дүн
-  label_all_words: Бүх үгс
-  label_wiki: Вики
-  label_wiki_edit: Вики засвар
-  label_wiki_edit_plural: Вики засварууд
-  label_wiki_page: Вики хуудас
-  label_wiki_page_plural: Вики хуудас
-  label_index_by_title: Гарчгаар эрэмбэлэх
-  label_index_by_date: Огноогоор эрэмбэлэх
-  label_current_version: Одоогийн хувилбар
-  label_preview: Ямар харагдахыг шалгах
-  label_feed_plural: Feeds
-  label_changes_details: Бүх өөрчлөлтүүдийн дэлгэрэнгүй
-  label_issue_tracking: Асуудал хянах
-  label_spent_time: Зарцуулсан хугацаа
-  label_f_hour: "%{value} цаг"
-  label_f_hour_plural: "%{value} цаг"
-  label_time_tracking: Хугацааг хянах
-  label_change_plural: Өөрчлөлтүүд
-  label_statistics: Статистик
-  label_commits_per_month: Сард хийсэн коммитын тоо
-  label_commits_per_author: Зохиогч бүрийн хувьд коммитын тоо
-  label_view_diff: Ялгаануудыг харах
-  label_diff_inline: дотор нь
-  label_diff_side_by_side: зэрэгцүүлж
-  label_options: Тохиргоо
-  label_copy_workflow_from: Ажлын дарааллыг хуулах
-  label_permissions_report: Зөвшөөрлүүдийн таблиц
-  label_watched_issues: Ажиглагдаж байгаа асуудлууд
-  label_related_issues: Хамааралтай асуудлууд
-  label_applied_status: Олгосон төлөв
-  label_loading: Ачаалж байна...
-  label_relation_new: Шинэ хамаарал
-  label_relation_delete: Хамаарлыг устгах
-  label_relates_to: энгийн хамааралтай
-  label_duplicates: хос хамааралтай
-  label_duplicated_by: давхардуулсан эзэн
-  label_blocks: шаардах хамааралтай
-  label_blocked_by: блоколсон эзэн
-  label_precedes: урьдчилах хамааралтай
-  label_follows: дагаж
-  label_end_to_start: хойноос нь урагшаа
-  label_end_to_end: хойноос нь хойшоо
-  label_start_to_start: урдаас нь урагаа
-  label_start_to_end: урдаас нь хойшоо
-  label_stay_logged_in: Энэ комьютер дээр санах
-  label_disabled: идэвхгүй болсон
-  label_show_completed_versions: Гүйцэд хувилбаруудыг харуулах
-  label_me: би
-  label_board: Форум
-  label_board_new: Шинэ форум
-  label_board_plural: Форумууд
-  label_board_locked: Түгжээтэй
-  label_board_sticky: Sticky
-  label_topic_plural: Сэдвүүд
-  label_message_plural: Зурвасууд
-  label_message_last: Сүүлийн зурвас
-  label_message_new: Шинэ зурвас
-  label_message_posted: Зурвас нэмэгдлээ
-  label_reply_plural: Хариултууд
-  label_send_information: Дансны мэдээллийг хэрэглэгчид илгээх
-  label_year: Жил
-  label_month: Сар
-  label_week: Долоо хоног
-  label_date_from: Хэзээнээс
-  label_date_to: Хэдий хүртэл
-  label_language_based: Хэрэглэгчийн хэлнас шалтгаалан
-  label_sort_by: "%{value} талбараар нь эрэмбэлэх"
-  label_send_test_email: Турших мэйл илгээх
-  label_feeds_access_key: RSS хандах түлхүүр
-  label_missing_feeds_access_key: RSS хандах түлхүүр алга
-  label_feeds_access_key_created_on: "RSS хандалтын түлхүүр %{value}-ийн өмнө үүссэн"
-  label_module_plural: Модулууд
-  label_added_time_by: "%{author} %{age}-ийн өмнө нэмсэн"
-  label_updated_time_by: "%{author} %{age}-ийн өмнө өөрчилсөн"
-  label_updated_time: "%{value} -ийн өмнө өөрчлөгдсөн"
-  label_jump_to_a_project: Төсөл рүү очих...
-  label_file_plural: Файлууд
-  label_changeset_plural: Өөрчлөлтүүд
-  label_default_columns: Стандарт баганууд
-  label_no_change_option: (Өөрчлөлт байхгүй)
-  label_bulk_edit_selected_issues: Сонгогдсон асуудлуудыг бөөнөөр засварлах
-  label_theme: Системийн Дизайн
-  label_default: Стандарт
-  label_search_titles_only: Зөвхөн гарчиг хайх
-  label_user_mail_option_all: "Миний бүх төсөл дээрх бүх үзэгдлүүдийн хувьд"
-  label_user_mail_option_selected: "Сонгогдсон төслүүдийн хувьд бүх үзэгдэл дээр..."
-  label_user_mail_no_self_notified: "Миний өөрийн хийсэн өөрчлөлтүүдийн тухай надад мэдэгдэх хэрэггүй"
-  label_registration_activation_by_email: дансыг имэйлээр идэвхжүүлэх
-  label_registration_manual_activation: дансыг гараар идэвхжүүлэх
-  label_registration_automatic_activation: дансыг автоматаар идэвхжүүлэх
-  label_display_per_page: 'Нэг хуудсанд: %{value}'
-  label_age: Нас
-  label_change_properties: Тохиргоог өөрчлөх
-  label_general: Ерөнхий
-  label_more: Цааш нь
-  label_scm: SCM
-  label_plugins: Модулууд
-  label_ldap_authentication: LDAP нэвтрэх горим
-  label_downloads_abbr: D/L
-  label_optional_description: Дурын тайлбар
-  label_add_another_file: Дахин файл нэмэх
-  label_preferences: Тохиргоо
-  label_chronological_order: Цагаан толгойн үсгийн дарааллаар
-  label_reverse_chronological_order: Урвуу цагаан толгойн үсгийн дарааллаар
-  label_planning: Төлөвлөлт
-  label_incoming_emails: Ирсэн мэйлүүд
-  label_generate_key: Түлхүүр үүсгэх
-  label_issue_watchers: Ажиглагчид
-  label_example: Жишээ
-  label_display: Display
-  label_sort: Sort
-  label_ascending: Ascending
-  label_descending: Descending
-  label_date_from_to: From %{start} to %{end}
-  label_wiki_content_added: Wiki page added
-  label_wiki_content_updated: Wiki page updated
-  label_group: Group
-  label_group_plural: Groups
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  label_version_sharing_none: Not shared
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_tree: With project tree
-  label_version_sharing_system: With all projects
-  label_update_issue_done_ratios: Update issue done ratios
-  label_copy_source: Source
-  label_copy_target: Target
-  label_copy_same_as_target: Same as target
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_api_access_key: API access key
-  label_missing_api_access_key: Missing an API access key
-  label_api_access_key_created_on: "API access key created %{value} ago"
-  
-  button_login: Нэвтрэх
-  button_submit: Илгээх
-  button_save: Хадгалах
-  button_check_all: Бүгдийг сонго
-  button_uncheck_all: Бүгдийг үл сонго
-  button_delete: Устгах
-  button_create: Үүсгэх
-  button_create_and_continue: Үүсгээд цааш үргэлжлүүлэх
-  button_test: Турших
-  button_edit: Засварлах
-  button_add: Нэмэх
-  button_change: Өөрчлөх
-  button_apply: Өөрчлөлтийг хадгалах
-  button_clear: Цэвэрлэх
-  button_lock: Түгжих
-  button_unlock: Түгжээг тайлах
-  button_download: Татах
-  button_list: Жагсаалт
-  button_view: Харах
-  button_move: Зөөх
-  button_move_and_follow: Зөө бас дага
-  button_back: Буцах
-  button_cancel: Болих
-  button_activate: Идэвхжүүлэх
-  button_sort: Эрэмбэлэх
-  button_log_time: Лог хийсэн хугацаа
-  button_rollback: Энэ хувилбар руу буцах
-  button_watch: Ажиглах
-  button_unwatch: Ажиглахаа болих
-  button_reply: Хариулах
-  button_archive: Архивлах
-  button_unarchive: Архивыг задлах
-  button_reset: Анхны утгууд
-  button_rename: Нэрийг нь солих
-  button_change_password: Нууц үгээ өөрчлөх
-  button_copy: Хуулах
-  button_copy_and_follow: Зөө бас дага
-  button_annotate: Тайлбар хавсаргах
-  button_update: Шинэчлэх
-  button_configure: Тохируулах
-  button_quote: Ишлэл
-  button_duplicate: Хуулбар
-  button_show: Үзэх
-  
-  status_active: идэвхтэй
-  status_registered: бүртгүүлсэн
-  status_locked: түгжээтэй
-  
-  version_status_open: нээлттэй
-  version_status_locked: түгжээтэй
-  version_status_closed: хаалттай
-
-  field_active: идэвхтэй
-  
-  text_select_mail_notifications: Ямар үед имэйлээр мэдэгдэл илгээхийг сонгоно уу.
-  text_regexp_info: eg. ^[A-Z0-9]+$
-  text_min_max_length_info: 0 гэвэл ямар ч хязгааргүй гэсэн үг
-  text_project_destroy_confirmation: Та энэ төсөл болоод бусад мэдээллийг нь үнэхээр устгамаар байна уу ?
-  text_subprojects_destroy_warning: "Уг төслийн дэд төслүүд : %{value} нь бас устгагдах болно."
-  text_workflow_edit: Ажлын дарааллыг өөрчлөхийн тулд хандалтын эрх болон асуудлын чиглэлийг сонгоно уу
-  text_are_you_sure: Та итгэлтэй байна уу ?
-  text_journal_changed: "%{label} %{old} байсан нь %{new} болов"
-  text_journal_set_to: "%{label} %{value} болгож өөрчиллөө"
-  text_journal_deleted: "%{label} устсан (%{old})"
-  text_journal_added: "%{label} %{value} нэмэгдсэн"
-  text_tip_issue_begin_day: энэ өдөр эхлэх ажил
-  text_tip_issue_end_day: энэ өдөр дуусах ажил
-  text_tip_issue_begin_end_day: энэ өдөр эхлээд мөн дуусч байгаа ажил
-  text_project_identifier_info: 'Зөвхөн жижиг үсгүүд болон (a-z), тоо and дундуур зураас ашиглаж болно.<br />Нэгэнт хадгалсан хойно, төслийн глобал нэрийг өөрлчөх боломжгүй.'
-  text_caracters_maximum: "дээд тал нь %{count} үсэг."
-  text_caracters_minimum: "Хамгийн багадаа ядаж %{count} тэмдэгт байх."
-  text_length_between: "Урт нь багадаа %{min}, ихдээ %{max} тэмдэгт."
-  text_tracker_no_workflow: Энэхүү асуудлын чиглэлд ямар ч ажлын дараалал тодорхойлогдоогүй байна
-  text_unallowed_characters: Хэрэглэж болохгүй тэмдэгтүүд
-  text_comma_separated: Таслалаар зааглан олон утга оруулж болно.
-  text_line_separated: Multiple values allowed (one line for each value).
-  text_issues_ref_in_commit_messages: Коммитийн зурвасуудад хамааруулсан болон байнгын асуудлууд
-  text_issue_added: "Асуудал %{id} - ийг хэрэглэгч %{author} мэдэгдсэн байна."
-  text_issue_updated: "Асуудал %{id} - ийг хэрэглэгч %{author} өөрчилсөн байна."
-  text_wiki_destroy_confirmation: Та энэ вики болон холбогдох бүх мэдээллийг үнэхээр устгамаар байна уу ?
-  text_issue_category_destroy_question: "Энэ ангилалд зарим асуудлууд (%{count})  орсон байна. Та яах вэ ?"
-  text_issue_category_destroy_assignments: Асуудлуудыг энэ ангиллаас авах
-  text_issue_category_reassign_to: Асуудлуудыг энэ ангилалд дахин оноох
-  text_user_mail_option: "Сонгогдоогүй төслүүдийн хувьд, та зөвхөн өөрийнхөө ажиглаж байгаа зүйлс юмуу танд хамаатай зүйлсийн талаар мэдэгдэл авах болно (Таны оруулсан асуудал, эсвэл танд оноосон гэх мэт)."
-  text_no_configuration_data: "Хандалтын эрхүүд, чиглэлүүд, асуудлын төлвүүд болон ажлын дарааллын тухай мэдээллийг хараахан оруулаагүй байна.\nТа стандарт өгөгдлүүдийг даруйхан оруулахыг зөвлөж байна, оруулсан хойно та засварлаж болно."
-  text_load_default_configuration: Стандарт өгөгдлийг ачаалах
-  text_status_changed_by_changeset: "%{value} өөрчлөлтөд хийгдсэн."
-  text_issues_destroy_confirmation: 'Та сонгогдсон асуудлуудыг үнэхээр устгамаар байна уу ?'
-  text_select_project_modules:  'Энэ төслийн хувьд идэвхжүүлэх модулуудаа сонгоно уу:'
-  text_default_administrator_account_changed: Стандарт администраторын бүртгэл өөрчлөгдлөө
-  text_file_repository_writable: Хавсралт файл хадгалах хавтас руу бичих эрхтэй
-  text_plugin_assets_writable: Плагин модулийн ассет хавтас руу бичих эрхтэй
-  text_rmagick_available: RMagick суулгагдсан (заавал биш)
-  text_destroy_time_entries_question: "Таны устгах гэж байгаа асуудлууд дээр нийт %{hours} цаг зарцуулсан юм байна, та яах вэ ?"
-  text_destroy_time_entries: Мэдэгдсэн цагуудыг устгах
-  text_assign_time_entries_to_project: Мэдэгдсэн асуудлуудыг төсөлд оноох
-  text_reassign_time_entries: 'Мэдэгдсэн асуудлуудыг энэ асуудалд дахин оноо:'
-  text_user_wrote: "%{value} бичихдээ:"
-  text_enumeration_destroy_question: "Энэ утгад %{count} обьект оноогдсон байна."
-  text_enumeration_category_reassign_to: 'Тэдгээрийг энэ утгад дахин оноо:'
-  text_email_delivery_not_configured: "Имэйлийн тохиргоог хараахан тохируулаагүй байна, тиймээс имэйл мэдэгдэл явуулах боломжгүй байна.\nSMTP сервэрээ config/configuration.yml файл дотор тохируулаад төслийн менежерээ дахиад эхлүүлээрэй."
-  text_repository_usernames_mapping: "Репозиторийн логд байгаа бүх хэрэглэгчийн нэрүүдэд харгалзсан Төслийн Менежер системд бүртгэлтэй хэрэглэгчдийг Сонгох юмуу шинэчилнэ үү.\nТөслийн менежер болон репозиторид байгаа ижилхэн нэр юмуу имэйлтэй хэрэглэгчид харилцан харгалзна."
-  text_diff_truncated: '... Файлын ялгаврын хэмжээ үзүүлэхэд дэндүү урт байгаа учраас төгсгөлөөс нь хасч үзүүлэв.'
-  text_custom_field_possible_values_info: 'One line for each value'
-  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
-  text_wiki_page_nullify_children: "Keep child pages as root pages"
-  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
-  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
-  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
-  
-  default_role_manager: Менежер
-  default_role_developer: Хөгжүүлэгч
-  default_role_reporter: Мэдэгдэгч
-  default_tracker_bug: Алдаа
-  default_tracker_feature: Онцлог
-  default_tracker_support: Тусламж
-  default_issue_status_new: Шинэ
-  default_issue_status_in_progress: Ахицтай
-  default_issue_status_assigned: Оноогдсон
-  default_issue_status_resolved: Шийдвэрлэгдсэн
-  default_issue_status_feedback: Feedback
-  default_issue_status_closed: Хаагдсан
-  default_issue_status_rejected: Хүлээж аваагүй
-  default_doc_category_user: Хэрэглэгчийн бичиг баримт
-  default_doc_category_tech: Техникийн бичиг баримт
-  default_priority_low: Бага
-  default_priority_normal: Хэвийн
-  default_priority_high: Өндөр
-  default_priority_urgent: Нэн яаралтай
-  default_priority_immediate: Нэн даруй
-  default_activity_design: Дизайн
-  default_activity_development: Хөгжүүлэлт
-  
-  enumeration_issue_priorities: Асуудлын зэрэглэлүүд
-  enumeration_doc_categories: Бичиг баримтын ангиллууд
-  enumeration_activities: Үйл ажиллагаанууд (хугацааг хянах)
-  enumeration_system_activity: Системийн үйл ажиллагаа
-
-  permission_manage_subtasks: Manage subtasks
-  label_profile: Profile
-  field_parent_issue: Parent task
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_subtask_plural: Subtasks
-  label_project_copy_notifications: Send email notifications during the project copy
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_unable_to_connect: Unable to connect (%{value})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
-  field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
-  project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+mn:
+  direction: ltr
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%Y/%m/%d"
+      short: "%b %d"
+      long: "%Y, %B %d"
+      
+    day_names: [Даваа, Мягмар, Лхагва, Пүрэв, Баасан, Бямба, Ням]
+    abbr_day_names: [Дав, Мяг, Лха, Пүр, Бсн, Бям, Ням]
+      
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, 1-р сар, 2-р сар, 3-р сар, 4-р сар, 5-р сар, 6-р сар, 7-р сар, 8-р сар, 9-р сар, 10-р сар, 11-р сар, 12-р сар]
+    abbr_month_names: [~, 1сар, 2сар, 3сар, 4сар, 5сар, 6сар, 7сар, 8сар, 9сар, 10сар, 11сар, 12сар]
+    # Used in date_select and datime_select.
+    order:
+      - :day
+      - :month
+      - :year
+
+  time:
+    formats:
+      default: "%Y/%m/%d %I:%M %p"
+      time: "%I:%M %p"
+      short: "%d %b %H:%M"
+      long: "%Y, %B %d %H:%M"
+    am: "am"
+    pm: "pm"
+      
+  datetime:
+    distance_in_words:
+      half_a_minute: "хагас минут"
+      less_than_x_seconds:
+        one:   "секунд орчим"
+        other: "%{count} секундээс бага хугацаа"
+      x_seconds:
+        one:   "1 секунд"
+        other: "%{count} секунд"
+      less_than_x_minutes:
+        one:   "минутаас бага хугацаа"
+        other: "%{count} минутаас бага хугацаа"
+      x_minutes:
+        one:   "1 минут"
+        other: "%{count} минут"
+      about_x_hours:
+        one:   "1 цаг орчим"
+        other: "ойролцоогоор %{count} цаг"
+      x_days:
+        one:   "1 өдөр"
+        other: "%{count} өдөр"
+      about_x_months:
+        one:   "1 сар орчим"
+        other: "ойролцоогоор %{count} сар"
+      x_months:
+        one:   "1 сар"
+        other: "%{count} сар"
+      about_x_years:
+        one:   "ойролцоогоор 1 жил"
+        other: "ойролцоогоор %{count} жил"
+      over_x_years:
+        one:   "1 жилээс их"
+        other: "%{count} жилээс их"
+      almost_x_years:
+        one:   "бараг 1 жил"
+        other: "бараг %{count} жил"
+
+  number:
+    format:
+      separator: "."
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Байт"
+            other: "Байт"
+          kb: "KB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+        
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "бас"
+      skip_last_comma: false
+      
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "1 error prohibited this %{model} from being saved"
+          other:  "%{count} errors prohibited this %{model} from being saved"
+      messages:
+        inclusion: "жагсаалтад заагдаагүй байна"
+        exclusion: "нөөцлөгдсөн"
+        invalid: "буруу"
+        confirmation: "баталгаажсан өгөгдөлтэй таарахгүй байна"
+        accepted: "хүлээж авах ёстой"
+        empty: "хоосон байж болохгүй"
+        blank: "бланк байж болохгүй"
+        too_long: "дэндүү урт байна (хамгийн ихдээ %{count} тэмдэгт)"
+        too_short: "дэндүү богино байна (хамгийн багадаа %{count} тэмдэгт)"
+        wrong_length: "буруу урттай байна (заавал %{count} тэмдэгт)"
+        taken: "аль хэдийнэ авсан байна"
+        not_a_number: "тоо биш байна"
+        not_a_date: "зөв огноо биш байна"
+        greater_than: "%{count} их байх ёстой"
+        greater_than_or_equal_to: "must be greater than or equal to %{count}"
+        equal_to: "must be equal to %{count}"
+        less_than: "must be less than %{count}"
+        less_than_or_equal_to: "must be less than or equal to %{count}"
+        odd: "заавал сондгой"
+        even: "заавал тэгш"
+        greater_than_start_date: "must be greater than start date"
+        not_same_project: "нэг ижил төсөлд хамаарахгүй байна"
+        circular_dependency: "Энэ харьцаа нь гинжин(рекурсив) харьцаа үүсгэх юм байна"
+        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+
+  actionview_instancetag_blank_option: Сонгоно уу
+  
+  general_text_No: 'Үгүй'
+  general_text_Yes: 'Тийм'
+  general_text_no: 'үгүй'
+  general_text_yes: 'тийм'
+  general_lang_name: 'Mongolian (Монгол)'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '7'
+  
+  notice_account_updated: Дансыг амжилттай өөрчиллөө.
+  notice_account_invalid_creditentials: Хэрэглэгчийн нэр эсвэл нууц үг буруу байна
+  notice_account_password_updated: Нууц үгийг амжилттай өөрчиллөө.
+  notice_account_wrong_password: Буруу нууц үг
+  notice_account_register_done: Шинэ хэрэглэгч амжилттай үүсгэлээ. Идэвхжүүлэхийн тулд, бидний тань луу илгээсэн мэйл дотор байгаа холбоос дээр дараарай.
+  notice_account_unknown_email: Үл мэдэгдэх хэрэглэгч.
+  notice_can_t_change_password: Энэ эрх гадаад нэвтрэлтэд ашигладаг учраас нууц үгийг өөрчлөх боломжгүй.
+  notice_account_lost_email_sent: Бид таньд мэйлээр нууц үгээ өөрчлөх зааврыг илгээсэн байгаа.
+  notice_account_activated: Таны данс идэвхжлээ. Одоо нэвтэрч орж болно.
+  notice_successful_create: Амжилттай үүсгэлээ.
+  notice_successful_update: Амжилттай өөрчиллөө.
+  notice_successful_delete: Амжилттай устгалаа.
+  notice_successful_connection: Амжилттай холбогдлоо.
+  notice_file_not_found: Таны үзэх гэсэн хуудас байхгүй юмуу устгагдсан байна.
+  notice_locking_conflict: Өгөгдлийг өөр хүн өөрчилсөн байна.
+  notice_not_authorized: Танд энэ хуудсыг үзэх эрх байхгүй байна.
+  notice_email_sent: "%{value} - руу мэйл илгээлээ"
+  notice_email_error: "Мэйл илгээхэд алдаа гарлаа (%{value})"
+  notice_feeds_access_key_reseted: Таны RSS хандалтын түлхүүрийг дахин эхлүүллээ.
+  notice_api_access_key_reseted: Your API access key was reset.
+  notice_failed_to_save_issues: "%{total} асуудал сонгогдсоноос %{count} асуудлыг нь хадгалахад алдаа гарлаа: %{ids}."
+  notice_no_issue_selected: "Ямар ч асуудал сонгогдоогүй байна! Засварлах асуудлуудаа сонгоно уу."
+  notice_account_pending: "Таны дансыг үүсгэж дууслаа, администратор баталгаажуулах хүртэл хүлээнэ үү."
+  notice_default_data_loaded: Стандарт тохиргоог амжилттай ачааллаа.
+  notice_unable_delete_version: Хувилбарыг устгах боломжгүй.
+  notice_issue_done_ratios_updated: Issue done ratios updated.
+  
+  error_can_t_load_default_data: "Стандарт тохиргоог ачаалж чадсангүй: %{value}"
+  error_scm_not_found: "Repository дотор тухайн бичлэг эсвэл хувилбарыг олсонгүй."
+  error_scm_command_failed: "Repository-д хандахад алдаа гарлаа:  %{value}"
+  error_scm_annotate: "Бичлэг байхгүй байна, эсвэл бичлэгт тайлбар хавсаргаж болохгүй."
+  error_issue_not_found_in_project: 'Сонгосон асуудал энэ төсөлд хамаардаггүй юм уу эсвэл системд байхгүй байна.'
+  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
+  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
+  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
+  error_can_not_archive_project: This project can not be archived
+  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
+  error_workflow_copy_source: 'Please select a source tracker or role'
+  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
+  
+  warning_attachments_not_saved: "%{count} file(s) файлыг хадгалж чадсангүй."
+  
+  mail_subject_lost_password: "Таны %{value} нууц үг"
+  mail_body_lost_password: 'Нууц үгээ өөрчлөхийн тулд доорх холбоос дээр дарна уу:'
+  mail_subject_register: "Таны %{value} дансыг идэвхжүүлэх"
+  mail_body_register: 'Дансаа идэвхжүүлэхийн тулд доорх холбоос дээр дарна уу:'
+  mail_body_account_information_external: "Та өөрийнхөө %{value} дансыг ашиглаж холбогдож болно."
+  mail_body_account_information: Таны дансны тухай мэдээлэл
+  mail_subject_account_activation_request: "%{value} дансыг идэвхжүүлэх хүсэлт"
+  mail_body_account_activation_request: "Шинэ хэрэглэгч (%{value}) бүртгүүлсэн байна. Таны баталгаажуулахыг хүлээж байна:"
+  mail_subject_reminder: "Дараагийн өдрүүдэд %{count} асуудлыг шийдэх хэрэгтэй (%{days})"
+  mail_body_reminder: "Танд оноогдсон %{count} асуудлуудыг дараагийн %{days} өдрүүдэд шийдэх хэрэгтэй:"
+  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
+  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
+  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
+  
+  gui_validation_error: 1 алдаа
+  gui_validation_error_plural: "%{count} алдаа"
+  
+  field_name: Нэр
+  field_description: Тайлбар
+  field_summary: Дүгнэлт
+  field_is_required: Зайлшгүй
+  field_firstname: Таны нэр
+  field_lastname: Овог
+  field_mail: Имэйл
+  field_filename: Файл
+  field_filesize: Хэмжээ
+  field_downloads: Татаж авах зүйлс
+  field_author: Зохиогч
+  field_created_on: Үүссэн
+  field_updated_on: Өөрчилсөн
+  field_field_format: Формат
+  field_is_for_all: Бүх төслийн хувьд
+  field_possible_values: Боломжтой утгууд
+  field_regexp: Энгийн илэрхийлэл
+  field_min_length: Минимум урт
+  field_max_length: Максимум урт
+  field_value: Утга
+  field_category: Төрөл
+  field_title: Гарчиг
+  field_project: Төсөл
+  field_issue: Асуудал
+  field_status: Төлөв
+  field_notes: Тэмдэглэлүүд
+  field_is_closed: Асуудал хаагдсан
+  field_is_default: Стандарт утга
+  field_tracker: Чиглэл
+  field_subject: Гарчиг
+  field_due_date: Дуусах огноо
+  field_assigned_to: Оноогдсон
+  field_priority: Зэрэглэл
+  field_fixed_version: Хувилбар
+  field_user: Хэрэглэгч
+  field_role: Хандалтын эрх
+  field_homepage: Нүүр хуудас
+  field_is_public: Олон нийтийн
+  field_parent: Эцэг төсөл нь
+  field_is_in_roadmap: Асуудлуудыг явцын зураг дээр харуулах
+  field_login: Нэвтрэх нэр
+  field_mail_notification: Имэйл мэдэгдлүүд
+  field_admin: Администратор
+  field_last_login_on: Сүүлийн холбоо
+  field_language: Хэл
+  field_effective_date: Огноо
+  field_password: Нууц үг
+  field_new_password: Шннэ нууц үг
+  field_password_confirmation: Баталгаажуулах
+  field_version: Хувилбар
+  field_type: Төрөл
+  field_host: Хост
+  field_port: Порт
+  field_account: Данс
+  field_base_dn: Үндсэн ДН
+  field_attr_login: Нэвтрэх аттрибут
+  field_attr_firstname: Таны нэр аттрибут
+  field_attr_lastname: Овог аттрибут
+  field_attr_mail: Имэйл аттрибут
+  field_onthefly: Хүссэн үедээ хэрэглэгч үүсгэх
+  field_start_date: Эхлэл
+  field_done_ratio: "%% Гүйцэтгэсэн"
+  field_auth_source: Нэвтрэх арга
+  field_hide_mail: Миний имэйл хаягийг нуу
+  field_comments: Тайлбар
+  field_url: URL Хаяг
+  field_start_page: Тэргүүн хуудас
+  field_subproject: Дэд төсөл
+  field_hours: Цаг
+  field_activity: Үйл ажиллагаа
+  field_spent_on: Огноо
+  field_identifier: Төслийн глобал нэр
+  field_is_filter: Шүүлтүүр болгон хэрэглэгддэг
+  field_issue_to: Хамаатай асуудал
+  field_delay: Хоцролт
+  field_assignable: Энэ хандалтын эрхэд асуудлуудыг оноож өгч болно
+  field_redirect_existing_links: Байгаа холбоосуудыг дахин чиглүүлэх
+  field_estimated_hours: Барагцаалсан цаг
+  field_column_names: Баганууд
+  field_time_zone: Цагын бүс
+  field_searchable: Хайж болох
+  field_default_value: Стандарт утга
+  field_comments_sorting: Тайлбаруудыг харуул
+  field_parent_title: Эцэг хуудас
+  field_editable: Засварлагдана
+  field_watcher: Харна
+  field_identity_url: OpenID URL
+  field_content: Агуулга
+  field_group_by: Үр дүнгээр бүлэглэх
+  field_sharing: Sharing
+  
+  setting_app_title: Программын гарчиг
+  setting_app_subtitle: Программын дэд гарчиг
+  setting_welcome_text: Мэндчилгээ
+  setting_default_language: Стандарт хэл
+  setting_login_required: Нэвтрэх шаардлагатай
+  setting_self_registration: Өөрийгөө бүртгүүлэх
+  setting_attachment_max_size: Хавсралт файлын дээд хэмжээ
+  setting_issues_export_limit: Асуудал экспортлох хязгаар
+  setting_mail_from: Ямар имэйл хаяг үүсгэх
+  setting_bcc_recipients: BCC талбарын хаягууд (bcc)
+  setting_plain_text_mail: дан текст мэйл (HTML биш)
+  setting_host_name: Хостын нэр болон зам
+  setting_text_formatting: Текст хэлбэржүүлэлт
+  setting_wiki_compression: Вики хуудсуудын түүх дээр шахалт хийх
+  setting_feeds_limit: Фийд агуулгын хязгаар
+  setting_default_projects_public: Шинэ төслүүд автоматаар олон нийтийнх байна
+  setting_autofetch_changesets: Комитуудыг автоматаар татаж авах
+  setting_sys_api_enabled: Репозитори менежментэд зориулан WS-ийг идэвхжүүлэх
+  setting_commit_ref_keywords: Хамааруулах түлхүүр үгс
+  setting_commit_fix_keywords: Зоолттой түлхүүр үгс
+  setting_autologin: Компьютер дээр санах
+  setting_date_format: Огнооны формат
+  setting_time_format: Цагийн формат
+  setting_cross_project_issue_relations: Төсөл хооронд асуудал хамааруулахыг зөвшөөрөх
+  setting_issue_list_default_columns: Асуудлуудыг харуулах стандарт баганууд
+  setting_repositories_encodings: Репозиторийн энкодинг
+  setting_emails_footer: Имэйлүүдийн хөл хэсэг
+  setting_protocol: Протокол
+  setting_per_page_options: Нэг хуудсанд байх обьектуудын тохиргоо
+  setting_user_format: Хэрэглэгчдийг харуулах формат
+  setting_activity_days_default: Төслийн үйл ажиллагаа хэсэгт үзүүлэх өдрийн тоо
+  setting_display_subprojects_issues: Дэд төслүүдийн асуудлуудыг автоматаар гол төсөл дээр харуулах
+  setting_enabled_scm: SCM - ийг идэвхжүүлэх
+  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
+  setting_mail_handler_api_enabled: Ирсэн мэйлүүдийн хувьд WS-ийг идэвхжүүлэх
+  setting_mail_handler_api_key: API түлхүүр
+  setting_sequential_project_identifiers: Дэс дараалсан төслийн глобал нэр үүсгэж байх
+  setting_gravatar_enabled: Gravatar дүрсүүдийг хэрэглэгчдэд хэрэглэж байх
+  setting_gravatar_default: Default Gravatar image
+  setting_diff_max_lines_displayed: Ялгаатай мөрүүдийн тоо (дээд тал нь)
+  setting_file_max_size_displayed: Max size of text files displayed inline
+  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
+  setting_openid: Allow OpenID login and registration
+  setting_password_min_length: Minimum password length
+  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
+  setting_default_projects_modules: Default enabled modules for new projects
+  setting_issue_done_ratio: Calculate the issue done ratio with
+  setting_issue_done_ratio_issue_field: Use the issue field
+  setting_issue_done_ratio_issue_status: Use the issue status
+  setting_start_of_week: Start calendars on
+  setting_rest_api_enabled: Enable REST web service
+  setting_cache_formatted_text: Cache formatted text
+  
+  permission_add_project: Create project
+  permission_add_subprojects: Create subprojects
+  permission_edit_project: Төслийг засварлах
+  permission_select_project_modules: Төслийн модулуудийг сонгоно уу
+  permission_manage_members: Системийн хэрэглэгчид
+  permission_manage_project_activities: Manage project activities
+  permission_manage_versions: Хувилбарууд
+  permission_manage_categories: Асуудлын ангиллууд
+  permission_view_issues: Асуудлуудыг харах
+  permission_add_issues: Асуудлууд нэмэх
+  permission_edit_issues: Асуудлуудыг засварлах
+  permission_manage_issue_relations: Асуудлын хамаарлыг зохицуулах
+  permission_add_issue_notes: Тэмдэглэл нэмэх
+  permission_edit_issue_notes: Тэмдэглэлүүд засварлах
+  permission_edit_own_issue_notes: Өөрийн үлдээсэн тэмдэглэлүүдийг засварлах
+  permission_move_issues: Асуудлуудыг зөөх
+  permission_delete_issues: Асуудлуудыг устгах
+  permission_manage_public_queries: Олон нийтийн асуултууд
+  permission_save_queries: Асуултуудыг хадгалах
+  permission_view_gantt: Гант диаграмыг үзэх
+  permission_view_calendar: Календарь үзэх
+  permission_view_issue_watchers: Ажиглагчдын жагсаалтыг харах
+  permission_add_issue_watchers: Ажиглагчид нэмэх
+  permission_delete_issue_watchers: Ажиглагчдыг устгах
+  permission_log_time: Зарцуулсан хугацааг лог хийх
+  permission_view_time_entries: Зарцуулсан хугацааг харах
+  permission_edit_time_entries: Хугацааны логуудыг засварлах
+  permission_edit_own_time_entries: Өөрийн хугацааны логуудыг засварлах
+  permission_manage_news: Мэдээ мэдээллүүд
+  permission_comment_news: Мэдээнд тайлбар үлдээх
+  permission_manage_documents: Бичиг баримтууд
+  permission_view_documents: Бичиг баримтуудыг харах
+  permission_manage_files: Файлууд
+  permission_view_files: Файлуудыг харах
+  permission_manage_wiki: Вики удирдах
+  permission_rename_wiki_pages: Вики хуудсуудыг дахиж нэрлэх
+  permission_delete_wiki_pages: Вики хуудсуудыг устгах
+  permission_view_wiki_pages: Вики үзэх
+  permission_view_wiki_edits: Вики түүх үзэх
+  permission_edit_wiki_pages: Вики хуудсуудыг засварлах
+  permission_delete_wiki_pages_attachments: Хавсралтуудыг устгах
+  permission_protect_wiki_pages: Вики хуудсуудыг хамгаалах
+  permission_manage_repository: Репозитори
+  permission_browse_repository: Репозиторийг үзэх
+  permission_view_changesets: Өөрчлөлтүүдийг харах
+  permission_commit_access: Коммит хандалт
+  permission_manage_boards: Самбарууд
+  permission_view_messages: Зурвасуудыг харах
+  permission_add_messages: Зурвас илгээх
+  permission_edit_messages: Зурвасуудыг засварлах
+  permission_edit_own_messages: Өөрийн зурвасуудыг засварлах
+  permission_delete_messages: Зурвасуудыг устгах
+  permission_delete_own_messages: Өөрийн зурвасуудыг устгах
+  permission_export_wiki_pages: Вики хуудсуудыг экспорт хийх
+  
+  project_module_issue_tracking: Асуудал хянах
+  project_module_time_tracking: Хугацаа хянах
+  project_module_news: Мэдээ мэдээллүүд
+  project_module_documents: Бичиг баримтууд
+  project_module_files: Файлууд
+  project_module_wiki: Вики
+  project_module_repository: Репозитори
+  project_module_boards: Самбарууд
+  
+  label_user: Хэрэглэгч
+  label_user_plural: Хэрэглэгчид
+  label_user_new: Шинэ хэрэглэгч
+  label_user_anonymous: Хамаагүй хэрэглэгч
+  label_project: Төсөл
+  label_project_new: Шинэ төсөл
+  label_project_plural: Төслүүд
+  label_x_projects:
+    zero:  төсөл байхгүй
+    one:   1 төсөл
+    other: "%{count} төслүүд"
+  label_project_all: Бүх Төслүүд
+  label_project_latest: Сүүлийн үеийн төслүүд
+  label_issue: Асуудал
+  label_issue_new: Шинэ асуудал
+  label_issue_plural: Асуудлууд
+  label_issue_view_all: Бүх асуудлуудыг харах
+  label_issues_by: "%{value} - н асуудлууд"
+  label_issue_added: Асуудал нэмэгдлээ
+  label_issue_updated: Асуудал өөрчлөгдлөө
+  label_document: Бичиг баримт
+  label_document_new: Шинэ бичиг баримт
+  label_document_plural: Бичиг баримтууд
+  label_document_added: Бичиг баримт нэмэгдлээ
+  label_role: Хандалтын эрх
+  label_role_plural: Хандалтын эрхүүд
+  label_role_new: Шинэ хандалтын эрх
+  label_role_and_permissions: Хандалтын эрхүүд болон зөвшөөрлүүд
+  label_member: Гишүүн
+  label_member_new: Шинэ гишүүн
+  label_member_plural: Гишүүд
+  label_tracker: Чиглэл
+  label_tracker_plural: Чиглэлүүд
+  label_tracker_new: Шинэ чиглэл
+  label_workflow: Ажлын дараалал
+  label_issue_status: Асуудлын төлөв
+  label_issue_status_plural: Асуудлын төлвүүд
+  label_issue_status_new: Шинэ төлөв
+  label_issue_category: Асуудлын ангилал
+  label_issue_category_plural: Асуудлын ангиллууд
+  label_issue_category_new: Шинэ ангилал
+  label_custom_field: Хэрэглэгчийн тодорхойлсон талбар
+  label_custom_field_plural: Хэрэглэгчийн тодорхойлсон талбарууд
+  label_custom_field_new: Шинээр хэрэглэгчийн тодорхойлсон талбар үүсгэх
+  label_enumerations: Ангиллууд
+  label_enumeration_new: Шинэ утга
+  label_information: Мэдээлэл
+  label_information_plural: Мэдээллүүд
+  label_please_login: Нэвтэрч орно уу
+  label_register: Бүртгүүлэх
+  label_login_with_open_id_option: or login with OpenID
+  label_password_lost: Нууц үгээ алдсан
+  label_home: Нүүр
+  label_my_page: Миний хуудас
+  label_my_account: Миний данс
+  label_my_projects: Миний төслүүд
+  label_administration: Админ хэсэг
+  label_login: Нэвтрэх
+  label_logout: Гарах
+  label_help: Тусламж
+  label_reported_issues: Мэдэгдсэн асуудлууд
+  label_assigned_to_me_issues: Надад оноогдсон асуудлууд
+  label_last_login: Сүүлийн холболт
+  label_registered_on: Бүртгүүлсэн огноо
+  label_activity: Үйл ажиллагаа
+  label_overall_activity: Ерөнхий үйл ажиллагаа
+  label_user_activity: "%{value}-ийн үйл ажиллагаа"
+  label_new: Шинэ
+  label_logged_as: Холбогдсон нэр
+  label_environment: Орчин
+  label_authentication: Нэвтрэх
+  label_auth_source: Нэвтрэх арга
+  label_auth_source_new: Шинэ нэвтрэх арга
+  label_auth_source_plural: Нэвтрэх аргууд
+  label_subproject_plural: Дэд төслүүд
+  label_subproject_new: Шинэ дэд төсөл
+  label_and_its_subprojects: "%{value} болон холбогдох дэд төслүүд"
+  label_min_max_length: Дээд - Доод урт
+  label_list: Жагсаалт
+  label_date: Огноо
+  label_integer: Бүхэл тоо
+  label_float: Бутархай тоо
+  label_boolean: Үнэн худал утга
+  label_string: Текст
+  label_text: Урт текст
+  label_attribute: Аттрибут
+  label_attribute_plural: Аттрибутууд
+  label_download: "%{count} Татаж авсан зүйл"
+  label_download_plural: "%{count} Татаж авсан зүйлс"
+  label_no_data: Үзүүлэх өгөгдөл байхгүй байна
+  label_change_status: Төлвийг өөрчлөх
+  label_history: Түүх
+  label_attachment: Файл
+  label_attachment_new: Шинэ файл
+  label_attachment_delete: Файл устгах
+  label_attachment_plural: Файлууд
+  label_file_added: Файл нэмэгдлээ
+  label_report: Тайлан
+  label_report_plural: Тайлангууд 
+  label_news: Мэдээ
+  label_news_new: Шинэ мэдээ
+  label_news_plural: Мэдээ
+  label_news_latest: Сүүлийн үеийн мэдээнүүд
+  label_news_view_all: Бүх мэдээг харах
+  label_news_added: Мэдээ нэмэгдлээ
+  label_change_log: Өөрчлөлтийн лог
+  label_settings: Тохиргоо
+  label_overview: Эхлэл
+  label_version: Хувилбар
+  label_version_new: Шинэ хувилбар
+  label_version_plural: Хувилбарууд
+  label_close_versions: Гүйцэт хувилбаруудыг хаалаа
+  label_confirmation: Баталгаажуулах
+  label_export_to: 'Өөр авч болох формат:'
+  label_read: Унших...
+  label_public_projects: Олон нийтийн төслүүд
+  label_open_issues: нээлттэй
+  label_open_issues_plural: нээлттэй
+  label_closed_issues: хаалттай
+  label_closed_issues_plural: хаалттай
+  label_x_open_issues_abbr_on_total:
+    zero:  0 нээлттэй / %{total}
+    one:   1 нээлттэй / %{total}
+    other: "%{count} нээлттэй / %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 нээлттэй
+    one:   1 нээлттэй
+    other: "%{count} нээлттэй"
+  label_x_closed_issues_abbr:
+    zero:  0 хаалттай
+    one:   1 хаалттай
+    other: "%{count} хаалттай"
+  label_total: Нийт
+  label_permissions: Зөвшөөрлүүд
+  label_current_status: Одоогийн төлөв
+  label_new_statuses_allowed: Шинээр олгож болох төлвүүд
+  label_all: бүгд
+  label_none: хоосон
+  label_nobody: хэн ч биш
+  label_next: Дараагийн
+  label_previous: Өмнөх
+  label_used_by: Хэрэглэгддэг
+  label_details: Дэлгэрэнгүй
+  label_add_note: Тэмдэглэл нэмэх
+  label_per_page: Нэг хуудсанд
+  label_calendar: Календарь
+  label_months_from: Саруудыг хаанаас
+  label_gantt: Гант диаграм
+  label_internal: Дотоод
+  label_last_changes: "сүүлийн %{count} өөрчлөлтүүд"
+  label_change_view_all: Бүх өөрчлөлтүүдийг харах
+  label_personalize_page: Энэ хуудсыг өөрт зориулан өөрчлөх
+  label_comment: Тайлбар
+  label_comment_plural: Тайлбарууд
+  label_x_comments:
+    zero: сэтгэгдэл байхгүй
+    one: 1 сэтгэгдэлтэй
+    other: "%{count} сэтгэгдэлтэй"
+  label_comment_add: Тайлбар нэмэх
+  label_comment_added: Тайлбар нэмэгдлээ
+  label_comment_delete: Тайлбарууд устгах
+  label_query: Хэрэглэгчийн тодорхойлсон асуулт
+  label_query_plural: Хэрэглэгчийн тодорхойлсон асуултууд
+  label_query_new: Шинээр хэрэглэгчийн тодорхойлсон асуулт үүсгэх
+  label_filter_add: Шүүлтүүр нэмэх
+  label_filter_plural: Шүүлтүүрүүд
+  label_equals: бол
+  label_not_equals: биш
+  label_in_less_than: аас бага
+  label_in_more_than: аас их
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: дотор
+  label_today: өнөөдөр
+  label_all_time: бүх хугацаа
+  label_yesterday: өчигдөр
+  label_this_week: энэ долоо хоног
+  label_last_week: өнгөрсөн долоо хоног
+  label_last_n_days: "сүүлийн %{count} өдрүүд"
+  label_this_month: энэ сар
+  label_last_month: сүүлийн сар
+  label_this_year: энэ жил
+  label_date_range: Хязгаар огноо
+  label_less_than_ago: бага өдрийн дотор
+  label_more_than_ago: их өдрийн дотор
+  label_ago: өдрийн өмнө
+  label_contains: агуулж байгаа
+  label_not_contains: агуулаагүй
+  label_day_plural: өдрүүд
+  label_repository: Репозитори
+  label_repository_plural: Репозиторууд
+  label_browse: Үзэх
+  label_modification: "%{count} өөрчлөлт"
+  label_modification_plural: "%{count} өөрчлөлтүүд"
+  label_branch: Салбар
+  label_tag: Шошго 
+  label_revision: Хувилбар
+  label_revision_plural: Хувилбарууд
+  label_revision_id: "%{value} Хувилбар"
+  label_associated_revisions: Хамааралтай хувилбарууд
+  label_added: нэмэгдсэн
+  label_modified: өөрчлөгдсөн
+  label_copied: хуулсан
+  label_renamed: нэрийг нь өөрчилсөн
+  label_deleted: устгасан
+  label_latest_revision: Сүүлийн үеийн хувилбар
+  label_latest_revision_plural: Сүүлийн үеийн хувилбарууд
+  label_view_revisions: Хувилбаруудыг харах
+  label_view_all_revisions: Бүх хувилбаруудыг харах
+  label_max_size: Maximum size
+  label_sort_highest: Хамгийн дээр
+  label_sort_higher: Дээш нь
+  label_sort_lower: Доош нь
+  label_sort_lowest: Хамгийн доор
+  label_roadmap: Хөтөч
+  label_roadmap_due_in: "%{value} дотор дуусгах"
+  label_roadmap_overdue: "%{value} оройтсон"
+  label_roadmap_no_issues: Энэ хувилбарт асуудал байхгүй байна
+  label_search: Хайх
+  label_result_plural: Үр дүн
+  label_all_words: Бүх үгс
+  label_wiki: Вики
+  label_wiki_edit: Вики засвар
+  label_wiki_edit_plural: Вики засварууд
+  label_wiki_page: Вики хуудас
+  label_wiki_page_plural: Вики хуудас
+  label_index_by_title: Гарчгаар эрэмбэлэх
+  label_index_by_date: Огноогоор эрэмбэлэх
+  label_current_version: Одоогийн хувилбар
+  label_preview: Ямар харагдахыг шалгах
+  label_feed_plural: Feeds
+  label_changes_details: Бүх өөрчлөлтүүдийн дэлгэрэнгүй
+  label_issue_tracking: Асуудал хянах
+  label_spent_time: Зарцуулсан хугацаа
+  label_f_hour: "%{value} цаг"
+  label_f_hour_plural: "%{value} цаг"
+  label_time_tracking: Хугацааг хянах
+  label_change_plural: Өөрчлөлтүүд
+  label_statistics: Статистик
+  label_commits_per_month: Сард хийсэн коммитын тоо
+  label_commits_per_author: Зохиогч бүрийн хувьд коммитын тоо
+  label_view_diff: Ялгаануудыг харах
+  label_diff_inline: дотор нь
+  label_diff_side_by_side: зэрэгцүүлж
+  label_options: Тохиргоо
+  label_copy_workflow_from: Ажлын дарааллыг хуулах
+  label_permissions_report: Зөвшөөрлүүдийн таблиц
+  label_watched_issues: Ажиглагдаж байгаа асуудлууд
+  label_related_issues: Хамааралтай асуудлууд
+  label_applied_status: Олгосон төлөв
+  label_loading: Ачаалж байна...
+  label_relation_new: Шинэ хамаарал
+  label_relation_delete: Хамаарлыг устгах
+  label_relates_to: энгийн хамааралтай
+  label_duplicates: хос хамааралтай
+  label_duplicated_by: давхардуулсан эзэн
+  label_blocks: шаардах хамааралтай
+  label_blocked_by: блоколсон эзэн
+  label_precedes: урьдчилах хамааралтай
+  label_follows: дагаж
+  label_end_to_start: хойноос нь урагшаа
+  label_end_to_end: хойноос нь хойшоо
+  label_start_to_start: урдаас нь урагаа
+  label_start_to_end: урдаас нь хойшоо
+  label_stay_logged_in: Энэ комьютер дээр санах
+  label_disabled: идэвхгүй болсон
+  label_show_completed_versions: Гүйцэд хувилбаруудыг харуулах
+  label_me: би
+  label_board: Форум
+  label_board_new: Шинэ форум
+  label_board_plural: Форумууд
+  label_board_locked: Түгжээтэй
+  label_board_sticky: Sticky
+  label_topic_plural: Сэдвүүд
+  label_message_plural: Зурвасууд
+  label_message_last: Сүүлийн зурвас
+  label_message_new: Шинэ зурвас
+  label_message_posted: Зурвас нэмэгдлээ
+  label_reply_plural: Хариултууд
+  label_send_information: Дансны мэдээллийг хэрэглэгчид илгээх
+  label_year: Жил
+  label_month: Сар
+  label_week: Долоо хоног
+  label_date_from: Хэзээнээс
+  label_date_to: Хэдий хүртэл
+  label_language_based: Хэрэглэгчийн хэлнас шалтгаалан
+  label_sort_by: "%{value} талбараар нь эрэмбэлэх"
+  label_send_test_email: Турших мэйл илгээх
+  label_feeds_access_key: RSS хандах түлхүүр
+  label_missing_feeds_access_key: RSS хандах түлхүүр алга
+  label_feeds_access_key_created_on: "RSS хандалтын түлхүүр %{value}-ийн өмнө үүссэн"
+  label_module_plural: Модулууд
+  label_added_time_by: "%{author} %{age}-ийн өмнө нэмсэн"
+  label_updated_time_by: "%{author} %{age}-ийн өмнө өөрчилсөн"
+  label_updated_time: "%{value} -ийн өмнө өөрчлөгдсөн"
+  label_jump_to_a_project: Төсөл рүү очих...
+  label_file_plural: Файлууд
+  label_changeset_plural: Өөрчлөлтүүд
+  label_default_columns: Стандарт баганууд
+  label_no_change_option: (Өөрчлөлт байхгүй)
+  label_bulk_edit_selected_issues: Сонгогдсон асуудлуудыг бөөнөөр засварлах
+  label_theme: Системийн Дизайн
+  label_default: Стандарт
+  label_search_titles_only: Зөвхөн гарчиг хайх
+  label_user_mail_option_all: "Миний бүх төсөл дээрх бүх үзэгдлүүдийн хувьд"
+  label_user_mail_option_selected: "Сонгогдсон төслүүдийн хувьд бүх үзэгдэл дээр..."
+  label_user_mail_no_self_notified: "Миний өөрийн хийсэн өөрчлөлтүүдийн тухай надад мэдэгдэх хэрэггүй"
+  label_registration_activation_by_email: дансыг имэйлээр идэвхжүүлэх
+  label_registration_manual_activation: дансыг гараар идэвхжүүлэх
+  label_registration_automatic_activation: дансыг автоматаар идэвхжүүлэх
+  label_display_per_page: 'Нэг хуудсанд: %{value}'
+  label_age: Нас
+  label_change_properties: Тохиргоог өөрчлөх
+  label_general: Ерөнхий
+  label_more: Цааш нь
+  label_scm: SCM
+  label_plugins: Модулууд
+  label_ldap_authentication: LDAP нэвтрэх горим
+  label_downloads_abbr: D/L
+  label_optional_description: Дурын тайлбар
+  label_add_another_file: Дахин файл нэмэх
+  label_preferences: Тохиргоо
+  label_chronological_order: Цагаан толгойн үсгийн дарааллаар
+  label_reverse_chronological_order: Урвуу цагаан толгойн үсгийн дарааллаар
+  label_planning: Төлөвлөлт
+  label_incoming_emails: Ирсэн мэйлүүд
+  label_generate_key: Түлхүүр үүсгэх
+  label_issue_watchers: Ажиглагчид
+  label_example: Жишээ
+  label_display: Display
+  label_sort: Sort
+  label_ascending: Ascending
+  label_descending: Descending
+  label_date_from_to: From %{start} to %{end}
+  label_wiki_content_added: Wiki page added
+  label_wiki_content_updated: Wiki page updated
+  label_group: Group
+  label_group_plural: Groups
+  label_group_new: New group
+  label_time_entry_plural: Spent time
+  label_version_sharing_none: Not shared
+  label_version_sharing_descendants: With subprojects
+  label_version_sharing_hierarchy: With project hierarchy
+  label_version_sharing_tree: With project tree
+  label_version_sharing_system: With all projects
+  label_update_issue_done_ratios: Update issue done ratios
+  label_copy_source: Source
+  label_copy_target: Target
+  label_copy_same_as_target: Same as target
+  label_display_used_statuses_only: Only display statuses that are used by this tracker
+  label_api_access_key: API access key
+  label_missing_api_access_key: Missing an API access key
+  label_api_access_key_created_on: "API access key created %{value} ago"
+  
+  button_login: Нэвтрэх
+  button_submit: Илгээх
+  button_save: Хадгалах
+  button_check_all: Бүгдийг сонго
+  button_uncheck_all: Бүгдийг үл сонго
+  button_delete: Устгах
+  button_create: Үүсгэх
+  button_create_and_continue: Үүсгээд цааш үргэлжлүүлэх
+  button_test: Турших
+  button_edit: Засварлах
+  button_add: Нэмэх
+  button_change: Өөрчлөх
+  button_apply: Өөрчлөлтийг хадгалах
+  button_clear: Цэвэрлэх
+  button_lock: Түгжих
+  button_unlock: Түгжээг тайлах
+  button_download: Татах
+  button_list: Жагсаалт
+  button_view: Харах
+  button_move: Зөөх
+  button_move_and_follow: Зөө бас дага
+  button_back: Буцах
+  button_cancel: Болих
+  button_activate: Идэвхжүүлэх
+  button_sort: Эрэмбэлэх
+  button_log_time: Лог хийсэн хугацаа
+  button_rollback: Энэ хувилбар руу буцах
+  button_watch: Ажиглах
+  button_unwatch: Ажиглахаа болих
+  button_reply: Хариулах
+  button_archive: Архивлах
+  button_unarchive: Архивыг задлах
+  button_reset: Анхны утгууд
+  button_rename: Нэрийг нь солих
+  button_change_password: Нууц үгээ өөрчлөх
+  button_copy: Хуулах
+  button_copy_and_follow: Зөө бас дага
+  button_annotate: Тайлбар хавсаргах
+  button_update: Шинэчлэх
+  button_configure: Тохируулах
+  button_quote: Ишлэл
+  button_duplicate: Хуулбар
+  button_show: Үзэх
+  
+  status_active: идэвхтэй
+  status_registered: бүртгүүлсэн
+  status_locked: түгжээтэй
+  
+  version_status_open: нээлттэй
+  version_status_locked: түгжээтэй
+  version_status_closed: хаалттай
+
+  field_active: идэвхтэй
+  
+  text_select_mail_notifications: Ямар үед имэйлээр мэдэгдэл илгээхийг сонгоно уу.
+  text_regexp_info: eg. ^[A-Z0-9]+$
+  text_min_max_length_info: 0 гэвэл ямар ч хязгааргүй гэсэн үг
+  text_project_destroy_confirmation: Та энэ төсөл болоод бусад мэдээллийг нь үнэхээр устгамаар байна уу ?
+  text_subprojects_destroy_warning: "Уг төслийн дэд төслүүд : %{value} нь бас устгагдах болно."
+  text_workflow_edit: Ажлын дарааллыг өөрчлөхийн тулд хандалтын эрх болон асуудлын чиглэлийг сонгоно уу
+  text_are_you_sure: Та итгэлтэй байна уу ?
+  text_journal_changed: "%{label} %{old} байсан нь %{new} болов"
+  text_journal_set_to: "%{label} %{value} болгож өөрчиллөө"
+  text_journal_deleted: "%{label} устсан (%{old})"
+  text_journal_added: "%{label} %{value} нэмэгдсэн"
+  text_tip_issue_begin_day: энэ өдөр эхлэх ажил
+  text_tip_issue_end_day: энэ өдөр дуусах ажил
+  text_tip_issue_begin_end_day: энэ өдөр эхлээд мөн дуусч байгаа ажил
+  text_project_identifier_info: 'Зөвхөн жижиг үсгүүд болон (a-z), тоо and дундуур зураас ашиглаж болно.<br />Нэгэнт хадгалсан хойно, төслийн глобал нэрийг өөрлчөх боломжгүй.'
+  text_caracters_maximum: "дээд тал нь %{count} үсэг."
+  text_caracters_minimum: "Хамгийн багадаа ядаж %{count} тэмдэгт байх."
+  text_length_between: "Урт нь багадаа %{min}, ихдээ %{max} тэмдэгт."
+  text_tracker_no_workflow: Энэхүү асуудлын чиглэлд ямар ч ажлын дараалал тодорхойлогдоогүй байна
+  text_unallowed_characters: Хэрэглэж болохгүй тэмдэгтүүд
+  text_comma_separated: Таслалаар зааглан олон утга оруулж болно.
+  text_line_separated: Multiple values allowed (one line for each value).
+  text_issues_ref_in_commit_messages: Коммитийн зурвасуудад хамааруулсан болон байнгын асуудлууд
+  text_issue_added: "Асуудал %{id} - ийг хэрэглэгч %{author} мэдэгдсэн байна."
+  text_issue_updated: "Асуудал %{id} - ийг хэрэглэгч %{author} өөрчилсөн байна."
+  text_wiki_destroy_confirmation: Та энэ вики болон холбогдох бүх мэдээллийг үнэхээр устгамаар байна уу ?
+  text_issue_category_destroy_question: "Энэ ангилалд зарим асуудлууд (%{count})  орсон байна. Та яах вэ ?"
+  text_issue_category_destroy_assignments: Асуудлуудыг энэ ангиллаас авах
+  text_issue_category_reassign_to: Асуудлуудыг энэ ангилалд дахин оноох
+  text_user_mail_option: "Сонгогдоогүй төслүүдийн хувьд, та зөвхөн өөрийнхөө ажиглаж байгаа зүйлс юмуу танд хамаатай зүйлсийн талаар мэдэгдэл авах болно (Таны оруулсан асуудал, эсвэл танд оноосон гэх мэт)."
+  text_no_configuration_data: "Хандалтын эрхүүд, чиглэлүүд, асуудлын төлвүүд болон ажлын дарааллын тухай мэдээллийг хараахан оруулаагүй байна.\nТа стандарт өгөгдлүүдийг даруйхан оруулахыг зөвлөж байна, оруулсан хойно та засварлаж болно."
+  text_load_default_configuration: Стандарт өгөгдлийг ачаалах
+  text_status_changed_by_changeset: "%{value} өөрчлөлтөд хийгдсэн."
+  text_issues_destroy_confirmation: 'Та сонгогдсон асуудлуудыг үнэхээр устгамаар байна уу ?'
+  text_select_project_modules:  'Энэ төслийн хувьд идэвхжүүлэх модулуудаа сонгоно уу:'
+  text_default_administrator_account_changed: Стандарт администраторын бүртгэл өөрчлөгдлөө
+  text_file_repository_writable: Хавсралт файл хадгалах хавтас руу бичих эрхтэй
+  text_plugin_assets_writable: Плагин модулийн ассет хавтас руу бичих эрхтэй
+  text_rmagick_available: RMagick суулгагдсан (заавал биш)
+  text_destroy_time_entries_question: "Таны устгах гэж байгаа асуудлууд дээр нийт %{hours} цаг зарцуулсан юм байна, та яах вэ ?"
+  text_destroy_time_entries: Мэдэгдсэн цагуудыг устгах
+  text_assign_time_entries_to_project: Мэдэгдсэн асуудлуудыг төсөлд оноох
+  text_reassign_time_entries: 'Мэдэгдсэн асуудлуудыг энэ асуудалд дахин оноо:'
+  text_user_wrote: "%{value} бичихдээ:"
+  text_enumeration_destroy_question: "Энэ утгад %{count} обьект оноогдсон байна."
+  text_enumeration_category_reassign_to: 'Тэдгээрийг энэ утгад дахин оноо:'
+  text_email_delivery_not_configured: "Имэйлийн тохиргоог хараахан тохируулаагүй байна, тиймээс имэйл мэдэгдэл явуулах боломжгүй байна.\nSMTP сервэрээ config/configuration.yml файл дотор тохируулаад төслийн менежерээ дахиад эхлүүлээрэй."
+  text_repository_usernames_mapping: "Репозиторийн логд байгаа бүх хэрэглэгчийн нэрүүдэд харгалзсан Төслийн Менежер системд бүртгэлтэй хэрэглэгчдийг Сонгох юмуу шинэчилнэ үү.\nТөслийн менежер болон репозиторид байгаа ижилхэн нэр юмуу имэйлтэй хэрэглэгчид харилцан харгалзна."
+  text_diff_truncated: '... Файлын ялгаврын хэмжээ үзүүлэхэд дэндүү урт байгаа учраас төгсгөлөөс нь хасч үзүүлэв.'
+  text_custom_field_possible_values_info: 'One line for each value'
+  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
+  text_wiki_page_nullify_children: "Keep child pages as root pages"
+  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
+  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
+  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
+  
+  default_role_manager: Менежер
+  default_role_developer: Хөгжүүлэгч
+  default_role_reporter: Мэдэгдэгч
+  default_tracker_bug: Алдаа
+  default_tracker_feature: Онцлог
+  default_tracker_support: Тусламж
+  default_issue_status_new: Шинэ
+  default_issue_status_in_progress: Ахицтай
+  default_issue_status_assigned: Оноогдсон
+  default_issue_status_resolved: Шийдвэрлэгдсэн
+  default_issue_status_feedback: Feedback
+  default_issue_status_closed: Хаагдсан
+  default_issue_status_rejected: Хүлээж аваагүй
+  default_doc_category_user: Хэрэглэгчийн бичиг баримт
+  default_doc_category_tech: Техникийн бичиг баримт
+  default_priority_low: Бага
+  default_priority_normal: Хэвийн
+  default_priority_high: Өндөр
+  default_priority_urgent: Нэн яаралтай
+  default_priority_immediate: Нэн даруй
+  default_activity_design: Дизайн
+  default_activity_development: Хөгжүүлэлт
+  
+  enumeration_issue_priorities: Асуудлын зэрэглэлүүд
+  enumeration_doc_categories: Бичиг баримтын ангиллууд
+  enumeration_activities: Үйл ажиллагаанууд (хугацааг хянах)
+  enumeration_system_activity: Системийн үйл ажиллагаа
+
+  permission_manage_subtasks: Manage subtasks
+  label_profile: Profile
+  field_parent_issue: Parent task
+  error_unable_delete_issue_status: Unable to delete issue status
+  label_subtask_plural: Subtasks
+  label_project_copy_notifications: Send email notifications during the project copy
+  error_can_not_delete_custom_field: Unable to delete custom field
+  error_unable_to_connect: Unable to connect (%{value})
+  error_can_not_remove_role: This role is in use and can not be deleted.
+  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
+  field_principal: Principal
+  label_my_page_block: My page block
+  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
+  text_zoom_out: Zoom out
+  text_zoom_in: Zoom in
+  notice_unable_delete_time_entry: Unable to delete time log entry.
+  label_overall_spent_time: Overall spent time
+  field_time_entries: Log time
+  project_module_gantt: Gantt
+  project_module_calendar: Calendar
+  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
+  text_are_you_sure_with_children: Delete issue and all child issues?
+  field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
+  setting_commit_logtime_activity_id: Activity for logged time
+  text_time_logged_by_changeset: Applied in changeset %{value}.
+  setting_commit_logtime_enabled: Enable time logging
+  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
+  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Коммит хийх үед харуулах текстүүдийн энкодинг
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/nl.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/nl.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -5,25 +5,28 @@
       # Use the strftime parameters for formats.
       # When no format has been given, it uses default.
       # You can provide other formats here if you like!
-      default: "%Y-%m-%d"
-      short: "%b %d"
-      long: "%B %d, %Y"
+      default: "%d-%m-%Y"
+      short: "%e %b"
+      long: "%d %B, %Y"
       
-    day_names: [Zondag, Maandag, Dinsdag, Woensdag, Donderdag, Vrijdag, Zaterdag]
-    abbr_day_names: [Zo, Ma, Di, Woe, Do, Vr, Zat]
+    day_names: [zondag, maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag]
+    abbr_day_names: [zo, ma, di, wo, do, vr, za]
       
     # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, Januari, Februari, Maart, April, Mei, Juni, Juli, Augustus, September, Oktober, November, December]
-    abbr_month_names: [~, Jan, Feb, Mar, Apr, Mei, Jun, Jul, Aug, Sep, Okt, Nov, Dec]
+    month_names: [~, januari, februari, maart, april, mei, juni, juli, augustus, september, oktober, november, december]
+    abbr_month_names: [~, jan, feb, mar, apr, mei, jun, jul, aug, sep, okt, nov, dec]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
       default: "%a, %d %b %Y %H:%M:%S %z"
       time: "%H:%M"
-      short: "%d %b %H:%M"
-      long: "%B %d, %Y %H:%M"
+      short: "%e %b %H:%M"
+      long: "%d %B, %Y %H:%M"
     am: "am"
     pm: "pm"
       
@@ -32,7 +35,7 @@
       half_a_minute: "halve minuut"
       less_than_x_seconds:
         one:   "minder dan een seconde"
-        other: "mindera dan %{count} seconden"
+        other: "minder dan %{count} seconden"
       x_seconds:
         one:   "1 seconde"
         other: "%{count} seconden"
@@ -56,13 +59,13 @@
         other: "%{count} maanden"
       about_x_years:
         one:   "ongeveer 1 jaar"
-        other: "ongeveer %{count} jaren"
+        other: "ongeveer %{count} jaar"
       over_x_years:
-        one:   "over 1 jaar"
-        other: "over %{count} jaren"
+        one:   "meer dan 1 jaar"
+        other: "meer dan %{count} jaar"
       almost_x_years:
-        one:   "almost 1 year"
-        other: "almost %{count} years"
+        one:   "bijna 1 jaar"
+        other: "bijna %{count} jaar"
 
   number:
     format:
@@ -94,8 +97,8 @@
     errors:
       template:
         header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
+          one:    "Door een fout kon dit %{model} niet worden opgeslagen"
+          other:  "Door %{count} fouten kon dit %{model} niet worden opgeslagen"
       messages:
         inclusion: "staat niet in de lijst"
         exclusion: "is gereserveerd"
@@ -143,7 +146,7 @@
   button_edit: Bewerk
   button_list: Lijst
   button_lock: Sluit
-  button_log_time: Log tijd
+  button_log_time: Registreer tijd
   button_login: Inloggen
   button_move: Verplaatsen
   button_quote: Citaat
@@ -211,7 +214,7 @@
   field_default_value: Standaardwaarde
   field_delay: Vertraging
   field_description: Beschrijving
-  field_done_ratio: % Gereed
+  field_done_ratio: "% Gereed"
   field_downloads: Downloads
   field_due_date: Verwachte datum gereed
   field_effective_date: Datum
@@ -280,7 +283,7 @@
   general_csv_separator: ';'
   general_first_day_of_week: '7'
   general_lang_name: 'Nederlands'
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_text_No: 'Nee'
   general_text_Yes: 'Ja'
   general_text_no: 'nee'
@@ -513,9 +516,9 @@
     one:   1 project
     other: "%{count} projects"
   label_public_projects: Publieke projecten
-  label_query: Eigen zoekvraag
-  label_query_new: Nieuwe zoekvraag
-  label_query_plural: Eigen zoekvragen
+  label_query: Eigen zoekopdracht
+  label_query_new: Nieuwe zoekopdracht
+  label_query_plural: Eigen zoekopdrachten
   label_read: Lees...
   label_register: Registreer
   label_registered_on: Geregistreerd op
@@ -581,7 +584,7 @@
   label_used_by: Gebruikt door
   label_user: Gebruiker
   label_user_activity: "%{value}'s activiteit"
-  label_user_mail_no_self_notified: "Ik wil niet op de hoogte gehouden worden van wijzigingen die ik zelf maak."
+  label_user_mail_no_self_notified: Ik wil niet op de hoogte gehouden worden van mijn eigen wijzigingen
   label_user_mail_option_all: "Bij elk gebeurtenis in al mijn projecten..."
   label_user_mail_option_selected: "Enkel bij elke gebeurtenis op het geselecteerde project..."
   label_user_new: Nieuwe gebruiker
@@ -699,7 +702,6 @@
   setting_autologin: Automatisch inloggen
   setting_bcc_recipients: Blind carbon copy ontvangers (bcc)
   setting_commit_fix_keywords: Gefixeerde trefwoorden
-  setting_commit_logs_encoding: Encodering van commit berichten
   setting_commit_ref_keywords: Refererende trefwoorden
   setting_cross_project_issue_relations: Sta crossproject issuerelaties toe
   setting_date_format: Datumformaat
@@ -718,7 +720,7 @@
   setting_mail_from: Afzender e-mail adres
   setting_mail_handler_api_enabled: Schakel WS in voor inkomende mail.
   setting_mail_handler_api_key: API sleutel
-  setting_per_page_options: Objects per pagina-opties
+  setting_per_page_options: Aantal objecten per pagina (opties)
   setting_plain_text_mail: platte tekst (geen HTML)
   setting_protocol: Protocol
   setting_repositories_encodings: Repositories coderingen
@@ -742,7 +744,7 @@
   text_destroy_time_entries: Verwijder gerapporteerde uren
   text_destroy_time_entries_question: "%{hours} uren werden gerapporteerd op de issue(s) die u wilde verwijderen. Wat wil u doen?"
   text_diff_truncated: '... Deze diff werd afgekort omdat het de maximale weer te geven karakters overschreed.'
-  text_email_delivery_not_configured: "E-mailbezorging is niet geconfigureerd. Notificaties zijn uitgeschakeld.\nConfigureer uw SMTP server in config/configuration.yml en herstart de applicatie om dit te activeren."
+  text_email_delivery_not_configured: "E-mailbezorging is niet geconfigureerd. Mededelingen zijn uitgeschakeld.\nConfigureer uw SMTP server in config/configuration.yml en herstart de applicatie om dit te activeren."
   text_enumeration_category_reassign_to: 'Wijs de volgende waarde toe:'
   text_enumeration_destroy_question: "%{count} objecten zijn toegewezen aan deze waarde."
   text_file_repository_writable: Bestandsrepository beschrijfbaar
@@ -773,7 +775,7 @@
   text_tip_issue_end_day: issue die op deze dag eindigt
   text_tracker_no_workflow: Geen workflow gedefinieerd voor deze tracker
   text_unallowed_characters: Niet toegestane tekens
-  text_user_mail_option: "Bij niet-geselecteerde projecten zult u enkel notificaties ontvangen voor issues die u monitort of waar u bij betrokken bent (als auteur of toegewezen persoon)."
+  text_user_mail_option: "Bij niet-geselecteerde projecten zult u enkel mededelingen ontvangen voor issues die u monitort of waar u bij betrokken bent (als auteur of toegewezen persoon)."
   text_user_wrote: "%{value} schreef:"
   text_wiki_destroy_confirmation: Weet u zeker dat u deze wiki en zijn inhoud wenst te verwijderen?
   text_workflow_edit: Selecteer een rol en een tracker om de workflow te wijzigen
@@ -795,7 +797,7 @@
   label_date_from_to: Van %{start} tot %{end}
   label_greater_or_equal: ">="
   label_less_or_equal: <=
-  text_wiki_page_destroy_question: Deze pagina heeft %{descendants} subpagina's en onderliggende pagina's?. Wil wil je ermee doen?
+  text_wiki_page_destroy_question: Deze pagina heeft %{descendants} subpagina's en onderliggende pagina's?. Wat wilt u hiermee doen?
   text_wiki_page_reassign_children: Alle subpagina's toewijzen aan deze hoofdpagina
   text_wiki_page_nullify_children: Behoud subpagina's als hoofdpagina's
   text_wiki_page_destroy_children: Verwijder alle subpagina's en onderliggende pagina's
@@ -804,9 +806,9 @@
   mail_subject_wiki_content_updated: "'%{id}' wiki pagina is bijgewerkt"
   label_wiki_content_added: Wiki pagina toegevoegd
   mail_subject_wiki_content_added: "'%{id}' wiki pagina is toegevoegd"
-  mail_body_wiki_content_added: The '%{id}' wiki pagina is toegevoegd door %{author}.
+  mail_body_wiki_content_added: De '%{id}' wiki pagina is toegevoegd door %{author}.
   label_wiki_content_updated: Wiki pagina bijgewerkt
-  mail_body_wiki_content_updated: The '%{id}' wiki pagina is bijgewerkt door %{author}.
+  mail_body_wiki_content_updated: De '%{id}' wiki pagina is bijgewerkt door %{author}.
   permission_add_project: Maak project
   setting_new_project_user_role_id: Rol van gebruiker die een project maakt
   label_view_all_revisions: Bekijk alle revisies
@@ -895,30 +897,64 @@
   text_zoom_in: Zoom in
   notice_unable_delete_time_entry: Verwijderen niet mogelijk van tijd log invoer.
   label_overall_spent_time: Totaal bestede tijd
-  field_time_entries: Log tijd
+  field_time_entries: Registreer tijd
   project_module_gantt: Gantt
   project_module_calendar: Kalender
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
+  button_edit_associated_wikipage: "Bewerk bijbehorende wiki pagina: %{page_title}"
+  text_are_you_sure_with_children: Verwijder issue en alle onderliggende issues?
+  field_text: Tekst veld
+  label_user_mail_option_only_owner: Alleen voor dingen waarvan ik de auteur ben
+  setting_default_notification_option: Standaard instelling voor mededelingen
+  label_user_mail_option_only_my_events: Alleen voor dingen die ik volg of bij betrokken ben
+  label_user_mail_option_only_assigned: Alleen voor dingen die aan mij zijn toegewezen
+  label_user_mail_option_none: Bij geen enkele gebeurtenis
   field_member_of_group: Assignee's group
   field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
+  notice_not_authorized_archived_project: Het project dat u wilt bezoeken is gearchiveerd.
+  label_principal_search: "Zoek naar gebruiker of groep:"
+  label_user_search: "Zoek naar gebruiker:"
+  field_visible: Zichtbaar
   setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
+  setting_commit_logtime_activity_id: Standaard activiteit voor tijdregistratie
+  text_time_logged_by_changeset: Toegepast in changeset %{value}.
+  setting_commit_logtime_enabled: Activeer tijdregistratie
+  notice_gantt_chart_truncated: De gantt chart is ingekort omdat het meer objecten bevat dan kan worden weergegeven, (%{max})
+  setting_gantt_items_limit: Max. aantal objecten op gantt chart
+  field_warn_on_leaving_unsaved: Waarschuw me wanneer ik een pagina verlaat waarvan de tekst niet opgeslagen is
+  text_warn_on_leaving_unsaved: De huidige pagina bevat tekst die niet is opgeslagen en dit zal verloren gaan als u deze pagina nu verlaat.
+  label_my_queries: Mijn aangepaste zoekopdrachten
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Commentaar toegevoegd aan een nieuwsitem
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Encodering van commit berichten
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/no.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/no.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -13,7 +13,10 @@
     abbr_day_names: [søn, man, tir, ons, tor, fre, lør]
     month_names: [~, januar, februar, mars, april, mai, juni, juli, august, september, oktober, november, desember]
     abbr_month_names: [~, jan, feb, mar, apr, mai, jun, jul, aug, sep, okt, nov, des]
-    order: [:day, :month, :year]
+    order:
+      - :day
+      - :month
+      - :year
   time:
     formats:
       default: "%A, %e. %B %Y, %H:%M"
@@ -124,7 +127,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: Kontoen er oppdatert.
@@ -232,7 +235,7 @@
   field_attr_mail: E-post-attributt
   field_onthefly: On-the-fly brukeropprettelse
   field_start_date: Start
-  field_done_ratio: % Ferdig
+  field_done_ratio: "% Ferdig"
   field_auth_source: Autentifikasjonsmodus
   field_hide_mail: Skjul min e-post-adresse
   field_comments: Kommentarer
@@ -719,7 +722,6 @@
   text_email_delivery_not_configured: "Levering av e-post er ikke satt opp, og varsler er skrudd av.\nStill inn din SMTP-tjener i config/configuration.yml og start programmet på nytt for å skru det på."
   field_parent_title: Foreldreside
   label_issue_watchers: Overvåkere
-  setting_commit_logs_encoding: Tegnkoding for innsendingsmeldinger
   button_quote: Sitat
   setting_sequential_project_identifiers: Generer sekvensielle prosjekt-IDer
   notice_unable_delete_version: Kan ikke slette versjonen
@@ -927,3 +929,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Tegnkoding for innsendingsmeldinger
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/pl.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/pl.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -45,7 +45,10 @@
     
     month_names: [~, Styczeń, Luty, Marzec, Kwiecień, Maj, Czerwiec, Lipiec, Sierpień, Wrzesień, Październik, Listopad, Grudzień]
     abbr_month_names: [~, sty, lut, mar, kwi, maj, cze, lip, sie, wrz, paź, lis, gru]
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -228,7 +231,7 @@
   field_default_value: Domyślny
   field_delay: Opóźnienie
   field_description: Opis
-  field_done_ratio: % Wykonane
+  field_done_ratio: "% Wykonane"
   field_downloads: Pobrań
   field_due_date: Data oddania
   field_effective_date: Data
@@ -294,9 +297,9 @@
   field_version: Wersja
   field_vf_personnel: Personel
   field_vf_watcher: Obserwator
-  general_csv_decimal_separator: '.'
+  general_csv_decimal_separator: ','
   general_csv_encoding: UTF-8
-  general_csv_separator: ','
+  general_csv_separator: ';'
   general_first_day_of_week: '1'
   general_lang_name: 'Polski'
   general_pdf_encoding: UTF-8
@@ -730,7 +733,6 @@
   setting_autologin: Auto logowanie
   setting_bcc_recipients: Odbiorcy kopii tajnej (kt/bcc)
   setting_commit_fix_keywords: Słowa zmieniające status
-  setting_commit_logs_encoding: Kodowanie komentarzy zatwierdzeń
   setting_commit_ref_keywords: Słowa tworzące powiązania
   setting_cross_project_issue_relations: Zezwól na powiązania zagadnień między projektami
   setting_date_format: Format daty
@@ -864,7 +866,7 @@
   button_show: Pokaż
   error_can_not_archive_project: Ten projekt nie może zostać zarchiwizowany
   error_can_not_reopen_issue_on_closed_version: Zagadnienie przydzielone do zakończonej wersji nie może zostać ponownie otwarte
-  error_issue_done_ratios_not_updated: % wykonania zagadnienia nie został uaktualniony.
+  error_issue_done_ratios_not_updated: "% wykonania zagadnienia nie został uaktualniony."
   error_workflow_copy_source: Proszę wybrać źródłowy typ zagadnienia lub rolę
   error_workflow_copy_target: Proszę wybrać docelowe typ(y) zagadnień i rolę(e)
   field_sharing: Współdzielenie
@@ -895,7 +897,7 @@
   setting_default_projects_modules: Domyślnie włączone moduły dla nowo tworzonych projektów
   setting_gravatar_default: Domyślny obraz Gravatar
   setting_issue_done_ratio: Obliczaj postęp realizacji zagadnień za pomocą
-  setting_issue_done_ratio_issue_field: % Wykonania zagadnienia
+  setting_issue_done_ratio_issue_field: "% Wykonania zagadnienia"
   setting_issue_done_ratio_issue_status: Statusu zagadnienia
   setting_mail_handler_body_delimiters: Przycinaj e-maile po jednej z tych linii
   setting_rest_api_enabled: Uaktywnij usługę sieciową REST
@@ -957,3 +959,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kodowanie komentarzy zatwierdzeń
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/pt-BR.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/pt-BR.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -12,7 +12,10 @@
     abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb]
     month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro]
     abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez]
-    order: [:day,:month,:year]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -155,7 +158,7 @@
   general_csv_separator: ';'
   general_csv_decimal_separator: ','
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
 
   notice_account_updated: Conta atualizada com sucesso.
@@ -265,7 +268,7 @@
   field_attr_mail: Atributo para e-mail
   field_onthefly: Criar usuários dinamicamente ("on-the-fly")
   field_start_date: Início
-  field_done_ratio: % Terminado
+  field_done_ratio: "% Terminado"
   field_auth_source: Modo de autenticação
   field_hide_mail: Ocultar meu e-mail
   field_comments: Comentário
@@ -314,8 +317,7 @@
   setting_cross_project_issue_relations: Permitir relacionar tarefas entre projetos
   setting_issue_list_default_columns: Colunas padrão visíveis na lista de tarefas
   setting_repositories_encodings: Codificação dos repositórios
-  setting_commit_logs_encoding: Codificação das mensagens de commit
-  setting_emails_footer: Rodapé dos e-mails
+  setting_emails_footer: Rodapé do e-mail
   setting_protocol: Protocolo
   setting_per_page_options: Número de itens exibidos por página
   setting_user_format: Formato de exibição de nome de usuário
@@ -354,6 +356,9 @@
   label_issues_by: "Tarefas por %{value}"
   label_issue_added: Tarefa adicionada
   label_issue_updated: Tarefa atualizada
+  label_issue_note_added: Nota adicionada
+  label_issue_status_updated: Situação atualizada
+  label_issue_priority_updated: Prioridade atualizada
   label_document: Documento
   label_document_new: Novo documento
   label_document_plural: Documentos
@@ -557,7 +562,7 @@
   label_spent_time: Tempo gasto
   label_f_hour: "%{value} hora"
   label_f_hour_plural: "%{value} horas"
-  label_time_tracking: Controle de horas
+  label_time_tracking: Registro de horas
   label_change_plural: Alterações
   label_statistics: Estatísticas
   label_commits_per_month: Commits por mês
@@ -754,7 +759,7 @@
 
   enumeration_issue_priorities: Prioridade das tarefas
   enumeration_doc_categories: Categorias de documento
-  enumeration_activities: Atividades (time tracking)
+  enumeration_activities: Atividades (registro de horas)
   notice_unable_delete_version: Não foi possível excluir a versão
   label_renamed: renomeado
   label_copied: copiado
@@ -943,20 +948,51 @@
   setting_default_notification_option: Opção padrão de notificação
   label_user_mail_option_only_my_events: Somente para as coisas que eu esteja observando ou esteja envolvido
   label_user_mail_option_only_assigned: Somente para as coisas que estejam atribuídas a mim
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  label_user_mail_option_none: Sem eventos
+  field_member_of_group: Grupo do responsável
+  field_assigned_to_role: Papel do responsável
+  notice_not_authorized_archived_project: O projeto que você está tentando acessar foi arquivado.
+  label_principal_search: "Pesquisar por usuários ou grupos:"
+  label_user_search: "Pesquisar por usuário:"
+  field_visible: Visível
+  setting_emails_header: Cabeçalho do e-mail
+  setting_commit_logtime_activity_id: Atividade para registrar horas
+  text_time_logged_by_changeset: Aplicado no changeset %{value}.
+  setting_commit_logtime_enabled: Habilitar registro de horas
+  notice_gantt_chart_truncated: O gráfico foi cortado por exceder o tamanho máximo de linhas que podem ser exibidas (%{max})
+  setting_gantt_items_limit: Número máximo de itens exibidos no gráfico gatt
+  field_warn_on_leaving_unsaved: Alertar-me ao sarir de uma página sem salvar o texto
+  text_warn_on_leaving_unsaved: A página atual contem texto que não foi salvo e será perdido se você sair desta página.
+  label_my_queries: Minhas consultas personalizadas
+  text_journal_changed_no_detail: "%{label} atualizado(a)"
+  label_news_comment_added: Notícia recebeu um comentário
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Codificação das mensagens de commit
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/pt.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/pt.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,6 @@
 # Portuguese localization for Ruby on Rails
 # by Ricardo Otero <oterosantos@gmail.com>
+# by Alberto Ferreira <toraxic@gmail.com>
 pt:
   support:
     array:
@@ -17,7 +18,10 @@
     abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb]
     month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro]
     abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez]
-    order: [:day, :month, :year]
+    order:
+      - :day
+      - :month
+      - :year
     
   time:
     formats:        
@@ -141,7 +145,7 @@
   general_csv_separator: ';'
   general_csv_decimal_separator: ','
   general_csv_encoding: ISO-8859-15
-  general_pdf_encoding: ISO-8859-15
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: A conta foi actualizada com sucesso.
@@ -228,7 +232,7 @@
   field_homepage: Página
   field_is_public: Público
   field_parent: Sub-projecto de
-  field_is_in_roadmap: Tarefas mostradas no roadmap
+  field_is_in_roadmap: Tarefas mostradas no mapa de planificação
   field_login: Nome de utilizador
   field_mail_notification: Notificações por e-mail
   field_admin: Administrador
@@ -248,9 +252,9 @@
   field_attr_firstname: Atributo nome próprio
   field_attr_lastname: Atributo último nome
   field_attr_mail: Atributo e-mail
-  field_onthefly: Criação de utilizadores na hora
+  field_onthefly: Criação imediata de utilizadores
   field_start_date: Início
-  field_done_ratio: % Completo
+  field_done_ratio: "% Completo"
   field_auth_source: Modo de autenticação
   field_hide_mail: Esconder endereço de e-mail
   field_comments: Comentário
@@ -264,7 +268,7 @@
   field_is_filter: Usado como filtro
   field_issue_to: Tarefa relacionada
   field_delay: Atraso
-  field_assignable: As tarefas podem ser associados a esta função
+  field_assignable: As tarefas podem ser associadas a esta função
   field_redirect_existing_links: Redireccionar ligações existentes
   field_estimated_hours: Tempo estimado
   field_column_names: Colunas
@@ -299,7 +303,6 @@
   setting_cross_project_issue_relations: Permitir relações entre tarefas de projectos diferentes
   setting_issue_list_default_columns: Colunas na lista de tarefas por omissão
   setting_repositories_encodings: Encodings dos repositórios
-  setting_commit_logs_encoding: Encoding das mensagens de commit
   setting_emails_footer: Rodapé do e-mails
   setting_protocol: Protocolo
   setting_per_page_options: Opções de objectos por página
@@ -522,7 +525,7 @@
   label_sort_higher: Mover para cima
   label_sort_lower: Mover para baixo
   label_sort_lowest: Mover para o fim
-  label_roadmap: Roadmap
+  label_roadmap: Planificação
   label_roadmap_due_in: "Termina em %{value}"
   label_roadmap_overdue: "Atrasado %{value}"
   label_roadmap_no_issues: Sem tarefas para esta versão
@@ -922,25 +925,59 @@
   project_module_calendar: Calendário
   button_edit_associated_wikipage: "Editar página Wiki associada: %{page_title}"
   text_are_you_sure_with_children: Apagar tarefa e todas as sub-tarefas?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_text: Campo de texto
+  label_user_mail_option_only_owner: Apenas para tarefas das quais sou proprietário
+  setting_default_notification_option: Opção predefinida de notificação
+  label_user_mail_option_only_my_events: Apenas para tarefas que observo ou em que estou envolvido
+  label_user_mail_option_only_assigned: Apenas para tarefas que me foram atribuídas
+  label_user_mail_option_none: Sem eventos
+  field_member_of_group: Grupo do detentor de atribuição
+  field_assigned_to_role: Papel do detentor de atribuição
+  notice_not_authorized_archived_project: O projecto a que tentou aceder foi arquivado.
+  label_principal_search: "Procurar utilizador ou grupo:"
+  label_user_search: "Procurar utilizador:"
+  field_visible: Visível
+  setting_emails_header: Cabeçalho dos e-mails
+  setting_commit_logtime_activity_id: Actividade para tempo registado
+  text_time_logged_by_changeset: Aplicado no conjunto de alterações %{value}.
+  setting_commit_logtime_enabled: Activar registo de tempo
+  notice_gantt_chart_truncated: O gráfico foi truncado porque excede o número máximo de itens visível (%{máx.})
+  setting_gantt_items_limit: Número máximo de itens exibidos no gráfico Gantt
   field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Encoding das mensagens de commit
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/ro.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/ro.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -14,7 +14,10 @@
     month_names: [~, Ianuarie, Februarie, Martie, Aprilie, Mai, Iunie, Iulie, August, Septembrie, Octombrie, Noiembrie, Decembrie]
     abbr_month_names: [~, Ian, Feb, Mar, Apr, Mai, Iun, Iul, Aug, Sep, Oct, Noi, Dec]
     # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -291,7 +294,6 @@
   setting_cross_project_issue_relations: Permite legături de tichete între proiecte
   setting_issue_list_default_columns: Coloane implicite afișate în lista de tichete
   setting_repositories_encodings: Codare pentru depozit
-  setting_commit_logs_encoding: Codare pentru mesaje
   setting_emails_footer: Subsol email
   setting_protocol: Protocol
   setting_per_page_options: Număr de obiecte pe pagină
@@ -933,3 +935,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Codare pentru mesaje
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/ru.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/ru.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -28,7 +28,10 @@
     abbr_month_names: [~, янв., февр., марта, апр., мая, июня, июля, авг., сент., окт., нояб., дек.]
     standalone_abbr_month_names: [~, янв., февр., март, апр., май, июнь, июль, авг., сент., окт., нояб., дек.]
 
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -261,7 +264,7 @@
   default_issue_status_closed: Закрыта
   default_issue_status_feedback: Обратная связь
   default_issue_status_new: Новая
-  default_issue_status_rejected: Отказ
+  default_issue_status_rejected: Отклонена
   default_issue_status_resolved: Решена
   default_priority_high: Высокий
   default_priority_immediate: Немедленный
@@ -272,7 +275,7 @@
   default_role_manager: Менеджер
   default_role_reporter: Генератор отчетов
   default_tracker_bug: Ошибка
-  default_tracker_feature: Изменение
+  default_tracker_feature: Улучшение
   default_tracker_support: Поддержка
 
   enumeration_activities: Действия (учет времени)
@@ -605,7 +608,7 @@
   label_optional_description: Описание (опционально)
   label_options: Опции
   label_overall_activity: Сводная активность
-  label_overview: Просмотр
+  label_overview: Обзор
   label_password_lost: Восстановление пароля
   label_permissions_report: Отчет о правах доступа
   label_permissions: Права доступа
@@ -862,7 +865,6 @@
   setting_bcc_recipients: Использовать скрытые списки (BCC)
   setting_cache_formatted_text: Кешировать форматированный текст
   setting_commit_fix_keywords: Назначение ключевых слов
-  setting_commit_logs_encoding: Кодировка комментариев в хранилище
   setting_commit_ref_keywords: Ключевые слова для поиска
   setting_cross_project_issue_relations: Разрешить пересечение задач по проектам
   setting_date_format: Формат даты
@@ -1044,12 +1046,46 @@
   field_visible: Видимый
   setting_emails_header: Заголовок письма
 
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  setting_commit_logtime_activity_id: Активность для учета времени
+  text_time_logged_by_changeset: Учтено в редакции %{value}.
+  setting_commit_logtime_enabled: Включить учет времени
+  notice_gantt_chart_truncated: Диаграмма будет усечена, поскольку превышено максимальное кол-во элементов, которые могут отображаться (%{max})
+  setting_gantt_items_limit: Максимальное кол-во элементов отображаемых на диаграмме Ганта
+  field_warn_on_leaving_unsaved: Предупреждать при закратии страницы с несохраненным текстом
+  text_warn_on_leaving_unsaved: Текущая страница содержит несохраненный текст, который будет потерян, если вы покинете эту страницу.
+  label_my_queries: Мои сохраненные запросы
+  text_journal_changed_no_detail: "%{label} обновлено"
+  label_news_comment_added: Добавлен комментарий к новости
+  button_expand_all: Развернуть все
+  button_collapse_all: Свернуть все
+  label_additional_workflow_transitions_for_assignee: Дополнительные переходы, когда пользователь является исполнителем
+  label_additional_workflow_transitions_for_author: Дополнительные переходы, когда пользователь является автором
+  label_bulk_edit_selected_time_entries: Массовое изменение выбранных записей затраченного времени времени 
+  text_time_entries_destroy_confirmation: Вы уверены что хотите удалить выбраные записи затраченного времени?
+  label_role_anonymous: Аноним
+  label_role_non_member: Не участник
+  label_issue_note_added: Примечание добавлено
+  label_issue_status_updated: Статус обновлен
+  label_issue_priority_updated: Приоритет обновлен
+  label_issues_visibility_own: Задачи созданные или назначенные пользователю
+  field_issues_visibility: Видимость задач
+  label_issues_visibility_all: Все задачи
+  permission_set_own_issues_private: Устанавливать видимость (общая/частная) для собственных задач
+  field_is_private: Частная
+  permission_set_issues_private: Устанавливать видимость (общая/частная) для задач
+  label_issues_visibility_public: Только общие задачи
+  text_issues_destroy_descendants_confirmation: Так же будет удалено %{count} задачи.
+  field_commit_logs_encoding: Кодировка комментариев в хранилище
+  field_scm_path_encoding: Кодировка пути
+  text_scm_path_encoding_note: "По умолчанию: UTF-8"
+  field_path_to_repository: Путь к репозиторию
+  field_root_directory: Корневую директорию
+  field_cvs_module: Модуль
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Локальный и bare репозиторий (например, /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Локальный репозиторий (например, /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/sk.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/sk.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -16,7 +16,10 @@
     month_names: [~, Január, Február, Marec, Apríl, Máj, Jún, Júl, August, September, Október, November, December]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, Máj, Jún, Júl, Aug, Sep, Okt, Nov, Dec]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -236,7 +239,7 @@
   field_attr_mail: Email (atribut)
   field_onthefly: Automatické vytváranie užívateľov
   field_start_date: Začiatok
-  field_done_ratio: % hotovo
+  field_done_ratio: "% hotovo"
   field_auth_source: Autentifikačný mód
   field_hide_mail: Nezobrazovať môj email
   field_comments: Komentár
@@ -726,7 +729,6 @@
   text_email_delivery_not_configured: "Doručenie emailov nieje nastavené, notifikácie sú vypnuté.\nNastavte váš SMTP server v config/configuration.yml a reštartnite aplikáciu pre aktiváciu funkcie."
   field_parent_title: Nadradená stránka
   label_issue_watchers: Pozorovatelia
-  setting_commit_logs_encoding: Kódovanie prenášaných správ
   button_quote: Citácia
   setting_sequential_project_identifiers: Generovať sekvenčné identifikátory projektov
   notice_unable_delete_version: Verzia nemôže byť zmazaná
@@ -935,3 +937,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kódovanie prenášaných správ
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/sl.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/sl.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -16,7 +16,10 @@
     month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -132,7 +135,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: UTF-8
-  general_pdf_encoding: UFT-8
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: Račun je bil uspešno posodobljen.
@@ -241,7 +244,7 @@
   field_attr_mail: Oznaka za e-naslov
   field_onthefly: Sprotna izdelava uporabnikov
   field_start_date: Začetek
-  field_done_ratio: % Narejeno
+  field_done_ratio: "% Narejeno"
   field_auth_source: Način overovljanja
   field_hide_mail: Skrij moj e-naslov
   field_comments: Komentar
@@ -291,7 +294,6 @@
   setting_cross_project_issue_relations: Dovoli povezave zahtevkov med različnimi projekti
   setting_issue_list_default_columns: Privzeti stolpci prikazani na seznamu zahtevkov
   setting_repositories_encodings: Kodiranje shrambe
-  setting_commit_logs_encoding: Kodiranje sporočil ob predaji
   setting_emails_footer: Noga e-sporočil
   setting_protocol: Protokol
   setting_per_page_options: Število elementov na stran
@@ -936,3 +938,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kodiranje sporočil ob predaji
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/sr-YU.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/sr-YU.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,942 +1,978 @@
-# Serbian translations for Redmine
-# by Vladimir Medarović (vlada@medarovic.com)
-sr-YU:
-  direction: ltr
-  date:
-    formats:
-      # Use the strftime parameters for formats.
-      # When no format has been given, it uses default.
-      # You can provide other formats here if you like!
-      default: "%d.%m.%Y."
-      short: "%e %b"
-      long: "%B %e, %Y"
-      
-    day_names: [nedelja, ponedeljak, utorak, sreda, četvrtak, petak, subota]
-    abbr_day_names: [ned, pon, uto, sre, čet, pet, sub]
-      
-    # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, januar, februar, mart, april, maj, jun, jul, avgust, septembar, oktobar, novembar, decembar]
-    abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, avg, sep, okt, nov, dec]
-    # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
-
-  time:
-    formats:
-      default: "%d.%m.%Y. u %H:%M"
-      time: "%H:%M"
-      short: "%d. %b u %H:%M"
-      long: "%d. %B %Y u %H:%M"
-    am: "am"
-    pm: "pm"
-
-  datetime:
-    distance_in_words:
-      half_a_minute: "pola minuta"
-      less_than_x_seconds:
-        one:   "manje od jedne sekunde"
-        other: "manje od %{count} sek."
-      x_seconds:
-        one:   "jedna sekunda"
-        other: "%{count} sek."
-      less_than_x_minutes:
-        one:   "manje od minuta"
-        other: "manje od %{count} min."
-      x_minutes:
-        one:   "jedan minut"
-        other: "%{count} min."
-      about_x_hours:
-        one:   "približno jedan sat"
-        other: "približno %{count} sati"
-      x_days:
-        one:   "jedan dan"
-        other: "%{count} dana"
-      about_x_months:
-        one:   "približno jedan mesec"
-        other: "približno %{count} meseci"
-      x_months:
-        one:   "jedan mesec"
-        other: "%{count} meseci"
-      about_x_years:
-        one:   "približno godinu dana"
-        other: "približno %{count} god."
-      over_x_years:
-        one:   "preko godinu dana"
-        other: "preko %{count} god."
-      almost_x_years:
-        one:   "skoro godinu dana"
-        other: "skoro %{count} god."
-
-  number:
-    format:
-      separator: ","
-      delimiter: ""
-      precision: 3
-    human:
-      format:
-        delimiter: ""
-        precision: 1
-      storage_units:
-        format: "%n %u"
-        units:
-          byte:
-            one: "Byte"
-            other: "Bytes"
-          kb: "KB"
-          mb: "MB"
-          gb: "GB"
-          tb: "TB"
-
-
-# Used in array.to_sentence.
-  support:
-    array:
-      sentence_connector: "i"
-      skip_last_comma: false
-      
-  activerecord:
-    errors:
-      template:
-        header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
-      messages:
-        inclusion: "nije uključen u spisak"
-        exclusion: "je rezervisan"
-        invalid: "je neispravan"
-        confirmation: "potvrda ne odgovara"
-        accepted: "mora biti prihvaćen"
-        empty: "ne može biti prazno"
-        blank: "ne može biti prazno"
-        too_long: "je predugačka (maksimum znakova je %{count})"
-        too_short: "je prekratka (minimum znakova je %{count})"
-        wrong_length: "je pogrešne dužine (broj znakova mora biti %{count})"
-        taken: "je već u upotrebi"
-        not_a_number: "nije broj"
-        not_a_date: "nije ispravan datum"
-        greater_than: "mora biti veći od %{count}"
-        greater_than_or_equal_to: "mora biti veći ili jednak %{count}"
-        equal_to: "mora biti jednak %{count}"
-        less_than: "mora biti manji od %{count}"
-        less_than_or_equal_to: "mora biti manji ili jednak %{count}"
-        odd: "mora biti paran"
-        even: "mora biti neparan"
-        greater_than_start_date: "mora biti veći od početnog datuma"
-        not_same_project: "ne pripada istom projektu"
-        circular_dependency: "Ova veza će stvoriti kružnu referencu"
-        cant_link_an_issue_with_a_descendant: "Problem ne može biti povezan sa jednim od svojih podzadataka"
-
-  actionview_instancetag_blank_option: Molim odaberite
-  
-  general_text_No: 'Ne'
-  general_text_Yes: 'Da'
-  general_text_no: 'ne'
-  general_text_yes: 'da'
-  general_lang_name: 'Srpski'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
-  general_csv_encoding: UTF-8
-  general_pdf_encoding: UTF-8
-  general_first_day_of_week: '1'
-  
-  notice_account_updated: Nalog je uspešno ažuriran.
-  notice_account_invalid_creditentials: Neispravno korisničko ime ili lozinka.
-  notice_account_password_updated: Lozinka je uspešno ažurirana.
-  notice_account_wrong_password: Pogrešna lozinka
-  notice_account_register_done: Korisnički nalog je uspešno kreiran. Kliknite na link koji ste dobili u e-poruci za aktivaciju.
-  notice_account_unknown_email: Nepoznat korisnik.
-  notice_can_t_change_password: Ovaj korisnički nalog za potvrdu identiteta koristi spoljni izvor. Nemoguće je promeniti lozinku.
-  notice_account_lost_email_sent: Poslata vam je e-poruka sa uputstvom za izbor nove lozinke
-  notice_account_activated: Vaš korisnički nalog je aktiviran. Sada se možete prijaviti.
-  notice_successful_create: Uspešno kreiranje.
-  notice_successful_update: Uspešno ažuriranje.
-  notice_successful_delete: Uspešno brisanje.
-  notice_successful_connection: Uspešno povezivanje.
-  notice_file_not_found: Strana kojoj želite pristupiti ne postoji ili je uklonjena.
-  notice_locking_conflict: Podatak je ažuriran od strane drugog korisnika.
-  notice_not_authorized: Niste ovlašćeni za pristup ovoj strani.
-  notice_email_sent: "E-poruka je poslata na %{value}"
-  notice_email_error: "Dogodila se greška prilikom slanja e-poruke (%{value})"
-  notice_feeds_access_key_reseted: Vaš RSS pristupni ključ je poništen.
-  notice_api_access_key_reseted: Vaš API pristupni ključ je poništen.
-  notice_failed_to_save_issues: "Neuspešno snimanje %{count} problema od %{total} odabranih: %{ids}."
-  notice_failed_to_save_members: "Neuspešno snimanje člana(ova): %{errors}."
-  notice_no_issue_selected: "Ni jedan problem nije odabran! Molimo, odaberite problem koji želite da menjate."
-  notice_account_pending: "Vaš nalog je kreiran i čeka na odobrenje administratora."
-  notice_default_data_loaded: Podrazumevano konfigurisanje je uspešno učitano.
-  notice_unable_delete_version: Verziju je nemoguće izbrisati.
-  notice_unable_delete_time_entry: Stavku evidencije vremena je nemoguće izbrisati.
-  notice_issue_done_ratios_updated: Odnos rešenih problema je ažuriran.
-  
-  error_can_t_load_default_data: "Podrazumevano konfigurisanje je nemoguće učitati: %{value}"
-  error_scm_not_found: "Stavka ili ispravka nisu pronađene u spremištu."
-  error_scm_command_failed: "Greška se javila prilikom pokušaja pristupa spremištu: %{value}"
-  error_scm_annotate: "Stavka ne postoji ili ne može biti označena."
-  error_issue_not_found_in_project: 'Problem nije pronađen ili ne pripada ovom projektu.'
-  error_no_tracker_in_project: 'Ni jedno praćenje nije povezano sa ovim projektom. Molimo proverite podešavanja projekta.'
-  error_no_default_issue_status: 'Podrazumevani status problema nije definisan. Molimo proverite vaše konfigurisanje (idite na "Administracija -> Statusi problema").'
-  error_can_not_delete_custom_field: Nemoguće je izbrisati prilagođeno polje
-  error_can_not_delete_tracker: "Ovo praćenje sadrži probleme i ne može biti obrisano."
-  error_can_not_remove_role: "Ova uloga je u upotrebi i ne može biti obrisana."
-  error_can_not_reopen_issue_on_closed_version: 'Problem dodeljen zatvorenoj verziji ne može biti ponovo otvoren'
-  error_can_not_archive_project: Ovaj projekat se ne može arhivirati
-  error_issue_done_ratios_not_updated: "Odnos rešenih problema nije ažuriran."
-  error_workflow_copy_source: 'Molimo odaberite izvorno praćenje ili ulogu'
-  error_workflow_copy_target: 'Molimo odaberite odredišno praćenje i ulogu'
-  error_unable_delete_issue_status: 'Status problema je nemoguće obrisati'
-  error_unable_to_connect: "Povezivanje sa (%{value}) je nemoguće"  
-  warning_attachments_not_saved: "%{count} datoteka ne može biti snimljena."
-  
-  mail_subject_lost_password: "Vaša %{value} lozinka"
-  mail_body_lost_password: 'Za promenu vaše lozinke, kliknite na sledeći link:'
-  mail_subject_register: "Aktivacija vašeg %{value} naloga"
-  mail_body_register: 'Za aktivaciju vašeg naloga, kliknite na sledeći link:'
-  mail_body_account_information_external: "Vaš nalog %{value} možete koristiti za prijavu."
-  mail_body_account_information: Informacije o vašem nalogu
-  mail_subject_account_activation_request: "Zahtev za aktivaciju naloga %{value}"
-  mail_body_account_activation_request: "Novi korisnik (%{value}) je registrovan. Nalog čeka na vaše odobrenje:"
-  mail_subject_reminder: "%{count} problema dospeva narednih %{days} dana"
-  mail_body_reminder: "%{count} problema dodeljenih vama dospeva u narednih %{days} dana:"
-  mail_subject_wiki_content_added: "Wiki stranica '%{id}' je dodata"
-  mail_body_wiki_content_added: "%{author} je dodao wiki stranicu '%{id}'."
-  mail_subject_wiki_content_updated: "Wiki stranica '%{id}' je ažurirana"
-  mail_body_wiki_content_updated: "%{author} je ažurirao wiki stranicu '%{id}'."
-  
-  gui_validation_error: jedna greška
-  gui_validation_error_plural: "%{count} grešaka"
-  
-  field_name: Naziv
-  field_description: Opis
-  field_summary: Rezime
-  field_is_required: Obavezno
-  field_firstname: Ime
-  field_lastname: Prezime
-  field_mail: E-adresa
-  field_filename: Datoteka
-  field_filesize: Veličina
-  field_downloads: Preuzimanja
-  field_author: Autor
-  field_created_on: Kreirano
-  field_updated_on: Ažurirano
-  field_field_format: Format
-  field_is_for_all: Za sve projekte
-  field_possible_values: Moguće vrednosti
-  field_regexp: Regularan izraz
-  field_min_length: Minimalna dužina
-  field_max_length: Maksimalna dužina
-  field_value: Vrednost
-  field_category: Kategorija
-  field_title: Naslov
-  field_project: Projekat
-  field_issue: Problem
-  field_status: Status
-  field_notes: Beleške
-  field_is_closed: Zatvoren problem
-  field_is_default: Podrazumevana vrednost
-  field_tracker: Praćenje
-  field_subject: Predmet
-  field_due_date: Krajnji rok
-  field_assigned_to: Dodeljeno
-  field_priority: Prioritet
-  field_fixed_version: Odredišna verzija
-  field_user: Korisnik
-  field_principal: Glavni
-  field_role: Uloga
-  field_homepage: Početna stranica
-  field_is_public: Javno objavljivanje
-  field_parent: Potprojekat od
-  field_is_in_roadmap: Problemi prikazani u planu rada
-  field_login: Korisničko ime
-  field_mail_notification: Obaveštenja putem e-pošte
-  field_admin: Administrator
-  field_last_login_on: Poslednje povezivanje
-  field_language: Jezik
-  field_effective_date: Datum
-  field_password: Lozinka
-  field_new_password: Nova lozinka
-  field_password_confirmation: Potvrda lozinke
-  field_version: Verzija
-  field_type: Tip
-  field_host: Glavni računar
-  field_port: Port
-  field_account: Korisnički nalog
-  field_base_dn: Bazni DN
-  field_attr_login: Atribut prijavljivanja
-  field_attr_firstname: Atribut imena
-  field_attr_lastname: Atribut prezimena
-  field_attr_mail: Atribut e-adrese
-  field_onthefly: Kreiranje korisnika u toku rada
-  field_start_date: Početak
-  field_done_ratio: % urađeno
-  field_auth_source: Režim potvrde identiteta
-  field_hide_mail: Sakrij moju e-adresu
-  field_comments: Komentar
-  field_url: URL
-  field_start_page: Početna stranica
-  field_subproject: Potprojekat
-  field_hours: sati
-  field_activity: Aktivnost
-  field_spent_on: Datum
-  field_identifier: Identifikator
-  field_is_filter: Upotrebi kao filter
-  field_issue_to: Srodni problemi
-  field_delay: Kašnjenje
-  field_assignable: Problem može biti dodeljen ovoj ulozi
-  field_redirect_existing_links: Preusmeri postojeće veze
-  field_estimated_hours: Proteklo vreme
-  field_column_names: Kolone
-  field_time_zone: Vremenska zona
-  field_searchable: Može da se pretražuje
-  field_default_value: Podrazumevana vrednost
-  field_comments_sorting: Prikaži komentare
-  field_parent_title: Matična stranica
-  field_editable: Izmenljivo
-  field_watcher: Posmatrač
-  field_identity_url: OpenID URL
-  field_content: Sadržaj
-  field_group_by: Grupisanje rezultata po
-  field_sharing: Deljenje
-  field_parent_issue: Matični zadatak
-  
-  setting_app_title: Naslov aplikacije
-  setting_app_subtitle: Podnaslov aplikacije
-  setting_welcome_text: Tekst dobrodošlice
-  setting_default_language: Podrazumevani jezik
-  setting_login_required: Obavezna potvrda identiteta
-  setting_self_registration: Samoregistracija
-  setting_attachment_max_size: Maks. veličina priložene datoteke
-  setting_issues_export_limit: Ograničenje izvoza „problema“
-  setting_mail_from: E-adresa pošiljaoca
-  setting_bcc_recipients: Primaoci „Bcc“ kopije
-  setting_plain_text_mail: Poruka sa čistim tekstom (bez HTML-a)
-  setting_host_name: Putanja i naziv glavnog računara
-  setting_text_formatting: Oblikovanje teksta
-  setting_wiki_compression: Kompresija Wiki istorije
-  setting_feeds_limit: Ograničenje sadržaja izvora vesti
-  setting_default_projects_public: Podrazumeva se javno prikazivanje novih projekata
-  setting_autofetch_changesets: Izvršavanje automatskog preuzimanja
-  setting_sys_api_enabled: Omogućavanje WS za upravljanje spremištem
-  setting_commit_ref_keywords: Referenciranje ključnih reči
-  setting_commit_fix_keywords: Popravljanje ključnih reči
-  setting_autologin: Automatska prijava
-  setting_date_format: Format datuma
-  setting_time_format: Format vremena
-  setting_cross_project_issue_relations: Dozvoli povezivanje problema iz unakrsnih projekata
-  setting_issue_list_default_columns: Podrazumevane kolone prikazane na spisku problema
-  setting_repositories_encodings: Kodiranje spremišta
-  setting_commit_logs_encoding: Kodiranje izvršnih poruka
-  setting_emails_footer: Podnožje stranice e-poruke
-  setting_protocol: Protokol
-  setting_per_page_options: Opcije prikaza objekata po stranici
-  setting_user_format: Format prikaza korisnika
-  setting_activity_days_default: Broj dana prikazanih na projektnoj aktivnosti
-  setting_display_subprojects_issues: Prikazuj probleme iz potprojekata na glavnom projektu, ukoliko nije drugačije navedeno
-  setting_enabled_scm: Omogućavanje SCM
-  setting_mail_handler_body_delimiters: "Skraćivanje e-poruke nakon jedne od ovih linija"
-  setting_mail_handler_api_enabled: Omogućavanje WS dolazne e-poruke
-  setting_mail_handler_api_key: API ključ
-  setting_sequential_project_identifiers: Generisanje sekvencijalnog imena projekta
-  setting_gravatar_enabled: Koristi Gravatar korisničke ikone
-  setting_gravatar_default: Podrazumevana Gravatar slika
-  setting_diff_max_lines_displayed: Maks. broj prikazanih različitih linija
-  setting_file_max_size_displayed: Maks. veličina tekst. datoteka prikazanih umetnuto
-  setting_repository_log_display_limit: Maks. broj revizija prikazanih u datoteci za evidenciju
-  setting_openid: Dozvoli OpenID prijavu i registraciju
-  setting_password_min_length: Minimalna dužina lozinke
-  setting_new_project_user_role_id: Kreatoru projekta (koji nije administrator) dodeljuje je uloga
-  setting_default_projects_modules: Podrazumevano omogućeni moduli za nove projekte
-  setting_issue_done_ratio: Izračunaj odnos rešenih problema
-  setting_issue_done_ratio_issue_field: koristeći polje problema
-  setting_issue_done_ratio_issue_status: koristeći status problema
-  setting_start_of_week: Prvi dan u sedmici
-  setting_rest_api_enabled: Omogući REST web usluge
-  setting_cache_formatted_text: Keširanje obrađenog teksta
-  
-  permission_add_project: Kreiranje projekta
-  permission_add_subprojects: Kreiranje potpojekta
-  permission_edit_project: Izmena projekata
-  permission_select_project_modules: Odabiranje modula projekta
-  permission_manage_members: Upravljanje članovima
-  permission_manage_project_activities: Upravljanje projektnim aktivnostima
-  permission_manage_versions: Upravljanje verzijama
-  permission_manage_categories: Upravljanje kategorijama problema
-  permission_view_issues: Pregled problema
-  permission_add_issues: Dodavanje problema
-  permission_edit_issues: Izmena problema
-  permission_manage_issue_relations: Upravljanje vezama između problema
-  permission_add_issue_notes: Dodavanje beleški
-  permission_edit_issue_notes: Izmena beleški
-  permission_edit_own_issue_notes: Izmena sopstvenih beleški
-  permission_move_issues: Pomeranje problema
-  permission_delete_issues: Brisanje problema
-  permission_manage_public_queries: Upravljanje javnim upitima
-  permission_save_queries: Snimanje upita
-  permission_view_gantt: Pregledanje Gantovog dijagrama
-  permission_view_calendar: Pregledanje kalendara
-  permission_view_issue_watchers: Pregledanje spiska posmatrača
-  permission_add_issue_watchers: Dodavanje posmatrača
-  permission_delete_issue_watchers: Brisanje posmatrača
-  permission_log_time: Beleženje utrošenog vremena
-  permission_view_time_entries: Pregledanje utrošenog vremena
-  permission_edit_time_entries: Izmena utrošenog vremena
-  permission_edit_own_time_entries: Izmena sopstvenog utrošenog vremena
-  permission_manage_news: Upravljanje vestima
-  permission_comment_news: Komentarisanje vesti
-  permission_manage_documents: Upravljanje dokumentima
-  permission_view_documents: Pregledanje dokumenata
-  permission_manage_files: Upravljanje datotekama
-  permission_view_files: Pregledanje datoteka
-  permission_manage_wiki: Upravljanje wiki stranicama
-  permission_rename_wiki_pages: Promena imena wiki stranicama
-  permission_delete_wiki_pages: Brisanje wiki stranica
-  permission_view_wiki_pages: Pregledanje wiki stranica
-  permission_view_wiki_edits: Pregledanje wiki istorije
-  permission_edit_wiki_pages: Izmena wiki stranica
-  permission_delete_wiki_pages_attachments: Brisanje priloženih datoteka
-  permission_protect_wiki_pages: Zaštita wiki stranica
-  permission_manage_repository: Upravljanje spremištem
-  permission_browse_repository: Pregledanje spremišta
-  permission_view_changesets: Pregledanje skupa promena
-  permission_commit_access: Potvrda pristupa
-  permission_manage_boards: Upravljanje forumima
-  permission_view_messages: Pregledanje poruka
-  permission_add_messages: Slanje poruka
-  permission_edit_messages: Izmena poruka
-  permission_edit_own_messages: Izmena sopstvenih poruka
-  permission_delete_messages: Brisanje poruka
-  permission_delete_own_messages: Brisanje sopstvenih poruka
-  permission_export_wiki_pages: Izvoz wiki stranica
-  permission_manage_subtasks: Upravljanje podzadacima
-  
-  project_module_issue_tracking: Praćenje problema
-  project_module_time_tracking: Praćenje vremena
-  project_module_news: Vesti
-  project_module_documents: Dokumenti
-  project_module_files: Datoteke
-  project_module_wiki: Wiki
-  project_module_repository: Spremište
-  project_module_boards: Forumi
-  
-  label_user: Korisnik
-  label_user_plural: Korisnici
-  label_user_new: Novi korisnik
-  label_user_anonymous: Anoniman
-  label_project: Projekat
-  label_project_new: Novi projekat
-  label_project_plural: Projekti
-  label_x_projects:
-    zero:  nema projekata
-    one:   jedan projekat
-    other: "%{count} projekata"
-  label_project_all: Svi projekti
-  label_project_latest: Poslednji projekti
-  label_issue: Problem
-  label_issue_new: Novi problem
-  label_issue_plural: Problemi
-  label_issue_view_all: Prikaz svih problema
-  label_issues_by: "Problemi (%{value})"
-  label_issue_added: Problem je dodat
-  label_issue_updated: Problem je ažuriran
-  label_document: Dokument
-  label_document_new: Novi dokument
-  label_document_plural: Dokumenti
-  label_document_added: Dokument je dodat
-  label_role: Uloga
-  label_role_plural: Uloge
-  label_role_new: Nova uloga
-  label_role_and_permissions: Uloge i dozvole
-  label_member: Član
-  label_member_new: Novi član
-  label_member_plural: Članovi
-  label_tracker: Praćenje
-  label_tracker_plural: Praćenja
-  label_tracker_new: Novo praćenje
-  label_workflow: Tok posla
-  label_issue_status: Status problema
-  label_issue_status_plural: Statusi problema
-  label_issue_status_new: Novi status
-  label_issue_category: Kategorija problema
-  label_issue_category_plural: Kategorije problema
-  label_issue_category_new: Nova kategorija
-  label_custom_field: Prilagođeno polje
-  label_custom_field_plural: Prilagođena polja
-  label_custom_field_new: Novo prilagođeno polje
-  label_enumerations: Nabrojiva lista
-  label_enumeration_new: Nova vrednost
-  label_information: Informacija
-  label_information_plural: Informacije
-  label_please_login: Molimo, prijavite se
-  label_register: Registracija
-  label_login_with_open_id_option: ili prijava sa OpenID
-  label_password_lost: Izgubljena lozinka
-  label_home: Početak
-  label_my_page: Moja stranica
-  label_my_account: Moj nalog
-  label_my_projects: Moji projekti
-  label_my_page_block: My page block
-  label_administration: Administracija
-  label_login: Prijava
-  label_logout: Odjava
-  label_help: Pomoć
-  label_reported_issues: Prijavljeni problemi
-  label_assigned_to_me_issues: Problemi dodeljeni meni
-  label_last_login: Poslednje povezivanje
-  label_registered_on: Registrovan
-  label_activity: Aktivnost
-  label_overall_activity: Celokupna aktivnost
-  label_user_activity: "Aktivnost korisnika %{value}"
-  label_new: Novo
-  label_logged_as: Prijavljeni ste kao
-  label_environment: Okruženje
-  label_authentication: Potvrda identiteta
-  label_auth_source: Režim potvrde identiteta
-  label_auth_source_new: Novi režim potvrde identiteta
-  label_auth_source_plural: Režimi potvrde identiteta
-  label_subproject_plural: Potprojekti
-  label_subproject_new: Novi potprojekat
-  label_and_its_subprojects: "%{value} i njegovi potprojekti"
-  label_min_max_length: Min. - Maks. dužina
-  label_list: Spisak
-  label_date: Datum
-  label_integer: Ceo broj
-  label_float: Sa pokretnim zarezom
-  label_boolean: Logički operator
-  label_string: Tekst
-  label_text: Dugi tekst
-  label_attribute: Osobina
-  label_attribute_plural: Osobine
-  label_download: "%{count} preuzimanje"
-  label_download_plural: "%{count} preuzimanja"
-  label_no_data: Nema podataka za prikazivanje
-  label_change_status: Promena statusa
-  label_history: Istorija
-  label_attachment: Datoteka
-  label_attachment_new: Nova datoteka
-  label_attachment_delete: Brisanje datoteke
-  label_attachment_plural: Datoteke
-  label_file_added: Datoteka je dodata
-  label_report: Izveštaj
-  label_report_plural: Izveštaji
-  label_news: Vesti
-  label_news_new: Dodavanje vesti
-  label_news_plural: Vesti
-  label_news_latest: Poslednje vesti
-  label_news_view_all: Prikaz svih vesti
-  label_news_added: Vesti su dodate
-  label_settings: Podešavanja
-  label_overview: Pregled
-  label_version: Verzija
-  label_version_new: Nova verzija
-  label_version_plural: Verzije
-  label_close_versions: Zatvori završene verzije
-  label_confirmation: Potvrda
-  label_export_to: 'Takođe dostupno i u varijanti:'
-  label_read: Čitanje...
-  label_public_projects: Javni projekti
-  label_open_issues: otvoren
-  label_open_issues_plural: otvorenih
-  label_closed_issues: zatvoren
-  label_closed_issues_plural: zatvorenih
-  label_x_open_issues_abbr_on_total:
-    zero:  0 otvorenih / %{total}
-    one:   1 otvoren / %{total}
-    other: "%{count} otvorenih / %{total}"
-  label_x_open_issues_abbr:
-    zero:  0 otvorenih
-    one:   1 otvoren
-    other: "%{count} otvorenih"
-  label_x_closed_issues_abbr:
-    zero:  0 zatvorenih
-    one:   1 zatvoren
-    other: "%{count} zatvorenih"
-  label_total: Ukupno
-  label_permissions: Dozvole
-  label_current_status: Trenutni status
-  label_new_statuses_allowed: Novi statusi dozvoljeni
-  label_all: svi
-  label_none: nijedan
-  label_nobody: nikome
-  label_next: Sledeće
-  label_previous: Prethodno
-  label_used_by: Koristio
-  label_details: Detalji
-  label_add_note: Dodaj belešku
-  label_per_page: Po strani
-  label_calendar: Kalendar
-  label_months_from: meseci od
-  label_gantt: Gantov dijagram
-  label_internal: Unutrašnji
-  label_last_changes: "poslednjih %{count} promena"
-  label_change_view_all: Prikaži sve promene
-  label_personalize_page: Personalizuj ovu stranu
-  label_comment: Komentar
-  label_comment_plural: Komentari
-  label_x_comments:
-    zero: bez komentara
-    one: jedan komentar
-    other: "%{count} komentara"
-  label_comment_add: Dodaj komentar
-  label_comment_added: Komentar dodat
-  label_comment_delete: Obriši komentare
-  label_query: Prilagođen upit
-  label_query_plural: Prilagođeni upiti
-  label_query_new: Novi upit
-  label_filter_add: Dodavanje filtera
-  label_filter_plural: Filteri
-  label_equals: je
-  label_not_equals: nije
-  label_in_less_than: manje od
-  label_in_more_than: više od
-  label_greater_or_equal: '>='
-  label_less_or_equal: '<='
-  label_in: u
-  label_today: danas
-  label_all_time: sve vreme
-  label_yesterday: juče
-  label_this_week: ove sedmice
-  label_last_week: poslednje sedmice
-  label_last_n_days: "poslednjih %{count} dana"
-  label_this_month: ovog meseca
-  label_last_month: poslednjeg meseca
-  label_this_year: ove godine
-  label_date_range: Vremenski period
-  label_less_than_ago: pre manje od nekoliko dana
-  label_more_than_ago: pre više od nekoliko dana
-  label_ago: pre nekoliko dana
-  label_contains: sadrži
-  label_not_contains: ne sadrži
-  label_day_plural: dana
-  label_repository: Spremište
-  label_repository_plural: Spremišta
-  label_browse: Pregledanje
-  label_modification: "%{count} promena"
-  label_modification_plural: "%{count} promena"
-  label_branch: Grana
-  label_tag: Oznaka
-  label_revision: Revizija
-  label_revision_plural: Revizije
-  label_revision_id: "Revizija %{value}"
-  label_associated_revisions: Pridružene revizije
-  label_added: dodato
-  label_modified: promenjeno
-  label_copied: kopirano
-  label_renamed: preimenovano
-  label_deleted: izbrisano
-  label_latest_revision: Poslednja revizija
-  label_latest_revision_plural: Poslednje revizije
-  label_view_revisions: Pregled revizija
-  label_view_all_revisions: Pregled svih revizija
-  label_max_size: Maksimalna veličina
-  label_sort_highest: Premeštanje na vrh
-  label_sort_higher: Premeštanje na gore
-  label_sort_lower: Premeštanje na dole
-  label_sort_lowest: Premeštanje na dno
-  label_roadmap: Plan rada
-  label_roadmap_due_in: "Dospeva %{value}"
-  label_roadmap_overdue: "%{value} najkasnije"
-  label_roadmap_no_issues: Nema problema za ovu verziju
-  label_search: Pretraga
-  label_result_plural: Rezultati
-  label_all_words: Sve reči
-  label_wiki: Wiki
-  label_wiki_edit: Wiki izmena
-  label_wiki_edit_plural: Wiki izmene
-  label_wiki_page: Wiki stranica
-  label_wiki_page_plural: Wiki stranice
-  label_index_by_title: Indeksiranje po naslovu
-  label_index_by_date: Indeksiranje po datumu
-  label_current_version: Trenutna verzija
-  label_preview: Pregled
-  label_feed_plural: Izvori vesti
-  label_changes_details: Detalji svih promena
-  label_issue_tracking: Praćenje problema
-  label_spent_time: Utrošeno vreme
-  label_overall_spent_time: Celokupno utrošeno vreme
-  label_f_hour: "%{value} sat"
-  label_f_hour_plural: "%{value} sati"
-  label_time_tracking: Praćenje vremena
-  label_change_plural: Promene
-  label_statistics: Statistika
-  label_commits_per_month: Izvršenja mesečno
-  label_commits_per_author: Izvršenja po autoru
-  label_view_diff: Pogledaj razlike
-  label_diff_inline: unutra
-  label_diff_side_by_side: uporedo
-  label_options: Opcije
-  label_copy_workflow_from: Kopiranje toka posla od
-  label_permissions_report: Izveštaj o dozvolama
-  label_watched_issues: Posmatrani problemi
-  label_related_issues: Srodni problemi
-  label_applied_status: Primenjeni statusi
-  label_loading: Učitavanje...
-  label_relation_new: Nova relacija
-  label_relation_delete: Brisanje relacije
-  label_relates_to: srodnih sa
-  label_duplicates: dupliranih
-  label_duplicated_by: dupliranih od
-  label_blocks: odbijenih
-  label_blocked_by: odbijenih od
-  label_precedes: prethodi
-  label_follows: praćenih
-  label_end_to_start: od kraja do početka
-  label_end_to_end: od kraja do kraja
-  label_start_to_start: od početka do početka
-  label_start_to_end: od početka do kraja
-  label_stay_logged_in: Ostanite prijavljeni
-  label_disabled: onemogućeno
-  label_show_completed_versions: Prikazivanje završene verzije
-  label_me: meni
-  label_board: Forum
-  label_board_new: Novi forum
-  label_board_plural: Forumi
-  label_board_locked: Zaključana
-  label_board_sticky: Lepljiva
-  label_topic_plural: Teme
-  label_message_plural: Poruke
-  label_message_last: Poslednja poruka
-  label_message_new: Nova poruka
-  label_message_posted: Poruka je dodata
-  label_reply_plural: Odgovori
-  label_send_information: Pošalji korisniku detalje naloga
-  label_year: Godina
-  label_month: Mesec
-  label_week: Sedmica
-  label_date_from: Šalje
-  label_date_to: Prima
-  label_language_based: Bazirano na jeziku korisnika
-  label_sort_by: "Sortirano po %{value}"
-  label_send_test_email: Slanje probne e-poruke
-  label_feeds_access_key: RSS pristupni ključ
-  label_missing_feeds_access_key: RSS pristupni ključ nedostaje
-  label_feeds_access_key_created_on: "RSS pristupni ključ je napravljen pre %{value}"
-  label_module_plural: Moduli
-  label_added_time_by: "Dodao %{author} pre %{age}"
-  label_updated_time_by: "Ažurirao %{author} pre %{age}"
-  label_updated_time: "Ažurirano pre %{value}"
-  label_jump_to_a_project: Skok na projekat...
-  label_file_plural: Datoteke
-  label_changeset_plural: Skupovi promena
-  label_default_columns: Podrazumevane kolone
-  label_no_change_option: (Bez promena)
-  label_bulk_edit_selected_issues: Grupna izmena odabranih problema
-  label_theme: Tema
-  label_default: Podrazumevano
-  label_search_titles_only: Pretražuj samo naslove
-  label_user_mail_option_all: "Za bilo koji događaj na svim mojim projektima"
-  label_user_mail_option_selected: "Za bilo koji događaj na samo odabranim projektima..."
-  label_user_mail_no_self_notified: "Ne želim biti obaveštavan za promene koje sam pravim"
-  label_registration_activation_by_email: aktivacija naloga putem e-poruke
-  label_registration_manual_activation: ručna aktivacija naloga
-  label_registration_automatic_activation: automatska aktivacija naloga
-  label_display_per_page: "Broj stavki po stranici: %{value}"
-  label_age: Starost
-  label_change_properties: Promeni svojstva
-  label_general: Opšti
-  label_more: Više
-  label_scm: SCM
-  label_plugins: Dodatne komponente
-  label_ldap_authentication: LDAP potvrda identiteta
-  label_downloads_abbr: D/L
-  label_optional_description: Opciono opis
-  label_add_another_file: Dodaj još jednu datoteku
-  label_preferences: Podešavanja
-  label_chronological_order: po hronološkom redosledu
-  label_reverse_chronological_order: po obrnutom hronološkom redosledu
-  label_planning: Planiranje
-  label_incoming_emails: Dolazne e-poruke
-  label_generate_key: Generisanje ključa
-  label_issue_watchers: Posmatrači
-  label_example: Primer
-  label_display: Prikaz
-  label_sort: Sortiranje
-  label_ascending: Rastući niz
-  label_descending: Opadajući niz
-  label_date_from_to: Od %{start} do %{end}
-  label_wiki_content_added: Wiki stranica je dodata
-  label_wiki_content_updated: Wiki stranica je ažurirana
-  label_group: Grupa
-  label_group_plural: Grupe
-  label_group_new: Nova grupa
-  label_time_entry_plural: Utrošeno vreme
-  label_version_sharing_none: Nije deljeno
-  label_version_sharing_descendants: Sa potprojektima
-  label_version_sharing_hierarchy: Sa hijerarhijom projekta
-  label_version_sharing_tree: Sa stablom projekta
-  label_version_sharing_system: Sa svim projektima
-  label_update_issue_done_ratios: Ažuriraj odnos rešenih problema
-  label_copy_source: Izvor
-  label_copy_target: Odredište
-  label_copy_same_as_target: Isto kao odredište
-  label_display_used_statuses_only: Prikazuj statuse korišćene samo od strane ovog praćenja
-  label_api_access_key: API pristupni ključ
-  label_missing_api_access_key: Nedostaje API pristupni ključ
-  label_api_access_key_created_on: "API pristupni ključ je kreiran pre %{value}"
-  label_profile: Profil
-  label_subtask_plural: Podzadatak
-  label_project_copy_notifications: Pošalji e-poruku sa obaveštenjem prilikom kopiranja projekta 
-  
-  button_login: Prijava
-  button_submit: Pošalji
-  button_save: Snimi
-  button_check_all: Uključi sve
-  button_uncheck_all: Isključi sve
-  button_delete: Izbriši
-  button_create: Kreiraj
-  button_create_and_continue: Kreiraj i nastavi
-  button_test: Test
-  button_edit: Izmeni
-  button_add: Dodaj
-  button_change: Promeni
-  button_apply: Primeni
-  button_clear: Obriši
-  button_lock: Zaključaj
-  button_unlock: Otključaj
-  button_download: Preuzmi
-  button_list: Spisak
-  button_view: Prikaži
-  button_move: Pomeri
-  button_move_and_follow: Pomeri i prati
-  button_back: Nazad
-  button_cancel: Poništi
-  button_activate: Aktiviraj
-  button_sort: Sortiraj
-  button_log_time: Evidentiraj vreme
-  button_rollback: Povratak na ovu verziju
-  button_watch: Prati
-  button_unwatch: Ne prati više
-  button_reply: Odgovori
-  button_archive: Arhiviraj
-  button_unarchive: Vrati iz arhive
-  button_reset: Poništi
-  button_rename: Preimenuj
-  button_change_password: Promeni lozinku
-  button_copy: Kopiraj
-  button_copy_and_follow: Kopiraj i prati
-  button_annotate: Pribeleži
-  button_update: Ažuriraj
-  button_configure: Podesi
-  button_quote: Pod navodnicima
-  button_duplicate: Dupliraj
-  button_show: Prikaži
-  
-  status_active: aktivni
-  status_registered: registrovani
-  status_locked: zaključani
-  
-  version_status_open: otvoren
-  version_status_locked: zaključan
-  version_status_closed: zatvoren
-
-  field_active: Aktivan
-  
-  text_select_mail_notifications: Odaberi akcije za koje će obaveštenje biti poslato putem e-pošte.
-  text_regexp_info: npr. ^[A-Z0-9]+$
-  text_min_max_length_info: 0 znači bez ograničenja
-  text_project_destroy_confirmation: Jeste li sigurni da želite da izbrišete ovaj projekat i sve pripadajuće podatke?
-  text_subprojects_destroy_warning: "Potprojekti: %{value} će takođe biti izbrisan."
-  text_workflow_edit: Odaberite ulogu i praćenje za izmenu toka posla
-  text_are_you_sure: Jeste li sigurni?
-  text_journal_changed: "%{label} promenjen od %{old} u %{new}"
-  text_journal_set_to: "%{label} postavljen u %{value}"
-  text_journal_deleted: "%{label} izbrisano (%{old})"
-  text_journal_added: "%{label} %{value} dodato"
-  text_tip_issue_begin_day: zadatak počinje ovog dana
-  text_tip_issue_end_day: zadatak se završava ovog dana
-  text_tip_issue_begin_end_day: zadatak počinje i završava ovog dana
-  text_project_identifier_info: 'Dozvoljena su samo mala slova (a-š), brojevi i crtice.<br />Jednom snimljen identifikator više se ne može promeniti.'
-  text_caracters_maximum: "Najviše %{count} znak(ova)."
-  text_caracters_minimum: "Broj znakova mora biti najmanje %{count}."
-  text_length_between: "Broj znakova mora biti između %{min} i %{max}."
-  text_tracker_no_workflow: Ovo praćenje nema definisan tok posla
-  text_unallowed_characters: Nedozvoljeni znakovi
-  text_comma_separated: Dozvoljene su višestruke vrednosti (odvojene zarezom).
-  text_line_separated: Dozvoljene su višestruke vrednosti (jedan red za svaku vrednost).
-  text_issues_ref_in_commit_messages: Referenciranje i popravljanje problema u izvršnim porukama
-  text_issue_added: "%{author} je prijavio problem %{id}."
-  text_issue_updated: "%{author} je ažurirao problem %{id}."
-  text_wiki_destroy_confirmation: Jeste li sigurni da želite da obrišete wiki i sav sadržaj?
-  text_issue_category_destroy_question: "Nekoliko problema (%{count}) je dodeljeno ovoj kategoriji. Šta želite da uradite?"
-  text_issue_category_destroy_assignments: Ukloni dodeljene kategorije
-  text_issue_category_reassign_to: Dodeli ponovo probleme ovoj kategoriji
-  text_user_mail_option: "Za neizabrane projekte, dobićete samo obaveštenje o stvarima koje pratite ili ste uključeni (npr. problemi čiji ste vi autor ili zastupnik)."
-  text_no_configuration_data: "Uloge, praćenja, statusi problema i toka posla još uvek nisu podešeni.\nPreporučljivo je da učitate podrazumevano konfigurisanje. Izmena je moguća nakon prvog učitavanja."
-  text_load_default_configuration: Učitaj podrazumevano konfigurisanje
-  text_status_changed_by_changeset: "Primenjeno u skupu sa promenama %{value}."
-  text_issues_destroy_confirmation: 'Jeste li sigurni da želite da izbrišete odabrane probleme?'
-  text_select_project_modules: 'Odaberite module koje želite omogućiti za ovaj projekat:'
-  text_default_administrator_account_changed: Podrazumevani administratorski nalog je promenjen
-  text_file_repository_writable: Fascikla priloženih datoteka je upisiva
-  text_plugin_assets_writable: Fascikla elemenata dodatnih komponenti je upisiva
-  text_rmagick_available: RMagick je dostupan (opciono)
-  text_destroy_time_entries_question: "%{hours} sati je prijavljeno za ovaj problem koji želite izbrisati. Šta želite da uradite?"
-  text_destroy_time_entries: Izbriši prijavljene sate
-  text_assign_time_entries_to_project: Dodeli prijavljene sate projektu
-  text_reassign_time_entries: 'Dodeli ponovo prijavljene sate ovom problemu:'
-  text_user_wrote: "%{value} je napisao:"
-  text_enumeration_destroy_question: "%{count} objekat(a) je dodeljeno ovoj vrednosti."
-  text_enumeration_category_reassign_to: 'Dodeli ih ponovo ovoj vrednosti:'
-  text_email_delivery_not_configured: "Isporuka e-poruka nije konfigurisana i obaveštenja su onemogućena.\nPodesite vaš SMTP server u config/configuration.yml i pokrenite ponovo aplikaciju za njihovo omogućavanje."
-  text_repository_usernames_mapping: "Odaberite ili ažurirajte Redmine korisnike mapiranjem svakog korisničkog imena pronađenog u evidenciji spremišta.\nKorisnici sa istim Redmine imenom i imenom spremišta ili e-adresom su automatski mapirani."
-  text_diff_truncated: '... Ova razlika je isečena jer je dostignuta maksimalna veličina prikaza.'
-  text_custom_field_possible_values_info: 'Jedan red za svaku vrednost'
-  text_wiki_page_destroy_question: "Ova stranica ima %{descendants} podređenih stranica i podstranica. Šta želite da uradite?"
-  text_wiki_page_nullify_children: "Zadrži podređene stranice kao korene stranice"
-  text_wiki_page_destroy_children: "Izbriši podređene stranice i sve njihove podstranice"
-  text_wiki_page_reassign_children: "Dodeli ponovo podređene stranice ovoj matičnoj stranici"
-  text_own_membership_delete_confirmation: "Nakon uklanjanja pojedinih ili svih vaših dozvola nećete više moći da uređujete ovaj projekat.\nŽelite li da nastavite?"
-  text_zoom_in: Uvećaj
-  text_zoom_out: Umanji
-  
-  default_role_manager: Menadžer
-  default_role_developer: Programer
-  default_role_reporter: Izveštač
-  default_tracker_bug: Greška
-  default_tracker_feature: Funkcionalnost
-  default_tracker_support: Podrška
-  default_issue_status_new: Novo
-  default_issue_status_in_progress: U toku
-  default_issue_status_resolved: Rešeno
-  default_issue_status_feedback: Povratna informacija
-  default_issue_status_closed: Zatvoreno
-  default_issue_status_rejected: Odbijeno
-  default_doc_category_user: Korisnička dokumentacija
-  default_doc_category_tech: Tehnička dokumentacija
-  default_priority_low: Nizak
-  default_priority_normal: Normalan
-  default_priority_high: Visok
-  default_priority_urgent: Hitno
-  default_priority_immediate: Neposredno
-  default_activity_design: Dizajn
-  default_activity_development: Razvoj
-  
-  enumeration_issue_priorities: Prioriteti problema
-  enumeration_doc_categories: Kategorije dokumenta
-  enumeration_activities: Aktivnosti (praćenje vremena)
-  enumeration_system_activity: Sistemska aktivnost
-  
-  field_time_entries: Vreme evidencije
-  project_module_gantt: Gantov dijagram
-  project_module_calendar: Kalendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+# Serbian translations for Redmine
+# by Vladimir Medarović (vlada@medarovic.com)
+sr-YU:
+  direction: ltr
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%d.%m.%Y."
+      short: "%e %b"
+      long: "%B %e, %Y"
+      
+    day_names: [nedelja, ponedeljak, utorak, sreda, četvrtak, petak, subota]
+    abbr_day_names: [ned, pon, uto, sre, čet, pet, sub]
+      
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, januar, februar, mart, april, maj, jun, jul, avgust, septembar, oktobar, novembar, decembar]
+    abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, avg, sep, okt, nov, dec]
+    # Used in date_select and datime_select.
+    order:
+      - :day
+      - :month
+      - :year
+
+  time:
+    formats:
+      default: "%d.%m.%Y. u %H:%M"
+      time: "%H:%M"
+      short: "%d. %b u %H:%M"
+      long: "%d. %B %Y u %H:%M"
+    am: "am"
+    pm: "pm"
+
+  datetime:
+    distance_in_words:
+      half_a_minute: "pola minuta"
+      less_than_x_seconds:
+        one:   "manje od jedne sekunde"
+        other: "manje od %{count} sek."
+      x_seconds:
+        one:   "jedna sekunda"
+        other: "%{count} sek."
+      less_than_x_minutes:
+        one:   "manje od minuta"
+        other: "manje od %{count} min."
+      x_minutes:
+        one:   "jedan minut"
+        other: "%{count} min."
+      about_x_hours:
+        one:   "približno jedan sat"
+        other: "približno %{count} sati"
+      x_days:
+        one:   "jedan dan"
+        other: "%{count} dana"
+      about_x_months:
+        one:   "približno jedan mesec"
+        other: "približno %{count} meseci"
+      x_months:
+        one:   "jedan mesec"
+        other: "%{count} meseci"
+      about_x_years:
+        one:   "približno godinu dana"
+        other: "približno %{count} god."
+      over_x_years:
+        one:   "preko godinu dana"
+        other: "preko %{count} god."
+      almost_x_years:
+        one:   "skoro godinu dana"
+        other: "skoro %{count} god."
+
+  number:
+    format:
+      separator: ","
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Byte"
+            other: "Bytes"
+          kb: "KB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "i"
+      skip_last_comma: false
+      
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "1 error prohibited this %{model} from being saved"
+          other:  "%{count} errors prohibited this %{model} from being saved"
+      messages:
+        inclusion: "nije uključen u spisak"
+        exclusion: "je rezervisan"
+        invalid: "je neispravan"
+        confirmation: "potvrda ne odgovara"
+        accepted: "mora biti prihvaćen"
+        empty: "ne može biti prazno"
+        blank: "ne može biti prazno"
+        too_long: "je predugačka (maksimum znakova je %{count})"
+        too_short: "je prekratka (minimum znakova je %{count})"
+        wrong_length: "je pogrešne dužine (broj znakova mora biti %{count})"
+        taken: "je već u upotrebi"
+        not_a_number: "nije broj"
+        not_a_date: "nije ispravan datum"
+        greater_than: "mora biti veći od %{count}"
+        greater_than_or_equal_to: "mora biti veći ili jednak %{count}"
+        equal_to: "mora biti jednak %{count}"
+        less_than: "mora biti manji od %{count}"
+        less_than_or_equal_to: "mora biti manji ili jednak %{count}"
+        odd: "mora biti paran"
+        even: "mora biti neparan"
+        greater_than_start_date: "mora biti veći od početnog datuma"
+        not_same_project: "ne pripada istom projektu"
+        circular_dependency: "Ova veza će stvoriti kružnu referencu"
+        cant_link_an_issue_with_a_descendant: "Problem ne može biti povezan sa jednim od svojih podzadataka"
+
+  actionview_instancetag_blank_option: Molim odaberite
+  
+  general_text_No: 'Ne'
+  general_text_Yes: 'Da'
+  general_text_no: 'ne'
+  general_text_yes: 'da'
+  general_lang_name: 'Srpski'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '1'
+  
+  notice_account_updated: Nalog je uspešno ažuriran.
+  notice_account_invalid_creditentials: Neispravno korisničko ime ili lozinka.
+  notice_account_password_updated: Lozinka je uspešno ažurirana.
+  notice_account_wrong_password: Pogrešna lozinka
+  notice_account_register_done: Korisnički nalog je uspešno kreiran. Kliknite na link koji ste dobili u e-poruci za aktivaciju.
+  notice_account_unknown_email: Nepoznat korisnik.
+  notice_can_t_change_password: Ovaj korisnički nalog za potvrdu identiteta koristi spoljni izvor. Nemoguće je promeniti lozinku.
+  notice_account_lost_email_sent: Poslata vam je e-poruka sa uputstvom za izbor nove lozinke
+  notice_account_activated: Vaš korisnički nalog je aktiviran. Sada se možete prijaviti.
+  notice_successful_create: Uspešno kreiranje.
+  notice_successful_update: Uspešno ažuriranje.
+  notice_successful_delete: Uspešno brisanje.
+  notice_successful_connection: Uspešno povezivanje.
+  notice_file_not_found: Strana kojoj želite pristupiti ne postoji ili je uklonjena.
+  notice_locking_conflict: Podatak je ažuriran od strane drugog korisnika.
+  notice_not_authorized: Niste ovlašćeni za pristup ovoj strani.
+  notice_email_sent: "E-poruka je poslata na %{value}"
+  notice_email_error: "Dogodila se greška prilikom slanja e-poruke (%{value})"
+  notice_feeds_access_key_reseted: Vaš RSS pristupni ključ je poništen.
+  notice_api_access_key_reseted: Vaš API pristupni ključ je poništen.
+  notice_failed_to_save_issues: "Neuspešno snimanje %{count} problema od %{total} odabranih: %{ids}."
+  notice_failed_to_save_members: "Neuspešno snimanje člana(ova): %{errors}."
+  notice_no_issue_selected: "Ni jedan problem nije odabran! Molimo, odaberite problem koji želite da menjate."
+  notice_account_pending: "Vaš nalog je kreiran i čeka na odobrenje administratora."
+  notice_default_data_loaded: Podrazumevano konfigurisanje je uspešno učitano.
+  notice_unable_delete_version: Verziju je nemoguće izbrisati.
+  notice_unable_delete_time_entry: Stavku evidencije vremena je nemoguće izbrisati.
+  notice_issue_done_ratios_updated: Odnos rešenih problema je ažuriran.
+  
+  error_can_t_load_default_data: "Podrazumevano konfigurisanje je nemoguće učitati: %{value}"
+  error_scm_not_found: "Stavka ili ispravka nisu pronađene u spremištu."
+  error_scm_command_failed: "Greška se javila prilikom pokušaja pristupa spremištu: %{value}"
+  error_scm_annotate: "Stavka ne postoji ili ne može biti označena."
+  error_issue_not_found_in_project: 'Problem nije pronađen ili ne pripada ovom projektu.'
+  error_no_tracker_in_project: 'Ni jedno praćenje nije povezano sa ovim projektom. Molimo proverite podešavanja projekta.'
+  error_no_default_issue_status: 'Podrazumevani status problema nije definisan. Molimo proverite vaše konfigurisanje (idite na "Administracija -> Statusi problema").'
+  error_can_not_delete_custom_field: Nemoguće je izbrisati prilagođeno polje
+  error_can_not_delete_tracker: "Ovo praćenje sadrži probleme i ne može biti obrisano."
+  error_can_not_remove_role: "Ova uloga je u upotrebi i ne može biti obrisana."
+  error_can_not_reopen_issue_on_closed_version: 'Problem dodeljen zatvorenoj verziji ne može biti ponovo otvoren'
+  error_can_not_archive_project: Ovaj projekat se ne može arhivirati
+  error_issue_done_ratios_not_updated: "Odnos rešenih problema nije ažuriran."
+  error_workflow_copy_source: 'Molimo odaberite izvorno praćenje ili ulogu'
+  error_workflow_copy_target: 'Molimo odaberite odredišno praćenje i ulogu'
+  error_unable_delete_issue_status: 'Status problema je nemoguće obrisati'
+  error_unable_to_connect: "Povezivanje sa (%{value}) je nemoguće"  
+  warning_attachments_not_saved: "%{count} datoteka ne može biti snimljena."
+  
+  mail_subject_lost_password: "Vaša %{value} lozinka"
+  mail_body_lost_password: 'Za promenu vaše lozinke, kliknite na sledeći link:'
+  mail_subject_register: "Aktivacija vašeg %{value} naloga"
+  mail_body_register: 'Za aktivaciju vašeg naloga, kliknite na sledeći link:'
+  mail_body_account_information_external: "Vaš nalog %{value} možete koristiti za prijavu."
+  mail_body_account_information: Informacije o vašem nalogu
+  mail_subject_account_activation_request: "Zahtev za aktivaciju naloga %{value}"
+  mail_body_account_activation_request: "Novi korisnik (%{value}) je registrovan. Nalog čeka na vaše odobrenje:"
+  mail_subject_reminder: "%{count} problema dospeva narednih %{days} dana"
+  mail_body_reminder: "%{count} problema dodeljenih vama dospeva u narednih %{days} dana:"
+  mail_subject_wiki_content_added: "Wiki stranica '%{id}' je dodata"
+  mail_body_wiki_content_added: "%{author} je dodao wiki stranicu '%{id}'."
+  mail_subject_wiki_content_updated: "Wiki stranica '%{id}' je ažurirana"
+  mail_body_wiki_content_updated: "%{author} je ažurirao wiki stranicu '%{id}'."
+  
+  gui_validation_error: jedna greška
+  gui_validation_error_plural: "%{count} grešaka"
+  
+  field_name: Naziv
+  field_description: Opis
+  field_summary: Rezime
+  field_is_required: Obavezno
+  field_firstname: Ime
+  field_lastname: Prezime
+  field_mail: E-adresa
+  field_filename: Datoteka
+  field_filesize: Veličina
+  field_downloads: Preuzimanja
+  field_author: Autor
+  field_created_on: Kreirano
+  field_updated_on: Ažurirano
+  field_field_format: Format
+  field_is_for_all: Za sve projekte
+  field_possible_values: Moguće vrednosti
+  field_regexp: Regularan izraz
+  field_min_length: Minimalna dužina
+  field_max_length: Maksimalna dužina
+  field_value: Vrednost
+  field_category: Kategorija
+  field_title: Naslov
+  field_project: Projekat
+  field_issue: Problem
+  field_status: Status
+  field_notes: Beleške
+  field_is_closed: Zatvoren problem
+  field_is_default: Podrazumevana vrednost
+  field_tracker: Praćenje
+  field_subject: Predmet
+  field_due_date: Krajnji rok
+  field_assigned_to: Dodeljeno
+  field_priority: Prioritet
+  field_fixed_version: Odredišna verzija
+  field_user: Korisnik
+  field_principal: Glavni
+  field_role: Uloga
+  field_homepage: Početna stranica
+  field_is_public: Javno objavljivanje
+  field_parent: Potprojekat od
+  field_is_in_roadmap: Problemi prikazani u planu rada
+  field_login: Korisničko ime
+  field_mail_notification: Obaveštenja putem e-pošte
+  field_admin: Administrator
+  field_last_login_on: Poslednje povezivanje
+  field_language: Jezik
+  field_effective_date: Datum
+  field_password: Lozinka
+  field_new_password: Nova lozinka
+  field_password_confirmation: Potvrda lozinke
+  field_version: Verzija
+  field_type: Tip
+  field_host: Glavni računar
+  field_port: Port
+  field_account: Korisnički nalog
+  field_base_dn: Bazni DN
+  field_attr_login: Atribut prijavljivanja
+  field_attr_firstname: Atribut imena
+  field_attr_lastname: Atribut prezimena
+  field_attr_mail: Atribut e-adrese
+  field_onthefly: Kreiranje korisnika u toku rada
+  field_start_date: Početak
+  field_done_ratio: "% urađeno"
+  field_auth_source: Režim potvrde identiteta
+  field_hide_mail: Sakrij moju e-adresu
+  field_comments: Komentar
+  field_url: URL
+  field_start_page: Početna stranica
+  field_subproject: Potprojekat
+  field_hours: sati
+  field_activity: Aktivnost
+  field_spent_on: Datum
+  field_identifier: Identifikator
+  field_is_filter: Upotrebi kao filter
+  field_issue_to: Srodni problemi
+  field_delay: Kašnjenje
+  field_assignable: Problem može biti dodeljen ovoj ulozi
+  field_redirect_existing_links: Preusmeri postojeće veze
+  field_estimated_hours: Proteklo vreme
+  field_column_names: Kolone
+  field_time_zone: Vremenska zona
+  field_searchable: Može da se pretražuje
+  field_default_value: Podrazumevana vrednost
+  field_comments_sorting: Prikaži komentare
+  field_parent_title: Matična stranica
+  field_editable: Izmenljivo
+  field_watcher: Posmatrač
+  field_identity_url: OpenID URL
+  field_content: Sadržaj
+  field_group_by: Grupisanje rezultata po
+  field_sharing: Deljenje
+  field_parent_issue: Matični zadatak
+  
+  setting_app_title: Naslov aplikacije
+  setting_app_subtitle: Podnaslov aplikacije
+  setting_welcome_text: Tekst dobrodošlice
+  setting_default_language: Podrazumevani jezik
+  setting_login_required: Obavezna potvrda identiteta
+  setting_self_registration: Samoregistracija
+  setting_attachment_max_size: Maks. veličina priložene datoteke
+  setting_issues_export_limit: Ograničenje izvoza „problema“
+  setting_mail_from: E-adresa pošiljaoca
+  setting_bcc_recipients: Primaoci „Bcc“ kopije
+  setting_plain_text_mail: Poruka sa čistim tekstom (bez HTML-a)
+  setting_host_name: Putanja i naziv glavnog računara
+  setting_text_formatting: Oblikovanje teksta
+  setting_wiki_compression: Kompresija Wiki istorije
+  setting_feeds_limit: Ograničenje sadržaja izvora vesti
+  setting_default_projects_public: Podrazumeva se javno prikazivanje novih projekata
+  setting_autofetch_changesets: Izvršavanje automatskog preuzimanja
+  setting_sys_api_enabled: Omogućavanje WS za upravljanje spremištem
+  setting_commit_ref_keywords: Referenciranje ključnih reči
+  setting_commit_fix_keywords: Popravljanje ključnih reči
+  setting_autologin: Automatska prijava
+  setting_date_format: Format datuma
+  setting_time_format: Format vremena
+  setting_cross_project_issue_relations: Dozvoli povezivanje problema iz unakrsnih projekata
+  setting_issue_list_default_columns: Podrazumevane kolone prikazane na spisku problema
+  setting_repositories_encodings: Kodiranje spremišta
+  setting_emails_footer: Podnožje stranice e-poruke
+  setting_protocol: Protokol
+  setting_per_page_options: Opcije prikaza objekata po stranici
+  setting_user_format: Format prikaza korisnika
+  setting_activity_days_default: Broj dana prikazanih na projektnoj aktivnosti
+  setting_display_subprojects_issues: Prikazuj probleme iz potprojekata na glavnom projektu, ukoliko nije drugačije navedeno
+  setting_enabled_scm: Omogućavanje SCM
+  setting_mail_handler_body_delimiters: "Skraćivanje e-poruke nakon jedne od ovih linija"
+  setting_mail_handler_api_enabled: Omogućavanje WS dolazne e-poruke
+  setting_mail_handler_api_key: API ključ
+  setting_sequential_project_identifiers: Generisanje sekvencijalnog imena projekta
+  setting_gravatar_enabled: Koristi Gravatar korisničke ikone
+  setting_gravatar_default: Podrazumevana Gravatar slika
+  setting_diff_max_lines_displayed: Maks. broj prikazanih različitih linija
+  setting_file_max_size_displayed: Maks. veličina tekst. datoteka prikazanih umetnuto
+  setting_repository_log_display_limit: Maks. broj revizija prikazanih u datoteci za evidenciju
+  setting_openid: Dozvoli OpenID prijavu i registraciju
+  setting_password_min_length: Minimalna dužina lozinke
+  setting_new_project_user_role_id: Kreatoru projekta (koji nije administrator) dodeljuje je uloga
+  setting_default_projects_modules: Podrazumevano omogućeni moduli za nove projekte
+  setting_issue_done_ratio: Izračunaj odnos rešenih problema
+  setting_issue_done_ratio_issue_field: koristeći polje problema
+  setting_issue_done_ratio_issue_status: koristeći status problema
+  setting_start_of_week: Prvi dan u sedmici
+  setting_rest_api_enabled: Omogući REST web usluge
+  setting_cache_formatted_text: Keširanje obrađenog teksta
+  
+  permission_add_project: Kreiranje projekta
+  permission_add_subprojects: Kreiranje potpojekta
+  permission_edit_project: Izmena projekata
+  permission_select_project_modules: Odabiranje modula projekta
+  permission_manage_members: Upravljanje članovima
+  permission_manage_project_activities: Upravljanje projektnim aktivnostima
+  permission_manage_versions: Upravljanje verzijama
+  permission_manage_categories: Upravljanje kategorijama problema
+  permission_view_issues: Pregled problema
+  permission_add_issues: Dodavanje problema
+  permission_edit_issues: Izmena problema
+  permission_manage_issue_relations: Upravljanje vezama između problema
+  permission_add_issue_notes: Dodavanje beleški
+  permission_edit_issue_notes: Izmena beleški
+  permission_edit_own_issue_notes: Izmena sopstvenih beleški
+  permission_move_issues: Pomeranje problema
+  permission_delete_issues: Brisanje problema
+  permission_manage_public_queries: Upravljanje javnim upitima
+  permission_save_queries: Snimanje upita
+  permission_view_gantt: Pregledanje Gantovog dijagrama
+  permission_view_calendar: Pregledanje kalendara
+  permission_view_issue_watchers: Pregledanje spiska posmatrača
+  permission_add_issue_watchers: Dodavanje posmatrača
+  permission_delete_issue_watchers: Brisanje posmatrača
+  permission_log_time: Beleženje utrošenog vremena
+  permission_view_time_entries: Pregledanje utrošenog vremena
+  permission_edit_time_entries: Izmena utrošenog vremena
+  permission_edit_own_time_entries: Izmena sopstvenog utrošenog vremena
+  permission_manage_news: Upravljanje vestima
+  permission_comment_news: Komentarisanje vesti
+  permission_manage_documents: Upravljanje dokumentima
+  permission_view_documents: Pregledanje dokumenata
+  permission_manage_files: Upravljanje datotekama
+  permission_view_files: Pregledanje datoteka
+  permission_manage_wiki: Upravljanje wiki stranicama
+  permission_rename_wiki_pages: Promena imena wiki stranicama
+  permission_delete_wiki_pages: Brisanje wiki stranica
+  permission_view_wiki_pages: Pregledanje wiki stranica
+  permission_view_wiki_edits: Pregledanje wiki istorije
+  permission_edit_wiki_pages: Izmena wiki stranica
+  permission_delete_wiki_pages_attachments: Brisanje priloženih datoteka
+  permission_protect_wiki_pages: Zaštita wiki stranica
+  permission_manage_repository: Upravljanje spremištem
+  permission_browse_repository: Pregledanje spremišta
+  permission_view_changesets: Pregledanje skupa promena
+  permission_commit_access: Potvrda pristupa
+  permission_manage_boards: Upravljanje forumima
+  permission_view_messages: Pregledanje poruka
+  permission_add_messages: Slanje poruka
+  permission_edit_messages: Izmena poruka
+  permission_edit_own_messages: Izmena sopstvenih poruka
+  permission_delete_messages: Brisanje poruka
+  permission_delete_own_messages: Brisanje sopstvenih poruka
+  permission_export_wiki_pages: Izvoz wiki stranica
+  permission_manage_subtasks: Upravljanje podzadacima
+  
+  project_module_issue_tracking: Praćenje problema
+  project_module_time_tracking: Praćenje vremena
+  project_module_news: Vesti
+  project_module_documents: Dokumenti
+  project_module_files: Datoteke
+  project_module_wiki: Wiki
+  project_module_repository: Spremište
+  project_module_boards: Forumi
+  
+  label_user: Korisnik
+  label_user_plural: Korisnici
+  label_user_new: Novi korisnik
+  label_user_anonymous: Anoniman
+  label_project: Projekat
+  label_project_new: Novi projekat
+  label_project_plural: Projekti
+  label_x_projects:
+    zero:  nema projekata
+    one:   jedan projekat
+    other: "%{count} projekata"
+  label_project_all: Svi projekti
+  label_project_latest: Poslednji projekti
+  label_issue: Problem
+  label_issue_new: Novi problem
+  label_issue_plural: Problemi
+  label_issue_view_all: Prikaz svih problema
+  label_issues_by: "Problemi (%{value})"
+  label_issue_added: Problem je dodat
+  label_issue_updated: Problem je ažuriran
+  label_document: Dokument
+  label_document_new: Novi dokument
+  label_document_plural: Dokumenti
+  label_document_added: Dokument je dodat
+  label_role: Uloga
+  label_role_plural: Uloge
+  label_role_new: Nova uloga
+  label_role_and_permissions: Uloge i dozvole
+  label_member: Član
+  label_member_new: Novi član
+  label_member_plural: Članovi
+  label_tracker: Praćenje
+  label_tracker_plural: Praćenja
+  label_tracker_new: Novo praćenje
+  label_workflow: Tok posla
+  label_issue_status: Status problema
+  label_issue_status_plural: Statusi problema
+  label_issue_status_new: Novi status
+  label_issue_category: Kategorija problema
+  label_issue_category_plural: Kategorije problema
+  label_issue_category_new: Nova kategorija
+  label_custom_field: Prilagođeno polje
+  label_custom_field_plural: Prilagođena polja
+  label_custom_field_new: Novo prilagođeno polje
+  label_enumerations: Nabrojiva lista
+  label_enumeration_new: Nova vrednost
+  label_information: Informacija
+  label_information_plural: Informacije
+  label_please_login: Molimo, prijavite se
+  label_register: Registracija
+  label_login_with_open_id_option: ili prijava sa OpenID
+  label_password_lost: Izgubljena lozinka
+  label_home: Početak
+  label_my_page: Moja stranica
+  label_my_account: Moj nalog
+  label_my_projects: Moji projekti
+  label_my_page_block: My page block
+  label_administration: Administracija
+  label_login: Prijava
+  label_logout: Odjava
+  label_help: Pomoć
+  label_reported_issues: Prijavljeni problemi
+  label_assigned_to_me_issues: Problemi dodeljeni meni
+  label_last_login: Poslednje povezivanje
+  label_registered_on: Registrovan
+  label_activity: Aktivnost
+  label_overall_activity: Celokupna aktivnost
+  label_user_activity: "Aktivnost korisnika %{value}"
+  label_new: Novo
+  label_logged_as: Prijavljeni ste kao
+  label_environment: Okruženje
+  label_authentication: Potvrda identiteta
+  label_auth_source: Režim potvrde identiteta
+  label_auth_source_new: Novi režim potvrde identiteta
+  label_auth_source_plural: Režimi potvrde identiteta
+  label_subproject_plural: Potprojekti
+  label_subproject_new: Novi potprojekat
+  label_and_its_subprojects: "%{value} i njegovi potprojekti"
+  label_min_max_length: Min. - Maks. dužina
+  label_list: Spisak
+  label_date: Datum
+  label_integer: Ceo broj
+  label_float: Sa pokretnim zarezom
+  label_boolean: Logički operator
+  label_string: Tekst
+  label_text: Dugi tekst
+  label_attribute: Osobina
+  label_attribute_plural: Osobine
+  label_download: "%{count} preuzimanje"
+  label_download_plural: "%{count} preuzimanja"
+  label_no_data: Nema podataka za prikazivanje
+  label_change_status: Promena statusa
+  label_history: Istorija
+  label_attachment: Datoteka
+  label_attachment_new: Nova datoteka
+  label_attachment_delete: Brisanje datoteke
+  label_attachment_plural: Datoteke
+  label_file_added: Datoteka je dodata
+  label_report: Izveštaj
+  label_report_plural: Izveštaji
+  label_news: Vesti
+  label_news_new: Dodavanje vesti
+  label_news_plural: Vesti
+  label_news_latest: Poslednje vesti
+  label_news_view_all: Prikaz svih vesti
+  label_news_added: Vesti su dodate
+  label_settings: Podešavanja
+  label_overview: Pregled
+  label_version: Verzija
+  label_version_new: Nova verzija
+  label_version_plural: Verzije
+  label_close_versions: Zatvori završene verzije
+  label_confirmation: Potvrda
+  label_export_to: 'Takođe dostupno i u varijanti:'
+  label_read: Čitanje...
+  label_public_projects: Javni projekti
+  label_open_issues: otvoren
+  label_open_issues_plural: otvorenih
+  label_closed_issues: zatvoren
+  label_closed_issues_plural: zatvorenih
+  label_x_open_issues_abbr_on_total:
+    zero:  0 otvorenih / %{total}
+    one:   1 otvoren / %{total}
+    other: "%{count} otvorenih / %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 otvorenih
+    one:   1 otvoren
+    other: "%{count} otvorenih"
+  label_x_closed_issues_abbr:
+    zero:  0 zatvorenih
+    one:   1 zatvoren
+    other: "%{count} zatvorenih"
+  label_total: Ukupno
+  label_permissions: Dozvole
+  label_current_status: Trenutni status
+  label_new_statuses_allowed: Novi statusi dozvoljeni
+  label_all: svi
+  label_none: nijedan
+  label_nobody: nikome
+  label_next: Sledeće
+  label_previous: Prethodno
+  label_used_by: Koristio
+  label_details: Detalji
+  label_add_note: Dodaj belešku
+  label_per_page: Po strani
+  label_calendar: Kalendar
+  label_months_from: meseci od
+  label_gantt: Gantov dijagram
+  label_internal: Unutrašnji
+  label_last_changes: "poslednjih %{count} promena"
+  label_change_view_all: Prikaži sve promene
+  label_personalize_page: Personalizuj ovu stranu
+  label_comment: Komentar
+  label_comment_plural: Komentari
+  label_x_comments:
+    zero: bez komentara
+    one: jedan komentar
+    other: "%{count} komentara"
+  label_comment_add: Dodaj komentar
+  label_comment_added: Komentar dodat
+  label_comment_delete: Obriši komentare
+  label_query: Prilagođen upit
+  label_query_plural: Prilagođeni upiti
+  label_query_new: Novi upit
+  label_filter_add: Dodavanje filtera
+  label_filter_plural: Filteri
+  label_equals: je
+  label_not_equals: nije
+  label_in_less_than: manje od
+  label_in_more_than: više od
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: u
+  label_today: danas
+  label_all_time: sve vreme
+  label_yesterday: juče
+  label_this_week: ove sedmice
+  label_last_week: poslednje sedmice
+  label_last_n_days: "poslednjih %{count} dana"
+  label_this_month: ovog meseca
+  label_last_month: poslednjeg meseca
+  label_this_year: ove godine
+  label_date_range: Vremenski period
+  label_less_than_ago: pre manje od nekoliko dana
+  label_more_than_ago: pre više od nekoliko dana
+  label_ago: pre nekoliko dana
+  label_contains: sadrži
+  label_not_contains: ne sadrži
+  label_day_plural: dana
+  label_repository: Spremište
+  label_repository_plural: Spremišta
+  label_browse: Pregledanje
+  label_modification: "%{count} promena"
+  label_modification_plural: "%{count} promena"
+  label_branch: Grana
+  label_tag: Oznaka
+  label_revision: Revizija
+  label_revision_plural: Revizije
+  label_revision_id: "Revizija %{value}"
+  label_associated_revisions: Pridružene revizije
+  label_added: dodato
+  label_modified: promenjeno
+  label_copied: kopirano
+  label_renamed: preimenovano
+  label_deleted: izbrisano
+  label_latest_revision: Poslednja revizija
+  label_latest_revision_plural: Poslednje revizije
+  label_view_revisions: Pregled revizija
+  label_view_all_revisions: Pregled svih revizija
+  label_max_size: Maksimalna veličina
+  label_sort_highest: Premeštanje na vrh
+  label_sort_higher: Premeštanje na gore
+  label_sort_lower: Premeštanje na dole
+  label_sort_lowest: Premeštanje na dno
+  label_roadmap: Plan rada
+  label_roadmap_due_in: "Dospeva %{value}"
+  label_roadmap_overdue: "%{value} najkasnije"
+  label_roadmap_no_issues: Nema problema za ovu verziju
+  label_search: Pretraga
+  label_result_plural: Rezultati
+  label_all_words: Sve reči
+  label_wiki: Wiki
+  label_wiki_edit: Wiki izmena
+  label_wiki_edit_plural: Wiki izmene
+  label_wiki_page: Wiki stranica
+  label_wiki_page_plural: Wiki stranice
+  label_index_by_title: Indeksiranje po naslovu
+  label_index_by_date: Indeksiranje po datumu
+  label_current_version: Trenutna verzija
+  label_preview: Pregled
+  label_feed_plural: Izvori vesti
+  label_changes_details: Detalji svih promena
+  label_issue_tracking: Praćenje problema
+  label_spent_time: Utrošeno vreme
+  label_overall_spent_time: Celokupno utrošeno vreme
+  label_f_hour: "%{value} sat"
+  label_f_hour_plural: "%{value} sati"
+  label_time_tracking: Praćenje vremena
+  label_change_plural: Promene
+  label_statistics: Statistika
+  label_commits_per_month: Izvršenja mesečno
+  label_commits_per_author: Izvršenja po autoru
+  label_view_diff: Pogledaj razlike
+  label_diff_inline: unutra
+  label_diff_side_by_side: uporedo
+  label_options: Opcije
+  label_copy_workflow_from: Kopiranje toka posla od
+  label_permissions_report: Izveštaj o dozvolama
+  label_watched_issues: Posmatrani problemi
+  label_related_issues: Srodni problemi
+  label_applied_status: Primenjeni statusi
+  label_loading: Učitavanje...
+  label_relation_new: Nova relacija
+  label_relation_delete: Brisanje relacije
+  label_relates_to: srodnih sa
+  label_duplicates: dupliranih
+  label_duplicated_by: dupliranih od
+  label_blocks: odbijenih
+  label_blocked_by: odbijenih od
+  label_precedes: prethodi
+  label_follows: praćenih
+  label_end_to_start: od kraja do početka
+  label_end_to_end: od kraja do kraja
+  label_start_to_start: od početka do početka
+  label_start_to_end: od početka do kraja
+  label_stay_logged_in: Ostanite prijavljeni
+  label_disabled: onemogućeno
+  label_show_completed_versions: Prikazivanje završene verzije
+  label_me: meni
+  label_board: Forum
+  label_board_new: Novi forum
+  label_board_plural: Forumi
+  label_board_locked: Zaključana
+  label_board_sticky: Lepljiva
+  label_topic_plural: Teme
+  label_message_plural: Poruke
+  label_message_last: Poslednja poruka
+  label_message_new: Nova poruka
+  label_message_posted: Poruka je dodata
+  label_reply_plural: Odgovori
+  label_send_information: Pošalji korisniku detalje naloga
+  label_year: Godina
+  label_month: Mesec
+  label_week: Sedmica
+  label_date_from: Šalje
+  label_date_to: Prima
+  label_language_based: Bazirano na jeziku korisnika
+  label_sort_by: "Sortirano po %{value}"
+  label_send_test_email: Slanje probne e-poruke
+  label_feeds_access_key: RSS pristupni ključ
+  label_missing_feeds_access_key: RSS pristupni ključ nedostaje
+  label_feeds_access_key_created_on: "RSS pristupni ključ je napravljen pre %{value}"
+  label_module_plural: Moduli
+  label_added_time_by: "Dodao %{author} pre %{age}"
+  label_updated_time_by: "Ažurirao %{author} pre %{age}"
+  label_updated_time: "Ažurirano pre %{value}"
+  label_jump_to_a_project: Skok na projekat...
+  label_file_plural: Datoteke
+  label_changeset_plural: Skupovi promena
+  label_default_columns: Podrazumevane kolone
+  label_no_change_option: (Bez promena)
+  label_bulk_edit_selected_issues: Grupna izmena odabranih problema
+  label_theme: Tema
+  label_default: Podrazumevano
+  label_search_titles_only: Pretražuj samo naslove
+  label_user_mail_option_all: "Za bilo koji događaj na svim mojim projektima"
+  label_user_mail_option_selected: "Za bilo koji događaj na samo odabranim projektima..."
+  label_user_mail_no_self_notified: "Ne želim biti obaveštavan za promene koje sam pravim"
+  label_registration_activation_by_email: aktivacija naloga putem e-poruke
+  label_registration_manual_activation: ručna aktivacija naloga
+  label_registration_automatic_activation: automatska aktivacija naloga
+  label_display_per_page: "Broj stavki po stranici: %{value}"
+  label_age: Starost
+  label_change_properties: Promeni svojstva
+  label_general: Opšti
+  label_more: Više
+  label_scm: SCM
+  label_plugins: Dodatne komponente
+  label_ldap_authentication: LDAP potvrda identiteta
+  label_downloads_abbr: D/L
+  label_optional_description: Opciono opis
+  label_add_another_file: Dodaj još jednu datoteku
+  label_preferences: Podešavanja
+  label_chronological_order: po hronološkom redosledu
+  label_reverse_chronological_order: po obrnutom hronološkom redosledu
+  label_planning: Planiranje
+  label_incoming_emails: Dolazne e-poruke
+  label_generate_key: Generisanje ključa
+  label_issue_watchers: Posmatrači
+  label_example: Primer
+  label_display: Prikaz
+  label_sort: Sortiranje
+  label_ascending: Rastući niz
+  label_descending: Opadajući niz
+  label_date_from_to: Od %{start} do %{end}
+  label_wiki_content_added: Wiki stranica je dodata
+  label_wiki_content_updated: Wiki stranica je ažurirana
+  label_group: Grupa
+  label_group_plural: Grupe
+  label_group_new: Nova grupa
+  label_time_entry_plural: Utrošeno vreme
+  label_version_sharing_none: Nije deljeno
+  label_version_sharing_descendants: Sa potprojektima
+  label_version_sharing_hierarchy: Sa hijerarhijom projekta
+  label_version_sharing_tree: Sa stablom projekta
+  label_version_sharing_system: Sa svim projektima
+  label_update_issue_done_ratios: Ažuriraj odnos rešenih problema
+  label_copy_source: Izvor
+  label_copy_target: Odredište
+  label_copy_same_as_target: Isto kao odredište
+  label_display_used_statuses_only: Prikazuj statuse korišćene samo od strane ovog praćenja
+  label_api_access_key: API pristupni ključ
+  label_missing_api_access_key: Nedostaje API pristupni ključ
+  label_api_access_key_created_on: "API pristupni ključ je kreiran pre %{value}"
+  label_profile: Profil
+  label_subtask_plural: Podzadatak
+  label_project_copy_notifications: Pošalji e-poruku sa obaveštenjem prilikom kopiranja projekta 
+  
+  button_login: Prijava
+  button_submit: Pošalji
+  button_save: Snimi
+  button_check_all: Uključi sve
+  button_uncheck_all: Isključi sve
+  button_delete: Izbriši
+  button_create: Kreiraj
+  button_create_and_continue: Kreiraj i nastavi
+  button_test: Test
+  button_edit: Izmeni
+  button_add: Dodaj
+  button_change: Promeni
+  button_apply: Primeni
+  button_clear: Obriši
+  button_lock: Zaključaj
+  button_unlock: Otključaj
+  button_download: Preuzmi
+  button_list: Spisak
+  button_view: Prikaži
+  button_move: Pomeri
+  button_move_and_follow: Pomeri i prati
+  button_back: Nazad
+  button_cancel: Poništi
+  button_activate: Aktiviraj
+  button_sort: Sortiraj
+  button_log_time: Evidentiraj vreme
+  button_rollback: Povratak na ovu verziju
+  button_watch: Prati
+  button_unwatch: Ne prati više
+  button_reply: Odgovori
+  button_archive: Arhiviraj
+  button_unarchive: Vrati iz arhive
+  button_reset: Poništi
+  button_rename: Preimenuj
+  button_change_password: Promeni lozinku
+  button_copy: Kopiraj
+  button_copy_and_follow: Kopiraj i prati
+  button_annotate: Pribeleži
+  button_update: Ažuriraj
+  button_configure: Podesi
+  button_quote: Pod navodnicima
+  button_duplicate: Dupliraj
+  button_show: Prikaži
+  
+  status_active: aktivni
+  status_registered: registrovani
+  status_locked: zaključani
+  
+  version_status_open: otvoren
+  version_status_locked: zaključan
+  version_status_closed: zatvoren
+
+  field_active: Aktivan
+  
+  text_select_mail_notifications: Odaberi akcije za koje će obaveštenje biti poslato putem e-pošte.
+  text_regexp_info: npr. ^[A-Z0-9]+$
+  text_min_max_length_info: 0 znači bez ograničenja
+  text_project_destroy_confirmation: Jeste li sigurni da želite da izbrišete ovaj projekat i sve pripadajuće podatke?
+  text_subprojects_destroy_warning: "Potprojekti: %{value} će takođe biti izbrisan."
+  text_workflow_edit: Odaberite ulogu i praćenje za izmenu toka posla
+  text_are_you_sure: Jeste li sigurni?
+  text_journal_changed: "%{label} promenjen od %{old} u %{new}"
+  text_journal_set_to: "%{label} postavljen u %{value}"
+  text_journal_deleted: "%{label} izbrisano (%{old})"
+  text_journal_added: "%{label} %{value} dodato"
+  text_tip_issue_begin_day: zadatak počinje ovog dana
+  text_tip_issue_end_day: zadatak se završava ovog dana
+  text_tip_issue_begin_end_day: zadatak počinje i završava ovog dana
+  text_project_identifier_info: 'Dozvoljena su samo mala slova (a-š), brojevi i crtice.<br />Jednom snimljen identifikator više se ne može promeniti.'
+  text_caracters_maximum: "Najviše %{count} znak(ova)."
+  text_caracters_minimum: "Broj znakova mora biti najmanje %{count}."
+  text_length_between: "Broj znakova mora biti između %{min} i %{max}."
+  text_tracker_no_workflow: Ovo praćenje nema definisan tok posla
+  text_unallowed_characters: Nedozvoljeni znakovi
+  text_comma_separated: Dozvoljene su višestruke vrednosti (odvojene zarezom).
+  text_line_separated: Dozvoljene su višestruke vrednosti (jedan red za svaku vrednost).
+  text_issues_ref_in_commit_messages: Referenciranje i popravljanje problema u izvršnim porukama
+  text_issue_added: "%{author} je prijavio problem %{id}."
+  text_issue_updated: "%{author} je ažurirao problem %{id}."
+  text_wiki_destroy_confirmation: Jeste li sigurni da želite da obrišete wiki i sav sadržaj?
+  text_issue_category_destroy_question: "Nekoliko problema (%{count}) je dodeljeno ovoj kategoriji. Šta želite da uradite?"
+  text_issue_category_destroy_assignments: Ukloni dodeljene kategorije
+  text_issue_category_reassign_to: Dodeli ponovo probleme ovoj kategoriji
+  text_user_mail_option: "Za neizabrane projekte, dobićete samo obaveštenje o stvarima koje pratite ili ste uključeni (npr. problemi čiji ste vi autor ili zastupnik)."
+  text_no_configuration_data: "Uloge, praćenja, statusi problema i toka posla još uvek nisu podešeni.\nPreporučljivo je da učitate podrazumevano konfigurisanje. Izmena je moguća nakon prvog učitavanja."
+  text_load_default_configuration: Učitaj podrazumevano konfigurisanje
+  text_status_changed_by_changeset: "Primenjeno u skupu sa promenama %{value}."
+  text_issues_destroy_confirmation: 'Jeste li sigurni da želite da izbrišete odabrane probleme?'
+  text_select_project_modules: 'Odaberite module koje želite omogućiti za ovaj projekat:'
+  text_default_administrator_account_changed: Podrazumevani administratorski nalog je promenjen
+  text_file_repository_writable: Fascikla priloženih datoteka je upisiva
+  text_plugin_assets_writable: Fascikla elemenata dodatnih komponenti je upisiva
+  text_rmagick_available: RMagick je dostupan (opciono)
+  text_destroy_time_entries_question: "%{hours} sati je prijavljeno za ovaj problem koji želite izbrisati. Šta želite da uradite?"
+  text_destroy_time_entries: Izbriši prijavljene sate
+  text_assign_time_entries_to_project: Dodeli prijavljene sate projektu
+  text_reassign_time_entries: 'Dodeli ponovo prijavljene sate ovom problemu:'
+  text_user_wrote: "%{value} je napisao:"
+  text_enumeration_destroy_question: "%{count} objekat(a) je dodeljeno ovoj vrednosti."
+  text_enumeration_category_reassign_to: 'Dodeli ih ponovo ovoj vrednosti:'
+  text_email_delivery_not_configured: "Isporuka e-poruka nije konfigurisana i obaveštenja su onemogućena.\nPodesite vaš SMTP server u config/configuration.yml i pokrenite ponovo aplikaciju za njihovo omogućavanje."
+  text_repository_usernames_mapping: "Odaberite ili ažurirajte Redmine korisnike mapiranjem svakog korisničkog imena pronađenog u evidenciji spremišta.\nKorisnici sa istim Redmine imenom i imenom spremišta ili e-adresom su automatski mapirani."
+  text_diff_truncated: '... Ova razlika je isečena jer je dostignuta maksimalna veličina prikaza.'
+  text_custom_field_possible_values_info: 'Jedan red za svaku vrednost'
+  text_wiki_page_destroy_question: "Ova stranica ima %{descendants} podređenih stranica i podstranica. Šta želite da uradite?"
+  text_wiki_page_nullify_children: "Zadrži podređene stranice kao korene stranice"
+  text_wiki_page_destroy_children: "Izbriši podređene stranice i sve njihove podstranice"
+  text_wiki_page_reassign_children: "Dodeli ponovo podređene stranice ovoj matičnoj stranici"
+  text_own_membership_delete_confirmation: "Nakon uklanjanja pojedinih ili svih vaših dozvola nećete više moći da uređujete ovaj projekat.\nŽelite li da nastavite?"
+  text_zoom_in: Uvećaj
+  text_zoom_out: Umanji
+  
+  default_role_manager: Menadžer
+  default_role_developer: Programer
+  default_role_reporter: Izveštač
+  default_tracker_bug: Greška
+  default_tracker_feature: Funkcionalnost
+  default_tracker_support: Podrška
+  default_issue_status_new: Novo
+  default_issue_status_in_progress: U toku
+  default_issue_status_resolved: Rešeno
+  default_issue_status_feedback: Povratna informacija
+  default_issue_status_closed: Zatvoreno
+  default_issue_status_rejected: Odbijeno
+  default_doc_category_user: Korisnička dokumentacija
+  default_doc_category_tech: Tehnička dokumentacija
+  default_priority_low: Nizak
+  default_priority_normal: Normalan
+  default_priority_high: Visok
+  default_priority_urgent: Hitno
+  default_priority_immediate: Neposredno
+  default_activity_design: Dizajn
+  default_activity_development: Razvoj
+  
+  enumeration_issue_priorities: Prioriteti problema
+  enumeration_doc_categories: Kategorije dokumenta
+  enumeration_activities: Aktivnosti (praćenje vremena)
+  enumeration_system_activity: Sistemska aktivnost
+  
+  field_time_entries: Vreme evidencije
+  project_module_gantt: Gantov dijagram
+  project_module_calendar: Kalendar
+  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
+  text_are_you_sure_with_children: Delete issue and all child issues?
+  field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
+  setting_commit_logtime_activity_id: Activity for logged time
+  text_time_logged_by_changeset: Applied in changeset %{value}.
+  setting_commit_logtime_enabled: Enable time logging
+  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
+  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kodiranje izvršnih poruka
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/sr.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/sr.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -18,7 +18,10 @@
     month_names: [~, јануар, фебруар, март, април, мај, јун, јул, август, септембар, октобар, новембар, децембар]
     abbr_month_names: [~, јан, феб, мар, апр, мај, јун, јул, авг, сеп, окт, нов, дец]
     # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -266,7 +269,7 @@
   field_attr_mail: Атрибут е-адресе
   field_onthefly: Креирање корисника у току рада
   field_start_date: Почетак
-  field_done_ratio: % урађено
+  field_done_ratio: "% урађено"
   field_auth_source: Режим потврде идентитета
   field_hide_mail: Сакриј моју е-адресу
   field_comments: Коментар
@@ -323,7 +326,6 @@
   setting_cross_project_issue_relations: Дозволи повезивање проблема из унакрсних пројеката
   setting_issue_list_default_columns: Подразумеване колоне приказане на списку проблема
   setting_repositories_encodings: Кодирање спремишта
-  setting_commit_logs_encoding: Кодирање извршних порука
   setting_emails_footer: Подножје странице е-поруке
   setting_protocol: Протокол
   setting_per_page_options: Опције приказа објеката по страници
@@ -941,3 +943,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Кодирање извршних порука
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/sv.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/sv.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -130,7 +130,7 @@
         greater_than_start_date: "måste vara senare än startdatumet"
         not_same_project: "tillhör inte samma projekt"
         circular_dependency: "Denna relation skulle skapa ett cirkulärt beroende"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "Ett ärende kan inte länkas till ett av dess underärenden"
 
   direction: ltr
   date:
@@ -149,7 +149,10 @@
     month_names: [~, januari, februari, mars, april, maj, juni, juli, augusti, september, oktober, november, december]
     abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, aug, sep, okt, nov, dec]
     # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -176,7 +179,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: Kontot har uppdaterats
@@ -207,7 +210,7 @@
   notice_default_data_loaded: Standardkonfiguration inläst.
   notice_unable_delete_version: Denna version var inte möjlig att ta bort.
   notice_unable_delete_time_entry: Tidloggning kunde inte tas bort.
-  notice_issue_done_ratios_updated: % klart uppdaterade.
+  notice_issue_done_ratios_updated: "% klart uppdaterade."
   notice_gantt_chart_truncated: "Schemat förminskades eftersom det överskrider det maximala antalet aktiviteter som får visas (%{max})"
   
   error_can_t_load_default_data: "Standardkonfiguration gick inte att läsa in: %{value}"
@@ -310,7 +313,7 @@
   field_attr_mail: Mailattribut
   field_onthefly: Skapa användare on-the-fly
   field_start_date: Startdatum
-  field_done_ratio: % Klart
+  field_done_ratio: "% Klart"
   field_auth_source: Autentiseringsläge
   field_hide_mail: Dölj min mailadress
   field_comments: Kommentar
@@ -345,6 +348,9 @@
   field_assigned_to_role: "Tilldelad användares roll"
   field_text: Textfält
   field_visible: Synlig
+  field_warn_on_leaving_unsaved: Varna om jag lämnar en sida med osparad text
+  field_issues_visibility: Ärendesynlighet
+  field_is_private: Privat
   
   setting_app_title: Applikationsrubrik
   setting_app_subtitle: Applikationsunderrubrik
@@ -372,7 +378,6 @@
   setting_cross_project_issue_relations: Tillåt ärenderelationer mellan projekt
   setting_issue_list_default_columns: Standardkolumner i ärendelistan
   setting_repositories_encodings: Teckenuppsättningar för versionsarkiv
-  setting_commit_logs_encoding: Teckenuppsättning för commit-meddelanden
   setting_emails_header: Mail-header
   setting_emails_footer: Signatur
   setting_protocol: Protokoll
@@ -417,6 +422,8 @@
   permission_edit_issues: Ändra ärenden
   permission_view_issues: Visa ärenden
   permission_manage_issue_relations: Hantera ärenderelationer
+  permission_set_issues_private: Sätta ärenden publika eller privata
+  permission_set_own_issues_private: Sätta egna ärenden publika eller privata
   permission_add_issue_notes: Lägga till ärendenotering
   permission_edit_issue_notes: Ändra ärendenoteringar
   permission_edit_own_issue_notes: Ändra egna ärendenoteringar
@@ -492,6 +499,9 @@
   label_issues_by: "Ärenden %{value}"
   label_issue_added: Ärende tillagt
   label_issue_updated: Ärende uppdaterat
+  label_issue_note_added: Anteckning tillagd
+  label_issue_status_updated: Status uppdaterad
+  label_issue_priority_updated: Prioritet uppdaterad
   label_document: Dokument
   label_document_new: Nytt dokument
   label_document_plural: Dokument
@@ -500,6 +510,8 @@
   label_role_plural: Roller
   label_role_new: Ny roll
   label_role_and_permissions: Roller och behörigheter
+  label_role_anonymous: Anonym
+  label_role_non_member: Icke-medlem
   label_member: Medlem
   label_member_new: Ny medlem
   label_member_plural: Medlemmar
@@ -578,6 +590,7 @@
   label_news_latest: Senaste nyheterna
   label_news_view_all: Visa alla nyheter
   label_news_added: Nyhet tillagd
+  label_news_comment_added: Kommentar tillagd till en nyhet
   label_settings: Inställningar
   label_overview: Översikt
   label_version: Version
@@ -636,6 +649,7 @@
   label_query: Användardefinerad fråga
   label_query_plural: Användardefinerade frågor
   label_query_new: Ny fråga
+  label_my_queries: Mina egna frågor
   label_filter_add: Lägg till filter
   label_filter_plural: Filter
   label_equals: är
@@ -774,6 +788,7 @@
   label_default_columns: Standardkolumner
   label_no_change_option: (Ingen ändring)
   label_bulk_edit_selected_issues: Gemensam ändring av markerade ärenden
+  label_bulk_edit_selected_time_entries: Gruppredigera valda tidloggningar
   label_theme: Tema
   label_default: Standard
   label_search_titles_only: Sök endast i titlar
@@ -835,12 +850,19 @@
   label_project_copy_notifications: Skicka mailnotifieringar när projektet kopieras
   label_principal_search: "Sök efter användare eller grupp:"
   label_user_search: "Sök efter användare:"
+  label_additional_workflow_transitions_for_author: Ytterligare övergångar tillåtna när användaren är den som skapat ärendet
+  label_additional_workflow_transitions_for_assignee: Ytterligare övergångar tillåtna när användaren är den som tilldelats ärendet
+  label_issues_visibility_all: Alla ärenden
+  label_issues_visibility_public: Alla icke-privata ärenden
+  label_issues_visibility_own: Ärenden skapade av eller tilldelade till användaren
   
   button_login: Logga in
   button_submit: Skicka
   button_save: Spara
   button_check_all: Markera alla
   button_uncheck_all: Avmarkera alla
+  button_collapse_all: Kollapsa alla
+  button_expand_all: Expandera alla
   button_delete: Ta bort
   button_create: Skapa
   button_create_and_continue: Skapa och fortsätt
@@ -900,6 +922,7 @@
   text_are_you_sure: Är du säker ?
   text_are_you_sure_with_children: Ta bort ärende och alla underärenden?
   text_journal_changed: "%{label} ändrad från %{old} till %{new}"
+  text_journal_changed_no_detail: "%{label} uppdaterad"
   text_journal_set_to: "%{label} satt till %{value}"
   text_journal_deleted: "%{label} borttagen (%{old})"
   text_journal_added: "%{label} %{value} tillagd"
@@ -927,6 +950,8 @@
   text_status_changed_by_changeset: "Tilldelad i changeset %{value}."
   text_time_logged_by_changeset: "Tilldelad i changeset %{value}."
   text_issues_destroy_confirmation: 'Är du säker på att du vill radera markerade ärende(n) ?'
+  text_issues_destroy_descendants_confirmation: Detta kommer även ta bort %{count} underaktivitet(er).
+  text_time_entries_destroy_confirmation: Är du säker på att du vill ta bort valda tidloggningar?
   text_select_project_modules: 'Välj vilka moduler som ska vara aktiva för projektet:'
   text_default_administrator_account_changed: Standardadministratörens konto ändrat
   text_file_repository_writable: Arkivet för bifogade filer är skrivbart
@@ -950,6 +975,7 @@
   text_own_membership_delete_confirmation: "Några av, eller alla, dina behörigheter kommer att tas bort och du kanske inte längre kommer kunna göra ändringar i det här projektet.\nVill du verkligen fortsätta?"
   text_zoom_out: Zooma ut
   text_zoom_in: Zooma in
+  text_warn_on_leaving_unsaved: Nuvarande sida innehåller osparad text som kommer försvinna om du lämnar sidan.
   
   default_role_manager: Projektledare
   default_role_developer: Utvecklare
@@ -977,7 +1003,17 @@
   enumeration_doc_categories: Dokumentkategorier
   enumeration_activities: Aktiviteter (tidsuppföljning)
   enumeration_system_activity: Systemaktivitet
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  field_commit_logs_encoding: Teckenuppsättning för commit-meddelanden
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/th.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/th.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -16,7 +16,10 @@
     month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -238,7 +241,7 @@
   field_attr_mail: อีเมล์ attribute
   field_onthefly: สร้างผู้ใช้ทันที
   field_start_date: เริ่ม
-  field_done_ratio: % สำเร็จ
+  field_done_ratio: "% สำเร็จ"
   field_auth_source: วิธีการยืนยันตัวตน
   field_hide_mail: ซ่อนอีเมล์ของฉัน
   field_comments: ความเห็น
@@ -729,7 +732,6 @@
   text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   field_parent_title: Parent page
   label_issue_watchers: Watchers
-  setting_commit_logs_encoding: Commit messages encoding
   button_quote: Quote
   setting_sequential_project_identifiers: Generate sequential project identifiers
   notice_unable_delete_version: Unable to delete version
@@ -937,3 +939,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/tr.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/tr.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,6 @@
-# Turkish translations for Ruby on Rails 
+# Turkish translations for Ruby on Rails
 # by Ozgun Ataman (ozataman@gmail.com)
+# by Burak Yigit Kaya (ben@byk.im)
 
 tr:
   locale:
@@ -18,8 +19,11 @@
     abbr_day_names: [Pzr, Pzt, Sal, Çrş, Prş, Cum, Cts]
     month_names: [~, Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz, Ağustos, Eylül, Ekim, Kasım, Aralık]
     abbr_month_names: [~, Oca, Şub, Mar, Nis, May, Haz, Tem, Ağu, Eyl, Eki, Kas, Ara]
-    order: [ :day, :month, :year ]
-  
+    order:
+      - :day
+      - :month
+      - :year
+
   time:
     formats:
       default: "%a %d.%b.%y %H:%M"
@@ -30,7 +34,7 @@
 
     am: "öğleden önce"
     pm: "öğleden sonra"
-      
+
   datetime:
     distance_in_words:
       half_a_minute: 'yarım dakika'
@@ -49,27 +53,27 @@
         one: '1 dakika'
         other: '%{count} dakika'
       about_x_hours:
-        one: '1 saat civarında'
-        other: '%{count} saat civarında'
+        one: 'yaklaşık 1 saat'
+        other: 'yaklaşık %{count} saat'
       x_days:
         one: '1 gün'
         other: '%{count} gün'
       about_x_months:
-        one: '1 ay civarında'
-        other: '%{count} ay civarında'
+        one: 'yaklaşık 1 ay'
+        other: 'yaklaşık %{count} ay'
       x_months:
         one: '1 ay'
         other: '%{count} ay'
       about_x_years:
-        one: '1 yıl civarında'
-        other: '%{count} yıl civarında'
+        one: 'yaklaşık 1 yıl'
+        other: 'yaklaşık %{count} yıl'
       over_x_years:
         one: '1 yıldan fazla'
         other: '%{count} yıldan fazla'
       almost_x_years:
-        one:   "almost 1 year"
-        other: "almost %{count} years"
-      
+        one:   "neredeyse 1 Yıl"
+        other: "neredeyse %{count} yıl"
+
   number:
     format:
       precision: 2
@@ -101,7 +105,7 @@
         units:
           byte:
             one: "Byte"
-            other: "Bytes"
+            other: "Byte"
           kb: "KB"
           mb: "MB"
           gb: "GB"
@@ -111,7 +115,7 @@
     array:
       sentence_connector: "ve"
       skip_last_comma: true
-        
+
   activerecord:
     errors:
       template:
@@ -143,21 +147,21 @@
         greater_than_start_date: "başlangıç tarihinden büyük olmalı"
         not_same_project: "aynı projeye ait değil"
         circular_dependency: "Bu ilişki döngüsel bağımlılık meydana getirecektir"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "Bir iş, alt işlerinden birine bağlanamaz"
       models:
-  
+
   actionview_instancetag_blank_option: Lütfen Seçin
-  
+
   general_text_No: 'Hayır'
   general_text_Yes: 'Evet'
   general_text_no: 'hayır'
   general_text_yes: 'evet'
   general_lang_name: 'Türkçe'
   general_csv_separator: ','
-  general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_csv_encoding: ISO-8859-9
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '7'
-  
+
   notice_account_updated: Hesap başarıyla güncelleştirildi.
   notice_account_invalid_creditentials: Geçersiz kullanıcı ya da parola
   notice_account_password_updated: Parola başarıyla güncellendi.
@@ -178,30 +182,30 @@
   notice_email_error: "E-posta gönderilirken bir hata oluştu (%{value})"
   notice_feeds_access_key_reseted: RSS erişim anahtarınız sıfırlandı.
   notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
-  notice_no_issue_selected: "Seçili ileti yok! Lütfen, düzenlemek istediğiniz iletileri işaretleyin."
+  notice_no_issue_selected: "Seçili iş yok! Lütfen, düzenlemek istediğiniz işleri işaretleyin."
   notice_account_pending: "Hesabınız oluşturuldu ve yönetici onayı bekliyor."
   notice_default_data_loaded: Varasayılan konfigürasyon başarılıyla yüklendi.
-  
+
   error_can_t_load_default_data: "Varsayılan konfigürasyon yüklenemedi: %{value}"
-  error_scm_not_found: "Depoda, giriş ya da revizyon yok."
+  error_scm_not_found: "Depoda, giriş ya da değişiklik yok."
   error_scm_command_failed: "Depoya erişmeye çalışırken bir hata meydana geldi: %{value}"
   error_scm_annotate: "Giriş mevcut değil veya izah edilemedi."
-  error_issue_not_found_in_project: 'İleti bilgisi bulunamadı veya bu projeye ait değil'
-  
+  error_issue_not_found_in_project: 'İş bilgisi bulunamadı veya bu projeye ait değil'
+
   mail_subject_lost_password: "Parolanız %{value}"
   mail_body_lost_password: 'Parolanızı değiştirmek için, aşağıdaki bağlantıya tıklayın:'
-  mail_subject_register: "Your %{value} hesap aktivasyonu"
+  mail_subject_register: "%{value} hesap aktivasyonu"
   mail_body_register: 'Hesabınızı etkinleştirmek için, aşağıdaki bağlantıya tıklayın:'
   mail_body_account_information_external: "Hesabınızı %{value} giriş yapmak için kullanabilirsiniz."
   mail_body_account_information: Hesap bilgileriniz
   mail_subject_account_activation_request: "%{value} hesabı etkinleştirme isteği"
   mail_body_account_activation_request: "Yeni bir kullanıcı (%{value}) kaydedildi. Hesap onaylanmayı bekliyor:"
-  
+
   gui_validation_error: 1 hata
   gui_validation_error_plural: "%{count} hata"
-  
+
   field_name: İsim
-  field_description: Açıklama
+  field_description: Yorum
   field_summary: Özet
   field_is_required: Gerekli
   field_firstname: Ad
@@ -211,11 +215,11 @@
   field_filesize: Boyut
   field_downloads: İndirilenler
   field_author: Yazar
-  field_created_on: Oluşturuldu
-  field_updated_on: Güncellendi
+  field_created_on: Oluşturulma
+  field_updated_on: Güncellenme
   field_field_format: Biçim
   field_is_for_all: Tüm projeler için
-  field_possible_values: Mümkün değerler
+  field_possible_values: Kullanılabilir değerler
   field_regexp: Düzenli ifadeler
   field_min_length: En az uzunluk
   field_max_length: En çok uzunluk
@@ -223,23 +227,23 @@
   field_category: Kategori
   field_title: Başlık
   field_project: Proje
-  field_issue: İleti
+  field_issue: İş
   field_status: Durum
   field_notes: Notlar
-  field_is_closed: İleti kapatıldı
+  field_is_closed: İş kapatıldı
   field_is_default: Varsayılan Değer
-  field_tracker: Takipçi
+  field_tracker: İş tipi
   field_subject: Konu
   field_due_date: Bitiş Tarihi
   field_assigned_to: Atanan
   field_priority: Öncelik
-  field_fixed_version: Hedef Version
+  field_fixed_version: Hedef Sürüm
   field_user: Kullanıcı
   field_role: Rol
   field_homepage: Anasayfa
   field_is_public: Genel
   field_parent: 'Üst proje: '
-  field_is_in_roadmap: Yol haritasında gösterilen iletiler
+  field_is_in_roadmap: Yol haritasında gösterilen işler
   field_login: Giriş
   field_mail_notification: E-posta uyarıları
   field_admin: Yönetici
@@ -249,7 +253,7 @@
   field_password: Parola
   field_new_password: Yeni Parola
   field_password_confirmation: Onay
-  field_version: Versiyon
+  field_version: Sürüm
   field_type: Tip
   field_host: Host
   field_port: Port
@@ -260,38 +264,38 @@
   field_attr_lastname: Soyad Niteliği
   field_attr_mail: E-Posta Niteliği
   field_onthefly: Anında kullanıcı oluşturma
-  field_start_date: Başlangıç
-  field_done_ratio: % tamamlandı
+  field_start_date: Başlangıç Tarihi
+  field_done_ratio: Tamamlanma yüzdesi
   field_auth_source: Kimlik Denetim Modu
   field_hide_mail: E-posta adresimi gizle
-  field_comments: Açıklama
+  field_comments: Yorumlar
   field_url: URL
   field_start_page: Başlangıç Sayfası
   field_subproject: Alt Proje
-  field_hours: Saatler
-  field_activity: Faaliyet
+  field_hours: Saat
+  field_activity: Etkinlik
   field_spent_on: Tarih
   field_identifier: Tanımlayıcı
   field_is_filter: filtre olarak kullanılmış
-  field_issue_to: İlişkili ileti
+  field_issue_to: İlişkili iş
   field_delay: Gecikme
-  field_assignable: Bu role atanabilecek iletiler
-  field_redirect_existing_links: Mevcut bağlantıları tekrar yönlendir
+  field_assignable: Bu role atanabilecek işler
+  field_redirect_existing_links: Mevcut bağlantıları yönlendir
   field_estimated_hours: Kalan zaman
   field_column_names: Sütunlar
   field_time_zone: Saat dilimi
   field_searchable: Aranabilir
   field_default_value: Varsayılan değer
-  field_comments_sorting: Açıklamaları göster
-  
+  field_comments_sorting: Yorumları göster
+
   setting_app_title: Uygulama Bağlığı
   setting_app_subtitle: Uygulama alt başlığı
   setting_welcome_text: Hoşgeldin Mesajı
   setting_default_language: Varsayılan Dil
   setting_login_required: Kimlik denetimi gerekli mi
   setting_self_registration: Otomatik kayıt
-  setting_attachment_max_size: Maksimum Ek boyutu
-  setting_issues_export_limit: İletilerin dışa aktarılma sınırı
+  setting_attachment_max_size: Maksimum ek boyutu
+  setting_issues_export_limit: İşlerin dışa aktarılma sınırı
   setting_mail_from: Gönderici e-posta adresi
   setting_bcc_recipients: Alıcıları birbirinden gizle (bcc)
   setting_host_name: Host adı
@@ -306,17 +310,17 @@
   setting_autologin: Otomatik Giriş
   setting_date_format: Tarih Formati
   setting_time_format: Zaman Formatı
-  setting_cross_project_issue_relations: Çapraz-Proje ileti ilişkilendirmesine izin ver
-  setting_issue_list_default_columns: İleti listesinde gösterilen varsayılan sütunlar
+  setting_cross_project_issue_relations: Çapraz-Proje iş ilişkilendirmesine izin ver
+  setting_issue_list_default_columns: İş listesinde gösterilen varsayılan sütunlar
   setting_repositories_encodings: Depo dil kodlaması
   setting_emails_footer: E-posta dip not
   setting_protocol: Protokol
-  setting_per_page_options: Sayfa seçenekleri başına nesneler
-  setting_user_format: Kullanıcı gösterim formatı
-  setting_activity_days_default: Proje Faaliyetlerinde gösterilen gün sayısı
-  setting_display_subprojects_issues: Varsayılan olarak ana projenin ileti listesinde alt proje iletilerini göster
-  
-  project_module_issue_tracking: İleti Takibi
+  setting_per_page_options: Sayfada başına öğe sayısı
+  setting_user_format: Kullanıcı gösterim biçimi
+  setting_activity_days_default: Proje etkinliklerinde gösterilen gün sayısı
+  setting_display_subprojects_issues: Varsayılan olarak ana projenin iş listesinde alt proje işlerini göster
+
+  project_module_issue_tracking: İş Takibi
   project_module_time_tracking: Zaman Takibi
   project_module_news: Haberler
   project_module_documents: Belgeler
@@ -324,7 +328,7 @@
   project_module_wiki: Wiki
   project_module_repository: Depo
   project_module_boards: Tartışma Alanı
-  
+
   label_user: Kullanıcı
   label_user_plural: Kullanıcılar
   label_user_new: Yeni Kullanıcı
@@ -332,18 +336,18 @@
   label_project_new: Yeni proje
   label_project_plural: Projeler
   label_x_projects:
-    zero:  no projects
-    one:   1 project
-    other: "%{count} projects"
+    zero:  hiç proje yok
+    one:   1 proje
+    other: "%{count} proje"
   label_project_all: Tüm Projeler
   label_project_latest: En son projeler
-  label_issue: İleti
-  label_issue_new: Yeni İleti
-  label_issue_plural: İletiler
-  label_issue_view_all: Tüm iletileri izle
-  label_issues_by: "%{value} tarafından gönderilmiş iletiler"
-  label_issue_added: İleti eklendi
-  label_issue_updated: İleti güncellendi
+  label_issue: İş
+  label_issue_new: Yeni İş
+  label_issue_plural: İşler
+  label_issue_view_all: Tüm işleri izle
+  label_issues_by: "%{value} tarafından gönderilmiş işler"
+  label_issue_added: İş eklendi
+  label_issue_updated: İş güncellendi
   label_document: Belge
   label_document_new: Yeni belge
   label_document_plural: Belgeler
@@ -355,15 +359,15 @@
   label_member: Üye
   label_member_new: Yeni üye
   label_member_plural: Üyeler
-  label_tracker: Takipçi
-  label_tracker_plural: Takipçiler
-  label_tracker_new: Yeni takipçi
+  label_tracker: İş tipi
+  label_tracker_plural: İş tipleri
+  label_tracker_new: Yeni iş tipi
   label_workflow: İş akışı
-  label_issue_status: İleti durumu
-  label_issue_status_plural: İleti durumuları
+  label_issue_status: İş durumu
+  label_issue_status_plural: İş durumuları
   label_issue_status_new: Yeni durum
-  label_issue_category: İleti kategorisi
-  label_issue_category_plural: İleti kategorileri
+  label_issue_category: İş kategorisi
+  label_issue_category_plural: İş kategorileri
   label_issue_category_new: Yeni kategori
   label_custom_field: Özel alan
   label_custom_field_plural: Özel alanlar
@@ -374,21 +378,21 @@
   label_information_plural: Bilgi
   label_please_login: Lütfen giriş yapın
   label_register: Kayıt
-  label_password_lost: Parolamı unuttum?
+  label_password_lost: Parolamı unuttum
   label_home: Anasayfa
   label_my_page: Kişisel Sayfam
   label_my_account: Hesabım
   label_my_projects: Projelerim
   label_administration: Yönetim
-  label_login: Gir
+  label_login: Giriş
   label_logout: Çıkış
   label_help: Yardım
-  label_reported_issues: Rapor edilmiş iletiler
-  label_assigned_to_me_issues: Bana atanmış iletiler
+  label_reported_issues: Rapor edilmiş işler
+  label_assigned_to_me_issues: Bana atanmış işler
   label_last_login: Son bağlantı
-  label_registered_on: Kayıtlı
-  label_activity: Faaliyet
-  label_overall_activity: Tüm aktiviteler
+  label_registered_on: Kayıt tarihi
+  label_activity: Etkinlik
+  label_overall_activity: Tüm etkinlikler
   label_new: Yeni
   label_logged_as: "Kullanıcı :"
   label_environment: Çevre
@@ -401,14 +405,14 @@
   label_list: Liste
   label_date: Tarih
   label_integer: Tam sayı
-  label_float: Noktalı sayı
-  label_boolean: Boolean
+  label_float: Ondalıklı sayı
+  label_boolean: "Evet/Hayır"
   label_string: Metin
   label_text: Uzun Metin
   label_attribute: Nitelik
   label_attribute_plural: Nitelikler
-  label_download: "%{count} indirilen"
-  label_download_plural: "%{count} indirilen"
+  label_download: "%{count} indirme"
+  label_download_plural: "%{count} indirme"
   label_no_data: Gösterilecek veri yok
   label_change_status: Değişim Durumu
   label_history: Geçmiş
@@ -427,29 +431,29 @@
   label_news_added: Haber eklendi
   label_settings: Ayarlar
   label_overview: Genel
-  label_version: Versiyon
-  label_version_new: Yeni versiyon
-  label_version_plural: Versiyonlar
+  label_version: Sürüm
+  label_version_new: Yeni sürüm
+  label_version_plural: Sürümler
   label_confirmation: Doğrulamama
-  label_export_to: 'Diğer uygun kaynaklar:'
-  label_read: Oku...
+  label_export_to: "Diğer uygun kaynaklar:"
+  label_read: "Oku..."
   label_public_projects: Genel Projeler
   label_open_issues: açık
   label_open_issues_plural: açık
   label_closed_issues: kapalı
   label_closed_issues_plural: kapalı
   label_x_open_issues_abbr_on_total:
-    zero:  0 open / %{total}
-    one:   1 open / %{total}
-    other: "%{count} open / %{total}"
+    zero:  tamamı kapalı, toplam %{total}
+    one:   1'i' açık, toplam %{total}
+    other: "%{count} açık, toplam %{total}"
   label_x_open_issues_abbr:
-    zero:  0 open
-    one:   1 open
-    other: "%{count} open"
+    zero:  hiç açık yok
+    one:   1 açık
+    other: "%{count} açık"
   label_x_closed_issues_abbr:
-    zero:  0 closed
-    one:   1 closed
-    other: "%{count} closed"
+    zero:  hiç kapalı yok
+    one:   1 kapalı
+    other: "%{count} kapalı"
   label_total: Toplam
   label_permissions: İzinler
   label_current_status: Mevcut Durum
@@ -460,25 +464,25 @@
   label_next: Sonraki
   label_previous: Önceki
   label_used_by: 'Kullanan: '
-  label_details: Detaylar
-  label_add_note: Bir not ekle
+  label_details: Ayrıntılar
+  label_add_note: Not ekle
   label_per_page: Sayfa başına
   label_calendar: Takvim
-  label_months_from: aylardan itibaren
-  label_gantt: Gantt
+  label_months_from: ay öncesinden itibaren
+  label_gantt: İş-Zaman Çizelgesi
   label_internal: Dahili
   label_last_changes: "Son %{count} değişiklik"
   label_change_view_all: Tüm Değişiklikleri gör
   label_personalize_page: Bu sayfayı kişiselleştir
-  label_comment: Açıklama
-  label_comment_plural: Açıklamalar
+  label_comment: Yorum
+  label_comment_plural: Yorumlar
   label_x_comments:
-    zero: no comments
-    one: 1 comment
-    other: "%{count} comments"
-  label_comment_add: Açıklama Ekle
-  label_comment_added: Açıklama Eklendi
-  label_comment_delete: Açıklamaları sil
+    zero: hiç yorum yok
+    one: 1 yorum
+    other: "%{count} yorum"
+  label_comment_add: Yorum Ekle
+  label_comment_added: Yorum Eklendi
+  label_comment_delete: Yorumları sil
   label_query: Özel Sorgu
   label_query_plural: Özel Sorgular
   label_query_new: Yeni Sorgu
@@ -507,27 +511,27 @@
   label_day_plural: Günler
   label_repository: Depo
   label_repository_plural: Depolar
-  label_browse: Tara
+  label_browse: Gözat
   label_modification: "%{count} değişim"
   label_modification_plural: "%{count} değişim"
-  label_revision: Revizyon
-  label_revision_plural: Revizyonlar
-  label_associated_revisions: Birleştirilmiş revizyonlar
+  label_revision: Değişiklik
+  label_revision_plural: Değişiklikler
+  label_associated_revisions: Birleştirilmiş değişiklikler
   label_added: eklendi
   label_modified: güncellendi
   label_deleted: silindi
-  label_latest_revision: En son revizyon
-  label_latest_revision_plural: En son revizyonlar
-  label_view_revisions: Revizyonları izle
+  label_latest_revision: En son değişiklik
+  label_latest_revision_plural: En son değişiklikler
+  label_view_revisions: Değişiklikleri izle
   label_max_size: En büyük boyut
   label_sort_highest: Üste taşı
   label_sort_higher: Yukarı taşı
   label_sort_lower: Aşağı taşı
   label_sort_lowest: Dibe taşı
   label_roadmap: Yol Haritası
-  label_roadmap_due_in: "Due in %{value}"
+  label_roadmap_due_in: "%{value} içinde bitmeli"
   label_roadmap_overdue: "%{value} geç"
-  label_roadmap_no_issues: Bu versiyon için ileti yok
+  label_roadmap_no_issues: Bu sürüm için iş yok
   label_search: Ara
   label_result_plural: Sonuçlar
   label_all_words: Tüm Kelimeler
@@ -538,11 +542,11 @@
   label_wiki_page_plural: Wiki sayfaları
   label_index_by_title: Başlığa göre diz
   label_index_by_date: Tarihe göre diz
-  label_current_version: Güncel versiyon
+  label_current_version: Güncel sürüm
   label_preview: Önizleme
   label_feed_plural: Beslemeler
   label_changes_details: Bütün değişikliklerin detayları
-  label_issue_tracking: İleti Takibi
+  label_issue_tracking: İş Takibi
   label_spent_time: Harcanan zaman
   label_f_hour: "%{value} saat"
   label_f_hour_plural: "%{value} saat"
@@ -557,9 +561,9 @@
   label_options: Tercihler
   label_copy_workflow_from: İşakışı kopyala
   label_permissions_report: İzin raporu
-  label_watched_issues: İzlenmiş iletiler
-  label_related_issues: İlişkili iletiler
-  label_applied_status: uygulanmış iletiler
+  label_watched_issues: İzlenmiş işler
+  label_related_issues: İlişkili işler
+  label_applied_status: uygulanmış işler
   label_loading: Yükleniyor...
   label_relation_new: Yeni ilişki
   label_relation_delete: İlişkiyi sil
@@ -575,7 +579,7 @@
   label_start_to_end: baştan sona
   label_stay_logged_in: Sürekli bağlı kal
   label_disabled: Devredışı
-  label_show_completed_versions: Tamamlanmış versiyonları göster
+  label_show_completed_versions: Tamamlanmış sürümleri göster
   label_me: Ben
   label_board: Tartışma Alanı
   label_board_new: Yeni alan
@@ -592,7 +596,7 @@
   label_week: Hafta
   label_date_from: Başlangıç
   label_date_to: Bitiş
-  label_language_based: Kullanıcı diline istinaden
+  label_language_based: Kullanıcı dili bazlı
   label_sort_by: "%{value} göre sırala"
   label_send_test_email: Test e-postası gönder
   label_feeds_access_key_created_on: "RSS erişim anahtarı %{value} önce oluşturuldu"
@@ -604,12 +608,12 @@
   label_changeset_plural: Değişiklik Listeleri
   label_default_columns: Varsayılan Sütunlar
   label_no_change_option: (Değişiklik yok)
-  label_bulk_edit_selected_issues: Seçili iletileri toplu düzenle
+  label_bulk_edit_selected_issues: Seçili işleri toplu olarak düzenle
   label_theme: Tema
   label_default: Varsayılan
   label_search_titles_only: Sadece başlıkları ara
   label_user_mail_option_all: "Tüm projelerimdeki herhangi bir olay için"
-  label_user_mail_option_selected: "Sadece seçili projelerdeki herhangi bir olay için..."
+  label_user_mail_option_selected: "Sadece seçili projelerdeki herhangi bir olay için"
   label_user_mail_no_self_notified: "Kendi yaptığım değişikliklerden haberdar olmak istemiyorum"
   label_registration_activation_by_email: e-posta ile hesap etkinleştirme
   label_registration_manual_activation: Elle hesap etkinleştirme
@@ -619,7 +623,7 @@
   label_change_properties: Özellikleri değiştir
   label_general: Genel
   label_more: Daha fazla
-  label_scm: KKY
+  label_scm: KY
   label_plugins: Eklentiler
   label_ldap_authentication: LDAP Denetimi
   label_downloads_abbr: D/L
@@ -629,7 +633,7 @@
   label_chronological_order: Tarih sırasına göre
   label_reverse_chronological_order: Ters tarih sırasına göre
   label_planning: Planlanıyor
-  
+
   button_login: Giriş
   button_submit: Gönder
   button_save: Kaydet
@@ -653,8 +657,8 @@
   button_cancel: İptal
   button_activate: Etkinleştir
   button_sort: Sırala
-  button_log_time: Günlük zamanı
-  button_rollback: Bu versiyone geri al
+  button_log_time: Zaman kaydı
+  button_rollback: Bu sürüme geri al
   button_watch: İzle
   button_unwatch: İzlemeyi iptal et
   button_reply: Cevapla
@@ -664,20 +668,20 @@
   button_rename: Yeniden adlandır
   button_change_password: Parolayı değiştir
   button_copy: Kopyala
-  button_annotate: Revizyon geçmişine göre göster
+  button_annotate: Değişiklik geçmişine göre göster
   button_update: Güncelle
   button_configure: Yapılandır
-  
+
   status_active: faal
   status_registered: kayıtlı
   status_locked: kilitli
-  
+
   text_select_mail_notifications: Gönderilecek e-posta uyarısına göre hareketi seçin.
-  text_regexp_info: eg. ^[A-Z0-9]+$
+  text_regexp_info: örn. ^[A-Z0-9]+$
   text_min_max_length_info: 0 sınırlama yok demektir
   text_project_destroy_confirmation: Bu projeyi ve bağlantılı verileri silmek istediğinizden emin misiniz?
   text_subprojects_destroy_warning: "Ayrıca %{value} alt proje silinecek."
-  text_workflow_edit: İşakışını düzenlemek için bir rol ve takipçi seçin
+  text_workflow_edit: İşakışını düzenlemek için bir rol ve iş tipi seçin
   text_are_you_sure: Emin misiniz ?
   text_tip_issue_begin_day: Bugün başlayan görevler
   text_tip_issue_end_day: Bugün sona eren görevler
@@ -686,41 +690,41 @@
   text_caracters_maximum: "En çok %{count} karakter."
   text_caracters_minimum: "En az %{count} karakter uzunluğunda olmalı."
   text_length_between: "%{min} ve %{max} karakterleri arasındaki uzunluk."
-  text_tracker_no_workflow: Bu takipçi için işakışı tanımlanmamış
+  text_tracker_no_workflow: Bu iş tipi için işakışı tanımlanmamış
   text_unallowed_characters: Yasaklı karakterler
-  text_comma_separated: Çoklu değer uygundur(Virgül ile ayrılmış).
-  text_issues_ref_in_commit_messages: Teslim mesajlarındaki iletileri çözme ve başvuruda bulunma
-  text_issue_added: "İleti %{id}, %{author} tarafından rapor edildi."
-  text_issue_updated: "İleti %{id}, %{author} tarafından güncellendi."
+  text_comma_separated: Çoklu değer girilebilir(Virgül ile ayrılmış).
+  text_issues_ref_in_commit_messages: Teslim mesajlarındaki işleri çözme ve başvuruda bulunma
+  text_issue_added: "İş %{id}, %{author} tarafından rapor edildi."
+  text_issue_updated: "İş %{id}, %{author} tarafından güncellendi."
   text_wiki_destroy_confirmation: bu wikiyi ve tüm içeriğini silmek istediğinizden emin misiniz?
-  text_issue_category_destroy_question: "Bazı iletiler (%{count}) bu kategoriye atandı. Ne yapmak istersiniz?"
+  text_issue_category_destroy_question: "Bazı işler (%{count}) bu kategoriye atandı. Ne yapmak istersiniz?"
   text_issue_category_destroy_assignments: Kategori atamalarını kaldır
-  text_issue_category_reassign_to: İletileri bu kategoriye tekrar ata
-  text_user_mail_option: "Seçili olmayan projeler için, sadece dahil olduğunuz ya da izlediğiniz öğeler hakkında uyarılar alacaksınız (örneğin,yazarı veya atandığınız iletiler)."
-  text_no_configuration_data: "Roller, takipçiler, ileti durumları ve işakışı henüz yapılandırılmadı.\nVarsayılan yapılandırılmanın yüklenmesi şiddetle tavsiye edilir. Bir kez yüklendiğinde yapılandırmayı değiştirebileceksiniz."
+  text_issue_category_reassign_to: İşleri bu kategoriye tekrar ata
+  text_user_mail_option: "Seçili olmayan projeler için, sadece dahil olduğunuz ya da izlediğiniz öğeler hakkında uyarılar alacaksınız (örneğin,yazarı veya atandığınız işler)."
+  text_no_configuration_data: "Roller, iş tipleri, iş durumları ve işakışı henüz yapılandırılmadı.\nVarsayılan yapılandırılmanın yüklenmesi şiddetle tavsiye edilir. Bir kez yüklendiğinde yapılandırmayı değiştirebileceksiniz."
   text_load_default_configuration: Varsayılan yapılandırmayı yükle
   text_status_changed_by_changeset: "Değişiklik listesi %{value} içinde uygulandı."
-  text_issues_destroy_confirmation: 'Seçili iletileri silmek istediğinizden emin misiniz ?'
+  text_issues_destroy_confirmation: 'Seçili işleri silmek istediğinizden emin misiniz ?'
   text_select_project_modules: 'Bu proje için etkinleştirmek istediğiniz modülleri seçin:'
   text_default_administrator_account_changed: Varsayılan yönetici hesabı değişti
   text_file_repository_writable: Dosya deposu yazılabilir
   text_rmagick_available: RMagick Kullanılabilir (isteğe bağlı)
-  text_destroy_time_entries_question: Silmek üzere olduğunuz iletiler üzerine %{hours} saat raporlandı.Ne yapmak istersiniz ?
-  text_destroy_time_entries: Raporlanmış saatleri sil
-  text_assign_time_entries_to_project: Raporlanmış saatleri projeye ata
-  text_reassign_time_entries: 'Raporlanmış saatleri bu iletiye tekrar ata:'
-  
+  text_destroy_time_entries_question: Silmek üzere olduğunuz işler üzerine %{hours} saat raporlandı.Ne yapmak istersiniz ?
+  text_destroy_time_entries: Raporlanmış süreleri sil
+  text_assign_time_entries_to_project: Raporlanmış süreleri projeye ata
+  text_reassign_time_entries: 'Raporlanmış süreleri bu işe tekrar ata:'
+
   default_role_manager: Yönetici
   default_role_developer: Geliştirici
   default_role_reporter: Raporlayıcı
   default_tracker_bug: Hata
-  default_tracker_feature: ÖZellik
+  default_tracker_feature: Özellik
   default_tracker_support: Destek
   default_issue_status_new: Yeni
-  default_issue_status_in_progress: In Progress
+  default_issue_status_in_progress: Yapılıyor
   default_issue_status_resolved: Çözüldü
   default_issue_status_feedback: Geribildirim
-  default_issue_status_closed: Kapatıldı
+  default_issue_status_closed: "Kapatıldı"
   default_issue_status_rejected: Reddedildi
   default_doc_category_user: Kullanıcı Dökümantasyonu
   default_doc_category_tech: Teknik Dökümantasyon
@@ -730,232 +734,264 @@
   default_priority_urgent: Acil
   default_priority_immediate: Derhal
   default_activity_design: Tasarım
-  default_activity_development: Geliştirim
-  
-  enumeration_issue_priorities: İleti önceliği
+  default_activity_development: Geliştirme
+
+  enumeration_issue_priorities: İş önceliği
   enumeration_doc_categories: Belge Kategorileri
   enumeration_activities: Faaliyetler (zaman takibi)
-  button_quote: Quote
-  setting_enabled_scm: Enabled SCM
-  label_incoming_emails: Incoming emails
-  label_generate_key: Generate a key
-  setting_sequential_project_identifiers: Generate sequential project identifiers
-  field_parent_title: Parent page
+  button_quote: Alıntı
+  setting_enabled_scm: KKY Açık
+  label_incoming_emails: "Gelen e-postalar"
+  label_generate_key: "Anahtar oluştur"
+  setting_sequential_project_identifiers: "Sıralı proje tanımlayıcıları oluştur"
+  field_parent_title: Üst sayfa
   text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
-  text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  label_issue_watchers: Watchers
-  mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
-  label_duplicated_by: duplicated by
-  text_enumeration_destroy_question: "%{count} objects are assigned to this value."
-  text_user_wrote: "%{value} wrote:"
-  setting_mail_handler_api_enabled: Enable WS for incoming emails
-  label_and_its_subprojects: "%{value} and its subprojects"
-  mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
-  setting_mail_handler_api_key: API key
-  setting_commit_logs_encoding: Commit messages encoding
+  text_enumeration_category_reassign_to: 'Hepsini şuna çevir:'
+  label_issue_watchers: Takipçiler
+  mail_body_reminder: "Size atanmış olan %{count} iş %{days} gün içerisinde bitirilmeli:"
+  label_duplicated_by: yineleyen
+  text_enumeration_destroy_question: "Bu nesneye %{count} değer bağlanmış."
+  text_user_wrote: "%{value} demiş ki:"
+  setting_mail_handler_api_enabled: Gelen e-postalar için WS'yi aç
+  label_and_its_subprojects: "%{value} ve alt projeleri"
+  mail_subject_reminder: "%{count} iş bir kaç güne bitecek"
+  setting_mail_handler_api_key: API anahtarı
+  setting_commit_logs_encoding: Gönderim mesajlarının kodlaması (UTF-8 vs.)
   general_csv_decimal_separator: '.'
-  notice_unable_delete_version: Unable to delete version
-  label_renamed: renamed
-  label_copied: copied
-  setting_plain_text_mail: plain text only (no HTML)
-  permission_view_files: View files
-  permission_edit_issues: Edit issues
-  permission_edit_own_time_entries: Edit own time logs
-  permission_manage_public_queries: Manage public queries
-  permission_add_issues: Add issues
-  permission_log_time: Log spent time
-  permission_view_changesets: View changesets
-  permission_view_time_entries: View spent time
-  permission_manage_versions: Manage versions
-  permission_manage_wiki: Manage wiki
-  permission_manage_categories: Manage issue categories
-  permission_protect_wiki_pages: Protect wiki pages
-  permission_comment_news: Comment news
-  permission_delete_messages: Delete messages
-  permission_select_project_modules: Select project modules
-  permission_manage_documents: Manage documents
-  permission_edit_wiki_pages: Edit wiki pages
-  permission_add_issue_watchers: Add watchers
-  permission_view_gantt: View gantt chart
-  permission_move_issues: Move issues
-  permission_manage_issue_relations: Manage issue relations
-  permission_delete_wiki_pages: Delete wiki pages
-  permission_manage_boards: Manage boards
-  permission_delete_wiki_pages_attachments: Delete attachments
-  permission_view_wiki_edits: View wiki history
-  permission_add_messages: Post messages
-  permission_view_messages: View messages
-  permission_manage_files: Manage files
-  permission_edit_issue_notes: Edit notes
-  permission_manage_news: Manage news
-  permission_view_calendar: View calendrier
-  permission_manage_members: Manage members
-  permission_edit_messages: Edit messages
-  permission_delete_issues: Delete issues
-  permission_view_issue_watchers: View watchers list
-  permission_manage_repository: Manage repository
-  permission_commit_access: Commit access
-  permission_browse_repository: Browse repository
-  permission_view_documents: View documents
-  permission_edit_project: Edit project
-  permission_add_issue_notes: Add notes
-  permission_save_queries: Save queries
-  permission_view_wiki_pages: View wiki
-  permission_rename_wiki_pages: Rename wiki pages
-  permission_edit_time_entries: Edit time logs
-  permission_edit_own_issue_notes: Edit own notes
-  setting_gravatar_enabled: Use Gravatar user icons
-  label_example: Example
+  notice_unable_delete_version: Sürüm silinemiyor
+  label_renamed: yeniden adlandırılmış
+  label_copied: kopyalanmış
+  setting_plain_text_mail: sadece düz metin (HTML yok)
+  permission_view_files: Dosyaları görme
+  permission_edit_issues: İşleri düzenleme
+  permission_edit_own_time_entries: Kendi zaman girişlerini düzenleme
+  permission_manage_public_queries: Herkese açık sorguları yönetme
+  permission_add_issues: İş ekleme
+  permission_log_time: Harcanan zamanı kaydetme
+  permission_view_changesets: Değişimleri görme(SVN, vs.)
+  permission_view_time_entries: Harcanan zamanı görme
+  permission_manage_versions: Sürümleri yönetme
+  permission_manage_wiki: Wiki'yi yönetme
+  permission_manage_categories: İş kategorilerini yönetme
+  permission_protect_wiki_pages: Wiki sayfalarını korumaya alma
+  permission_comment_news: Haberlere yorum yapma
+  permission_delete_messages: Mesaj silme
+  permission_select_project_modules: Proje modüllerini seçme
+  permission_manage_documents: Belgeleri yönetme
+  permission_edit_wiki_pages: Wiki sayfalarını düzenleme
+  permission_add_issue_watchers: Takipçi ekleme
+  permission_view_gantt: İş-Zaman çizelgesi görme
+  permission_move_issues: İşlerin yerini değiştirme
+  permission_manage_issue_relations: İşlerin biribiriyle bağlantılarını yönetme
+  permission_delete_wiki_pages: Wiki sayfalarını silme
+  permission_manage_boards: Panoları yönetme
+  permission_delete_wiki_pages_attachments: Ekleri silme
+  permission_view_wiki_edits: Wiki geçmişini görme
+  permission_add_messages: Mesaj gönderme
+  permission_view_messages: Mesajları görme
+  permission_manage_files: Dosyaları yönetme
+  permission_edit_issue_notes: Notları düzenleme
+  permission_manage_news: Haberleri yönetme
+  permission_view_calendar: Takvimleri görme
+  permission_manage_members: Üyeleri yönetme
+  permission_edit_messages: Mesajları düzenleme
+  permission_delete_issues: İşleri silme
+  permission_view_issue_watchers: Takipçi listesini görme
+  permission_manage_repository: Depo yönetimi
+  permission_commit_access: Gönderme erişimi
+  permission_browse_repository: Depoya gözatma
+  permission_view_documents: Belgeleri görme
+  permission_edit_project: Projeyi düzenleme
+  permission_add_issue_notes: Not ekleme
+  permission_save_queries: Sorgu kaydetme
+  permission_view_wiki_pages: Wiki görme
+  permission_rename_wiki_pages: Wiki sayfasının adını değiştirme
+  permission_edit_time_entries: Zaman kayıtlarını düzenleme
+  permission_edit_own_issue_notes: Kendi notlarını düzenleme
+  setting_gravatar_enabled: Kullanıcı resimleri için Gravatar kullan
+  label_example: Örnek
   text_repository_usernames_mapping: "Select ou update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
-  permission_edit_own_messages: Edit own messages
-  permission_delete_own_messages: Delete own messages
-  label_user_activity: "%{value}'s activity"
-  label_updated_time_by: "Updated by %{author} %{age} ago"
-  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-  setting_diff_max_lines_displayed: Max number of diff lines displayed
-  text_plugin_assets_writable: Plugin assets directory writable
-  warning_attachments_not_saved: "%{count} file(s) could not be saved."
-  button_create_and_continue: Create and continue
-  text_custom_field_possible_values_info: 'One line for each value'
-  label_display: Display
-  field_editable: Editable
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  field_watcher: Watcher
-  setting_openid: Allow OpenID login and registration
+  permission_edit_own_messages: Kendi mesajlarını düzenleme
+  permission_delete_own_messages: Kendi mesajlarını silme
+  label_user_activity: "%{value} kullanıcısının etkinlikleri"
+  label_updated_time_by: "%{author} tarafından %{age} önce güncellendi"
+  text_diff_truncated: '... Bu fark tam olarak gösterilemiyor çünkü gösterim için ayarlanmış üst sınırı aşıyor.'
+  setting_diff_max_lines_displayed: Gösterilebilecek maksimumu fark satırı
+  text_plugin_assets_writable: Eklenti yardımcı dosya dizini yazılabilir
+  warning_attachments_not_saved: "%{count} adet dosya kaydedilemedi."
+  button_create_and_continue: Oluştur ve devam et
+  text_custom_field_possible_values_info: 'Her değer için bir satır'
+  label_display: Göster
+  field_editable: Düzenlenebilir
+  setting_repository_log_display_limit: Dosya kaydında gösterilecek maksimum değişim sayısı
+  setting_file_max_size_displayed: Dahili olarak gösterilecek metin dosyaları için maksimum satır sayısı
+  field_watcher: Takipçi
+  setting_openid: Kayıt ve giriş için OpenID'ye izin ver
   field_identity_url: OpenID URL
-  label_login_with_open_id_option: or login with OpenID
-  field_content: Content
-  label_descending: Descending
-  label_sort: Sort
-  label_ascending: Ascending
-  label_date_from_to: From %{start} to %{end}
+  label_login_with_open_id_option: veya OpenID kullanın
+  field_content: İçerik
+  label_descending: Azalan
+  label_sort: Sırala
+  label_ascending: Artan
+  label_date_from_to: "%{start} - %{end} arası"
   label_greater_or_equal: ">="
   label_less_or_equal: <=
-  text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do?
-  text_wiki_page_reassign_children: Reassign child pages to this parent page
-  text_wiki_page_nullify_children: Keep child pages as root pages
-  text_wiki_page_destroy_children: Delete child pages and all their descendants
-  setting_password_min_length: Minimum password length
-  field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
-  label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
-  mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}.
-  label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}.
-  permission_add_project: Create project
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  label_view_all_revisions: View all revisions
-  label_tag: Tag
-  label_branch: Branch
-  error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
-  error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
-  label_group_plural: Groups
-  label_group: Group
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  text_journal_changed: "%{label} changed from %{old} to %{new}"
-  text_journal_set_to: "%{label} set to %{value}"
-  text_journal_deleted: "%{label} deleted (%{old})"
-  text_journal_added: "%{label} %{value} added"
-  field_active: Active
-  enumeration_system_activity: System Activity
-  permission_delete_issue_watchers: Delete watchers
-  version_status_closed: closed
-  version_status_locked: locked
-  version_status_open: open
-  error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
-  label_user_anonymous: Anonymous
-  button_move_and_follow: Move and follow
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_gravatar_default: Default Gravatar image
-  field_sharing: Sharing
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_system: With all projects
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_tree: With project tree
-  label_version_sharing_none: Not shared
-  error_can_not_archive_project: This project can not be archived
-  button_duplicate: Duplicate
-  button_copy_and_follow: Copy and follow
-  label_copy_source: Source
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_status: Use the issue status
-  error_issue_done_ratios_not_updated: Issue done ratios not updated.
-  error_workflow_copy_target: Please select target tracker(s) and role(s)
-  setting_issue_done_ratio_issue_field: Use the issue field
-  label_copy_same_as_target: Same as target
-  label_copy_target: Target
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  error_workflow_copy_source: Please select a source tracker or role
-  label_update_issue_done_ratios: Update issue done ratios
-  setting_start_of_week: Start calendars on
-  permission_view_issues: View Issues
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_revision_id: Revision %{value}
-  label_api_access_key: API access key
-  label_api_access_key_created_on: API access key created %{value} ago
-  label_feeds_access_key: RSS access key
-  notice_api_access_key_reseted: Your API access key was reset.
-  setting_rest_api_enabled: Enable REST web service
-  label_missing_api_access_key: Missing an API access key
-  label_missing_feeds_access_key: Missing a RSS access key
-  button_show: Show
-  text_line_separated: Multiple values allowed (one line for each value).
-  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
-  permission_add_subprojects: Create subprojects
-  label_subproject_new: New subproject
-  text_own_membership_delete_confirmation: |-
-    You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
-    Are you sure you want to continue?
-  label_close_versions: Close completed versions
-  label_board_sticky: Sticky
-  label_board_locked: Locked
-  permission_export_wiki_pages: Export wiki pages
-  setting_cache_formatted_text: Cache formatted text
-  permission_manage_project_activities: Manage project activities
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_profile: Profile
-  permission_manage_subtasks: Manage subtasks
-  field_parent_issue: Parent task
-  label_subtask_plural: Subtasks
-  label_project_copy_notifications: Send email notifications during the project copy
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_unable_to_connect: Unable to connect (%{value})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
-  field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
-  project_module_gantt: Gantt
-  project_module_calendar: Calendar
+  text_wiki_page_destroy_question: Bu sayfanın %{descendants} adet alt sayfası var. Ne yapmak istersiniz?
+  text_wiki_page_reassign_children: Alt sayfaları bu sayfanın altına bağla
+  text_wiki_page_nullify_children: Alt sayfaları ana sayfa olarak sakla
+  text_wiki_page_destroy_children: Alt sayfaları ve onların alt sayfalarını tamamen sil
+  setting_password_min_length: Minimum parola uzunluğu
+  field_group_by: Sonuçları grupla
+  mail_subject_wiki_content_updated: "'%{id}' wiki sayfası güncellendi"
+  label_wiki_content_added: Wiki sayfası eklendi
+  mail_subject_wiki_content_added: "'%{id}' wiki sayfası eklendi"
+  mail_body_wiki_content_added: "'%{id}' wiki sayfası, %{author} tarafından eklendi."
+  label_wiki_content_updated: Wiki sayfası güncellendi
+  mail_body_wiki_content_updated: "'%{id}' wiki sayfası, %{author} tarafından güncellendi."
+  permission_add_project: Proje oluştur
+  setting_new_project_user_role_id: Yönetici olmayan ancak proje yaratabilen kullanıcıya verilen rol
+  label_view_all_revisions: Tüm değişiklikleri gör
+  label_tag: Etiket
+  label_branch: Kol
+  error_no_tracker_in_project: Bu projeye bağlanmış bir iş tipi yok. Lütfen proje ayarlarını kontrol edin.
+  error_no_default_issue_status: Varsayılan iş durumu tanımlanmamış. Lütfen ayarlarınızı kontrol edin ("Yönetim -> İş durumları" sayfasına gidin).
+  label_group_plural: Gruplar
+  label_group: Grup
+  label_group_new: Yeni grup
+  label_time_entry_plural: Harcanan zaman
+  text_journal_changed: "%{label}: %{old} -> %{new}"
+  text_journal_set_to: "%{label} %{value} yapıldı"
+  text_journal_deleted: "%{label} silindi (%{old})"
+  text_journal_added: "%{label} %{value} eklendi"
+  field_active: Etkin
+  enumeration_system_activity: Sistem Etkinlikleri
+  permission_delete_issue_watchers: İzleyicileri sil
+  version_status_closed: kapalı
+  version_status_locked: kilitli
+  version_status_open: açık
+  error_can_not_reopen_issue_on_closed_version: Kapatılmış bir sürüme ait işler tekrar açılamaz
+  label_user_anonymous: Anonim
+  button_move_and_follow: Yerini değiştir ve takip et
+  setting_default_projects_modules: Yeni projeler için varsayılan modüller
+  setting_gravatar_default: Varsayılan Gravatar resmi
+  field_sharing: Paylaşım
+  label_version_sharing_hierarchy: Proje hiyerarşisi ile
+  label_version_sharing_system: Tüm projeler ile
+  label_version_sharing_descendants: Alt projeler ile
+  label_version_sharing_tree: Proje ağacı ile
+  label_version_sharing_none: Paylaşılmamış
+  error_can_not_archive_project: Bu proje arşivlenemez
+  button_duplicate: Yinele
+  button_copy_and_follow: Kopyala ve takip et
+  label_copy_source: Kaynak
+  setting_issue_done_ratio: İş tamamlanma oranını şununla hesapla
+  setting_issue_done_ratio_issue_status: İş durumunu kullan
+  error_issue_done_ratios_not_updated: İş tamamlanma oranları güncellenmedi.
+  error_workflow_copy_target: Lütfen hedef iş tipi ve rolleri seçin
+  setting_issue_done_ratio_issue_field: İşteki alanı kullan
+  label_copy_same_as_target: Hedef ile aynı
+  label_copy_target: Hedef
+  notice_issue_done_ratios_updated: İş tamamlanma oranları güncellendi.
+  error_workflow_copy_source: Lütfen kaynak iş tipi ve rolleri seçin
+  label_update_issue_done_ratios: İş tamamlanma oranlarını güncelle
+  setting_start_of_week: Takvimleri şundan başlat
+  permission_view_issues: İşleri Gör
+  label_display_used_statuses_only: Sadece bu iş tipi tarafından kullanılan durumları göster
+  label_revision_id: Değişiklik %{value}
+  label_api_access_key: API erişim anahtarı
+  label_api_access_key_created_on: API erişim anahtarı %{value} önce oluşturuldu
+  label_feeds_access_key: RSS erişim anahtarı
+  notice_api_access_key_reseted: API erişim anahtarınız sıfırlandı.
+  setting_rest_api_enabled: REST web servisini etkinleştir
+  label_missing_api_access_key: Bir API erişim anahtarı eksik
+  label_missing_feeds_access_key: Bir RSS erişim anahtarı eksik
+  button_show: Göster
+  text_line_separated: Çoklu değer girilebilir (her satıra bir değer).
+  setting_mail_handler_body_delimiters: Şu satırların birinden sonra e-postayı sonlandır
+  permission_add_subprojects: Alt proje yaratma
+  label_subproject_new: Yeni alt proje
+  text_own_membership_delete_confirmation: "Projeyi daha sonra düzenleyememenize sebep olacak bazı yetkilerinizi kaldırmak üzeresiniz.\nDevam etmek istediğinize emin misiniz?"
+  label_close_versions: Tamamlanmış sürümleri kapat
+  label_board_sticky: Yapışkan
+  label_board_locked: Kilitli
+  permission_export_wiki_pages: Wiki sayfalarını dışarı aktar
+  setting_cache_formatted_text: Biçimlendirilmiş metni önbelleğe al
+  permission_manage_project_activities: Proje etkinliklerini yönetme
+  error_unable_delete_issue_status: İş durumu silinemiyor
+  label_profile: Profil
+  permission_manage_subtasks: Alt işleri yönetme
+  field_parent_issue: Üst iş
+  label_subtask_plural: Alt işler
+  label_project_copy_notifications: Proje kopyalaması esnasında bilgilendirme e-postaları gönder
+  error_can_not_delete_custom_field: Özel alan silinemiyor
+  error_unable_to_connect: Bağlanılamıyor (%{value})
+  error_can_not_remove_role: Bu rol kullanımda olduğundan silinemez.
+  error_can_not_delete_tracker: Bu iş tipi içerisinde iş barındırdığından silinemiyor.
+  field_principal: Temel
+  label_my_page_block: Kişisel sayfa bloğum
+  notice_failed_to_save_members: "Üyeler kaydedilemiyor: %{errors}."
+  text_zoom_out: Uzaklaş
+  text_zoom_in: Yakınlaş
+  notice_unable_delete_time_entry: Zaman kayıt girdisi silinemiyor.
+  label_overall_spent_time: Toplam harcanan zaman
+  field_time_entries: Zaman Kayıtları
+  project_module_gantt: İş-Zaman Çizelgesi
+  project_module_calendar: Takvim
   button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
+  text_are_you_sure_with_children: İş, tüm alt işlerle birlikte silinsin mi?
+  field_text: Metin alanı
+  label_user_mail_option_only_owner: Sadece sahibi olduğum şeyler için
+  setting_default_notification_option: Varsayılan bildirim seçeneği
+  label_user_mail_option_only_my_events: Sadece takip ettiğim ya da içinde olduğum şeyler için
+  label_user_mail_option_only_assigned: Sadece bana atanan şeyler için
+  label_user_mail_option_none: Hiç bir şey için
+  field_member_of_group: Atananın grubu
+  field_assigned_to_role: Atananın rolü
+  notice_not_authorized_archived_project: Erişmeye çalıştığınız proje arşive kaldırılmış.
+  label_principal_search: "Kullanıcı ya da grup ara:"
+  label_user_search: "Kullanıcı ara:"
+  field_visible: Görünür
+  setting_emails_header: "E-Posta başlığı"
+  setting_commit_logtime_activity_id: Kaydedilen zaman için etkinlik
   text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
+  setting_commit_logtime_enabled: Zaman kaydını etkinleştir
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  setting_gantt_items_limit: İş-Zaman çizelgesinde gösterilecek en fazla öğe sayısı
+  field_warn_on_leaving_unsaved: Kaydedilmemiş metin bulunan bir sayfadan çıkarken beni uyar
+  text_warn_on_leaving_unsaved: Bu sayfada terkettiğiniz takdirde kaybolacak kaydedilmemiş metinler var.
+  label_my_queries: Özel sorgularım
+  text_journal_changed_no_detail: "%{label} güncellendi"
+  label_news_comment_added: Bir habere yorum eklendi
+  button_expand_all: Tümünü genişlet
+  button_collapse_all: Tümünü daralt
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Seçilen zaman kayıtlarını toplu olarak düzenle
+  text_time_entries_destroy_confirmation: Seçilen zaman kaydını/kayıtlarını silmek istediğinize emin misiniz?
+  label_role_anonymous: Anonim
+  label_role_non_member: Üye Değil
+  label_issue_note_added: Not eklendi
+  label_issue_status_updated: Durum güncellendi
+  label_issue_priority_updated: Öncelik güncellendi
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: İşlerin görünürlüğü
+  label_issues_visibility_all: Tüm işler
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Özel
+  permission_set_issues_private: İşleri özel ya da genel olarak işaretleme
+  label_issues_visibility_public: Özel olmayan tüm işler
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Yol kodlaması(encoding)
+  text_scm_path_encoding_note: "Varsayılan: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Ana dizin
+  field_cvs_module: Modül
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Komut
+  text_scm_command_version: Sürüm
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/uk.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/uk.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -16,7 +16,10 @@
     month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -232,7 +235,7 @@
   field_attr_mail: Атрибут Email
   field_onthefly: Створення користувача на льоту
   field_start_date: Початок
-  field_done_ratio: % зроблено
+  field_done_ratio: "% зроблено"
   field_auth_source: Режим аутентифікації
   field_hide_mail: Приховувати мій email
   field_comments: Коментар
@@ -728,7 +731,6 @@
   text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   field_parent_title: Parent page
   label_issue_watchers: Watchers
-  setting_commit_logs_encoding: Commit messages encoding
   button_quote: Quote
   setting_sequential_project_identifiers: Generate sequential project identifiers
   notice_unable_delete_version: Unable to delete version
@@ -936,3 +938,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/vi.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/vi.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -158,7 +158,10 @@
     month_names: [~, "Tháng một", "Tháng hai", "Tháng ba", "Tháng tư", "Tháng năm", "Tháng sáu", "Tháng bảy", "Tháng tám", "Tháng chín", "Tháng mười", "Tháng mười một", "Tháng mười hai"]
     abbr_month_names: [~, "Tháng một", "Tháng hai", "Tháng ba", "Tháng tư", "Tháng năm", "Tháng sáu", "Tháng bảy", "Tháng tám", "Tháng chín", "Tháng mười", "Tháng mười một", "Tháng mười hai"]
     # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -344,7 +347,6 @@
   setting_cross_project_issue_relations: Cho phép quan hệ chéo giữa các dự án
   setting_issue_list_default_columns: Default columns displayed on the issue list
   setting_repositories_encodings: Repositories encodings
-  setting_commit_logs_encoding: Commit messages encoding
   setting_emails_footer: Chữ ký cuối thư
   setting_protocol: Giao thức
   setting_per_page_options: Objects per page options
@@ -991,3 +993,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/.svn/text-base/zh-TW.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/zh-TW.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -20,7 +20,10 @@
     month_names: [~, 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月]
     abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
     # 使用於 date_select 與 datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
   
   time:
     formats:
@@ -177,7 +180,7 @@
         greater_than_start_date: "必須在開始日期之後"
         not_same_project: "不屬於同一個專案"
         circular_dependency: "這個關聯會導致環狀相依"
-        cant_link_an_issue_with_a_descendant: "項目無法被連結至自己的子項目"
+        cant_link_an_issue_with_a_descendant: "項目無法被連結至自己的子任務"
 
       # You can define own errors for models or model attributes.
       # The values :model, :attribute and :value are always available for interpolation.
@@ -251,9 +254,9 @@
   notice_gantt_chart_truncated: "由於項目數量超過可顯示數量的最大值 (%{max}),故此甘特圖尾部已被截斷"
 
   error_can_t_load_default_data: "無法載入預設組態: %{value}"
-  error_scm_not_found: "在 SCM 儲存庫中找不到這個項目或版次。"
-  error_scm_command_failed: "嘗試存取 SCM 儲存庫時發生錯誤: %{value}"
-  error_scm_annotate: "SCM 儲存庫中無此項目或此項目無法被加註。"
+  error_scm_not_found: "在儲存機制中找不到這個項目或修訂版。"
+  error_scm_command_failed: "嘗試存取儲存機制時發生錯誤: %{value}"
+  error_scm_annotate: "項目不存在或項目無法被加上附註。"
   error_issue_not_found_in_project: '該項目不存在或不屬於此專案'
   error_no_tracker_in_project: '此專案尚未指定追蹤標籤。請檢查專案的設定資訊。'
   error_no_default_issue_status: '尚未定義項目狀態的預設值。請您前往「網站管理」->「項目狀態清單」頁面,檢查相關組態設定。'
@@ -353,7 +356,7 @@
   field_done_ratio: 完成百分比
   field_auth_source: 認證模式
   field_hide_mail: 隱藏我的電子郵件
-  field_comments: 註解
+  field_comments: 回應
   field_url: 網址
   field_start_page: 首頁
   field_subproject: 子專案
@@ -372,7 +375,7 @@
   field_time_zone: 時區
   field_searchable: 可用做搜尋條件
   field_default_value: 預設值
-  field_comments_sorting: 註解排序
+  field_comments_sorting: 回應排序
   field_parent_title: 父頁面
   field_editable: 可編輯
   field_watcher: 觀察者
@@ -380,11 +383,20 @@
   field_content: 內容
   field_group_by: 結果分組方式
   field_sharing: 共用
-  field_parent_issue: 父工作項目
+  field_parent_issue: 父任務
   field_member_of_group: "被指派者的群組"
   field_assigned_to_role: "被指派者的角色"
   field_text: 內容文字
   field_visible: 可被看見
+  field_warn_on_leaving_unsaved: "提醒我將要離開的頁面中尚有未儲存的資料"
+  field_issues_visibility: 項目可見度
+  field_is_private: 私人
+  field_commit_logs_encoding: 認可訊息編碼
+  field_scm_path_encoding: 路徑編碼
+  field_path_to_repository: 儲存機制路徑
+  field_root_directory: 根資料夾
+  field_cvsroot: CVSROOT
+  field_cvs_module: 模組
   
   setting_app_title: 標題
   setting_app_subtitle: 副標題
@@ -401,18 +413,17 @@
   setting_text_formatting: 文字格式
   setting_wiki_compression: 壓縮 Wiki 歷史文章
   setting_feeds_limit: RSS 新聞限制
-  setting_autofetch_changesets: 自動取得送交版次
+  setting_autofetch_changesets: 自動擷取認可
   setting_default_projects_public: 新建立之專案預設為「公開」
-  setting_sys_api_enabled: 啟用管理版本庫之網頁服務 (Web Service)
-  setting_commit_ref_keywords: 送交用於參照項目之關鍵字
-  setting_commit_fix_keywords: 送交用於修正項目之關鍵字
+  setting_sys_api_enabled: 啟用管理儲存機制的網頁服務 (Web Service)
+  setting_commit_ref_keywords: 認可用於參照項目之關鍵字
+  setting_commit_fix_keywords: 認可用於修正項目之關鍵字
   setting_autologin: 自動登入
   setting_date_format: 日期格式
   setting_time_format: 時間格式
   setting_cross_project_issue_relations: 允許關聯至其它專案的項目
   setting_issue_list_default_columns: 預設顯示於項目清單的欄位
   setting_repositories_encodings: 版本庫編碼
-  setting_commit_logs_encoding: 送交訊息編碼
   setting_emails_header: 電子郵件前頭說明
   setting_emails_footer: 電子郵件附帶說明
   setting_protocol: 協定
@@ -429,7 +440,7 @@
   setting_gravatar_default: 預設全球認證大頭像圖片
   setting_diff_max_lines_displayed: 差異顯示行數之最大值
   setting_file_max_size_displayed: 檔案內容顯示大小之最大值
-  setting_repository_log_display_limit: 版次顯示數目之最大值
+  setting_repository_log_display_limit: 修訂版顯示數目之最大值
   setting_openid: 允許使用 OpenID 登入與註冊
   setting_password_min_length: 密碼最小長度
   setting_new_project_user_role_id: 管理者以外之用戶建立新專案時,將被指派的角色
@@ -441,7 +452,7 @@
   setting_rest_api_enabled: 啟用 REST 網路服務技術(Web Service)
   setting_cache_formatted_text: 快取已格式化文字
   setting_default_notification_option: 預設通知選項
-  setting_commit_logtime_enabled: 啟用送交中的時間記錄
+  setting_commit_logtime_enabled: 啟用認可中的時間記錄
   setting_commit_logtime_activity_id: 時間記錄對應的活動
   setting_gantt_items_limit: 甘特圖中項目顯示數量的最大值
   
@@ -457,6 +468,8 @@
   permission_add_issues: 新增項目
   permission_edit_issues: 編輯項目
   permission_manage_issue_relations: 管理項目關聯
+  permission_set_issues_private: 設定項目為公開或私人
+  permission_set_own_issues_private: 設定自己的項目為公開或私人
   permission_add_issue_notes: 新增筆記
   permission_edit_issue_notes: 編輯筆記
   permission_edit_own_issue_notes: 編輯自己的筆記
@@ -474,7 +487,7 @@
   permission_edit_time_entries: 編輯工時紀錄
   permission_edit_own_time_entries: 編輯自己的工時記錄
   permission_manage_news: 管理新聞
-  permission_comment_news: 註解新聞
+  permission_comment_news: 回應新聞
   permission_manage_documents: 管理文件
   permission_view_documents: 檢視文件
   permission_manage_files: 管理檔案
@@ -487,10 +500,10 @@
   permission_edit_wiki_pages: 編輯 wiki 頁面
   permission_delete_wiki_pages_attachments: 刪除附件
   permission_protect_wiki_pages: 專案 wiki 頁面
-  permission_manage_repository: 管理版本庫
-  permission_browse_repository: 瀏覽版本庫
+  permission_manage_repository: 管理儲存機制
+  permission_browse_repository: 瀏覽儲存機制
   permission_view_changesets: 檢視變更集
-  permission_commit_access: 存取送交之變更
+  permission_commit_access: 存取認可
   permission_manage_boards: 管理討論版
   permission_view_messages: 檢視訊息
   permission_add_messages: 新增訊息
@@ -499,7 +512,7 @@
   permission_delete_messages: 刪除訊息
   permission_delete_own_messages: 刪除自己的訊息
   permission_export_wiki_pages: 匯出 wiki 頁面
-  permission_manage_subtasks: 管理子工作項目
+  permission_manage_subtasks: 管理子任務
   
   project_module_issue_tracking: 項目追蹤
   project_module_time_tracking: 工時追蹤
@@ -532,6 +545,9 @@
   label_issues_by: "項目按 %{value} 分組顯示"
   label_issue_added: 項目已新增
   label_issue_updated: 項目已更新
+  label_issue_note_added: 筆記已新增
+  label_issue_status_updated: 狀態已更新
+  label_issue_priority_updated: 優先權已更新
   label_document: 文件
   label_document_new: 建立新文件
   label_document_plural: 文件
@@ -540,6 +556,8 @@
   label_role_plural: 角色
   label_role_new: 建立新角色
   label_role_and_permissions: 角色與權限
+  label_role_anonymous: 匿名者
+  label_role_non_member: 非會員
   label_member: 成員
   label_member_new: 建立新成員
   label_member_plural: 成員
@@ -618,6 +636,7 @@
   label_news_latest: 最近新聞
   label_news_view_all: 檢視全部的新聞
   label_news_added: 新聞已新增
+  label_news_comment_added: 回應已加入新聞
   label_settings: 設定
   label_overview: 概觀
   label_version: 版本
@@ -664,18 +683,19 @@
   label_last_changes: "最近 %{count} 個變更"
   label_change_view_all: 檢視全部的變更
   label_personalize_page: 自訂版面
-  label_comment: 註解
-  label_comment_plural: 註解
+  label_comment: 回應
+  label_comment_plural: 回應
   label_x_comments:
-    zero: 無註解
-    one: 1 個註解
-    other: "%{count} 個註解"
-  label_comment_add: 加入新註解
-  label_comment_added: 新註解已加入
-  label_comment_delete: 刪除註解
+    zero: 無回應
+    one: 1 個回應
+    other: "%{count} 個回應"
+  label_comment_add: 加入新回應
+  label_comment_added: 新回應已加入
+  label_comment_delete: 刪除回應
   label_query: 自訂查詢
   label_query_plural: 自訂查詢
   label_query_new: 建立新查詢
+  label_my_queries: 我的自訂查詢
   label_filter_add: 加入新篩選條件
   label_filter_plural: 篩選條件
   label_equals: 等於
@@ -701,26 +721,26 @@
   label_contains: 包含
   label_not_contains: 不包含
   label_day_plural: 天
-  label_repository: 版本控管
-  label_repository_plural: 版本控管
+  label_repository: 儲存機制
+  label_repository_plural: 儲存機制清單
   label_browse: 瀏覽
   label_modification: "%{count} 變更"
   label_modification_plural: "%{count} 變更"
   label_branch: 分支
   label_tag: 標籤 
-  label_revision: 版次
-  label_revision_plural: 版次清單
-  label_revision_id: "版次 %{value}"
-  label_associated_revisions: 相關版次
+  label_revision: 修訂版
+  label_revision_plural: 修訂版清單
+  label_revision_id: "修訂版 %{value}"
+  label_associated_revisions: 關聯的修訂版
   label_added: 已新增
   label_modified: 已修改
   label_copied: 已複製
   label_renamed: 已重新命名
   label_deleted: 已刪除
-  label_latest_revision: 最新版次
-  label_latest_revision_plural: 最近版次清單
-  label_view_revisions: 檢視版次清單
-  label_view_all_revisions: 檢視全部的版次清單
+  label_latest_revision: 最新的修訂版
+  label_latest_revision_plural: 最新的修訂版清單
+  label_view_revisions: 檢視修訂版清單
+  label_view_all_revisions: 檢視所有的的修訂版清單
   label_max_size: 最大長度
   label_sort_highest: 移動至開頭
   label_sort_higher: 往上移動
@@ -752,8 +772,8 @@
   label_time_tracking: 工時追蹤
   label_change_plural: 變更
   label_statistics: 統計資訊
-  label_commits_per_month: 依月份統計送交次數
-  label_commits_per_author: 依作者統計送交次數
+  label_commits_per_month: 依月份統計認可
+  label_commits_per_author: 依作者統計認可
   label_view_diff: 檢視差異
   label_diff_inline: 直列
   label_diff_side_by_side: 並排
@@ -813,7 +833,8 @@
   label_changeset_plural: 變更集清單
   label_default_columns: 預設欄位清單
   label_no_change_option: (維持不變)
-  label_bulk_edit_selected_issues: 編輯選定的項目
+  label_bulk_edit_selected_issues: 大量編輯選取的項目
+  label_bulk_edit_selected_time_entries: 大量編輯選取的工時項目
   label_theme: 畫面主題
   label_default: 預設
   label_search_titles_only: 僅搜尋標題
@@ -871,16 +892,24 @@
   label_missing_api_access_key: 找不到 API 存取金鑰
   label_api_access_key_created_on: "API 存取金鑰建立於 %{value} 之前"
   label_profile: 配置概況
-  label_subtask_plural: 子工作項目
+  label_subtask_plural: 子任務
   label_project_copy_notifications: 在複製專案的過程中,傳送通知郵件
   label_principal_search: "搜尋用戶或群組:"
   label_user_search: "搜尋用戶:"
+  label_additional_workflow_transitions_for_author: 用戶為作者時額外允許的流程轉換
+  label_additional_workflow_transitions_for_assignee: 用戶為被指定者時額外允許的流程轉換
+  label_issues_visibility_all: 所有項目
+  label_issues_visibility_public: 所有非私人項目
+  label_issues_visibility_own: 使用者所建立的或被指派的項目
+  label_git_report_last_commit: 報告最後認可的文件和目錄
 
   button_login: 登入
   button_submit: 送出
   button_save: 儲存
   button_check_all: 全選
   button_uncheck_all: 全不選
+  button_collapse_all: 全部摺疊
+  button_expand_all: 全部展開
   button_delete: 刪除
   button_create: 建立
   button_create_and_continue: 繼續建立
@@ -940,6 +969,7 @@
   text_are_you_sure: 確定執行?
   text_are_you_sure_with_children: "確定刪除此工作項目及其子項目?"
   text_journal_changed: "%{label} 從 %{old} 變更為 %{new}"
+  text_journal_changed_no_detail: "%{label} 已更新"
   text_journal_set_to: "%{label} 設定為 %{value}"
   text_journal_deleted: "%{label} 已刪除 (%{old})"
   text_journal_added: "%{label} %{value} 已新增"
@@ -954,7 +984,7 @@
   text_unallowed_characters: 不允許的字元
   text_comma_separated: 可輸入多個值(須以逗號分隔)。
   text_line_separated: 可輸入多個值(須以換行符號分隔,即每列只能輸入一個值)。
-  text_issues_ref_in_commit_messages: 送交訊息中參照(或修正)項目之關鍵字
+  text_issues_ref_in_commit_messages: 認可訊息中參照(或修正)項目之關鍵字
   text_issue_added: "項目 %{id} 已被 %{author} 通報。"
   text_issue_updated: "項目 %{id} 已被 %{author} 更新。"
   text_wiki_destroy_confirmation: 您確定要刪除這個 wiki 和其中的所有內容?
@@ -967,6 +997,8 @@
   text_status_changed_by_changeset: "已套用至變更集 %{value}."
   text_time_logged_by_changeset: "紀錄於變更集 %{value}."
   text_issues_destroy_confirmation: '確定刪除已選擇的項目?'
+  text_issues_destroy_descendants_confirmation: "這麼做將會一併刪除 %{count} 子任務。"
+  text_time_entries_destroy_confirmation: 您確定要刪除所選擇的工時紀錄?
   text_select_project_modules: '選擇此專案可使用之模組:'
   text_default_administrator_account_changed: 已變更預設管理員帳號內容
   text_file_repository_writable: 可寫入附加檔案目錄
@@ -980,7 +1012,7 @@
   text_enumeration_destroy_question: "目前有 %{count} 個物件使用此列舉值。"
   text_enumeration_category_reassign_to: '重新設定其列舉值為:'
   text_email_delivery_not_configured: "您尚未設定電子郵件傳送方式,因此提醒選項已被停用。\n請在 config/configuration.yml 中設定 SMTP 之後,重新啟動 Redmine,以啟用電子郵件提醒選項。"
-  text_repository_usernames_mapping: "選擇或更新 Redmine 使用者與版本庫使用者之對應關係。\n版本庫中之使用者帳號或電子郵件信箱,與 Redmine 設定相同者,將自動產生對應關係。"
+  text_repository_usernames_mapping: "選擇或更新 Redmine 使用者與儲存機制紀錄使用者之對應關係。\n儲存機制中之使用者帳號或電子郵件信箱,與 Redmine 設定相同者,將自動產生對應關係。"
   text_diff_truncated: '... 這份差異已被截短以符合顯示行數之最大值'
   text_custom_field_possible_values_info: '一列輸入一個值'
   text_wiki_page_destroy_question: "此頁面包含 %{descendants} 個子頁面及延伸頁面。 請選擇您想要的動作?"
@@ -990,7 +1022,15 @@
   text_own_membership_delete_confirmation: "您在專案中,所擁有的部分或全部權限即將被移除,在這之後可能無法再次編輯此專案。\n您確定要繼續執行這個動作?"
   text_zoom_in: 放大
   text_zoom_out: 縮小
-  
+  text_warn_on_leaving_unsaved: "若您離開這個頁面,此頁面所包含的未儲存資料將會遺失。"
+  text_scm_path_encoding_note: "預設: UTF-8"
+  text_git_repository_note: "純(Bare)儲存機制與本機儲存機制 (e.g. /gitrepo, c:\gitrepo)"
+  text_mercurial_repository_note: "本機儲存機制 (e.g. /hgrepo, c:\hgrepo)"
+  text_scm_command: 命令
+  text_scm_command_version: 版本
+  text_scm_config: 您可以在 config/configuration.yml 中設定 SCM 命令。請在編輯該檔案之後重新啟動 Redmine 應用程式。
+  text_scm_command_not_available: SCM 命令無法使用。請檢查管理面板中的設定。
+
   default_role_manager: 管理人員
   default_role_developer: 開發人員
   default_role_reporter: 報告人員
@@ -1017,7 +1057,3 @@
   enumeration_doc_categories: 文件分類
   enumeration_activities: 活動 (時間追蹤)
   enumeration_system_activity: 系統活動
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/zh.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/.svn/text-base/zh.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,29 +1,38 @@
 # Chinese (China) translations for Ruby on Rails 
 # by tsechingho (http://github.com/tsechingho)
-
 zh:
+  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
   direction: ltr
   date:
     formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
       default: "%Y-%m-%d"
       short: "%b%d日"
       long: "%Y年%b%d日"
+      
     day_names: [星期天, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六]
     abbr_day_names: [日, 一, 二, 三, 四, 五, 六]
+
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
     month_names: [~, 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月]
     abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
-    order: [ :year, :month, :day ]
-  
+    # Used in date_select and datime_select.
+    order:
+      - :year
+      - :month
+      - :day
+
   time:
     formats:
       default: "%Y年%b%d日 %A %H:%M:%S"
       time: "%H:%M"
-      time: "%H:%M"
       short: "%b%d日 %H:%M"
       long: "%Y年%b%d日 %H:%M"
     am: "上午"
     pm: "下午"
-  
+
   datetime:
     distance_in_words:
       half_a_minute: "半分钟"
@@ -60,32 +69,13 @@
       almost_x_years:
         one:   "将近 1 年"
         other: "将近 %{count} 年"
-    prompts:
-      year:   "年"
-      month:  "月"
-      day:    "日"
-      hour:   "时"
-      minute: "分"
-      second: "秒"
-  
+
   number:
+    # Default format for numbers
     format:
-      separator: "."
-      delimiter: ","
+      separator: "." 
+      delimiter: ""
       precision: 3
-    currency:
-      format:
-        format: "%n %u"
-        unit: "元"
-        separator: "."
-        delimiter: ","
-        precision: 2
-    percentage:
-      format:
-        delimiter: ""
-    precision:
-      format:
-        delimiter: ""
     human:
       format:
         delimiter: ""
@@ -96,24 +86,24 @@
           byte:
             one: "Byte"
             other: "Bytes"
-          kb: "KB"
+          kb: "kB"
           mb: "MB"
           gb: "GB"
           tb: "TB"
-  
+
+        
+# Used in array.to_sentence.
   support:
     array:
-      words_connector: ", "
-      two_words_connector: " 和 "
-      last_word_connector: ", 和 "
-  
+      sentence_connector: "和"
+      skip_last_comma: false
+      
   activerecord:
     errors:
       template:
-        header: 
-          one: "有 1 个错误发生导致「%{model}」无法被保存。"
-          other: "有 %{count} 个错误发生导致「%{model}」无法被保存。"
-        body: "如下字段出现错误:"
+        header:
+          one:    "由于发生了一个错误 %{model} 无法保存"
+          other:  "%{count} 个错误使得 %{model} 无法保存"
       messages:
         inclusion: "不包含于列表中"
         exclusion: "是保留关键字"
@@ -127,6 +117,7 @@
         wrong_length: "长度非法(必须为 %{count} 个字符)"
         taken: "已经被使用"
         not_a_number: "不是数字"
+        not_a_date: "不是合法日期"
         greater_than: "必须大于 %{count}"
         greater_than_or_equal_to: "必须大于或等于 %{count}"
         equal_to: "必须等于 %{count}"
@@ -137,7 +128,7 @@
         greater_than_start_date: "必须在起始日期之后"
         not_same_project: "不属于同一个项目"
         circular_dependency: "此关联将导致循环依赖"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务"
 
   actionview_instancetag_blank_option: 请选择
   
@@ -168,17 +159,21 @@
   notice_file_not_found: 您访问的页面不存在或已被删除。
   notice_locking_conflict: 数据已被另一位用户更新
   notice_not_authorized: 对不起,您无权访问此页面。
-  notice_email_sent: "邮件已成功发送到 %{value}"
+  notice_not_authorized_archived_project: 要访问的项目已经归档。
+  notice_email_sent: "邮件已发送至 %{value}"
   notice_email_error: "发送邮件时发生错误 (%{value})"
   notice_feeds_access_key_reseted: 您的RSS存取键已被重置。
   notice_api_access_key_reseted: 您的API访问键已被重置。
   notice_failed_to_save_issues: "%{count} 个问题保存失败(共选择 %{total} 个问题):%{ids}."
+  notice_failed_to_save_members: "成员保存失败: %{errors}."
   notice_no_issue_selected: "未选择任何问题!请选择您要编辑的问题。"
   notice_account_pending: "您的帐号已被成功创建,正在等待管理员的审核。"
   notice_default_data_loaded: 成功载入默认设置。
   notice_unable_delete_version: 无法删除版本
+  notice_unable_delete_time_entry: 无法删除工时
   notice_issue_done_ratios_updated: 问题完成度已更新。
-
+  notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})"
+  
   error_can_t_load_default_data: "无法载入默认设置:%{value}"
   error_scm_not_found: "版本库中不存在该条目和(或)其修订版本。"
   error_scm_command_failed: "访问版本库时发生错误:%{value}"
@@ -186,13 +181,17 @@
   error_issue_not_found_in_project: '问题不存在或不属于此项目'
   error_no_tracker_in_project: 该项目未设定跟踪标签,请检查项目配置。
   error_no_default_issue_status: 未设置默认的问题状态。请检查系统设置("管理" -> "问题状态")。
+  error_can_not_delete_custom_field: 无法删除自定义属性
+  error_can_not_delete_tracker: "该跟踪标签已包含问题,无法删除"
+  error_can_not_remove_role: "该角色正在使用中,无法删除"
   error_can_not_reopen_issue_on_closed_version: 该问题被关联到一个已经关闭的版本,因此无法重新打开。
   error_can_not_archive_project: 该项目无法被存档
   error_issue_done_ratios_not_updated: 问题完成度未能被更新。
   error_workflow_copy_source: 请选择一个源跟踪标签或者角色
   error_workflow_copy_target: 请选择目标跟踪标签和角色
-
-  warning_attachments_not_saved: "%{count} 个文件保存失败。"
+  error_unable_delete_issue_status: '无法删除问题状态'
+  error_unable_to_connect: "无法连接 (%{value})"
+  warning_attachments_not_saved: "%{count} 个文件保存失败"
   
   mail_subject_lost_password: "您的 %{value} 密码"
   mail_body_lost_password: '请点击以下链接来修改您的密码:'
@@ -206,9 +205,9 @@
   mail_body_reminder: "指派给您的 %{count} 个问题需要在 %{days} 天内完成:"
   mail_subject_wiki_content_added: "'%{id}' wiki页面已添加"
   mail_body_wiki_content_added: "'%{id}' wiki页面已由 %{author} 添加。"
-  mail_subject_wiki_content_updated: "'%{id}' wiki页面已更新"
+  mail_subject_wiki_content_updated: "'%{id}' wiki页面已更新。"
   mail_body_wiki_content_updated: "'%{id}' wiki页面已由 %{author} 更新。"
-
+  
   gui_validation_error: 1 个错误
   gui_validation_error_plural: "%{count} 个错误"
   
@@ -247,11 +246,12 @@
   field_priority: 优先级
   field_fixed_version: 目标版本
   field_user: 用户
+  field_principal: 用户/用户组
   field_role: 角色
   field_homepage: 主页
   field_is_public: 公开
   field_parent: 上级项目
-  field_is_in_roadmap: 在路线图中显示问题
+  field_is_in_roadmap: 在路线图中显示
   field_login: 登录名
   field_mail_notification: 邮件通知
   field_admin: 管理员
@@ -272,8 +272,8 @@
   field_attr_lastname: 姓氏属性
   field_attr_mail: 邮件属性
   field_onthefly: 即时用户生成
-  field_start_date: 开始
-  field_done_ratio: 完成度
+  field_start_date: 开始日期
+  field_done_ratio: % 完成
   field_auth_source: 认证模式
   field_hide_mail: 隐藏我的邮件地址
   field_comments: 注释
@@ -291,6 +291,7 @@
   field_redirect_existing_links: 重定向到现有链接
   field_estimated_hours: 预期时间
   field_column_names: 列
+  field_time_entries: 工时
   field_time_zone: 时区
   field_searchable: 可用作搜索条件
   field_default_value: 默认值
@@ -302,7 +303,12 @@
   field_content: 内容
   field_group_by: 根据此条件分组
   field_sharing: 共享
-
+  field_parent_issue: 父任务
+  field_member_of_group: 用户组的成员
+  field_assigned_to_role: 角色的成员
+  field_text: 文本字段
+  field_visible: 可见的
+  
   setting_app_title: 应用程序标题
   setting_app_subtitle: 应用程序子标题
   setting_welcome_text: 欢迎文字
@@ -310,7 +316,7 @@
   setting_login_required: 要求认证
   setting_self_registration: 允许自注册
   setting_attachment_max_size: 附件大小限制
-  setting_issues_export_limit: 问题输出条目的限制
+  setting_issues_export_limit: 问题导出条目的限制
   setting_mail_from: 邮件发件人地址
   setting_bcc_recipients: 使用密件抄送 (bcc)
   setting_plain_text_mail: 纯文本(无HTML)
@@ -329,7 +335,7 @@
   setting_cross_project_issue_relations: 允许不同项目之间的问题关联
   setting_issue_list_default_columns: 问题列表中显示的默认列
   setting_repositories_encodings: 版本库编码
-  setting_commit_logs_encoding: 提交注释的编码
+  setting_emails_header: 邮件头
   setting_emails_footer: 邮件签名
   setting_protocol: 协议
   setting_per_page_options: 每页显示条目个数的设置
@@ -355,12 +361,18 @@
   setting_issue_done_ratio_issue_status: 使用问题状态
   setting_start_of_week: 日历开始于
   setting_rest_api_enabled: 启用REST web service
-
+  setting_cache_formatted_text: 缓存格式化文字
+  setting_default_notification_option: 默认提醒选项
+  setting_commit_logtime_enabled: 激活时间日志
+  setting_commit_logtime_activity_id: 记录的活动
+  setting_gantt_items_limit: 在甘特图上显示的最大记录数
+  
   permission_add_project: 新建项目
   permission_add_subprojects: 新建子项目
   permission_edit_project: 编辑项目
   permission_select_project_modules: 选择项目模块
   permission_manage_members: 管理成员
+  permission_manage_project_activities: 管理项目活动
   permission_manage_versions: 管理版本
   permission_manage_categories: 管理问题类别
   permission_view_issues: 查看问题
@@ -408,7 +420,9 @@
   permission_edit_own_messages: 编辑自己的帖子
   permission_delete_messages: 删除帖子
   permission_delete_own_messages: 删除自己的帖子
-
+  permission_export_wiki_pages: 导出 wiki 页面
+  permission_manage_subtasks: 管理子任务
+  
   project_module_issue_tracking: 问题跟踪
   project_module_time_tracking: 时间跟踪
   project_module_news: 新闻
@@ -417,6 +431,8 @@
   project_module_wiki: Wiki
   project_module_repository: 版本库
   project_module_boards: 讨论区
+  project_module_calendar: 日历
+  project_module_gantt: 甘特图
   
   label_user: 用户
   label_user_plural: 用户
@@ -474,6 +490,7 @@
   label_my_page: 我的工作台
   label_my_account: 我的帐号
   label_my_projects: 我的项目
+  label_my_page_block: 我的工作台模块
   label_administration: 管理
   label_login: 登录
   label_logout: 退出
@@ -483,7 +500,7 @@
   label_last_login: 最后登录
   label_registered_on: 注册于
   label_activity: 活动
-  label_overall_activity: 全部活动
+  label_overall_activity: 活动概览
   label_user_activity: "%{value} 的活动"
   label_new: 新建
   label_logged_as: 登录为
@@ -546,18 +563,18 @@
     one:   1 打开
     other: "%{count} 打开"
   label_x_closed_issues_abbr:
-    zero:  0 关闭
-    one:   1 关闭
-    other: "%{count} 关闭"
+    zero:  0 已关闭
+    one:   1 已关闭
+    other: "%{count} 已关闭"
   label_total: 合计
   label_permissions: 权限
   label_current_status: 当前状态
-  label_new_statuses_allowed: 可变更的新状态
+  label_new_statuses_allowed: 允许的新状态
   label_all: 全部
   label_none: 无
   label_nobody: 无人
-  label_next: 下一个
-  label_previous: 上一个
+  label_next: 下一页
+  label_previous: 上一页
   label_used_by: 使用中
   label_details: 详情
   label_add_note: 添加说明
@@ -651,6 +668,7 @@
   label_changes_details: 所有变更的详情
   label_issue_tracking: 问题跟踪
   label_spent_time: 耗时
+  label_overall_spent_time: 总体耗时
   label_f_hour: "%{value} 小时"
   label_f_hour_plural: "%{value} 小时"
   label_time_tracking: 时间跟踪
@@ -688,6 +706,8 @@
   label_board: 讨论区
   label_board_new: 新建讨论区
   label_board_plural: 讨论区
+  label_board_locked: 锁定
+  label_board_sticky: 置顶
   label_topic_plural: 主题
   label_message_plural: 帖子
   label_message_last: 最新的帖子
@@ -721,12 +741,16 @@
   label_search_titles_only: 仅在标题中搜索
   label_user_mail_option_all: "收取我的项目的所有通知"
   label_user_mail_option_selected: "收取选中项目的所有通知..."
+  label_user_mail_option_none: "不收取任何通知"
+  label_user_mail_option_only_my_events: "只收取我跟踪或参与的项目的通知"
+  label_user_mail_option_only_assigned: "只收取分配给我的"
+  label_user_mail_option_only_owner: 只收取由我创建的
   label_user_mail_no_self_notified: "不要发送对我自己提交的修改的通知"
   label_registration_activation_by_email: 通过邮件认证激活帐号
   label_registration_manual_activation: 手动激活帐号
   label_registration_automatic_activation: 自动激活帐号
   label_display_per_page: "每页显示:%{value}"
-  label_age: 年龄
+  label_age: 提交时间
   label_change_properties: 修改属性
   label_general: 一般
   label_more: 更多
@@ -768,6 +792,11 @@
   label_api_access_key: API访问键
   label_missing_api_access_key: 缺少API访问键
   label_api_access_key_created_on: API访问键是在 %{value} 之前建立的
+  label_profile: 简介
+  label_subtask_plural: 子任务
+  label_project_copy_notifications: 复制项目时发送邮件通知
+  label_principal_search: "搜索用户或组:"
+  label_user_search: "搜索用户:"
   
   button_login: 登录
   button_submit: 提交
@@ -779,6 +808,7 @@
   button_create_and_continue: 创建并继续
   button_test: 测试
   button_edit: 编辑
+  button_edit_associated_wikipage: "编辑相关wiki页面: %{page_title}"
   button_add: 新增
   button_change: 修改
   button_apply: 应用
@@ -816,13 +846,13 @@
   status_active: 活动的
   status_registered: 已注册
   status_locked: 已锁定
-
+  
   version_status_open: 打开
   version_status_locked: 锁定
   version_status_closed: 关闭
 
   field_active: 活动
-
+  
   text_select_mail_notifications: 选择需要发送邮件通知的动作
   text_regexp_info: 例如:^[A-Z0-9]+$
   text_min_max_length_info: 0 表示没有限制
@@ -830,6 +860,7 @@
   text_subprojects_destroy_warning: "以下子项目也将被同时删除:%{value}"
   text_workflow_edit: 选择角色和跟踪标签来编辑工作流程
   text_are_you_sure: 您确定?
+  text_are_you_sure_with_children: "删除问题及子任务?"
   text_journal_changed: "%{label} 从 %{old} 变更为 %{new}"
   text_journal_set_to: "%{label} 被设置为 %{value}"
   text_journal_deleted: "%{label} 已删除 (%{old})"
@@ -856,6 +887,7 @@
   text_no_configuration_data: "角色、跟踪标签、问题状态和工作流程还没有设置。\n强烈建议您先载入默认设置,然后在此基础上进行修改。"
   text_load_default_configuration: 载入默认设置
   text_status_changed_by_changeset: "已应用到变更列表 %{value}."
+  text_time_logged_by_changeset: "已应用到修订版本 %{value}."
   text_issues_destroy_confirmation: '您确定要删除选中的问题吗?'
   text_select_project_modules: '请选择此项目可以使用的模块:'
   text_default_administrator_account_changed: 默认的管理员帐号已改变
@@ -867,18 +899,20 @@
   text_assign_time_entries_to_project: 将已上报的工作量提交到项目中
   text_reassign_time_entries: '将已上报的工作量指定到此问题:'
   text_user_wrote: "%{value} 写到:"
+  text_enumeration_destroy_question: "%{count} 个对象被关联到了这个枚举值。"
   text_enumeration_category_reassign_to: '将它们关联到新的枚举值:'
-  text_enumeration_destroy_question: "%{count} 个对象被关联到了这个枚举值。"
   text_email_delivery_not_configured: "邮件参数尚未配置,因此邮件通知功能已被禁用。\n请在config/configuration.yml中配置您的SMTP服务器信息并重新启动以使其生效。"
   text_repository_usernames_mapping: "选择或更新与版本库中的用户名对应的Redmine用户。\n版本库中与Redmine中的同名用户将被自动对应。"
   text_diff_truncated: '... 差别内容超过了可显示的最大行数并已被截断'
   text_custom_field_possible_values_info: '每项数值一行'
   text_wiki_page_destroy_question: 此页面有 %{descendants} 个子页面和下级页面。您想进行那种操作?
-  text_wiki_page_reassign_children: 将子页面的上级页面设置为
   text_wiki_page_nullify_children: 将子页面保留为根页面
   text_wiki_page_destroy_children: 删除子页面及其所有下级页面
+  text_wiki_page_reassign_children: 将子页面的上级页面设置为
   text_own_membership_delete_confirmation: 你正在删除你现有的某些或全部权限,如果这样做了你可能将会再也无法编辑该项目了。你确定要继续吗?
-
+  text_zoom_in: Zoom in
+  text_zoom_out: Zoom out
+  
   default_role_manager: 管理人员
   default_role_developer: 开发人员
   default_role_reporter: 报告人员
@@ -905,52 +939,43 @@
   enumeration_doc_categories: 文档类别
   enumeration_activities: 活动(时间跟踪)
   enumeration_system_activity: 系统活动
-  label_board_sticky: 置顶
-  label_board_locked: 锁定
-  permission_export_wiki_pages: 导出 wiki 页面
-  setting_cache_formatted_text: 缓存格式化文本
-  permission_manage_project_activities: 管理项目活动
-  error_unable_delete_issue_status: 无法删除问题状态
-  label_profile: 简介
-  permission_manage_subtasks: 管理子任务
-  field_parent_issue: 父任务
-  label_subtask_plural: 子任务
-  label_project_copy_notifications: 复制项目时发送邮件通知
-  error_can_not_delete_custom_field: 不能删除自定义属性
-  error_unable_to_connect: 不能连接到 (%{value})
-  error_can_not_remove_role: 该角色正在使用中, 不能删除.
-  error_can_not_delete_tracker: 该跟踪标签包含问题, 不能删除.
-  field_principal: 用户/用户组
-  label_my_page_block: 我的工作台模块
-  notice_failed_to_save_members: "成员保存失败:%{errors}。"
-  text_zoom_out: 缩小
-  text_zoom_in: 放大
-  notice_unable_delete_time_entry: 无法删除工时记录。
-  label_overall_spent_time: 所有项目耗用工时
-  field_time_entries: Log time
-  project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+
   field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+
+  field_commit_logs_encoding: 提交注释的编码
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/bg.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/bg.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -17,7 +17,10 @@
     month_names: [~, Януари, Февруари, Март, Април, Май, Юни, Юли, Август, Септември, Октомври, Ноември, Декември]
     abbr_month_names: [~, Яну, Фев, Мар, Апр, Май, Юни, Юли, Авг, Сеп, Окт, Ное, Дек]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -268,7 +271,7 @@
   field_attr_mail: Атрибут Email
   field_onthefly: Динамично създаване на потребител
   field_start_date: Начална дата
-  field_done_ratio: % Прогрес
+  field_done_ratio: "% Прогрес"
   field_auth_source: Начин на оторизация
   field_hide_mail: Скрий e-mail адреса ми
   field_comments: Коментар
@@ -304,7 +307,15 @@
   field_text: Текстово поле
   field_visible: Видим
   field_warn_on_leaving_unsaved: Предупреди ме, когато напускам страница с незаписано съдържание
-  
+  field_issues_visibility: Видимост на задачите
+  field_is_private: Лична
+  field_commit_logs_encoding: Кодова таблица на съобщенията при поверяване
+  field_scm_path_encoding: Кодова таблица на пътищата (path)
+  field_path_to_repository: Път до хранилището
+  field_root_directory: Коренна директория (папка)
+  field_cvsroot: CVSROOT
+  field_cvs_module: Модул
+
   setting_app_title: Заглавие
   setting_app_subtitle: Описание
   setting_welcome_text: Допълнителен текст
@@ -331,7 +342,6 @@
   setting_cross_project_issue_relations: Релации на задачи между проекти
   setting_issue_list_default_columns: Показвани колони по подразбиране
   setting_repositories_encodings: Кодови таблици
-  setting_commit_logs_encoding: Кодова таблица на съобщенията при поверяване
   setting_emails_header: Emails header
   setting_emails_footer: Подтекст за e-mail
   setting_protocol: Протокол
@@ -376,7 +386,9 @@
   permission_add_issues: Добавяне на задачи
   permission_edit_issues: Редактиране на задачи
   permission_manage_issue_relations: Управление на връзките между задачите
-  permission_add_issue_notes: Добаване на бележки
+  permission_set_own_issues_private: Установяване на собствените задачи публични или лични
+  permission_set_issues_private: Установяване на задачите публични или лични
+  permission_add_issue_notes: Добавяне на бележки
   permission_edit_issue_notes: Редактиране на бележки
   permission_edit_own_issue_notes: Редактиране на собствени бележки
   permission_move_issues: Преместване на задачи
@@ -451,6 +463,9 @@
   label_issues_by: "Задачи по %{value}"
   label_issue_added: Добавена задача
   label_issue_updated: Обновена задача
+  label_issue_note_added: Добавена бележка
+  label_issue_status_updated: Обновено състояние
+  label_issue_priority_updated: Обновен приоритет
   label_document: Документ
   label_document_new: Нов документ
   label_document_plural: Документи
@@ -459,6 +474,8 @@
   label_role_plural: Роли
   label_role_new: Нова роля
   label_role_and_permissions: Роли и права
+  label_role_anonymous: Анонимен
+  label_role_non_member: Не член
   label_member: Член
   label_member_new: Нов член
   label_member_plural: Членове
@@ -538,6 +555,7 @@
   label_news_latest: Последни новини
   label_news_view_all: Виж всички
   label_news_added: Добавена новина
+  label_news_comment_added: Добавен коментар към новина
   label_settings: Настройки
   label_overview: Общ изглед
   label_version: Версия
@@ -734,7 +752,8 @@
   label_changeset_plural: Ревизии
   label_default_columns: По подразбиране
   label_no_change_option: (Без промяна)
-  label_bulk_edit_selected_issues: Редактиране на задачи
+  label_bulk_edit_selected_issues: Групово редактиране на задачи
+  label_bulk_edit_selected_time_entries: Групово редактиране на записи за използвано време
   label_theme: Тема
   label_default: По подразбиране
   label_search_titles_only: Само в заглавията
@@ -796,12 +815,20 @@
   label_project_copy_notifications: Изпращане на Send e-mail известия по време на копирането на проекта
   label_principal_search: "Търсене на потребител или група:"
   label_user_search: "Търсене на потребител:"
+  label_additional_workflow_transitions_for_author: Позволени са допълнителни преходи, когато потребителят е авторът
+  label_additional_workflow_transitions_for_assignee:  Позволени са допълнителни преходи, когато потребителят е назначеният към задачата
+  label_issues_visibility_all: Всички задачи
+  label_issues_visibility_public: Всички не-лични задачи
+  label_issues_visibility_own: Задачи, създадени от или назначени на потребителя
+  label_git_report_last_commit: Извеждане на последното поверяване за файлове и папки
 
   button_login: Вход
   button_submit: Прикачване
   button_save: Запис
   button_check_all: Избор на всички
   button_uncheck_all: Изчистване на всички
+  button_collapse_all: Скриване всички
+  button_expand_all: Разгъване всички
   button_delete: Изтриване
   button_create: Създаване
   button_create_and_continue: Създаване и продължаване
@@ -861,6 +888,7 @@
   text_are_you_sure: Сигурни ли сте?
   text_are_you_sure_with_children: Изтриване на задачата и нейните подзадачи?
   text_journal_changed: "%{label} променен от %{old} на %{new}"
+  text_journal_changed_no_detail: "%{label} променен"
   text_journal_set_to: "%{label} установен на %{value}"
   text_journal_deleted: "%{label} изтрит (%{old})"
   text_journal_added: "Добавено %{label} %{value}"
@@ -888,6 +916,8 @@
   text_status_changed_by_changeset: "Приложено с ревизия %{value}."
   text_time_logged_by_changeset: Приложено в ревизия %{value}.
   text_issues_destroy_confirmation: 'Сигурни ли сте, че искате да изтриете избраните задачи?'
+  text_issues_destroy_descendants_confirmation: Тази операция ще премахне и %{count} подзадача(и).
+  text_time_entries_destroy_confirmation: Сигурен ли сте, че изтриете избраните записи за изразходвано време?
   text_select_project_modules: 'Изберете активните модули за този проект:'
   text_default_administrator_account_changed: Сменен фабричния администраторски профил
   text_file_repository_writable: Възможност за писане в хранилището с файлове
@@ -912,6 +942,13 @@
   text_zoom_in: Увеличаване
   text_zoom_out: Намаляване
   text_warn_on_leaving_unsaved: Страницата съдържа незаписано съдържание, което може да бъде загубено, ако я напуснете.
+  text_scm_path_encoding_note: "По подразбиране: UTF-8"
+  text_git_repository_note: Празно и локално хранилище (например /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Локално хранилище (например /hgrepo, c:\hgrepo)
+  text_scm_command: SCM команда
+  text_scm_command_version: Версия
+  text_scm_config: Можете да конфигурирате SCM командите в config/configuration.yml. За да активирате промените, рестартирайте Redmine.
+  text_scm_command_not_available: SCM командата не е налична или достъпна. Проверете конфигурацията в административния панел.
 
   default_role_manager: Мениджър
   default_role_developer: Разработчик
@@ -939,5 +976,3 @@
   enumeration_doc_categories: Категории документи
   enumeration_activities: Дейности (time tracking)
   enumeration_system_activity: Системна активност
-
-  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/bs.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/bs.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -15,7 +15,10 @@
 
     month_names: [~, Januar, Februar, Mart, April, Maj, Jun, Jul, Avgust, Septembar, Oktobar, Novembar, Decembar]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, Maj, Jun, Jul, Avg, Sep, Okt, Nov, Dec]
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
   
   time:
     formats:
@@ -145,8 +148,8 @@
   general_lang_name: 'Bosanski'
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
-  general_csv_encoding: utf8
-  general_pdf_encoding: utf8
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '7'
   
   notice_account_activated: Vaš nalog je aktiviran. Možete se prijaviti.
@@ -257,7 +260,7 @@
   field_attr_mail: Atribut za email
   field_onthefly: 'Kreiranje korisnika "On-the-fly"'
   field_start_date: Početak
-  field_done_ratio: % Realizovano
+  field_done_ratio: "% Realizovano"
   field_auth_source: Mod za authentifikaciju
   field_hide_mail: Sakrij moju email adresu
   field_comments: Komentar
@@ -312,7 +315,6 @@
   setting_cross_project_issue_relations: Omogući relacije između aktivnosti na različitim projektima
   setting_issue_list_default_columns: Podrazumjevane koleone za prikaz na listi aktivnosti
   setting_repositories_encodings: Enkodiranje repozitorija
-  setting_commit_logs_encoding: 'Enkodiranje "commit" poruka'
   setting_emails_footer: Potpis na email-ovima
   setting_protocol: Protokol
   setting_per_page_options: Broj objekata po stranici
@@ -955,3 +957,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: 'Enkodiranje "commit" poruka'
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/ca.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/ca.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -20,7 +20,10 @@
     month_names: [~, Gener, Febrer, Març, Abril, Maig, Juny, Juliol, Agost, Setembre, Octubre, Novembre, Desembre]
     abbr_month_names: [~, Gen, Feb, Mar, Abr, Mai, Jun, Jul, Ago, Set, Oct, Nov, Des]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -138,7 +141,7 @@
   general_csv_separator: ';'
   general_csv_decimal_separator: ','
   general_csv_encoding: ISO-8859-15
-  general_pdf_encoding: ISO-8859-15
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: "El compte s'ha actualitzat correctament."
@@ -161,7 +164,7 @@
   notice_email_error: "S'ha produït un error en enviar el correu (%{value})"
   notice_feeds_access_key_reseted: "S'ha reiniciat la clau d'accés del RSS."
   notice_api_access_key_reseted: "S'ha reiniciat la clau d'accés a l'API."
-  notice_failed_to_save_issues: "No s'han pogut desar %s assumptes de %{count} seleccionats: %{ids}."
+  notice_failed_to_save_issues: "No s'han pogut desar %{count} assumptes de %{total} seleccionats: %{ids}."
   notice_failed_to_save_members: "No s'han pogut desar els membres: %{errors}."
   notice_no_issue_selected: "No s'ha seleccionat cap assumpte. Activeu els assumptes que voleu editar."
   notice_account_pending: "S'ha creat el compte i ara està pendent de l'aprovació de l'administrador."
@@ -269,7 +272,7 @@
   field_attr_mail: Atribut del correu electrònic
   field_onthefly: "Creació de l'usuari «al vol»"
   field_start_date: Inici
-  field_done_ratio: % realitzat
+  field_done_ratio: "% realitzat"
   field_auth_source: "Mode d'autenticació"
   field_hide_mail: "Oculta l'adreça de correu electrònic"
   field_comments: Comentari
@@ -327,7 +330,6 @@
   setting_cross_project_issue_relations: "Permet les relacions d'assumptes entre projectes"
   setting_issue_list_default_columns: "Columnes mostrades per defecte en la llista d'assumptes"
   setting_repositories_encodings: Codificacions del dipòsit
-  setting_commit_logs_encoding: Codificació dels missatges publicats
   setting_emails_footer: Peu dels correus electrònics
   setting_protocol: Protocol
   setting_per_page_options: Opcions dels objectes per pàgina
@@ -944,3 +946,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Codificació dels missatges publicats
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/cs.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/cs.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -21,7 +21,10 @@
     month_names: [~, Leden, Únor, Březen, Duben, Květen, Červen, Červenec, Srpen, Září, Říjen, Listopad, Prosinec]
     abbr_month_names: [~, Led, Úno, Bře, Dub, Kvě, Čer, Čec, Srp, Zář, Říj, Lis, Pro]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -272,7 +275,7 @@
   field_attr_mail: Email (atribut)
   field_onthefly: Automatické vytváření uživatelů
   field_start_date: Začátek
-  field_done_ratio: % Hotovo
+  field_done_ratio: "% Hotovo"
   field_auth_source: Autentifikační mód
   field_hide_mail: Nezobrazovat můj email
   field_comments: Komentář
@@ -334,7 +337,6 @@
   setting_cross_project_issue_relations: Povolit vazby úkolů napříč projekty
   setting_issue_list_default_columns: Výchozí sloupce zobrazené v seznamu úkolů
   setting_repositories_encodings: Kódování 
-  setting_commit_logs_encoding: Kódování zpráv při commitu
   setting_emails_header: Hlavička emailů
   setting_emails_footer: Patička emailů
   setting_protocol: Protokol
@@ -349,7 +351,7 @@
   setting_sequential_project_identifiers: Generovat sekvenční identifikátory projektů
   setting_gravatar_enabled: Použít uživatelské ikony Gravatar
   setting_gravatar_default: Výchozí Gravatar
-  setting_diff_max_lines_displayed: Maximální počet zobrazenách řádků rozdílů
+  setting_diff_max_lines_displayed: Maximální počet zobrazených řádků rozdílů
   setting_file_max_size_displayed: Maximální velikost textových souborů zobrazených přímo na stránce
   setting_repository_log_display_limit: Maximální počet revizí zobrazených v logu souboru
   setting_openid: Umožnit přihlašování a registrace s OpenID
@@ -841,7 +843,7 @@
   button_update: Aktualizovat
   button_configure: Konfigurovat
   button_quote: Citovat
-  button_duplicate: Duplikát
+  button_duplicate: Duplikovat
   button_show: Zobrazit
   
   status_active: aktivní
@@ -902,7 +904,7 @@
   text_user_wrote: "%{value} napsal:"
   text_enumeration_destroy_question: "Několik (%{count}) objektů je přiřazeno k této hodnotě."
   text_enumeration_category_reassign_to: 'Přeřadit je do této:'
-  text_email_delivery_not_configured: "Doručování e-mailů není nastaveno a odesílání notifikací je zakázáno.\nNastavte Váš SMTP server v souboru config/email.yml a restartujte aplikaci."
+  text_email_delivery_not_configured: "Doručování e-mailů není nastaveno a odesílání notifikací je zakázáno.\nNastavte Váš SMTP server v souboru config/configuration.yml a restartujte aplikaci."
   text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživatelským jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky."
   text_diff_truncated: '... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.'
   text_custom_field_possible_values_info: 'Každá hodnota na novém řádku'
@@ -945,3 +947,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kódování zpráv při commitu
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/da.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/da.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -14,7 +14,10 @@
     abbr_day_names: [sø, ma, ti, 'on', to, fr, lø]
     month_names: [~, januar, februar, marts, april, maj, juni, juli, august, september, oktober, november, december]
     abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, aug, sep, okt, nov, dec]
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -134,7 +137,7 @@
         greater_than_start_date: "skal være senere end startdatoen"
         not_same_project: "hører ikke til samme projekt"
         circular_dependency: "Denne relation vil skabe et afhængighedsforhold"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "En sag kan ikke relateres til en af dens underopgaver"
 
       template:
         header:
@@ -151,7 +154,7 @@
   general_lang_name: 'Danish (Dansk)'
   general_csv_separator: ','
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: Kontoen er opdateret.
@@ -183,7 +186,7 @@
   error_scm_command_failed: "En fejl opstod under forbindelsen til det valgte repository: %{value}"
   
   mail_subject_lost_password: "Dit %{value} kodeord"
-  mail_body_lost_password: 'For at ændre dit kodeord, klik på dette link:'
+  mail_body_lost_password: 'Klik på dette link for at ændre dit kodeord:'
   mail_subject_register: "%{value} kontoaktivering"
   mail_body_register: 'Klik på dette link for at aktivere din konto:'
   mail_body_account_information_external: "Du kan bruge din %{value} konto til at logge ind."
@@ -227,7 +230,7 @@
   field_due_date: Deadline
   field_assigned_to: Tildelt til
   field_priority: Prioritet
-  field_fixed_version: Target version
+  field_fixed_version: Udgave
   field_user: Bruger
   field_role: Rolle
   field_homepage: Hjemmeside
@@ -254,8 +257,8 @@
   field_attr_lastname: Efternavn attribut
   field_attr_mail: Email attribut
   field_onthefly: løbende brugeroprettelse
-  field_start_date: Start date
-  field_done_ratio: % Færdig
+  field_start_date: Start dato
+  field_done_ratio: "% færdig"
   field_auth_source: Sikkerhedsmetode
   field_hide_mail: Skjul min email
   field_comments: Kommentar
@@ -349,7 +352,7 @@
   label_tracker_new: Ny type
   label_workflow: Arbejdsgang
   label_issue_status: Sagsstatus
-  label_issue_status_plural: Sagsstatuser
+  label_issue_status_plural: Sagsstatusser
   label_issue_status_new: Ny status
   label_issue_category: Sagskategori
   label_issue_category_plural: Sagskategorier
@@ -374,8 +377,8 @@
   label_logout: Log ud
   label_help: Hjælp
   label_reported_issues: Rapporterede sager
-  label_assigned_to_me_issues: Sager tildelt mig
-  label_last_login: Sidste login tidspunkt
+  label_assigned_to_me_issues: Sager tildelt til mig
+  label_last_login: Sidste logintidspunkt
   label_registered_on: Registreret den
   label_activity: Aktivitet
   label_new: Ny
@@ -490,7 +493,7 @@
   label_date_range: Dato interval
   label_less_than_ago: mindre end dage siden
   label_more_than_ago: mere end dage siden
-  label_ago: days siden
+  label_ago: dage siden
   label_contains: indeholder
   label_not_contains: ikke indeholder
   label_day_plural: dage
@@ -501,7 +504,7 @@
   label_modification_plural: "%{count} ændringer"
   label_revision: Revision
   label_revision_plural: Revisioner
-  label_associated_revisions: Tilnyttede revisioner
+  label_associated_revisions: Tilknyttede revisioner
   label_added: tilføjet
   label_modified: ændret
   label_deleted: slettet
@@ -531,7 +534,7 @@
   label_preview: Forhåndsvisning
   label_feed_plural: Feeds
   label_changes_details: Detaljer for alle ændringer
-  label_issue_tracking: Sags søgning
+  label_issue_tracking: Sagssøgning
   label_spent_time: Anvendt tid
   label_f_hour: "%{value} time"
   label_f_hour_plural: "%{value} timer"
@@ -548,7 +551,7 @@
   label_permissions_report: Godkendelsesrapport
   label_watched_issues: Overvågede sager
   label_related_issues: Relaterede sager
-  label_applied_status: Anvendte statuser
+  label_applied_status: Anvendte statusser
   label_loading: Indlæser...
   label_relation_new: Ny relation
   label_relation_delete: Slet relation
@@ -591,7 +594,7 @@
   label_jump_to_a_project: Skift til projekt...
   label_file_plural: Filer
   label_changeset_plural: Ændringer
-  label_default_columns: Standard kolonner
+  label_default_columns: Standardkolonner
   label_no_change_option: (Ingen ændringer)
   label_bulk_edit_selected_issues: Masse-ret de valgte sager
   label_theme: Tema
@@ -679,20 +682,20 @@
   text_issue_category_destroy_assignments: Slet tildelinger af kategori
   text_issue_category_reassign_to: Tildel sager til denne kategori
   text_user_mail_option: "For ikke-valgte projekter vil du kun modtage beskeder omhandlende ting du er involveret i eller overvåger (f.eks. sager du har indberettet eller ejer)."
-  text_no_configuration_data: "Roller, typer, sagsstatuser og arbejdsgange er endnu ikke konfigureret.\nDet er anbefalet at indlæse standardopsætningen. Du vil kunne ændre denne når den er indlæst."
+  text_no_configuration_data: "Roller, typer, sagsstatusser og arbejdsgange er endnu ikke konfigureret.\nDet er anbefalet at indlæse standardopsætningen. Du vil kunne ændre denne når den er indlæst."
   text_load_default_configuration: Indlæs standardopsætningen
   text_status_changed_by_changeset: "Anvendt i ændring %{value}."
   text_issues_destroy_confirmation: 'Er du sikker på du ønsker at slette den/de valgte sag(er)?'
   text_select_project_modules: 'Vælg moduler er skal være aktiveret for dette projekt:'
-  text_default_administrator_account_changed: Standard administratorkonto ændret
+  text_default_administrator_account_changed: Standardadministratorkonto ændret
   text_file_repository_writable: Filarkiv er skrivbar
   text_rmagick_available: RMagick tilgængelig (valgfri)
   
   default_role_manager: Leder
   default_role_developer: Udvikler
   default_role_reporter: Rapportør
-  default_tracker_bug: Bug
-  default_tracker_feature: Feature
+  default_tracker_bug: Fejl
+  default_tracker_feature: Funktion
   default_tracker_support: Support
   default_issue_status_new: Ny
   default_issue_status_in_progress: Igangværende
@@ -721,12 +724,12 @@
   error_issue_not_found_in_project: 'Sagen blev ikke fundet eller tilhører ikke dette projekt'
   text_assign_time_entries_to_project: Tildel raporterede timer til projektet
   setting_display_subprojects_issues: Vis sager for underprojekter på hovedprojektet som standard
-  label_optional_description: Optionel beskrivelse
+  label_optional_description: Valgfri beskrivelse
   text_destroy_time_entries: Slet registrerede timer
   field_comments_sorting: Vis kommentar
   text_reassign_time_entries: 'Tildel registrerede timer til denne sag igen'
   label_reverse_chronological_order: I omvendt kronologisk rækkefølge
-  label_preferences: Preferences
+  label_preferences: Præferencer
   label_overall_activity: Overordnet aktivitet
   setting_default_projects_public: Nye projekter er offentlige som standard
   error_scm_annotate: "Filen findes ikke, eller kunne ikke annoteres."
@@ -760,7 +763,7 @@
   permission_add_issue_watchers: Tilføj overvågere
   warning_attachments_not_saved: "der var %{count} fil(er), som ikke kunne gemmes."
   permission_comment_news: Kommentér nyheder
-  text_enumeration_category_reassign_to: 'FLyt dem til denne værdi:'
+  text_enumeration_category_reassign_to: 'Flyt dem til denne værdi:'
   permission_select_project_modules: Vælg projektmoduler
   permission_view_gantt: Se Gantt diagram
   permission_delete_messages: Slet beskeder
@@ -787,9 +790,9 @@
   label_and_its_subprojects: "%{value} og dets underprojekter"
   permission_view_calendar: Se kalender
   button_create_and_continue: Opret og fortsæt
-  setting_gravatar_enabled: Anvend Gravatar bruger ikoner
+  setting_gravatar_enabled: Anvend Gravatar brugerikoner
   label_updated_time_by: "Opdateret af %{author} for %{age} siden"
-  text_diff_truncated: '... Listen over forskelle er bleve afkortet da den overstiger den maksimale størrelse der kan vises.'
+  text_diff_truncated: '... Listen over forskelle er blevet afkortet da den overstiger den maksimale størrelse der kan vises.'
   text_user_wrote: "%{value} skrev:"
   setting_mail_handler_api_enabled: Aktiver webservice for indkomne emails
   permission_delete_issues: Slet sager
@@ -810,7 +813,6 @@
   permission_edit_project: Redigér projekt
   permission_save_queries: Gem forespørgsler
   label_copied: kopieret
-  setting_commit_logs_encoding: Kodning af Commit beskeder
   text_repository_usernames_mapping: "Vælg eller opdatér de Redmine brugere der svarer til de enkelte brugere fundet i repository loggen.\nBrugere med samme brugernavn eller email adresse i både Redmine og det valgte repository bliver automatisk koblet sammen."
   permission_edit_time_entries: Redigér tidsregistreringer
   general_csv_decimal_separator: ','
@@ -848,7 +850,7 @@
   label_tag: Tag
   label_branch: Branch
   error_no_tracker_in_project: Der er ingen sagshåndtering for dette projekt. Kontrollér venligst projektindstillingerne.
-  error_no_default_issue_status: Der er ikek defineret en standardstatus. Kontrollér venligst indstillingernen (Gå til "Administration -> Sagsstatuser").
+  error_no_default_issue_status: Der er ikke defineret en standardstatus. Kontrollér venligst indstillingerne (gå til "Administration -> Sagsstatusser").
   text_journal_changed: "%{label} ændret fra %{old} til %{new}"
   text_journal_set_to: "%{label} sat til %{value}"
   text_journal_deleted: "%{label} slettet (%{old})"
@@ -863,34 +865,34 @@
   version_status_closed: lukket
   version_status_locked: låst
   version_status_open: åben
-  error_can_not_reopen_issue_on_closed_version: En sag tildelt en lukket version, kan ikke genåbnes
+  error_can_not_reopen_issue_on_closed_version: En sag tildelt en lukket version kan ikke genåbnes
   label_user_anonymous: Anonym
   button_move_and_follow: Flyt og overvåg
   setting_default_projects_modules: Standard moduler, aktiveret for nye projekter
   setting_gravatar_default: Standard Gravatar billede
   field_sharing: Delning
-  label_version_sharing_hierarchy: Med projekt hierarki
+  label_version_sharing_hierarchy: Med projekthierarki
   label_version_sharing_system: Med alle projekter
-  label_version_sharing_descendants: Med under projekter
-  label_version_sharing_tree: Med projekt træ
+  label_version_sharing_descendants: Med underprojekter
+  label_version_sharing_tree: Med projekttræ
   label_version_sharing_none: Ikke delt
   error_can_not_archive_project: Dette projekt kan ikke arkiveres
   button_duplicate: Duplikér
   button_copy_and_follow: Kopiér og overvåg
   label_copy_source: Kilde
   setting_issue_done_ratio: Beregn sagsløsning ratio
-  setting_issue_done_ratio_issue_status: Benyt sags status
+  setting_issue_done_ratio_issue_status: Benyt sagsstatus
   error_issue_done_ratios_not_updated: Sagsløsnings ratio, ikke opdateret.
-  error_workflow_copy_target: Vælg venligst mål tracker og rolle(r)
-  setting_issue_done_ratio_issue_field: Benyt sags felt
+  error_workflow_copy_target: Vælg venligst måltracker og rolle(r)
+  setting_issue_done_ratio_issue_field: Benyt sagsfelt
   label_copy_same_as_target: Samme som mål
   label_copy_target: Mål
-  notice_issue_done_ratios_updated: Sagsløsnings ratio opdateret.
-  error_workflow_copy_source: Vælg venligst en kilde tracker eller rolle
-  label_update_issue_done_ratios: Opdater sagsløsnings ratio
+  notice_issue_done_ratios_updated: Sagsløsningsratio opdateret.
+  error_workflow_copy_source: Vælg venligst en kildetracker eller rolle
+  label_update_issue_done_ratios: Opdater sagsløsningsratio
   setting_start_of_week: Start kalendre på
   permission_view_issues: Vis sager
-  label_display_used_statuses_only: Vis kun statuser der er benyttet af denne tracker
+  label_display_used_statuses_only: Vis kun statusser der er benyttet af denne tracker
   label_revision_id: Revision %{value}
   label_api_access_key: API nøgle
   label_api_access_key_created_on: API nøgle genereret %{value} siden
@@ -912,12 +914,12 @@
   label_board_locked: Låst
   permission_export_wiki_pages: Eksporter wiki sider
   setting_cache_formatted_text: Cache formatteret tekst
-  permission_manage_project_activities: Administrer projekt aktiviteter
-  error_unable_delete_issue_status: Det var ikke muligt at slette sags status
+  permission_manage_project_activities: Administrer projektaktiviteter
+  error_unable_delete_issue_status: Det var ikke muligt at slette sagsstatus
   label_profile: Profil
-  permission_manage_subtasks: Administrer under opgaver
-  field_parent_issue: Hoved opgave
-  label_subtask_plural: Under opgaver
+  permission_manage_subtasks: Administrer underopgaver
+  field_parent_issue: Hovedopgave
+  label_subtask_plural: Underopgaver
   label_project_copy_notifications: Send email notifikationer, mens projektet kopieres
   error_can_not_delete_custom_field: Kan ikke slette brugerdefineret felt
   error_unable_to_connect: Kan ikke forbinde (%{value})
@@ -927,7 +929,7 @@
   label_my_page_block: blok
   notice_failed_to_save_members: "Fejl under lagring af medlem(mer): %{errors}."
   text_zoom_out: Zoom ud
-  text_zoom_in: Zoom in
+  text_zoom_in: Zoom ind
   notice_unable_delete_time_entry: Kan ikke slette tidsregistrering.
   label_overall_spent_time: Overordnet forbrug af tid
   field_time_entries: Log tid
@@ -936,24 +938,59 @@
   button_edit_associated_wikipage: "Redigér tilknyttet Wiki side: %{page_title}"
   text_are_you_sure_with_children: Slet sag og alle undersager?
   field_text: Tekstfelt
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Medlem af Gruppe
-  field_assigned_to_role: Medlem af Rolle
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
+  label_user_mail_option_only_owner: Kun for ting jeg er ejer af
+  setting_default_notification_option: Standardpåmindelsesmulighed
+  label_user_mail_option_only_my_events: Kun for ting jeg overvåger eller er involveret i
+  label_user_mail_option_only_assigned: Kun for ting jeg er tildelt
+  label_user_mail_option_none: Ingen hændelser
+  field_member_of_group: Medlem af gruppe
+  field_assigned_to_role: Medlem af rolle
+  notice_not_authorized_archived_project: Projektet du prøver at tilgå, er blevet arkiveret.
+  label_principal_search: "Søg efter bruger eller gruppe:"
+  label_user_search: "Søg efter bruger:"
+  field_visible: Synlig
   setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  setting_commit_logtime_activity_id: Aktivitet for registreret tid
+  text_time_logged_by_changeset: Anvendt i changeset %{value}.
+  setting_commit_logtime_enabled: Aktiver tidsregistrering
+  notice_gantt_chart_truncated: Kortet er blevet afkortet, fordi det overstiger det maksimale antal elementer, der kan vises (%{max})
+  setting_gantt_items_limit: Maksimalt antal af elementer der kan vises på gantt kortet
+
   field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kodning af Commit beskeder
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/de.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/de.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,6 @@
 # German translations for Ruby on Rails
 # by Clemens Kofler (clemens@railway.at)
+# additions for Redmine 1.2 by Jens Martsch (jmartsch@gmail.com)
 
 de:
   direction: ltr
@@ -19,7 +20,10 @@
     month_names: [~, Januar, Februar, März, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember]
     abbr_month_names: [~, Jan, Feb, Mär, Apr, Mai, Jun, Jul, Aug, Sep, Okt, Nov, Dez]
     # Used in date_select and datime_select.
-    order: [:day, :month, :year]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -152,7 +156,7 @@
   general_csv_separator: ';'
   general_csv_decimal_separator: ','
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
 
   notice_account_updated: Konto wurde erfolgreich aktualisiert.
@@ -283,7 +287,7 @@
   field_attr_mail: E-Mail-Attribut
   field_onthefly: On-the-fly-Benutzererstellung
   field_start_date: Beginn
-  field_done_ratio: % erledigt
+  field_done_ratio: "% erledigt"
   field_auth_source: Authentifizierungs-Modus
   field_hide_mail: E-Mail-Adresse nicht anzeigen
   field_comments: Kommentar
@@ -341,7 +345,6 @@
   setting_cross_project_issue_relations: Ticket-Beziehungen zwischen Projekten erlauben
   setting_issue_list_default_columns: Default-Spalten in der Ticket-Auflistung
   setting_repositories_encodings: Kodierungen der Projektarchive
-  setting_commit_logs_encoding: Kodierung der Commit-Log-Meldungen
   setting_emails_footer: E-Mail-Fußzeile
   setting_protocol: Protokoll
   setting_per_page_options: Objekte pro Seite
@@ -948,13 +951,48 @@
   field_member_of_group: Zuständigkeitsgruppe
   field_assigned_to_role: Zuständigkeitsrolle
   field_visible: Sichtbar
-  setting_emails_header: Emailkopf
+  setting_emails_header: E-Mail Betreffzeile
   setting_commit_logtime_activity_id: Aktivität für die Zeiterfassung
   text_time_logged_by_changeset: Angewendet in Changeset %{value}.
   setting_commit_logtime_enabled: Aktiviere Zeitlogging
   notice_gantt_chart_truncated: Die Grafik ist unvollständig, da das Maximum der anzeigbaren Aufgaben überschritten wurde (%{max})
   setting_gantt_items_limit: Maximale Anzahl von Aufgaben die im Gantt-Chart angezeigt werden.
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  field_warn_on_leaving_unsaved: vor dem Verlassen einer Seite mit ungesichertem Text im Editor warnen
+  text_warn_on_leaving_unsaved: Die aktuellen Änderungen gehen verloren, wenn Sie diese Seite verlassen.
+  label_my_queries: Meine eigenen Abfragen
+  text_journal_changed_no_detail: "%{label} aktualisiert"
+  label_news_comment_added: Kommentar zu einer News hinzugefügt
+  button_expand_all: Alle ausklappen
+  button_collapse_all: Alle einklappen
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Ausgewählte Zeitaufwände bearbeiten
+  text_time_entries_destroy_confirmation: Sind Sie sicher, dass Sie die ausgewählten Zeitaufwände löschen möchten?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Nichtmitglied
+  label_issue_note_added: Notiz hinzugefügt
+  label_issue_status_updated: Status aktualisiert
+  label_issue_priority_updated: Priorität aktualisiert
+  label_issues_visibility_own: Tickets die folgender User erstellt hat oder die ihm zugewiesen sind
+  field_issues_visibility: Ticket Sichtbarkeit
+  label_issues_visibility_all: Alle Tickets
+  permission_set_own_issues_private: Eigene Tickets privat oder öffentlich markieren
+  field_is_private: Privat
+  permission_set_issues_private: Tickets privat oder öffentlich markieren
+  label_issues_visibility_public: Alle nicht privaten Tickets
+  text_issues_destroy_descendants_confirmation: Dies wird auch %{count} Unteraufgabe/n löschen.
+  field_commit_logs_encoding: Kodierung der Commit-Log-Meldungen
+  field_scm_path_encoding: Pfad Kodierung
+  text_scm_path_encoding_note: "Standard: UTF-8"
+  field_path_to_repository: Pfad zum repository
+  field_root_directory: Wurzelverzeichnis
+  field_cvs_module: Modul
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare und lokales repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Lokales repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Kommando
+  text_scm_command_version: Version
+  label_git_report_last_commit: Bericht des letzten Commits für Dateien und Verzeichnisse
+  text_scm_config: Sie können Ihre scm Kommandos in config/configuration.yml ändern. Bitte starten Sie die Anwendung nach dem ändern neu.
+  text_scm_command_not_available: Scm Kommando ist nicht verfügbar. Bitte prüfen Sie die Einstellungen im Administrationspanel.
+
--- a/config/locales/el.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/el.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -19,7 +19,10 @@
     month_names: [~, Ιανουάριος, Φεβρουάριος, Μάρτιος, Απρίλιος, Μάϊος, Ιούνιος, Ιούλιος, Αύγουστος, Σεπτέμβριος, Οκτώβριος, Νοέμβριος, Δεκέμβριος]
     abbr_month_names: [~, Ιαν, Φεβ, Μαρ, Απρ, Μαϊ, Ιον, Ιολ, Αυγ, Σεπ, Οκτ, Νοε, Δεκ]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -252,7 +255,7 @@
   field_attr_mail: Ιδιότητα email
   field_onthefly: Άμεση δημιουργία χρήστη
   field_start_date: Εκκίνηση
-  field_done_ratio: % επιτεύχθη
+  field_done_ratio: "% επιτεύχθη"
   field_auth_source: Τρόπος πιστοποίησης
   field_hide_mail: Απόκρυψη διεύθυνσης email
   field_comments: Σχόλιο
@@ -307,7 +310,6 @@
   setting_cross_project_issue_relations: Επιτρέψτε συσχετισμό θεμάτων σε διασταύρωση-έργων
   setting_issue_list_default_columns: Προκαθορισμένες εμφανιζόμενες στήλες στη λίστα θεμάτων
   setting_repositories_encodings: Κωδικοποίηση χαρακτήρων αποθετηρίου
-  setting_commit_logs_encoding: Κωδικοποίηση μηνυμάτων commit
   setting_emails_footer: Υποσέλιδο στα email
   setting_protocol: Πρωτόκολο
   setting_per_page_options: Αντικείμενα ανά σελίδα επιλογών
@@ -941,3 +943,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Κωδικοποίηση μηνυμάτων commit
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/en-GB.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/en-GB.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,972 +1,1008 @@
-en-GB:
-  direction: ltr
-  date:
-    formats:
-      # Use the strftime parameters for formats.
-      # When no format has been given, it uses default.
-      # You can provide other formats here if you like!
-      default: "%d/%m/%Y"
-      short: "%d %b"
-      long: "%d %B, %Y"
-      
-    day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
-    abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
-      
-    # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
-    abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
-    # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
-
-  time:
-    formats:
-      default: "%d/%m/%Y %I:%M %p"
-      time: "%I:%M %p"
-      short: "%d %b %H:%M"
-      long: "%d %B, %Y %H:%M"
-    am: "am"
-    pm: "pm"
-      
-  datetime:
-    distance_in_words:
-      half_a_minute: "half a minute"
-      less_than_x_seconds:
-        one:   "less than 1 second"
-        other: "less than %{count} seconds"
-      x_seconds:
-        one:   "1 second"
-        other: "%{count} seconds"
-      less_than_x_minutes:
-        one:   "less than a minute"
-        other: "less than %{count} minutes"
-      x_minutes:
-        one:   "1 minute"
-        other: "%{count} minutes"
-      about_x_hours:
-        one:   "about 1 hour"
-        other: "about %{count} hours"
-      x_days:
-        one:   "1 day"
-        other: "%{count} days"
-      about_x_months:
-        one:   "about 1 month"
-        other: "about %{count} months"
-      x_months:
-        one:   "1 month"
-        other: "%{count} months"
-      about_x_years:
-        one:   "about 1 year"
-        other: "about %{count} years"
-      over_x_years:
-        one:   "over 1 year"
-        other: "over %{count} years"
-      almost_x_years:
-        one:   "almost 1 year"
-        other: "almost %{count} years"
-
-  number:
-    format:
-      separator: "."
-      delimiter: " "
-      precision: 3
-
-    currency:
-      format:
-        format: "%u%n"
-        unit: "£"
-    human:
-      format:
-        delimiter: ""
-        precision: 1
-      storage_units:
-        format: "%n %u"
-        units:
-          byte:
-            one: "Byte"
-            other: "Bytes"
-          kb: "kB"
-          mb: "MB"
-          gb: "GB"
-          tb: "TB"
-
-        
-# Used in array.to_sentence.
-  support:
-    array:
-      sentence_connector: "and"
-      skip_last_comma: false
-      
-  activerecord:
-    errors:
-      template:
-        header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
-      messages:
-        inclusion: "is not included in the list"
-        exclusion: "is reserved"
-        invalid: "is invalid"
-        confirmation: "doesn't match confirmation"
-        accepted: "must be accepted"
-        empty: "can't be empty"
-        blank: "can't be blank"
-        too_long: "is too long (maximum is %{count} characters)"
-        too_short: "is too short (minimum is %{count} characters)"
-        wrong_length: "is the wrong length (should be %{count} characters)"
-        taken: "has already been taken"
-        not_a_number: "is not a number"
-        not_a_date: "is not a valid date"
-        greater_than: "must be greater than %{count}"
-        greater_than_or_equal_to: "must be greater than or equal to %{count}"
-        equal_to: "must be equal to %{count}"
-        less_than: "must be less than %{count}"
-        less_than_or_equal_to: "must be less than or equal to %{count}"
-        odd: "must be odd"
-        even: "must be even"
-        greater_than_start_date: "must be greater than start date"
-        not_same_project: "doesn't belong to the same project"
-        circular_dependency: "This relation would create a circular dependency"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
-        must_accept_terms_and_conditions: "You must accept the Terms and Conditions"        
-
-  actionview_instancetag_blank_option: Please select
-  
-  general_text_No: 'No'
-  general_text_Yes: 'Yes'
-  general_text_no: 'no'
-  general_text_yes: 'yes'
-  general_lang_name: 'English (British)'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
-  general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
-  general_first_day_of_week: '1'
-  
-  notice_account_updated: Account was successfully updated.
-  notice_account_invalid_creditentials: Invalid user or password
-  notice_account_password_updated: Password was successfully updated.
-  notice_account_wrong_password: Wrong password
-  notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
-  notice_account_unknown_email: Unknown user.
-  notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
-  notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
-  notice_account_activated: Your account has been activated. You can now log in.
-  notice_successful_create: Successful creation.
-  notice_successful_update: Successful update.
-  notice_successful_delete: Successful deletion.
-  notice_successful_connection: Successful connection.
-  notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
-  notice_locking_conflict: Data has been updated by another user.
-  notice_not_authorized: You are not authorised to access this page.
-  notice_email_sent: "An email was sent to %{value}"
-  notice_email_error: "An error occurred while sending mail (%{value})"
-  notice_feeds_access_key_reseted: Your RSS access key was reset.
-  notice_api_access_key_reseted: Your API access key was reset.
-  notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
-  notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
-  notice_account_pending: "Your account was created and is now pending administrator approval."
-  notice_default_data_loaded: Default configuration successfully loaded.
-  notice_unable_delete_version: Unable to delete version.
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  
-  error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
-  error_scm_not_found: "The entry or revision was not found in the repository."
-  error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
-  error_scm_annotate: "The entry does not exist or can not be annotated."
-  error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
-  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
-  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
-  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
-  error_can_not_archive_project: This project can not be archived
-  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
-  error_workflow_copy_source: 'Please select a source tracker or role'
-  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
-  
-  warning_attachments_not_saved: "%{count} file(s) could not be saved."
-  
-  mail_subject_lost_password: "Your %{value} password"
-  mail_body_lost_password: 'To change your password, click on the following link:'
-  mail_subject_register: "Your %{value} account activation"
-  mail_body_register: 'To activate your account, click on the following link:'
-  mail_body_account_information_external: "You can use your %{value} account to log in."
-  mail_body_account_information: Your account information
-  mail_subject_account_activation_request: "%{value} account activation request"
-  mail_body_account_activation_request: "A new user (%{value}) has registered. The account is pending your approval:"
-  mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
-  mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
-  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
-  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
-  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
-  
-  gui_validation_error: 1 error
-  gui_validation_error_plural: "%{count} errors"
-  
-  field_ssamr_user_detail:
-    description: User Description
-    institution: Institution
-
-  field_other_institution: ''
-
-  field_name: Name
-  field_description: Description
-  field_summary: Summary
-  field_is_required: Required
-  field_firstname: Firstname
-  field_lastname: Lastname
-  field_mail: Email
-  field_filename: File
-  field_filesize: Size
-  field_downloads: Downloads
-  field_author: Author
-  field_created_on: Created
-  field_updated_on: Updated
-  field_field_format: Format
-  field_is_for_all: For all projects
-  field_possible_values: Possible values
-  field_regexp: Regular expression
-  field_min_length: Minimum length
-  field_max_length: Maximum length
-  field_value: Value
-  field_category: Category
-  field_title: Title
-  field_project: Project
-  field_issue: Issue
-  field_status: Status
-  field_notes: Notes
-  field_is_closed: Issue closed
-  field_is_default: Default value
-  field_tracker: Tracker
-  field_subject: Subject
-  field_due_date: Due date
-  field_assigned_to: Assignee
-  field_priority: Priority
-  field_fixed_version: Target version
-  field_user: User
-  field_role: Role
-  field_homepage: Homepage
-  field_is_public: Public
-  field_is_private: Private
-  field_parent: Subproject of
-  field_is_in_roadmap: Issues displayed in roadmap
-  field_login: Login
-  field_mail_notification: Email notifications
-  field_admin: Administrator
-  field_last_login_on: Last connection
-  field_language: Language
-  field_effective_date: Date
-  field_password: Password
-  field_new_password: New password
-  field_password_confirmation: Confirmation
-  field_version: Version
-  field_type: Type
-  field_host: Host
-  field_port: Port
-  field_account: Account
-  field_base_dn: Base DN
-  field_attr_login: Login attribute
-  field_attr_firstname: Firstname attribute
-  field_attr_lastname: Lastname attribute
-  field_attr_mail: Email attribute
-  field_onthefly: On-the-fly user creation
-  field_start_date: Start date
-  field_done_ratio: % Done
-  field_auth_source: Authentication mode
-  field_hide_mail: Hide my email address
-  field_comments: Comment
-  field_url: URL
-  field_start_page: Start page
-  field_subproject: Subproject
-  field_hours: Hours
-  field_activity: Activity
-  field_spent_on: Date
-  field_identifier: Identifier
-  field_is_filter: Used as a filter
-  field_issue_to: Related issue
-  field_delay: Delay
-  field_assignable: Issues can be assigned to this role
-  field_redirect_existing_links: Redirect existing links
-  field_estimated_hours: Estimated time
-  field_column_names: Columns
-  field_time_zone: Time zone
-  field_searchable: Searchable
-  field_default_value: Default value
-  field_comments_sorting: Display comments
-  field_parent_title: Parent page
-  field_editable: Editable
-  field_watcher: Watcher
-  field_identity_url: OpenID URL
-  field_content: Content
-  field_group_by: Group results by
-  field_sharing: Sharing
-  
-  setting_app_title: Application title
-  setting_app_subtitle: Application subtitle
-  setting_welcome_text: Welcome text
-  setting_default_language: Default language
-  setting_login_required: Authentication required
-  setting_self_registration: Self-registration
-  setting_attachment_max_size: Attachment max. size
-  setting_issues_export_limit: Issues export limit
-  setting_mail_from: Emission email address
-  setting_bcc_recipients: Blind carbon copy recipients (bcc)
-  setting_plain_text_mail: Plain text mail (no HTML)
-  setting_host_name: Host name and path
-  setting_text_formatting: Text formatting
-  setting_wiki_compression: Wiki history compression
-  setting_feeds_limit: Feed content limit
-  setting_default_projects_public: New projects are public by default
-  setting_autofetch_changesets: Autofetch commits
-  setting_sys_api_enabled: Enable WS for repository management
-  setting_commit_ref_keywords: Referencing keywords
-  setting_commit_fix_keywords: Fixing keywords
-  setting_autologin: Autologin
-  setting_date_format: Date format
-  setting_time_format: Time format
-  setting_cross_project_issue_relations: Allow cross-project issue relations
-  setting_issue_list_default_columns: Default columns displayed on the issue list
-  setting_repositories_encodings: Repositories encodings
-  setting_commit_logs_encoding: Commit messages encoding
-  setting_emails_footer: Emails footer
-  setting_protocol: Protocol
-  setting_per_page_options: Objects per page options
-  setting_user_format: Users display format
-  setting_activity_days_default: Days displayed on project activity
-  setting_display_subprojects_issues: Display subprojects issues on main projects by default
-  setting_enabled_scm: Enabled SCM
-  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
-  setting_mail_handler_api_enabled: Enable WS for incoming emails
-  setting_mail_handler_api_key: API key
-  setting_sequential_project_identifiers: Generate sequential project identifiers
-  setting_gravatar_enabled: Use Gravatar user icons
-  setting_gravatar_default: Default Gravatar image
-  setting_diff_max_lines_displayed: Max number of diff lines displayed
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_openid: Allow OpenID login and registration
-  setting_password_min_length: Minimum password length
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_field: Use the issue field
-  setting_issue_done_ratio_issue_status: Use the issue status
-  setting_start_of_week: Start calendars on
-  setting_rest_api_enabled: Enable REST web service
-  setting_cache_formatted_text: Cache formatted text
-  
-  permission_add_project: Create project
-  permission_add_subprojects: Create subprojects
-  permission_edit_project: Edit project
-  permission_select_project_modules: Select project modules
-  permission_manage_members: Manage members
-  permission_manage_project_activities: Manage project activities
-  permission_manage_versions: Manage versions
-  permission_manage_categories: Manage issue categories
-  permission_view_issues: View Issues
-  permission_add_issues: Add issues
-  permission_edit_issues: Edit issues
-  permission_manage_issue_relations: Manage issue relations
-  permission_add_issue_notes: Add notes
-  permission_edit_issue_notes: Edit notes
-  permission_edit_own_issue_notes: Edit own notes
-  permission_move_issues: Move issues
-  permission_delete_issues: Delete issues
-  permission_manage_public_queries: Manage public queries
-  permission_save_queries: Save queries
-  permission_view_gantt: View gantt chart
-  permission_view_calendar: View calendar
-  permission_view_issue_watchers: View watchers list
-  permission_add_issue_watchers: Add watchers
-  permission_delete_issue_watchers: Delete watchers
-  permission_log_time: Log spent time
-  permission_view_time_entries: View spent time
-  permission_edit_time_entries: Edit time logs
-  permission_edit_own_time_entries: Edit own time logs
-  permission_manage_news: Manage news
-  permission_comment_news: Comment news
-  permission_manage_documents: Manage documents
-  permission_view_documents: View documents
-  permission_manage_files: Manage downloads
-  permission_view_files: View downloads
-  permission_manage_wiki: Manage wiki
-  permission_rename_wiki_pages: Rename wiki pages
-  permission_delete_wiki_pages: Delete wiki pages
-  permission_view_wiki_pages: View wiki
-  permission_view_wiki_edits: View wiki history
-  permission_edit_wiki_pages: Edit wiki pages
-  permission_delete_wiki_pages_attachments: Delete attachments
-  permission_protect_wiki_pages: Protect wiki pages
-  permission_manage_repository: Manage repository
-  permission_browse_repository: Browse repository
-  permission_view_changesets: View changesets
-  permission_commit_access: Commit access
-  permission_manage_boards: Manage boards
-  permission_view_messages: View messages
-  permission_add_messages: Post messages
-  permission_edit_messages: Edit messages
-  permission_edit_own_messages: Edit own messages
-  permission_delete_messages: Delete messages
-  permission_delete_own_messages: Delete own messages
-  permission_export_wiki_pages: Export wiki pages
-  
-  project_module_issue_tracking: Issue tracking (bugs and feature requests)
-  project_module_time_tracking: Time tracking
-  project_module_news: News
-  project_module_documents: Documents
-  project_module_files: Files for download
-  project_module_wiki: Wiki
-  project_module_repository: Source code repository
-  project_module_boards: Forums
-  project_module_gantt: Gantt chart
-  project_module_calendar: Calendar
-  project_module_embedded: Embedded documentation (Javadoc or Doxygen)
-  
-  label_tipoftheday: Tip of the day
-  label_notifications: Important Message
-  field_terms_and_conditions: 'Terms and Conditions:'
-  accept_terms_and_conditions: 'I have read and agree with the '
-  label_ssamr_description: Research description
-  label_ssamr_details: Other Details
-  label_ssamr_institution: Institution
-  label_user: User
-  label_user_plural: Users
-  label_user_new: New user
-  label_user_anonymous: Anonymous
-  label_project: Project
-  label_project_new: New project
-  label_project_plural: Projects
-  label_my_project_plural: My Projects
-  label_other_project_plural: Other Projects
-  label_x_projects:
-    zero:  no projects
-    one:   1 project
-    other: "%{count} projects"
-  label_project_all: All Projects
-  label_project_latest: Latest projects
-  label_managers: Managed by
-  label_issue: Issue
-  label_issue_new: New issue
-  label_issue_plural: Issues
-  label_issue_view_all: View all issues
-  label_issues_by: "Issues by %{value}"
-  label_issue_added: Issue added
-  label_issue_updated: Issue updated
-  label_document: Document
-  label_document_new: New document
-  label_document_plural: Documents
-  label_document_added: Document added
-  label_role: Role
-  label_role_plural: Roles
-  label_role_new: New role
-  label_role_and_permissions: Roles and permissions
-  label_member: Member
-  label_member_new: New member
-  label_member_plural: Members
-  label_tracker: Tracker
-  label_tracker_plural: Trackers
-  label_tracker_new: New tracker
-  label_workflow: Workflow
-  label_issue_status: Issue status
-  label_issue_status_plural: Issue statuses
-  label_issue_status_new: New status
-  label_issue_category: Issue category
-  label_issue_category_plural: Issue categories
-  label_issue_category_new: New category
-  label_custom_field: Custom field
-  label_custom_field_plural: Custom fields
-  label_custom_field_new: New custom field
-  label_enumerations: Enumerations
-  label_enumeration_new: New value
-  label_information: Information
-  label_information_plural: Information
-  label_please_login: Please log in
-  label_register: Register
-  label_login_with_open_id_option: or login with OpenID
-  label_password_lost: Lost password
-  label_home: Home
-  label_my_page: My page
-  label_my_account: My account
-  label_my_projects: My projects
-  label_administration: Administration
-  label_login: Sign in
-  label_logout: Sign out
-  label_help: Help
-  label_reported_issues: Reported issues
-  label_assigned_to_me_issues: Issues assigned to me
-  label_last_login: Last connection
-  label_registered_on: Registered on
-  label_activity: Activity
-  label_overall_activity: Overall activity
-  label_user_activity: "%{value}'s activity"
-  label_new: New
-  label_logged_as: Logged in as
-  label_environment: Environment
-  label_authentication: Authentication
-  label_auth_source: Authentication mode
-  label_auth_source_new: New authentication mode
-  label_auth_source_plural: Authentication modes
-  label_subproject_plural: Subprojects
-  label_subproject_new: New subproject
-  label_and_its_subprojects: "%{value} and its subprojects"
-  label_min_max_length: Min - Max length
-  label_list: List
-  label_date: Date
-  label_integer: Integer
-  label_float: Float
-  label_boolean: Boolean
-  label_string: Text
-  label_text: Long text
-  label_attribute: Attribute
-  label_attribute_plural: Attributes
-  label_download: "%{count} Download"
-  label_download_plural: "%{count} Downloads"
-  label_no_data: No data to display
-  label_change_status: Change status
-  label_history: History
-  label_attachment: File
-  label_attachment_new: New file
-  label_attachment_delete: Delete file
-  label_attachment_plural: Downloads
-  label_file_added: File added
-  label_report: Report
-  label_report_plural: Reports
-  label_news: News
-  label_news_new: Add news
-  label_news_plural: News
-  label_news_latest: Latest news
-  label_news_view_all: View all news
-  label_news_added: News added
-  label_settings: Settings
-  label_overview: Overview
-  label_version: Version
-  label_version_new: New version
-  label_version_plural: Versions
-  label_close_versions: Close completed versions
-  label_confirmation: Confirmation
-  label_export_to: 'Also available in:'
-  label_read: Read...
-  label_public_projects: Public projects
-  label_open_issues: open
-  label_open_issues_plural: open
-  label_closed_issues: closed
-  label_closed_issues_plural: closed
-  label_x_open_issues_abbr_on_total:
-    zero:  0 open / %{total}
-    one:   1 open / %{total}
-    other: "%{count} open / %{total}"
-  label_x_open_issues_abbr:
-    zero:  0 open
-    one:   1 open
-    other: "%{count} open"
-  label_x_closed_issues_abbr:
-    zero:  0 closed
-    one:   1 closed
-    other: "%{count} closed"
-  label_total: Total
-  label_permissions: Permissions
-  label_current_status: Current status
-  label_new_statuses_allowed: New statuses allowed
-  label_all: all
-  label_none: none
-  label_nobody: nobody
-  label_next: Next
-  label_previous: Previous
-  label_used_by: Used by
-  label_details: Details
-  label_add_note: Add a note
-  label_per_page: Per page
-  label_calendar: Calendar
-  label_months_from: months from
-  label_gantt: Gantt
-  label_internal: Internal
-  label_last_changes: "last %{count} changes"
-  label_change_view_all: View all changes
-  label_personalize_page: Personalise this page
-  label_comment: Comment
-  label_comment_plural: Comments
-  label_x_comments:
-    zero: no comments
-    one: 1 comment
-    other: "%{count} comments"
-  label_comment_add: Add a comment
-  label_comment_added: Comment added
-  label_comment_delete: Delete comments
-  label_query: Custom query
-  label_query_plural: Custom queries
-  label_query_new: New query
-  label_filter_add: Add filter
-  label_filter_plural: Filters
-  label_equals: is
-  label_not_equals: is not
-  label_in_less_than: in less than
-  label_in_more_than: in more than
-  label_greater_or_equal: '>='
-  label_less_or_equal: '<='
-  label_in: in
-  label_today: today
-  label_all_time: all time
-  label_yesterday: yesterday
-  label_this_week: this week
-  label_last_week: last week
-  label_last_n_days: "last %{count} days"
-  label_this_month: this month
-  label_last_month: last month
-  label_this_year: this year
-  label_date_range: Date range
-  label_less_than_ago: less than days ago
-  label_more_than_ago: more than days ago
-  label_ago: days ago
-  label_contains: contains
-  label_not_contains: doesn't contain
-  label_day_plural: days
-  label_repository: Repository
-  label_repository_plural: Repositories
-  label_browse: Browse
-  label_modification: "%{count} change"
-  label_modification_plural: "%{count} changes"
-  label_branch: Branch
-  label_tag: Tag 
-  label_revision: Revision
-  label_revision_plural: Revisions
-  label_revision_id: "Revision %{value}"
-  label_associated_revisions: Associated revisions
-  label_added: added
-  label_modified: modified
-  label_copied: copied
-  label_renamed: renamed
-  label_deleted: deleted
-  label_latest_revision: Latest revision
-  label_latest_revision_plural: Latest revisions
-  label_view_revisions: View revisions
-  label_view_all_revisions: View all revisions
-  label_max_size: Maximum size
-  label_sort_highest: Move to top
-  label_sort_higher: Move up
-  label_sort_lower: Move down
-  label_sort_lowest: Move to bottom
-  label_roadmap: Roadmap
-  label_roadmap_due_in: "Due in %{value}"
-  label_roadmap_overdue: "%{value} late"
-  label_roadmap_no_issues: No issues for this version
-  label_search: Search
-  label_result_plural: Results
-  label_all_words: All words
-  label_wiki: Wiki
-  label_wiki_edit: Wiki edit
-  label_wiki_edit_plural: Wiki edits
-  label_wiki_page: Wiki page
-  label_wiki_page_plural: Wiki pages
-  label_index_by_title: Index by title
-  label_index_by_date: Index by date
-  label_current_version: Current version
-  label_preview: Preview
-  label_feed_plural: Feeds
-  label_changes_details: Details of all changes
-  label_issue_tracking: Issue tracking
-  label_spent_time: Spent time
-  label_f_hour: "%{value} hour"
-  label_f_hour_plural: "%{value} hours"
-  label_time_tracking: Time tracking
-  label_change_plural: Changes
-  label_statistics: Statistics
-  label_commits_per_month: Commits per month
-  label_commits_per_author: Commits per author
-  label_view_diff: View differences
-  label_diff_inline: inline
-  label_diff_side_by_side: side by side
-  label_options: Options
-  label_copy_workflow_from: Copy workflow from
-  label_permissions_report: Permissions report
-  label_watched_issues: Watched issues
-  label_related_issues: Related issues
-  label_applied_status: Applied status
-  label_loading: Loading...
-  label_relation_new: New relation
-  label_relation_delete: Delete relation
-  label_relates_to: related to
-  label_duplicates: duplicates
-  label_duplicated_by: duplicated by
-  label_blocks: blocks
-  label_blocked_by: blocked by
-  label_precedes: precedes
-  label_follows: follows
-  label_end_to_start: end to start
-  label_end_to_end: end to end
-  label_start_to_start: start to start
-  label_start_to_end: start to end
-  label_stay_logged_in: Stay logged in
-  label_disabled: disabled
-  label_show_completed_versions: Show completed versions
-  label_me: me
-  label_board: Forum
-  label_board_new: New forum
-  label_board_plural: Forums
-  label_board_locked: Locked
-  label_board_sticky: Sticky
-  label_topic_plural: Topics
-  label_message_plural: Messages
-  label_message_last: Last message
-  label_message_new: New message
-  label_message_posted: Message added
-  label_reply_plural: Replies
-  label_send_information: Send account information to the user
-  label_year: Year
-  label_month: Month
-  label_week: Week
-  label_date_from: From
-  label_date_to: To
-  label_language_based: Based on user's language
-  label_sort_by: "Sort by %{value}"
-  label_send_test_email: Send a test email
-  label_feeds_access_key: RSS access key
-  label_missing_feeds_access_key: Missing a RSS access key
-  label_feeds_access_key_created_on: "RSS access key created %{value} ago"
-  label_module_plural: Modules
-  label_added_time_by: "Added by %{author} %{age} ago"
-  label_updated_time_by: "Updated by %{author} %{age} ago"
-  label_updated_time: "Updated %{value} ago"
-  label_jump_to_a_project: Jump to a project...
-  label_file_plural: Downloads
-  label_changeset_plural: Changesets
-  label_default_columns: Default columns
-  label_no_change_option: (No change)
-  label_bulk_edit_selected_issues: Bulk edit selected issues
-  label_theme: Theme
-  label_default: Default
-  label_search_titles_only: Search titles only
-  label_user_mail_option_all: "For any event on all my projects"
-  label_user_mail_option_selected: "For any event on the selected projects only..."
-  label_user_mail_option_none: "No events"
-  label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
-  label_registration_activation_by_email: account activation by email
-  label_registration_manual_activation: manual account activation
-  label_registration_automatic_activation: automatic account activation
-  label_display_per_page: "Per page: %{value}"
-  label_age: Age
-  label_change_properties: Change properties
-  label_general: General
-  label_more: More
-  label_scm: SCM
-  label_plugins: Plugins
-  label_ldap_authentication: LDAP authentication
-  label_downloads_abbr: D/L
-  label_optional_description: Optional description
-  label_add_another_file: Add another file
-  label_preferences: Preferences
-  label_chronological_order: In chronological order
-  label_reverse_chronological_order: In reverse chronological order
-  label_planning: Planning
-  label_incoming_emails: Incoming emails
-  label_generate_key: Generate a key
-  label_issue_watchers: Watchers
-  label_example: Example
-  label_display: Display
-  label_sort: Sort
-  label_ascending: Ascending
-  label_descending: Descending
-  label_date_from_to: From %{start} to %{end}
-  label_wiki_content_added: Wiki page added
-  label_wiki_content_updated: Wiki page updated
-  label_group: Group
-  label_group_plural: Groups
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  label_version_sharing_none: Not shared
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_tree: With project tree
-  label_version_sharing_system: With all projects
-  label_update_issue_done_ratios: Update issue done ratios
-  label_copy_source: Source
-  label_copy_target: Target
-  label_copy_same_as_target: Same as target
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_api_access_key: API access key
-  label_missing_api_access_key: Missing an API access key
-  label_api_access_key_created_on: "API access key created %{value} ago"
-  
-  button_login: Login
-  button_submit: Submit
-  button_save: Save
-  button_check_all: Check all
-  button_uncheck_all: Uncheck all
-  button_delete: Delete
-  button_create: Create
-  button_create_and_continue: Create and continue
-  button_test: Test
-  button_edit: Edit
-  button_add: Add
-  button_change: Change
-  button_apply: Apply
-  button_clear: Clear
-  button_lock: Lock
-  button_unlock: Unlock
-  button_download: Download
-  button_list: List
-  button_view: View
-  button_move: Move
-  button_move_and_follow: Move and follow
-  button_back: Back
-  button_cancel: Cancel
-  button_activate: Activate
-  button_sort: Sort
-  button_log_time: Log time
-  button_rollback: Rollback to this version
-  button_watch: Watch
-  button_unwatch: Unwatch
-  button_reply: Reply
-  button_archive: Archive
-  button_unarchive: Unarchive
-  button_reset: Reset
-  button_rename: Rename
-  button_change_password: Change password
-  button_copy: Copy
-  button_copy_and_follow: Copy and follow
-  button_annotate: Annotate
-  button_update: Update
-  button_configure: Configure
-  button_quote: Quote
-  button_duplicate: Duplicate
-  button_show: Show
-  
-  status_active: active
-  status_registered: registered
-  status_locked: locked
-  
-  version_status_open: open
-  version_status_locked: locked
-  version_status_closed: closed
-
-  field_active: Active
-  
-  text_select_mail_notifications: Select actions for which email notifications should be sent.
-  text_regexp_info: eg. ^[A-Z0-9]+$
-  text_min_max_length_info: 0 means no restriction
-  text_project_destroy_confirmation: Are you sure you want to delete this project and related data?
-  text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted."
-  text_workflow_edit: Select a role and a tracker to edit the workflow
-  text_are_you_sure: Are you sure?
-  text_journal_changed: "%{label} changed from %{old} to %{new}"
-  text_journal_set_to: "%{label} set to %{value}"
-  text_journal_deleted: "%{label} deleted (%{old})"
-  text_journal_added: "%{label} %{value} added"
-  text_tip_issue_begin_day: task beginning this day
-  text_tip_issue_end_day: task ending this day
-  text_tip_issue_begin_end_day: task beginning and ending this day
-  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
-  text_caracters_maximum: "%{count} characters maximum."
-  text_caracters_minimum: "Must be at least %{count} characters long."
-  text_length_between: "Length between %{min} and %{max} characters."
-  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br /> This will be used in all project-related URLs, and as the repository name. Once saved, the identifier <b>can not</b> be changed.'
-  text_project_homepage_info: 'Link to an external project page.'
-  text_project_name_info: "This will be the name of your project throughout this site.<br /> You can change your project's name at any time, in the project's settings."
-  text_project_visibility_info: "If your project is not public, it will only be visible to users that you have added as project members."
-  text_user_ssamr_description_info: 'Please describe your current research or development interests, within the fields of audio and music.<br/>This information is publicly visible in your profile and you can edit it at any time.'
-  text_issue_parent_issue_info: 'If this is a subtask, please insert its parent task number or write the main task name.'
-  text_tracker_no_workflow: No workflow defined for this tracker
-  text_unallowed_characters: Unallowed characters
-  text_comma_separated: Multiple values allowed (comma separated).
-  text_line_separated: Multiple values allowed (one line for each value).
-  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
-  text_issue_added: "Issue %{id} has been reported by %{author}."
-  text_issue_updated: "Issue %{id} has been updated by %{author}."
-  text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content?
-  text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do?"
-  text_issue_category_destroy_assignments: Remove category assignments
-  text_issue_category_reassign_to: Reassign issues to this category
-  text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
-  text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
-  text_load_default_configuration: Load the default configuration
-  text_status_changed_by_changeset: "Applied in changeset %{value}."
-  text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?'
-  text_select_project_modules: 'Select modules to enable for this project:'
-  text_default_administrator_account_changed: Default administrator account changed
-  text_file_repository_writable: Attachments directory writable
-  text_plugin_assets_writable: Plugin assets directory writable
-  text_rmagick_available: RMagick available (optional)
-  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do?"
-  text_destroy_time_entries: Delete reported hours
-  text_assign_time_entries_to_project: Assign reported hours to the project
-  text_reassign_time_entries: 'Reassign reported hours to this issue:'
-  text_user_wrote: "%{value} wrote:"
-  text_enumeration_destroy_question: "%{count} objects are assigned to this value."
-  text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
-  text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
-  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-  text_custom_field_possible_values_info: 'One line for each value'
-  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
-  text_wiki_page_nullify_children: "Keep child pages as root pages"
-  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
-  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
-  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
-  text_settings_repo_creation: The repository for a project should be set up automatically within a few minutes of the project being created.<br>You should not have to adjust any settings here; please check again in ten minutes.
-  
-  default_role_manager: Manager
-  default_role_developer: Developer
-  default_role_reporter: Reporter
-  default_tracker_bug: Bug
-  default_tracker_feature: Feature
-  default_tracker_support: Support
-  default_issue_status_new: New
-  default_issue_status_in_progress: In Progress
-  default_issue_status_resolved: Resolved
-  default_issue_status_feedback: Feedback
-  default_issue_status_closed: Closed
-  default_issue_status_rejected: Rejected
-  default_doc_category_user: User documentation
-  default_doc_category_tech: Technical documentation
-  default_priority_low: Low
-  default_priority_normal: Normal
-  default_priority_high: High
-  default_priority_urgent: Urgent
-  default_priority_immediate: Immediate
-  default_activity_design: Design
-  default_activity_development: Development
-  
-  enumeration_issue_priorities: Issue priorities
-  enumeration_doc_categories: Document categories
-  enumeration_activities: Activities (time tracking)
-  enumeration_system_activity: System Activity
-
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  error_can_not_delete_custom_field: Unable to delete custom field
-  permission_manage_subtasks: Manage subtasks
-  label_profile: Profile
-  error_unable_to_connect: Unable to connect (%{value})
-  label_overall_spent_time: Overall spent time
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  field_principal: Principal
-  field_parent_issue: Parent task
-  label_my_page_block: My page block
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_subtask_plural: Subtasks
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  label_project_copy_notifications: Send email notifications during the project copy
-  field_time_entries: Log time
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search by name:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+en-GB:
+  direction: ltr
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%d/%m/%Y"
+      short: "%d %b"
+      long: "%d %B, %Y"
+      
+    day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
+    abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
+      
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
+    abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
+    # Used in date_select and datime_select.
+    order:
+      - :year
+      - :month
+      - :day
+
+  time:
+    formats:
+      default: "%d/%m/%Y %I:%M %p"
+      time: "%I:%M %p"
+      short: "%d %b %H:%M"
+      long: "%d %B, %Y %H:%M"
+    am: "am"
+    pm: "pm"
+      
+  datetime:
+    distance_in_words:
+      half_a_minute: "half a minute"
+      less_than_x_seconds:
+        one:   "less than 1 second"
+        other: "less than %{count} seconds"
+      x_seconds:
+        one:   "1 second"
+        other: "%{count} seconds"
+      less_than_x_minutes:
+        one:   "less than a minute"
+        other: "less than %{count} minutes"
+      x_minutes:
+        one:   "1 minute"
+        other: "%{count} minutes"
+      about_x_hours:
+        one:   "about 1 hour"
+        other: "about %{count} hours"
+      x_days:
+        one:   "1 day"
+        other: "%{count} days"
+      about_x_months:
+        one:   "about 1 month"
+        other: "about %{count} months"
+      x_months:
+        one:   "1 month"
+        other: "%{count} months"
+      about_x_years:
+        one:   "about 1 year"
+        other: "about %{count} years"
+      over_x_years:
+        one:   "over 1 year"
+        other: "over %{count} years"
+      almost_x_years:
+        one:   "almost 1 year"
+        other: "almost %{count} years"
+
+  number:
+    format:
+      separator: "."
+      delimiter: " "
+      precision: 3
+
+    currency:
+      format:
+        format: "%u%n"
+        unit: "£"
+
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Byte"
+            other: "Bytes"
+          kb: "kB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+        
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "and"
+      skip_last_comma: false
+      
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "1 error prohibited this %{model} from being saved"
+          other:  "%{count} errors prohibited this %{model} from being saved"
+      messages:
+        inclusion: "is not included in the list"
+        exclusion: "is reserved"
+        invalid: "is invalid"
+        confirmation: "doesn't match confirmation"
+        accepted: "must be accepted"
+        empty: "can't be empty"
+        blank: "can't be blank"
+        too_long: "is too long (maximum is %{count} characters)"
+        too_short: "is too short (minimum is %{count} characters)"
+        wrong_length: "is the wrong length (should be %{count} characters)"
+        taken: "has already been taken"
+        not_a_number: "is not a number"
+        not_a_date: "is not a valid date"
+        greater_than: "must be greater than %{count}"
+        greater_than_or_equal_to: "must be greater than or equal to %{count}"
+        equal_to: "must be equal to %{count}"
+        less_than: "must be less than %{count}"
+        less_than_or_equal_to: "must be less than or equal to %{count}"
+        odd: "must be odd"
+        even: "must be even"
+        greater_than_start_date: "must be greater than start date"
+        not_same_project: "doesn't belong to the same project"
+        circular_dependency: "This relation would create a circular dependency"
+        cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks"
+        must_accept_terms_and_conditions: "You must accept the Terms and Conditions"        
+
+  actionview_instancetag_blank_option: Please select
+  
+  general_text_No: 'No'
+  general_text_Yes: 'Yes'
+  general_text_no: 'no'
+  general_text_yes: 'yes'
+  general_lang_name: 'English (British)'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '1'
+  
+  notice_account_updated: Account was successfully updated.
+  notice_account_invalid_creditentials: Invalid user or password
+  notice_account_password_updated: Password was successfully updated.
+  notice_account_wrong_password: Wrong password
+  notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
+  notice_account_unknown_email: Unknown user.
+  notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
+  notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
+  notice_account_activated: Your account has been activated. You can now log in.
+  notice_successful_create: Successful creation.
+  notice_successful_update: Successful update.
+  notice_successful_delete: Successful deletion.
+  notice_successful_connection: Successful connection.
+  notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
+  notice_locking_conflict: Data has been updated by another user.
+  notice_not_authorized: You are not authorised to access this page.
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  notice_email_sent: "An email was sent to %{value}"
+  notice_email_error: "An error occurred while sending mail (%{value})"
+  notice_feeds_access_key_reseted: Your RSS access key was reset.
+  notice_api_access_key_reseted: Your API access key was reset.
+  notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
+  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
+  notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
+  notice_account_pending: "Your account was created and is now pending administrator approval."
+  notice_default_data_loaded: Default configuration successfully loaded.
+  notice_unable_delete_version: Unable to delete version.
+  notice_unable_delete_time_entry: Unable to delete time log entry.
+  notice_issue_done_ratios_updated: Issue done ratios updated.
+  notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})"
+  
+  error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
+  error_scm_not_found: "The entry or revision was not found in the repository."
+  error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
+  error_scm_annotate: "The entry does not exist or cannot be annotated."
+  error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
+  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
+  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
+  error_can_not_delete_custom_field: Unable to delete custom field
+  error_can_not_delete_tracker: "This tracker contains issues and cannot be deleted."
+  error_can_not_remove_role: "This role is in use and cannot be deleted."
+  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version cannot be reopened'
+  error_can_not_archive_project: This project cannot be archived
+  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
+  error_workflow_copy_source: 'Please select a source tracker or role'
+  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
+  error_unable_delete_issue_status: 'Unable to delete issue status'
+  error_unable_to_connect: "Unable to connect (%{value})"
+  warning_attachments_not_saved: "%{count} file(s) could not be saved."
+  
+  mail_subject_lost_password: "Your %{value} password"
+  mail_body_lost_password: 'To change your password, click on the following link:'
+  mail_subject_register: "Your %{value} account activation"
+  mail_body_register: 'To activate your account, click on the following link:'
+  mail_body_account_information_external: "You can use your %{value} account to log in."
+  mail_body_account_information: Your account information
+  mail_subject_account_activation_request: "%{value} account activation request"
+  mail_body_account_activation_request: "A new user (%{value}) has registered. The account is pending your approval:"
+  mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
+  mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
+  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
+  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
+  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
+  
+  gui_validation_error: 1 error
+  gui_validation_error_plural: "%{count} errors"
+  
+  field_ssamr_user_detail:
+    description: User Description
+    institution: Institution
+
+  field_other_institution: ''
+
+  field_name: Name
+  field_description: Description
+  field_summary: Summary
+  field_is_required: Required
+  field_firstname: First name
+  field_lastname: Last name
+  field_mail: Email
+  field_filename: File
+  field_filesize: Size
+  field_downloads: Downloads
+  field_author: Author
+  field_created_on: Created
+  field_updated_on: Updated
+  field_field_format: Format
+  field_is_for_all: For all projects
+  field_possible_values: Possible values
+  field_regexp: Regular expression
+  field_min_length: Minimum length
+  field_max_length: Maximum length
+  field_value: Value
+  field_category: Category
+  field_title: Title
+  field_project: Project
+  field_issue: Issue
+  field_status: Status
+  field_notes: Notes
+  field_is_closed: Issue closed
+  field_is_default: Default value
+  field_tracker: Tracker
+  field_subject: Subject
+  field_due_date: Due date
+  field_assigned_to: Assignee
+  field_priority: Priority
+  field_fixed_version: Target version
+  field_user: User
+  field_principal: Principal
+  field_role: Role
+  field_homepage: Homepage
+  field_is_public: Public
+  field_is_private: Private
+  field_parent: Subproject of
+  field_is_in_roadmap: Issues displayed in roadmap
+  field_login: Login
+  field_mail_notification: Email notifications
+  field_admin: Administrator
+  field_last_login_on: Last connection
+  field_language: Language
+  field_effective_date: Date
+  field_password: Password
+  field_new_password: New password
+  field_password_confirmation: Confirmation
+  field_version: Version
+  field_type: Type
+  field_host: Host
+  field_port: Port
+  field_account: Account
+  field_base_dn: Base DN
+  field_attr_login: Login attribute
+  field_attr_firstname: Firstname attribute
+  field_attr_lastname: Lastname attribute
+  field_attr_mail: Email attribute
+  field_onthefly: On-the-fly user creation
+  field_start_date: Start date
+  field_done_ratio: "% Done"
+  field_auth_source: Authentication mode
+  field_hide_mail: Hide my email address
+  field_comments: Comment
+  field_url: URL
+  field_start_page: Start page
+  field_subproject: Subproject
+  field_hours: Hours
+  field_activity: Activity
+  field_spent_on: Date
+  field_identifier: Identifier
+  field_is_filter: Used as a filter
+  field_issue_to: Related issue
+  field_delay: Delay
+  field_assignable: Issues can be assigned to this role
+  field_redirect_existing_links: Redirect existing links
+  field_estimated_hours: Estimated time
+  field_column_names: Columns
+  field_time_entries: Log time
+  field_time_zone: Time zone
+  field_searchable: Searchable
+  field_default_value: Default value
+  field_comments_sorting: Display comments
+  field_parent_title: Parent page
+  field_editable: Editable
+  field_watcher: Watcher
+  field_identity_url: OpenID URL
+  field_content: Content
+  field_group_by: Group results by
+  field_sharing: Sharing
+  field_parent_issue: Parent task
+  field_member_of_group: "Assignee's group"
+  field_assigned_to_role: "Assignee's role"
+  field_text: Text field
+  field_visible: Visible
+  field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text"
+  
+  setting_app_title: Application title
+  setting_app_subtitle: Application subtitle
+  setting_welcome_text: Welcome text
+  setting_default_language: Default language
+  setting_login_required: Authentication required
+  setting_self_registration: Self-registration
+  setting_attachment_max_size: Attachment max. size
+  setting_issues_export_limit: Issues export limit
+  setting_mail_from: Emission email address
+  setting_bcc_recipients: Blind carbon copy recipients (bcc)
+  setting_plain_text_mail: Plain text mail (no HTML)
+  setting_host_name: Host name and path
+  setting_text_formatting: Text formatting
+  setting_wiki_compression: Wiki history compression
+  setting_feeds_limit: Feed content limit
+  setting_default_projects_public: New projects are public by default
+  setting_autofetch_changesets: Autofetch commits
+  setting_sys_api_enabled: Enable WS for repository management
+  setting_commit_ref_keywords: Referencing keywords
+  setting_commit_fix_keywords: Fixing keywords
+  setting_autologin: Autologin
+  setting_date_format: Date format
+  setting_time_format: Time format
+  setting_cross_project_issue_relations: Allow cross-project issue relations
+  setting_issue_list_default_columns: Default columns displayed on the issue list
+  setting_repositories_encodings: Repositories encodings
+  setting_emails_header: Emails header
+  setting_emails_footer: Emails footer
+  setting_protocol: Protocol
+  setting_per_page_options: Objects per page options
+  setting_user_format: Users display format
+  setting_activity_days_default: Days displayed on project activity
+  setting_display_subprojects_issues: Display subprojects issues on main projects by default
+  setting_enabled_scm: Enabled SCM
+  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
+  setting_mail_handler_api_enabled: Enable WS for incoming emails
+  setting_mail_handler_api_key: API key
+  setting_sequential_project_identifiers: Generate sequential project identifiers
+  setting_gravatar_enabled: Use Gravatar user icons
+  setting_gravatar_default: Default Gravatar image
+  setting_diff_max_lines_displayed: Max number of diff lines displayed
+  setting_file_max_size_displayed: Max size of text files displayed inline
+  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
+  setting_openid: Allow OpenID login and registration
+  setting_password_min_length: Minimum password length
+  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
+  setting_default_projects_modules: Default enabled modules for new projects
+  setting_issue_done_ratio: Calculate the issue done ratio with
+  setting_issue_done_ratio_issue_field: Use the issue field
+  setting_issue_done_ratio_issue_status: Use the issue status
+  setting_start_of_week: Start calendars on
+  setting_rest_api_enabled: Enable REST web service
+  setting_cache_formatted_text: Cache formatted text
+  setting_default_notification_option: Default notification option
+  setting_commit_logtime_enabled: Enable time logging
+  setting_commit_logtime_activity_id: Activity for logged time
+  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  
+  permission_add_project: Create project
+  permission_add_subprojects: Create subprojects
+  permission_edit_project: Edit project
+  permission_select_project_modules: Select project modules
+  permission_manage_members: Manage members
+  permission_manage_project_activities: Manage project activities
+  permission_manage_versions: Manage versions
+  permission_manage_categories: Manage issue categories
+  permission_view_issues: View Issues
+  permission_add_issues: Add issues
+  permission_edit_issues: Edit issues
+  permission_manage_issue_relations: Manage issue relations
+  permission_add_issue_notes: Add notes
+  permission_edit_issue_notes: Edit notes
+  permission_edit_own_issue_notes: Edit own notes
+  permission_move_issues: Move issues
+  permission_delete_issues: Delete issues
+  permission_manage_public_queries: Manage public queries
+  permission_save_queries: Save queries
+  permission_view_gantt: View gantt chart
+  permission_view_calendar: View calendar
+  permission_view_issue_watchers: View watchers list
+  permission_add_issue_watchers: Add watchers
+  permission_delete_issue_watchers: Delete watchers
+  permission_log_time: Log spent time
+  permission_view_time_entries: View spent time
+  permission_edit_time_entries: Edit time logs
+  permission_edit_own_time_entries: Edit own time logs
+  permission_manage_news: Manage news
+  permission_comment_news: Comment news
+  permission_manage_documents: Manage documents
+  permission_view_documents: View documents
+  permission_manage_files: Manage downloads
+  permission_view_files: View downloads
+  permission_manage_wiki: Manage wiki
+  permission_rename_wiki_pages: Rename wiki pages
+  permission_delete_wiki_pages: Delete wiki pages
+  permission_view_wiki_pages: View wiki
+  permission_view_wiki_edits: View wiki history
+  permission_edit_wiki_pages: Edit wiki pages
+  permission_delete_wiki_pages_attachments: Delete attachments
+  permission_protect_wiki_pages: Protect wiki pages
+  permission_manage_repository: Manage repository
+  permission_browse_repository: Browse repository
+  permission_view_changesets: View changesets
+  permission_commit_access: Commit access
+  permission_manage_boards: Manage forums
+  permission_view_messages: View messages
+  permission_add_messages: Post messages
+  permission_edit_messages: Edit messages
+  permission_edit_own_messages: Edit own messages
+  permission_delete_messages: Delete messages
+  permission_delete_own_messages: Delete own messages
+  permission_export_wiki_pages: Export wiki pages
+  permission_manage_subtasks: Manage subtasks
+  
+  project_module_issue_tracking: Issue tracking (bugs and feature requests)
+  project_module_time_tracking: Time tracking
+  project_module_news: News
+  project_module_documents: Documents
+  project_module_files: Files for download
+  project_module_wiki: Wiki
+  project_module_repository: Source code repository
+  project_module_boards: Forums
+  project_module_calendar: Calendar
+  project_module_gantt: Gantt
+  project_module_embedded: Embedded documentation (Javadoc or Doxygen)
+  
+  label_tipoftheday: Tip of the day
+  label_notifications: Important Message
+  field_terms_and_conditions: 'Terms and Conditions:'
+  accept_terms_and_conditions: 'I have read and agree with the '
+  label_ssamr_description: Research description
+  label_ssamr_details: Other Details
+  label_ssamr_institution: Institution
+  label_user: User
+  label_user_plural: Users
+  label_user_new: New user
+  label_user_anonymous: Anonymous
+  label_project: Project
+  label_project_new: New project
+  label_project_plural: Projects
+  label_my_project_plural: My Projects
+  label_other_project_plural: Other Projects
+  label_x_projects:
+    zero:  no projects
+    one:   1 project
+    other: "%{count} projects"
+  label_project_all: All Projects
+  label_project_latest: Latest projects
+  label_managers: Managed by
+  label_issue: Issue
+  label_issue_new: New issue
+  label_issue_plural: Issues
+  label_issue_view_all: View all issues
+  label_issues_by: "Issues by %{value}"
+  label_issue_added: Issue added
+  label_issue_updated: Issue updated
+  label_document: Document
+  label_document_new: New document
+  label_document_plural: Documents
+  label_document_added: Document added
+  label_role: Role
+  label_role_plural: Roles
+  label_role_new: New role
+  label_role_and_permissions: Roles and permissions
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_member: Member
+  label_member_new: New member
+  label_member_plural: Members
+  label_tracker: Tracker
+  label_tracker_plural: Trackers
+  label_tracker_new: New tracker
+  label_workflow: Workflow
+  label_issue_status: Issue status
+  label_issue_status_plural: Issue statuses
+  label_issue_status_new: New status
+  label_issue_category: Issue category
+  label_issue_category_plural: Issue categories
+  label_issue_category_new: New category
+  label_custom_field: Custom field
+  label_custom_field_plural: Custom fields
+  label_custom_field_new: New custom field
+  label_enumerations: Enumerations
+  label_enumeration_new: New value
+  label_information: Information
+  label_information_plural: Information
+  label_please_login: Please log in
+  label_register: Register
+  label_login_with_open_id_option: or login with OpenID
+  label_password_lost: Lost password
+  label_home: Home
+  label_my_page: My page
+  label_my_account: My account
+  label_my_projects: My projects
+  label_my_page_block: My page block
+  label_administration: Administration
+  label_login: Sign in
+  label_logout: Sign out
+  label_help: Help
+  label_reported_issues: Reported issues
+  label_assigned_to_me_issues: Issues assigned to me
+  label_last_login: Last connection
+  label_registered_on: Registered on
+  label_activity: Activity
+  label_overall_activity: Overall activity
+  label_user_activity: "%{value}'s activity"
+  label_new: New
+  label_logged_as: Logged in as
+  label_environment: Environment
+  label_authentication: Authentication
+  label_auth_source: Authentication mode
+  label_auth_source_new: New authentication mode
+  label_auth_source_plural: Authentication modes
+  label_subproject_plural: Subprojects
+  label_subproject_new: New subproject
+  label_and_its_subprojects: "%{value} and its subprojects"
+  label_min_max_length: Min - Max length
+  label_list: List
+  label_date: Date
+  label_integer: Integer
+  label_float: Float
+  label_boolean: Boolean
+  label_string: Text
+  label_text: Long text
+  label_attribute: Attribute
+  label_attribute_plural: Attributes
+  label_download: "%{count} Download"
+  label_download_plural: "%{count} Downloads"
+  label_no_data: No data to display
+  label_change_status: Change status
+  label_history: History
+  label_attachment: File
+  label_attachment_new: New file
+  label_attachment_delete: Delete file
+  label_attachment_plural: Downloads
+  label_file_added: File added
+  label_report: Report
+  label_report_plural: Reports
+  label_news: News
+  label_news_new: Add news
+  label_news_plural: News
+  label_news_latest: Latest news
+  label_news_view_all: View all news
+  label_news_added: News added
+  label_news_comment_added: Comment added to a news
+  label_settings: Settings
+  label_overview: Overview
+  label_version: Version
+  label_version_new: New version
+  label_version_plural: Versions
+  label_close_versions: Close completed versions
+  label_confirmation: Confirmation
+  label_export_to: 'Also available in:'
+  label_read: Read...
+  label_public_projects: Public projects
+  label_open_issues: open
+  label_open_issues_plural: open
+  label_closed_issues: closed
+  label_closed_issues_plural: closed
+  label_x_open_issues_abbr_on_total:
+    zero:  0 open / %{total}
+    one:   1 open / %{total}
+    other: "%{count} open / %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 open
+    one:   1 open
+    other: "%{count} open"
+  label_x_closed_issues_abbr:
+    zero:  0 closed
+    one:   1 closed
+    other: "%{count} closed"
+  label_total: Total
+  label_permissions: Permissions
+  label_current_status: Current status
+  label_new_statuses_allowed: New statuses allowed
+  label_all: all
+  label_none: none
+  label_nobody: nobody
+  label_next: Next
+  label_previous: Previous
+  label_used_by: Used by
+  label_details: Details
+  label_add_note: Add a note
+  label_per_page: Per page
+  label_calendar: Calendar
+  label_months_from: months from
+  label_gantt: Gantt
+  label_internal: Internal
+  label_last_changes: "last %{count} changes"
+  label_change_view_all: View all changes
+  label_personalize_page: Personalise this page
+  label_comment: Comment
+  label_comment_plural: Comments
+  label_x_comments:
+    zero: no comments
+    one: 1 comment
+    other: "%{count} comments"
+  label_comment_add: Add a comment
+  label_comment_added: Comment added
+  label_comment_delete: Delete comments
+  label_query: Custom query
+  label_query_plural: Custom queries
+  label_query_new: New query
+  label_my_queries: My custom queries
+  label_filter_add: Add filter
+  label_filter_plural: Filters
+  label_equals: is
+  label_not_equals: is not
+  label_in_less_than: in less than
+  label_in_more_than: in more than
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: in
+  label_today: today
+  label_all_time: all time
+  label_yesterday: yesterday
+  label_this_week: this week
+  label_last_week: last week
+  label_last_n_days: "last %{count} days"
+  label_this_month: this month
+  label_last_month: last month
+  label_this_year: this year
+  label_date_range: Date range
+  label_less_than_ago: less than days ago
+  label_more_than_ago: more than days ago
+  label_ago: days ago
+  label_contains: contains
+  label_not_contains: doesn't contain
+  label_day_plural: days
+  label_repository: Repository
+  label_repository_plural: Repositories
+  label_browse: Browse
+  label_modification: "%{count} change"
+  label_modification_plural: "%{count} changes"
+  label_branch: Branch
+  label_tag: Tag 
+  label_revision: Revision
+  label_revision_plural: Revisions
+  label_revision_id: "Revision %{value}"
+  label_associated_revisions: Associated revisions
+  label_added: added
+  label_modified: modified
+  label_copied: copied
+  label_renamed: renamed
+  label_deleted: deleted
+  label_latest_revision: Latest revision
+  label_latest_revision_plural: Latest revisions
+  label_view_revisions: View revisions
+  label_view_all_revisions: View all revisions
+  label_max_size: Maximum size
+  label_sort_highest: Move to top
+  label_sort_higher: Move up
+  label_sort_lower: Move down
+  label_sort_lowest: Move to bottom
+  label_roadmap: Roadmap
+  label_roadmap_due_in: "Due in %{value}"
+  label_roadmap_overdue: "%{value} late"
+  label_roadmap_no_issues: No issues for this version
+  label_search: Search
+  label_result_plural: Results
+  label_all_words: All words
+  label_wiki: Wiki
+  label_wiki_edit: Wiki edit
+  label_wiki_edit_plural: Wiki edits
+  label_wiki_page: Wiki page
+  label_wiki_page_plural: Wiki pages
+  label_index_by_title: Index by title
+  label_index_by_date: Index by date
+  label_current_version: Current version
+  label_preview: Preview
+  label_feed_plural: Feeds
+  label_changes_details: Details of all changes
+  label_issue_tracking: Issue tracking
+  label_spent_time: Spent time
+  label_overall_spent_time: Overall spent time
+  label_f_hour: "%{value} hour"
+  label_f_hour_plural: "%{value} hours"
+  label_time_tracking: Time tracking
+  label_change_plural: Changes
+  label_statistics: Statistics
+  label_commits_per_month: Commits per month
+  label_commits_per_author: Commits per author
+  label_view_diff: View differences
+  label_diff_inline: inline
+  label_diff_side_by_side: side by side
+  label_options: Options
+  label_copy_workflow_from: Copy workflow from
+  label_permissions_report: Permissions report
+  label_watched_issues: Watched issues
+  label_related_issues: Related issues
+  label_applied_status: Applied status
+  label_loading: Loading...
+  label_relation_new: New relation
+  label_relation_delete: Delete relation
+  label_relates_to: related to
+  label_duplicates: duplicates
+  label_duplicated_by: duplicated by
+  label_blocks: blocks
+  label_blocked_by: blocked by
+  label_precedes: precedes
+  label_follows: follows
+  label_end_to_start: end to start
+  label_end_to_end: end to end
+  label_start_to_start: start to start
+  label_start_to_end: start to end
+  label_stay_logged_in: Stay logged in
+  label_disabled: disabled
+  label_show_completed_versions: Show completed versions
+  label_me: me
+  label_board: Forum
+  label_board_new: New forum
+  label_board_plural: Forums
+  label_board_locked: Locked
+  label_board_sticky: Sticky
+  label_topic_plural: Topics
+  label_message_plural: Messages
+  label_message_last: Last message
+  label_message_new: New message
+  label_message_posted: Message added
+  label_reply_plural: Replies
+  label_send_information: Send account information to the user
+  label_year: Year
+  label_month: Month
+  label_week: Week
+  label_date_from: From
+  label_date_to: To
+  label_language_based: Based on user's language
+  label_sort_by: "Sort by %{value}"
+  label_send_test_email: Send a test email
+  label_feeds_access_key: RSS access key
+  label_missing_feeds_access_key: Missing a RSS access key
+  label_feeds_access_key_created_on: "RSS access key created %{value} ago"
+  label_module_plural: Modules
+  label_added_time_by: "Added by %{author} %{age} ago"
+  label_updated_time_by: "Updated by %{author} %{age} ago"
+  label_updated_time: "Updated %{value} ago"
+  label_jump_to_a_project: Jump to a project...
+  label_file_plural: Downloads
+  label_changeset_plural: Changesets
+  label_default_columns: Default columns
+  label_no_change_option: (No change)
+  label_bulk_edit_selected_issues: Bulk edit selected issues
+  label_theme: Theme
+  label_default: Default
+  label_search_titles_only: Search titles only
+  label_user_mail_option_all: "For any event on all my projects"
+  label_user_mail_option_selected: "For any event on the selected projects only..."
+  label_user_mail_option_none: "No events"
+  label_user_mail_option_only_my_events: "Only for things I watch or I'm involved in"
+  label_user_mail_option_only_assigned: "Only for things I am assigned to"
+  label_user_mail_option_only_owner: "Only for things I am the owner of"
+  label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
+  label_registration_activation_by_email: account activation by email
+  label_registration_manual_activation: manual account activation
+  label_registration_automatic_activation: automatic account activation
+  label_display_per_page: "Per page: %{value}"
+  label_age: Age
+  label_change_properties: Change properties
+  label_general: General
+  label_more: More
+  label_scm: SCM
+  label_plugins: Plugins
+  label_ldap_authentication: LDAP authentication
+  label_downloads_abbr: D/L
+  label_optional_description: Optional description
+  label_add_another_file: Add another file
+  label_preferences: Preferences
+  label_chronological_order: In chronological order
+  label_reverse_chronological_order: In reverse chronological order
+  label_planning: Planning
+  label_incoming_emails: Incoming emails
+  label_generate_key: Generate a key
+  label_issue_watchers: Watchers
+  label_example: Example
+  label_display: Display
+  label_sort: Sort
+  label_ascending: Ascending
+  label_descending: Descending
+  label_date_from_to: From %{start} to %{end}
+  label_wiki_content_added: Wiki page added
+  label_wiki_content_updated: Wiki page updated
+  label_group: Group
+  label_group_plural: Groups
+  label_group_new: New group
+  label_time_entry_plural: Spent time
+  label_version_sharing_none: Not shared
+  label_version_sharing_descendants: With subprojects
+  label_version_sharing_hierarchy: With project hierarchy
+  label_version_sharing_tree: With project tree
+  label_version_sharing_system: With all projects
+  label_update_issue_done_ratios: Update issue done ratios
+  label_copy_source: Source
+  label_copy_target: Target
+  label_copy_same_as_target: Same as target
+  label_display_used_statuses_only: Only display statuses that are used by this tracker
+  label_api_access_key: API access key
+  label_missing_api_access_key: Missing an API access key
+  label_api_access_key_created_on: "API access key created %{value} ago"
+  label_profile: Profile
+  label_subtask_plural: Subtasks
+  label_project_copy_notifications: Send email notifications during the project copy
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  
+  button_login: Login
+  button_submit: Submit
+  button_save: Save
+  button_check_all: Check all
+  button_uncheck_all: Uncheck all
+  button_collapse_all: Collapse all
+  button_expand_all: Expand all
+  button_delete: Delete
+  button_create: Create
+  button_create_and_continue: Create and continue
+  button_test: Test
+  button_edit: Edit
+  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
+  button_add: Add
+  button_change: Change
+  button_apply: Apply
+  button_clear: Clear
+  button_lock: Lock
+  button_unlock: Unlock
+  button_download: Download
+  button_list: List
+  button_view: View
+  button_move: Move
+  button_move_and_follow: Move and follow
+  button_back: Back
+  button_cancel: Cancel
+  button_activate: Activate
+  button_sort: Sort
+  button_log_time: Log time
+  button_rollback: Rollback to this version
+  button_watch: Watch
+  button_unwatch: Unwatch
+  button_reply: Reply
+  button_archive: Archive
+  button_unarchive: Unarchive
+  button_reset: Reset
+  button_rename: Rename
+  button_change_password: Change password
+  button_copy: Copy
+  button_copy_and_follow: Copy and follow
+  button_annotate: Annotate
+  button_update: Update
+  button_configure: Configure
+  button_quote: Quote
+  button_duplicate: Duplicate
+  button_show: Show
+  
+  status_active: active
+  status_registered: registered
+  status_locked: locked
+  
+  version_status_open: open
+  version_status_locked: locked
+  version_status_closed: closed
+
+  field_active: Active
+  
+  text_select_mail_notifications: Select actions for which email notifications should be sent.
+  text_regexp_info: eg. ^[A-Z0-9]+$
+  text_min_max_length_info: 0 means no restriction
+  text_project_destroy_confirmation: Are you sure you want to delete this project and related data?
+  text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted."
+  text_workflow_edit: Select a role and a tracker to edit the workflow
+  text_are_you_sure: Are you sure?
+  text_are_you_sure_with_children: "Delete issue and all child issues?"
+  text_journal_changed: "%{label} changed from %{old} to %{new}"
+  text_journal_changed_no_detail: "%{label} updated"
+  text_journal_set_to: "%{label} set to %{value}"
+  text_journal_deleted: "%{label} deleted (%{old})"
+  text_journal_added: "%{label} %{value} added"
+  text_tip_issue_begin_day: task beginning this day
+  text_tip_issue_end_day: task ending this day
+  text_tip_issue_begin_end_day: task beginning and ending this day
+  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier cannot be changed.'
+  text_caracters_maximum: "%{count} characters maximum."
+  text_caracters_minimum: "Must be at least %{count} characters long."
+  text_length_between: "Length between %{min} and %{max} characters."
+  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br /> This will be used in all project-related URLs, and as the repository name. Once saved, the identifier <b>can not</b> be changed.'
+  text_project_homepage_info: 'Link to an external project page.'
+  text_project_name_info: "This will be the name of your project throughout this site.<br /> You can change your project's name at any time, in the project's settings."
+  text_project_visibility_info: "If your project is not public, it will only be visible to users that you have added as project members."
+  text_user_ssamr_description_info: 'Please describe your current research or development interests, within the fields of audio and music.<br/>This information is publicly visible in your profile and you can edit it at any time.'
+  text_issue_parent_issue_info: 'If this is a subtask, please insert its parent task number or write the main task name.'
+  text_tracker_no_workflow: No workflow defined for this tracker
+  text_unallowed_characters: Unallowed characters
+  text_comma_separated: Multiple values allowed (comma separated).
+  text_line_separated: Multiple values allowed (one line for each value).
+  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
+  text_issue_added: "Issue %{id} has been reported by %{author}."
+  text_issue_updated: "Issue %{id} has been updated by %{author}."
+  text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content?
+  text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do?"
+  text_issue_category_destroy_assignments: Remove category assignments
+  text_issue_category_reassign_to: Reassign issues to this category
+  text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
+  text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
+  text_load_default_configuration: Load the default configuration
+  text_status_changed_by_changeset: "Applied in changeset %{value}."
+  text_time_logged_by_changeset: "Applied in changeset %{value}."
+  text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?'
+  text_select_project_modules: 'Select modules to enable for this project:'
+  text_default_administrator_account_changed: Default administrator account changed
+  text_file_repository_writable: Attachments directory writable
+  text_plugin_assets_writable: Plugin assets directory writable
+  text_rmagick_available: RMagick available (optional)
+  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do?"
+  text_destroy_time_entries: Delete reported hours
+  text_assign_time_entries_to_project: Assign reported hours to the project
+  text_reassign_time_entries: 'Reassign reported hours to this issue:'
+  text_user_wrote: "%{value} wrote:"
+  text_enumeration_destroy_question: "%{count} objects are assigned to this value."
+  text_enumeration_category_reassign_to: 'Reassign them to this value:'
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
+  text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
+  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
+  text_custom_field_possible_values_info: 'One line for each value'
+  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
+  text_wiki_page_nullify_children: "Keep child pages as root pages"
+  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
+  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
+  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
+  text_settings_repo_creation: The repository for a project should be set up automatically within a few minutes of the project being created.<br>You should not have to adjust any settings here; please check again in ten minutes.
+  text_zoom_in: Zoom in
+  text_zoom_out: Zoom out
+  text_warn_on_leaving_unsaved: "The current page contains unsaved text that will be lost if you leave this page."
+  
+  default_role_manager: Manager
+  default_role_developer: Developer
+  default_role_reporter: Reporter
+  default_tracker_bug: Bug
+  default_tracker_feature: Feature
+  default_tracker_support: Support
+  default_issue_status_new: New
+  default_issue_status_in_progress: In Progress
+  default_issue_status_resolved: Resolved
+  default_issue_status_feedback: Feedback
+  default_issue_status_closed: Closed
+  default_issue_status_rejected: Rejected
+  default_doc_category_user: User documentation
+  default_doc_category_tech: Technical documentation
+  default_priority_low: Low
+  default_priority_normal: Normal
+  default_priority_high: High
+  default_priority_urgent: Urgent
+  default_priority_immediate: Immediate
+  default_activity_design: Design
+  default_activity_development: Development
+  
+  enumeration_issue_priorities: Issue priorities
+  enumeration_doc_categories: Document categories
+  enumeration_activities: Activities (time tracking)
+  enumeration_system_activity: System Activity
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
+  label_principal_search: "Search by name:"
--- a/config/locales/en.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/en.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -17,7 +17,10 @@
     month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -66,11 +69,11 @@
         other: "almost %{count} years"
 
   number:
-    # Default format for numbers
     format:
       separator: "." 
       delimiter: ""
       precision: 3
+
     human:
       format:
         delimiter: ""
@@ -122,7 +125,7 @@
         greater_than_start_date: "must be greater than start date"
         not_same_project: "doesn't belong to the same project"
         circular_dependency: "This relation would create a circular dependency"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks"
         must_accept_terms_and_conditions: "You must accept the Terms and Conditions"
 
   actionview_instancetag_blank_option: Please select
@@ -135,7 +138,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '7'
   
   notice_account_updated: Account was successfully updated.
@@ -172,15 +175,15 @@
   error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
   error_scm_not_found: "The entry or revision was not found in the repository."
   error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
-  error_scm_annotate: "The entry does not exist or can not be annotated."
+  error_scm_annotate: "The entry does not exist or cannot be annotated."
   error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
   error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
   error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
   error_can_not_delete_custom_field: Unable to delete custom field
-  error_can_not_delete_tracker: "This tracker contains issues and can't be deleted."
-  error_can_not_remove_role: "This role is in use and can not be deleted."
-  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
-  error_can_not_archive_project: This project can not be archived
+  error_can_not_delete_tracker: "This tracker contains issues and cannot be deleted."
+  error_can_not_remove_role: "This role is in use and cannot be deleted."
+  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version cannot be reopened'
+  error_can_not_archive_project: This project cannot be archived
   error_issue_done_ratios_not_updated: "Issue done ratios not updated."
   error_workflow_copy_source: 'Please select a source tracker or role'
   error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
@@ -275,7 +278,7 @@
   field_attr_mail: Email attribute
   field_onthefly: On-the-fly user creation
   field_start_date: Start date
-  field_done_ratio: % Done
+  field_done_ratio: "% Done"
   field_auth_source: Authentication mode
   field_hide_mail: Hide my email address
   field_comments: Comment
@@ -311,7 +314,15 @@
   field_text: Text field
   field_visible: Visible
   field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text"
-  
+  field_issues_visibility: Issues visibility
+  field_is_private: Private
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvsroot: CVSROOT
+  field_cvs_module: Module
+
   field_terms_and_conditions: 'Terms and Conditions:'
   accept_terms_and_conditions: 'I have read and agree with the '
   setting_app_title: Application title
@@ -340,7 +351,6 @@
   setting_cross_project_issue_relations: Allow cross-project issue relations
   setting_issue_list_default_columns: Default columns displayed on the issue list
   setting_repositories_encodings: Repositories encodings
-  setting_commit_logs_encoding: Commit messages encoding
   setting_emails_header: Emails header
   setting_emails_footer: Emails footer
   setting_protocol: Protocol
@@ -385,6 +395,8 @@
   permission_add_issues: Add issues
   permission_edit_issues: Edit issues
   permission_manage_issue_relations: Manage issue relations
+  permission_set_issues_private: Set issues public or private
+  permission_set_own_issues_private: Set own issues public or private
   permission_add_issue_notes: Add notes
   permission_edit_issue_notes: Edit notes
   permission_edit_own_issue_notes: Edit own notes
@@ -419,7 +431,7 @@
   permission_browse_repository: Browse repository
   permission_view_changesets: View changesets
   permission_commit_access: Commit access
-  permission_manage_boards: Manage boards
+  permission_manage_boards: Manage forums
   permission_view_messages: View messages
   permission_add_messages: Post messages
   permission_edit_messages: Edit messages
@@ -467,6 +479,9 @@
   label_issues_by: "Issues by %{value}"
   label_issue_added: Issue added
   label_issue_updated: Issue updated
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
   label_document: Document
   label_document_new: New document
   label_document_plural: Documents
@@ -475,6 +490,8 @@
   label_role_plural: Roles
   label_role_new: New role
   label_role_and_permissions: Roles and permissions
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
   label_member: Member
   label_member_new: New member
   label_member_plural: Members
@@ -554,6 +571,7 @@
   label_news_latest: Latest news
   label_news_view_all: View all news
   label_news_added: News added
+  label_news_comment_added: Comment added to a news
   label_settings: Settings
   label_overview: Overview
   label_version: Version
@@ -751,6 +769,7 @@
   label_default_columns: Default columns
   label_no_change_option: (No change)
   label_bulk_edit_selected_issues: Bulk edit selected issues
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
   label_theme: Theme
   label_default: Default
   label_search_titles_only: Search titles only
@@ -812,12 +831,20 @@
   label_project_copy_notifications: Send email notifications during the project copy
   label_principal_search: "Search by name:"
   label_user_search: "Search for user:"
-  
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_issues_visibility_all: All issues
+  label_issues_visibility_public: All non private issues
+  label_issues_visibility_own: Issues created by or assigned to the user
+  label_git_report_last_commit: Report last commit for files and directories
+
   button_login: Login
   button_submit: Submit
   button_save: Save
   button_check_all: Check all
   button_uncheck_all: Uncheck all
+  button_collapse_all: Collapse all
+  button_expand_all: Expand all
   button_delete: Delete
   button_create: Create
   button_create_and_continue: Create and continue
@@ -857,24 +884,24 @@
   button_quote: Quote
   button_duplicate: Duplicate
   button_show: Show
-  
+
   status_active: active
   status_registered: registered
   status_locked: locked
-  
+
   version_status_open: open
   version_status_locked: locked
   version_status_closed: closed
 
   field_active: Active
-  
+
   text_select_mail_notifications: Select actions for which email notifications should be sent.
   text_regexp_info: eg. ^[A-Z0-9]+$
   text_min_max_length_info: 0 means no restriction
-  text_project_destroy_confirmation: Are you sure you want to delete this project and related data ?
+  text_project_destroy_confirmation: Are you sure you want to delete this project and related data?
   text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted."
   text_workflow_edit: Select a role and a tracker to edit the workflow
-  text_are_you_sure: Are you sure ?
+  text_are_you_sure: Are you sure?
   text_are_you_sure_with_children: "Delete issue and all child issues?"
   text_journal_changed: "%{label} changed from %{old} to %{new}"
   text_journal_changed_no_detail: "%{label} updated"
@@ -884,7 +911,7 @@
   text_tip_issue_begin_day: issue beginning this day
   text_tip_issue_end_day: issue ending this day
   text_tip_issue_begin_end_day: issue beginning and ending this day
-  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
+  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier cannot be changed.'
   text_caracters_maximum: "%{count} characters maximum."
   text_caracters_minimum: "Must be at least %{count} characters long."
   text_length_between: "Length between %{min} and %{max} characters."
@@ -897,8 +924,8 @@
   text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
   text_issue_added: "Issue %{id} has been reported by %{author}."
   text_issue_updated: "Issue %{id} has been updated by %{author}."
-  text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ?
-  text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do ?"
+  text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content?
+  text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do?"
   text_issue_category_destroy_assignments: Remove category assignments
   text_issue_category_reassign_to: Reassign issues to this category
   text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
@@ -906,13 +933,15 @@
   text_load_default_configuration: Load the default configuration
   text_status_changed_by_changeset: "Applied in changeset %{value}."
   text_time_logged_by_changeset: "Applied in changeset %{value}."
-  text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?'
+  text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?'
+  text_issues_destroy_descendants_confirmation: "This will also delete %{count} subtask(s)."
+  text_time_entries_destroy_confirmation: 'Are you sure you want to delete the selected time entr(y/ies)?'
   text_select_project_modules: 'Select modules to enable for this project:'
   text_default_administrator_account_changed: Default administrator account changed
   text_file_repository_writable: Attachments directory writable
   text_plugin_assets_writable: Plugin assets directory writable
   text_rmagick_available: RMagick available (optional)
-  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do ?"
+  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do?"
   text_destroy_time_entries: Delete reported hours
   text_assign_time_entries_to_project: Assign reported hours to the project
   text_reassign_time_entries: 'Reassign reported hours to this issue:'
@@ -932,7 +961,14 @@
   text_zoom_out: Zoom out
   text_warn_on_leaving_unsaved: "The current page contains unsaved text that will be lost if you leave this page."
   text_settings_repo_creation: The repository for a project should be set up automatically within a few minutes of the project being created.<br>You should not have to adjust any settings here.<br>Please check again in ten minutes, and <a href="/projects/soundsoftware-site/wiki/Help">contact us</a> if there is any problem.
-  
+  text_scm_path_encoding_note: "Default: UTF-8"
+  text_git_repository_note: "Bare and local repository (e.g. /gitrepo, c:\gitrepo)"
+  text_mercurial_repository_note: "Local repository (e.g. /hgrepo, c:\hgrepo)"
+  text_scm_command: Command
+  text_scm_command_version: Version
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
+
   default_role_manager: Manager
   default_role_developer: Developer
   default_role_reporter: Reporter
@@ -954,9 +990,8 @@
   default_priority_immediate: Immediate
   default_activity_design: Design
   default_activity_development: Development
-  
+
   enumeration_issue_priorities: Issue priorities
   enumeration_doc_categories: Document categories
   enumeration_activities: Activities (time tracking)
   enumeration_system_activity: System Activity
-
--- a/config/locales/es.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/es.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -159,7 +159,10 @@
     month_names: [~, Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Setiembre, Octubre, Noviembre, Diciembre]
     abbr_month_names: [~, Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Set, Oct, Nov, Dic]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -264,7 +267,7 @@
   field_default_value: Estado por defecto
   field_delay: Retraso
   field_description: Descripción
-  field_done_ratio: % Realizado
+  field_done_ratio: "% Realizado"
   field_downloads: Descargas
   field_due_date: Fecha fin
   field_effective_date: Fecha
@@ -333,7 +336,7 @@
   general_csv_separator: ';'
   general_first_day_of_week: '1'
   general_lang_name: 'Español'
-  general_pdf_encoding: ISO-8859-15
+  general_pdf_encoding: UTF-8
   general_text_No: 'No'
   general_text_Yes: 'Sí'
   general_text_no: 'no'
@@ -678,7 +681,7 @@
   notice_default_data_loaded: Configuración por defecto cargada correctamente.
   notice_email_error: "Ha ocurrido un error mientras enviando el correo (%{value})"
   notice_email_sent: "Se ha enviado un correo a %{value}"
-  notice_failed_to_save_issues: "Imposible grabar %s peticion(es) en %{count} seleccionado: %{ids}."
+  notice_failed_to_save_issues: "Imposible grabar %{count} peticion(es) de %{total} seleccionada(s): %{ids}."
   notice_feeds_access_key_reseted: Su clave de acceso para RSS ha sido reiniciada.
   notice_file_not_found: La página a la que intenta acceder no existe.
   notice_locking_conflict: Los datos han sido modificados por otro usuario.
@@ -753,7 +756,6 @@
   setting_autologin: Conexión automática
   setting_bcc_recipients: Ocultar las copias de carbón (bcc)
   setting_commit_fix_keywords: Palabras clave para la corrección
-  setting_commit_logs_encoding: Codificación de los mensajes de commit
   setting_commit_ref_keywords: Palabras clave para la referencia
   setting_cross_project_issue_relations: Permitir relacionar peticiones de distintos proyectos
   setting_date_format: Formato de fecha
@@ -978,3 +980,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Codificación de los mensajes de commit
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/eu.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/eu.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,947 +1,983 @@
-# Redmine EU language
-# Author: Ales Zabala Alava (Shagi), <shagi@gisa-elkartea.org>
-# 2010-01-25
-# Distributed under the same terms as the Redmine itself.
-eu:
-  direction: ltr
-  date:
-    formats:
-      # Use the strftime parameters for formats.
-      # When no format has been given, it uses default.
-      # You can provide other formats here if you like!
-      default: "%Y/%m/%d"
-      short: "%b %d"
-      long: "%Y %B %d"
-      
-    day_names: [Igandea, Astelehena, Asteartea, Asteazkena, Osteguna, Ostirala, Larunbata]
-    abbr_day_names: [Ig., Al., Ar., Az., Og., Or., La.]
-      
-    # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, Urtarrila, Otsaila, Martxoa, Apirila, Maiatza, Ekaina, Uztaila, Abuztua, Iraila, Urria, Azaroa, Abendua]
-    abbr_month_names: [~, Urt, Ots, Mar, Api, Mai, Eka, Uzt, Abu, Ira, Urr, Aza, Abe]
-    # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
-
-  time:
-    formats:
-      default: "%Y/%m/%d %H:%M"
-      time: "%H:%M"
-      short: "%b %d %H:%M"
-      long: "%Y %B %d %H:%M"
-    am: "am"
-    pm: "pm"
-      
-  datetime:
-    distance_in_words:
-      half_a_minute: "minutu erdi"
-      less_than_x_seconds:
-        one:   "segundu bat baino gutxiago"
-        other: "%{count} segundu baino gutxiago"
-      x_seconds:
-        one:   "segundu 1"
-        other: "%{count} segundu"
-      less_than_x_minutes:
-        one:   "minutu bat baino gutxiago"
-        other: "%{count} minutu baino gutxiago"
-      x_minutes:
-        one:   "minutu 1"
-        other: "%{count} minutu"
-      about_x_hours:
-        one:   "ordu 1 inguru"
-        other: "%{count} ordu inguru"
-      x_days:
-        one:   "egun 1"
-        other: "%{count} egun"
-      about_x_months:
-        one:   "hilabete 1 inguru"
-        other: "%{count} hilabete inguru"
-      x_months:
-        one:   "hilabete 1"
-        other: "%{count} hilabete"
-      about_x_years:
-        one:   "urte 1 inguru"
-        other: "%{count} urte inguru"
-      over_x_years:
-        one:   "urte 1 baino gehiago"
-        other: "%{count} urte baino gehiago"
-      almost_x_years:
-        one:   "ia urte 1"
-        other: "ia %{count} urte"
-
-  number:
-    format:
-      separator: "."
-      delimiter: ""
-      precision: 3
-    human:
-      format:
-        delimiter: ""
-        precision: 1
-      storage_units:
-        format: "%n %u"
-        units:
-          byte:
-            one: "Byte"
-            other: "Byte"
-          kb: "KB"
-          mb: "MB"
-          gb: "GB"
-          tb: "TB"
-
-        
-# Used in array.to_sentence.
-  support:
-    array:
-      sentence_connector: "eta"
-      skip_last_comma: false
-      
-  activerecord:
-    errors:
-      template:
-        header:
-          one:    "Errore batek %{model} hau godetzea galarazi du."
-          other:  "%{count} errorek %{model} hau gordetzea galarazi dute."
-      messages:
-        inclusion: "ez dago zerrendan"
-        exclusion: "erreserbatuta dago"
-        invalid: "baliogabea da"
-        confirmation: "ez du berrespenarekin bat egiten"
-        accepted: "onartu behar da"
-        empty: "ezin da hutsik egon"
-        blank: "ezin da hutsik egon"
-        too_long: "luzeegia da (maximoa %{count} karaktere dira)"
-        too_short: "laburregia da (minimoa %{count} karaktere dira)"
-        wrong_length: "luzera ezegokia da (%{count} karakter izan beharko litzake)"
-        taken: "dagoeneko hartuta dago"
-        not_a_number: "ez da zenbaki bat"
-        not_a_date: "ez da baliozko data"
-        greater_than: "%{count} baino handiagoa izan behar du"
-        greater_than_or_equal_to: "%{count} edo handiagoa izan behar du"
-        equal_to: "%{count} izan behar du"
-        less_than: "%{count} baino gutxiago izan behar du"
-        less_than_or_equal_to: "%{count} edo gutxiago izan behar du"
-        odd: "bakoitia izan behar du"
-        even: "bikoitia izan behar du"
-        greater_than_start_date: "hasiera data baino handiagoa izan behar du"
-        not_same_project: "ez dago proiektu berdinean"
-        circular_dependency: "Erlazio honek mendekotasun zirkular bat sortuko luke"
-        cant_link_an_issue_with_a_descendant: "Zeregin bat ezin da bere azpiataza batekin estekatu."
-
-  actionview_instancetag_blank_option: Hautatu mesedez
-  
-  general_text_No: 'Ez'
-  general_text_Yes: 'Bai'
-  general_text_no: 'ez'
-  general_text_yes: 'bai'
-  general_lang_name: 'Euskara'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
-  general_csv_encoding: UTF-8
-  general_pdf_encoding: UTF-8
-  general_first_day_of_week: '1'
-  
-  notice_account_updated: Kontua ongi eguneratu da.
-  notice_account_invalid_creditentials: Erabiltzaile edo pasahitz ezegokia
-  notice_account_password_updated: Pasahitza ongi eguneratu da.
-  notice_account_wrong_password: Pasahitz ezegokia.
-  notice_account_register_done: Kontua ongi sortu da. Kontua gaitzeko klikatu epostan adierazi zaizun estekan.
-  notice_account_unknown_email: Erabiltzaile ezezaguna.
-  notice_can_t_change_password: Kontu honek kanpoko autentikazio bat erabiltzen du. Ezinezkoa da pasahitza aldatzea.
-  notice_account_lost_email_sent: Pasahitz berria aukeratzeko jarraibideak dituen eposta bat bidali zaizu.
-  notice_account_activated: Zure kontua gaituta dago. Orain saioa has dezakezu
-  notice_successful_create: Sortze arrakastatsua.
-  notice_successful_update: Eguneratze arrakastatsua.
-  notice_successful_delete: Ezabaketa arrakastatsua.
-  notice_successful_connection: Konexio arrakastatsua.
-  notice_file_not_found: Atzitu nahi duzun orria ez da exisitzen edo ezabatua izan da.
-  notice_locking_conflict: Beste erabiltzaile batek datuak eguneratu ditu.
-  notice_not_authorized: Ez duzu orri hau atzitzeko baimenik.
-  notice_email_sent: "%{value} helbidera eposta bat bidali da"
-  notice_email_error: "Errorea eposta bidaltzean (%{value})"
-  notice_feeds_access_key_reseted: Zure RSS atzipen giltza berrezarri da.
-  notice_api_access_key_reseted: Zure API atzipen giltza berrezarri da.
-  notice_failed_to_save_issues: "Hautatutako %{total} zereginetatik %{count} ezin izan dira konpondu: %{ids}."
-  notice_no_issue_selected: "Ez da zereginik hautatu! Mesedez, editatu nahi dituzun arazoak markatu."
-  notice_account_pending: "Zure kontua sortu da, orain kudeatzailearen onarpenaren zain dago."
-  notice_default_data_loaded: Lehenetsitako konfigurazioa ongi kargatu da.
-  notice_unable_delete_version: Ezin da bertsioa ezabatu.
-  notice_issue_done_ratios_updated: Burututako zereginen erlazioa eguneratu da.
-  
-  error_can_t_load_default_data: "Ezin izan da lehenetsitako konfigurazioa kargatu: %{value}"
-  error_scm_not_found: "Sarrera edo berrikuspena ez da biltegian topatu."
-  error_scm_command_failed: "Errorea gertatu da biltegia atzitzean: %{value}"
-  error_scm_annotate: "Sarrera ez da existitzen edo ezin da anotatu."
-  error_issue_not_found_in_project: 'Zeregina ez da topatu edo ez da proiektu honetakoa'
-  error_no_tracker_in_project: 'Proiektu honek ez du aztarnaririk esleituta. Mesedez egiaztatu Proiektuaren ezarpenak.'
-  error_no_default_issue_status: 'Zereginek ez dute lehenetsitako egoerarik.  Mesedez egiaztatu zure konfigurazioa ("Kudeaketa -> Arazoen egoerak" atalera joan).'
-  error_can_not_reopen_issue_on_closed_version: 'Itxitako bertsio batera esleitutako zereginak ezin dira berrireki'
-  error_can_not_archive_project: Proiektu hau ezin da artxibatu
-  error_issue_done_ratios_not_updated: "Burututako zereginen erlazioa ez da eguneratu."
-  error_workflow_copy_source: 'Mesedez hautatu iturburuko aztarnari edo rola'
-  error_workflow_copy_target: 'Mesedez hautatu helburuko aztarnari(ak) edo rola(k)'
-  
-  warning_attachments_not_saved: "%{count} fitxategi ezin izan d(ir)a gorde."
-  
-  mail_subject_lost_password: "Zure %{value} pasahitza"
-  mail_body_lost_password: 'Zure pasahitza aldatzeko hurrengo estekan klikatu:'
-  mail_subject_register: "Zure %{value} kontuaren gaitzea"
-  mail_body_register: 'Zure kontua gaitzeko hurrengo estekan klikatu:'
-  mail_body_account_information_external: "Zure %{value} kontua erabil dezakezu saioa hasteko."
-  mail_body_account_information: Zure kontuaren informazioa
-  mail_subject_account_activation_request: "%{value} kontu gaitzeko eskaera"
-  mail_body_account_activation_request: "Erabiltzaile berri bat (%{value}) erregistratu da. Kontua zure onarpenaren zain dago:"
-  mail_subject_reminder: "%{count} arazo hurrengo %{days} egunetan amaitzen d(ir)a"
-  mail_body_reminder: "Zuri esleituta dauden %{count} arazo hurrengo %{days} egunetan amaitzen d(ir)a:"
-  mail_subject_wiki_content_added: "'%{id}' wiki orria gehitu da"
-  mail_body_wiki_content_added: "%{author}-(e)k '%{id}' wiki orria gehitu du."
-  mail_subject_wiki_content_updated: "'%{id}' wiki orria eguneratu da"
-  mail_body_wiki_content_updated: "%{author}-(e)k '%{id}' wiki orria eguneratu du."
-  
-  gui_validation_error: akats 1
-  gui_validation_error_plural: "%{count} akats"
-  
-  field_name: Izena
-  field_description: Deskribapena
-  field_summary: Laburpena
-  field_is_required: Beharrezkoa
-  field_firstname: Izena
-  field_lastname: Abizenak
-  field_mail: Eposta
-  field_filename: Fitxategia
-  field_filesize: Tamaina
-  field_downloads: Deskargak
-  field_author: Egilea
-  field_created_on: Sortuta
-  field_updated_on: Eguneratuta
-  field_field_format: Formatua
-  field_is_for_all: Proiektu guztietarako
-  field_possible_values: Balio posibleak
-  field_regexp: Expresio erregularra
-  field_min_length: Luzera minimoa
-  field_max_length: Luzera maxioma
-  field_value: Balioa
-  field_category: Kategoria
-  field_title: Izenburua
-  field_project: Proiektua
-  field_issue: Zeregina
-  field_status: Egoera
-  field_notes: Oharrak
-  field_is_closed: Itxitako arazoa
-  field_is_default: Lehenetsitako balioa
-  field_tracker: Aztarnaria
-  field_subject: Gaia
-  field_due_date: Amaiera data
-  field_assigned_to: Esleituta
-  field_priority: Lehentasuna
-  field_fixed_version: Helburuko bertsioa
-  field_user: Erabiltzilea
-  field_role: Rola
-  field_homepage: Orri nagusia
-  field_is_public: Publikoa
-  field_parent: "Honen azpiproiektua:"
-  field_is_in_chlog: Zereginak aldaketa egunkarian ikusten dira
-  field_is_in_roadmap: Arazoak ibilbide-mapan erakutsi
-  field_login: Erabiltzaile izena
-  field_mail_notification: Eposta jakinarazpenak
-  field_admin: Kudeatzailea
-  field_last_login_on: Azken konexioa
-  field_language: Hizkuntza
-  field_effective_date: Data
-  field_password: Pasahitza
-  field_new_password: Pasahitz berria
-  field_password_confirmation: Berrespena
-  field_version: Bertsioa
-  field_type: Mota
-  field_host: Ostalaria
-  field_port: Portua
-  field_account: Kontua
-  field_base_dn: Base DN
-  field_attr_login: Erabiltzaile atributua
-  field_attr_firstname: Izena atributua
-  field_attr_lastname: Abizenak atributua
-  field_attr_mail: Eposta atributua
-  field_onthefly: Zuzeneko erabiltzaile sorrera
-  field_start_date: Hasiera
-  field_done_ratio: Egindako %
-  field_auth_source: Autentikazio modua
-  field_hide_mail: Nire eposta helbidea ezkutatu
-  field_comments: Iruzkina
-  field_url: URL
-  field_start_page: Hasierako orria
-  field_subproject: Azpiproiektua
-  field_hours: Ordu
-  field_activity: Jarduera
-  field_spent_on: Data
-  field_identifier: Identifikatzailea
-  field_is_filter: Iragazki moduan erabilita
-  field_issue_to: Erlazionatutako zereginak
-  field_delay: Atzerapena
-  field_assignable: Arazoak rol honetara esleitu daitezke
-  field_redirect_existing_links: Existitzen diren estekak berbideratu
-  field_estimated_hours: Estimatutako denbora
-  field_column_names: Zutabeak
-  field_time_zone: Ordu zonaldea
-  field_searchable: Bilagarria
-  field_default_value: Lehenetsitako balioa
-  field_comments_sorting: Iruzkinak erakutsi
-  field_parent_title: Orri gurasoa
-  field_editable: Editagarria
-  field_watcher: Behatzailea
-  field_identity_url: OpenID URLa
-  field_content: Edukia
-  field_group_by: Emaitzak honegatik taldekatu
-  field_sharing: Partekatzea
-
-  setting_app_title: Aplikazioaren izenburua
-  setting_app_subtitle: Aplikazioaren azpizenburua
-  setting_welcome_text: Ongietorriko testua
-  setting_default_language: Lehenetsitako hizkuntza
-  setting_login_required: Autentikazioa derrigorrezkoa
-  setting_self_registration: Norberak erregistratu
-  setting_attachment_max_size: Eranskinen tamaina max.
-  setting_issues_export_limit: Zereginen esportatze limitea
-  setting_mail_from: Igorlearen eposta helbidea
-  setting_bcc_recipients: Hartzaileak ezkutuko kopian (bcc)
-  setting_plain_text_mail: Testu soileko epostak (HTML-rik ez)
-  setting_host_name: Ostalari izena eta bidea
-  setting_text_formatting: Testu formatua
-  setting_wiki_compression: Wikiaren historia konprimitu
-  setting_feeds_limit: Jarioaren edukiera limitea
-  setting_default_projects_public: Proiektu berriak defektuz publikoak dira
-  setting_autofetch_changesets: Commit-ak automatikoki hartu
-  setting_sys_api_enabled: Biltegien kudeaketarako WS gaitu
-  setting_commit_ref_keywords: Erreferentzien gako-hitzak
-  setting_commit_fix_keywords: Konpontze gako-hitzak
-  setting_autologin: Saioa automatikoki hasi
-  setting_date_format: Data formatua
-  setting_time_format: Ordu formatua
-  setting_cross_project_issue_relations: Zereginak proiektuen artean erlazionatzea baimendu
-  setting_issue_list_default_columns: Zereginen zerrendan defektuz ikusten diren zutabeak
-  setting_repositories_encodings: Biltegien kodeketak
-  setting_commit_logs_encoding: Commit-en egunkarien kodetzea
-  setting_emails_footer: Eposten oina
-  setting_protocol: Protokoloa
-  setting_per_page_options: Orriko objektuen aukerak
-  setting_user_format: Erabiltzaileak erakusteko formatua
-  setting_activity_days_default: Proiektuen jardueran erakusteko egunak
-  setting_display_subprojects_issues: Azpiproiektuen zereginak proiektu nagusian erakutsi defektuz
-  setting_enabled_scm: Gaitutako IKKak
-  setting_mail_handler_body_delimiters: "Lerro hauteko baten ondoren epostak moztu"
-  setting_mail_handler_api_enabled: Sarrerako epostentzako WS gaitu
-  setting_mail_handler_api_key: API giltza
-  setting_sequential_project_identifiers: Proiektuen identifikadore sekuentzialak sortu
-  setting_gravatar_enabled: Erabili Gravatar erabiltzaile ikonoak
-  setting_gravatar_default: Lehenetsitako Gravatar irudia
-  setting_diff_max_lines_displayed: Erakutsiko diren diff lerro kopuru maximoa
-  setting_file_max_size_displayed: Barnean erakuzten diren testu fitxategien tamaina maximoa
-  setting_repository_log_display_limit: Egunkari fitxategian erakutsiko diren berrikuspen kopuru maximoa.
-  setting_openid: Baimendu OpenID saio hasiera eta erregistatzea
-  setting_password_min_length: Pasahitzen luzera minimoa
-  setting_new_project_user_role_id: Proiektu berriak sortzerakoan kudeatzaile ez diren erabiltzaileei esleitutako rola
-  setting_default_projects_modules: Proiektu berrientzako defektuz gaitutako moduluak
-  setting_issue_done_ratio: "Zereginen burututako tasa kalkulatzean erabili:"
-  setting_issue_done_ratio_issue_field: Zeregin eremua erabili
-  setting_issue_done_ratio_issue_status: Zeregin egoera erabili
-  setting_start_of_week: "Egutegiak noiz hasi:"
-  setting_rest_api_enabled: Gaitu REST web zerbitzua
-  
-  permission_add_project: Proiektua sortu
-  permission_add_subprojects: Azpiproiektuak sortu
-  permission_edit_project: Proiektua editatu
-  permission_select_project_modules: Proiektuaren moduluak hautatu
-  permission_manage_members: Kideak kudeatu
-  permission_manage_versions: Bertsioak kudeatu
-  permission_manage_categories: Arazoen kategoriak kudeatu
-  permission_view_issues: Zereginak ikusi
-  permission_add_issues: Zereginak gehitu
-  permission_edit_issues: Zereginak aldatu
-  permission_manage_issue_relations: Zereginen erlazioak kudeatu
-  permission_add_issue_notes: Oharrak gehitu
-  permission_edit_issue_notes: Oharrak aldatu
-  permission_edit_own_issue_notes: Nork bere oharrak aldatu
-  permission_move_issues: Zereginak mugitu
-  permission_delete_issues: Zereginak ezabatu
-  permission_manage_public_queries: Galdera publikoak kudeatu
-  permission_save_queries: Galderak gorde
-  permission_view_gantt: Gantt grafikoa ikusi
-  permission_view_calendar: Egutegia ikusi
-  permission_view_issue_watchers: Behatzaileen zerrenda ikusi
-  permission_add_issue_watchers: Behatzaileak gehitu
-  permission_delete_issue_watchers: Behatzaileak ezabatu
-  permission_log_time: Igarotako denbora erregistratu
-  permission_view_time_entries: Igarotako denbora ikusi
-  permission_edit_time_entries: Denbora egunkariak editatu
-  permission_edit_own_time_entries: Nork bere denbora egunkariak editatu
-  permission_manage_news: Berriak kudeatu
-  permission_comment_news: Berrien iruzkinak egin
-  permission_manage_documents: Dokumentuak kudeatu
-  permission_view_documents: Dokumentuak ikusi
-  permission_manage_files: Fitxategiak kudeatu
-  permission_view_files: Fitxategiak ikusi
-  permission_manage_wiki: Wikia kudeatu
-  permission_rename_wiki_pages: Wiki orriak berrizendatu
-  permission_delete_wiki_pages: Wiki orriak ezabatu
-  permission_view_wiki_pages: Wikia ikusi
-  permission_view_wiki_edits: Wikiaren historia ikusi
-  permission_edit_wiki_pages: Wiki orriak editatu
-  permission_delete_wiki_pages_attachments: Eranskinak ezabatu
-  permission_protect_wiki_pages: Wiki orriak babestu
-  permission_manage_repository: Biltegiak kudeatu
-  permission_browse_repository: Biltegia arakatu
-  permission_view_changesets: Aldaketak ikusi
-  permission_commit_access: Commit atzipena
-  permission_manage_boards: Foroak kudeatu
-  permission_view_messages: Mezuak ikusi
-  permission_add_messages: Mezuak bidali
-  permission_edit_messages: Mezuak aldatu
-  permission_edit_own_messages: Nork bere mezuak aldatu
-  permission_delete_messages: Mezuak ezabatu
-  permission_delete_own_messages: Nork bere mezuak ezabatu
-  
-  project_module_issue_tracking: Zereginen jarraipena
-  project_module_time_tracking: Denbora jarraipena
-  project_module_news: Berriak
-  project_module_documents: Dokumentuak
-  project_module_files: Fitxategiak
-  project_module_wiki: Wiki
-  project_module_repository: Biltegia
-  project_module_boards: Foroak
-  
-  label_user: Erabiltzailea
-  label_user_plural: Erabiltzaileak
-  label_user_new: Erabiltzaile berria
-  label_user_anonymous: Ezezaguna
-  label_project: Proiektua
-  label_project_new: Proiektu berria
-  label_project_plural: Proiektuak
-  label_x_projects:
-    zero:  proiekturik ez
-    one:   proiektu bat
-    other: "%{count} proiektu"
-  label_project_all: Proiektu guztiak
-  label_project_latest: Azken proiektuak
-  label_issue: Zeregina
-  label_issue_new: Zeregin berria
-  label_issue_plural: Zereginak
-  label_issue_view_all: Zeregin guztiak ikusi
-  label_issues_by: "Zereginak honengatik: %{value}"
-  label_issue_added: Zeregina gehituta
-  label_issue_updated: Zeregina eguneratuta
-  label_document: Dokumentua
-  label_document_new: Dokumentu berria
-  label_document_plural: Dokumentuak
-  label_document_added: Dokumentua gehituta
-  label_role: Rola
-  label_role_plural: Rolak
-  label_role_new: Rol berria
-  label_role_and_permissions: Rolak eta baimenak
-  label_member: Kidea
-  label_member_new: Kide berria
-  label_member_plural: Kideak
-  label_tracker: Aztarnaria
-  label_tracker_plural: Aztarnariak
-  label_tracker_new: Aztarnari berria
-  label_workflow: Lan-fluxua
-  label_issue_status: Zeregin egoera
-  label_issue_status_plural: Zeregin egoerak
-  label_issue_status_new: Egoera berria
-  label_issue_category: Zeregin kategoria
-  label_issue_category_plural: Zeregin kategoriak
-  label_issue_category_new: Kategoria berria
-  label_custom_field: Eremu pertsonalizatua
-  label_custom_field_plural: Eremu pertsonalizatuak
-  label_custom_field_new: Eremu pertsonalizatu berria
-  label_enumerations: Enumerazioak
-  label_enumeration_new: Balio berria
-  label_information: Informazioa
-  label_information_plural: Informazioa
-  label_please_login: Saioa hasi mesedez
-  label_register: Erregistratu
-  label_login_with_open_id_option: edo OpenID-rekin saioa hasi
-  label_password_lost: Pasahitza galduta
-  label_home: Hasiera
-  label_home_heading: Hasiera
-  label_my_page: Nire orria
-  label_my_account: Nire kontua
-  label_my_projects: Nire proiektuak
-  label_administration: Kudeaketa
-  label_login: Saioa hasi
-  label_logout: Saioa bukatu
-  label_help: Laguntza
-  label_reported_issues: Berri emandako zereginak
-  label_assigned_to_me_issues: Niri esleitutako arazoak
-  label_last_login: Azken konexioa
-  label_registered_on: Noiz erregistratuta
-  label_activity: Jarduerak
-  label_overall_activity: Jarduera guztiak
-  label_user_activity: "%{value}-(r)en jarduerak"
-  label_new: Berria
-  label_logged_as: "Sartutako erabiltzailea:"
-  label_environment: Ingurune
-  label_authentication: Autentikazioa
-  label_auth_source: Autentikazio modua
-  label_auth_source_new: Autentikazio modu berria
-  label_auth_source_plural: Autentikazio moduak
-  label_subproject_plural: Azpiproiektuak
-  label_subproject_new: Azpiproiektu berria
-  label_and_its_subprojects: "%{value} eta bere azpiproiektuak"
-  label_min_max_length: Luzera min - max
-  label_list: Zerrenda
-  label_date: Data
-  label_integer: Osokoa
-  label_float: Koma higikorrekoa
-  label_boolean: Boolearra
-  label_string: Testua
-  label_text: Testu luzea
-  label_attribute: Atributua
-  label_attribute_plural: Atributuak
-  label_download: "Deskarga %{count}"
-  label_download_plural: "%{count} Deskarga"
-  label_no_data: Ez dago erakusteko daturik
-  label_change_status: Egoera aldatu
-  label_history: Historikoa
-  label_attachment: Fitxategia
-  label_attachment_new: Fitxategi berria
-  label_attachment_delete: Fitxategia ezabatu
-  label_attachment_plural: Fitxategiak
-  label_file_added: Fitxategia gehituta
-  label_report: Berri ematea
-  label_report_plural: Berri emateak
-  label_news: Berria
-  label_news_new: Berria gehitu
-  label_news_plural: Berriak
-  label_news_latest: Azken berriak
-  label_news_view_all: Berri guztiak ikusi
-  label_news_added: Berria gehituta
-  label_change_log: Aldaketa egunkaria
-  label_settings: Ezarpenak
-  label_overview: Gainbegirada
-  label_version: Bertsioa
-  label_version_new: Bertsio berria
-  label_version_plural: Bertsioak
-  label_close_versions: Burututako bertsioak itxi
-  label_confirmation: Baieztapena
-  label_export_to: 'Eskuragarri baita:'
-  label_read: Irakurri...
-  label_public_projects: Proiektu publikoak
-  label_open_issues: irekita
-  label_open_issues_plural: irekiak
-  label_closed_issues: itxita
-  label_closed_issues_plural: itxiak
-  label_x_open_issues_abbr_on_total:
-    zero:  0 irekita / %{total}
-    one:   1 irekita / %{total}
-    other: "%{count} irekiak / %{total}"
-  label_x_open_issues_abbr:
-    zero:  0 irekita
-    one:   1 irekita
-    other: "%{count} irekiak"
-  label_x_closed_issues_abbr:
-    zero:  0 itxita
-    one:   1 itxita
-    other: "%{count} itxiak"
-  label_total: Guztira
-  label_permissions: Baimenak
-  label_current_status: Uneko egoera
-  label_new_statuses_allowed: Baimendutako egoera berriak
-  label_all: guztiak
-  label_none: ezer
-  label_nobody: inor
-  label_next: Hurrengoa
-  label_previous: Aurrekoak
-  label_used_by: Erabilita
-  label_details: Xehetasunak
-  label_add_note: Oharra gehitu
-  label_per_page: Orriko
-  label_calendar: Egutegia
-  label_months_from: hilabete noiztik
-  label_gantt: Gantt
-  label_internal: Barnekoa
-  label_last_changes: "azken %{count} aldaketak"
-  label_change_view_all: Aldaketa guztiak ikusi
-  label_personalize_page: Orri hau pertsonalizatu
-  label_comment: Iruzkin
-  label_comment_plural: Iruzkinak
-  label_x_comments:
-    zero: iruzkinik ez
-    one: iruzkin 1
-    other: "%{count} iruzkin"
-  label_comment_add: Iruzkina gehitu
-  label_comment_added: Iruzkina gehituta
-  label_comment_delete: Iruzkinak ezabatu
-  label_query: Galdera pertsonalizatua
-  label_query_plural: Pertsonalizatutako galderak
-  label_query_new: Galdera berria
-  label_filter_add: Iragazkia gehitu
-  label_filter_plural: Iragazkiak
-  label_equals: da
-  label_not_equals: ez da
-  label_in_less_than: baino gutxiagotan
-  label_in_more_than: baino gehiagotan
-  label_greater_or_equal: '>='
-  label_less_or_equal: '<='
-  label_in: hauetan
-  label_today: gaur
-  label_all_time: denbora guztia
-  label_yesterday: atzo
-  label_this_week: aste honetan
-  label_last_week: pasadan astean
-  label_last_n_days: "azken %{count} egunetan"
-  label_this_month: hilabete hau
-  label_last_month: pasadan hilabetea
-  label_this_year: urte hau
-  label_date_range: Data tartea
-  label_less_than_ago: egun hauek baino gutxiago
-  label_more_than_ago: egun hauek baino gehiago
-  label_ago: orain dela
-  label_contains: dauka
-  label_not_contains: ez dauka
-  label_day_plural: egun
-  label_repository: Biltegia
-  label_repository_plural: Biltegiak
-  label_browse: Arakatu
-  label_modification: "aldaketa %{count}"
-  label_modification_plural: "%{count} aldaketa"
-  label_branch: Adarra
-  label_tag: Etiketa 
-  label_revision: Berrikuspena
-  label_revision_plural: Berrikuspenak
-  label_revision_id: "%{value} berrikuspen"
-  label_associated_revisions: Elkartutako berrikuspenak
-  label_added: gehituta
-  label_modified: aldatuta
-  label_copied: kopiatuta
-  label_renamed: berrizendatuta
-  label_deleted: ezabatuta
-  label_latest_revision: Azken berrikuspena
-  label_latest_revision_plural: Azken berrikuspenak
-  label_view_revisions: Berrikuspenak ikusi
-  label_view_all_revisions: Berrikuspen guztiak ikusi
-  label_max_size: Tamaina maximoa
-  label_sort_highest: Goraino mugitu
-  label_sort_higher: Gora mugitu
-  label_sort_lower: Behera mugitu
-  label_sort_lowest: Beheraino mugitu
-  label_roadmap: Ibilbide-mapa
-  label_roadmap_due_in: "Epea: %{value}"
-  label_roadmap_overdue: "%{value} berandu"
-  label_roadmap_no_issues: Ez dago zereginik bertsio honetan
-  label_search: Bilatu
-  label_result_plural: Emaitzak
-  label_all_words: hitz guztiak
-  label_wiki: Wikia
-  label_wiki_edit: Wiki edizioa
-  label_wiki_edit_plural: Wiki edizioak
-  label_wiki_page: Wiki orria
-  label_wiki_page_plural: Wiki orriak
-  label_index_by_title: Izenburuaren araberako indizea
-  label_index_by_date: Dataren araberako indizea
-  label_current_version: Uneko bertsioa
-  label_preview: Aurreikusi
-  label_feed_plural: Jarioak
-  label_changes_details: Aldaketa guztien xehetasunak
-  label_issue_tracking: Zeregin jarraipena
-  label_spent_time: Igarotako denbora
-  label_f_hour: "ordu %{value}"
-  label_f_hour_plural: "%{value} ordu"
-  label_time_tracking: Denbora jarraipena
-  label_change_plural: Aldaketak
-  label_statistics: Estatistikak
-  label_commits_per_month: Commit-ak hilabeteka
-  label_commits_per_author: Commit-ak egileka
-  label_view_diff: Ezberdintasunak ikusi
-  label_diff_inline: barnean
-  label_diff_side_by_side: aldez alde
-  label_options: Aukerak
-  label_copy_workflow_from: Kopiatu workflow-a hemendik
-  label_permissions_report: Baimenen txostena
-  label_watched_issues: Behatutako zereginak
-  label_related_issues: Erlazionatutako zereginak
-  label_applied_status: Aplikatutako egoera
-  label_loading: Kargatzen...
-  label_relation_new: Erlazio berria
-  label_relation_delete: Erlazioa ezabatu
-  label_relates_to: erlazionatuta dago
-  label_duplicates: bikoizten du
-  label_duplicated_by: honek bikoiztuta
-  label_blocks: blokeatzen du
-  label_blocked_by: honek blokeatuta
-  label_precedes: aurretik doa
-  label_follows: jarraitzen du
-  label_end_to_start: bukaeratik hasierara
-  label_end_to_end: bukaeratik bukaerara
-  label_start_to_start: hasieratik hasierhasieratik bukaerara
-  label_start_to_end: hasieratik bukaerara
-  label_stay_logged_in: Saioa mantendu
-  label_disabled: ezgaituta
-  label_show_completed_versions: Bukatutako bertsioak ikusi
-  label_me: ni
-  label_board: Foroa
-  label_board_new: Foro berria
-  label_board_plural: Foroak
-  label_topic_plural: Gaiak
-  label_message_plural: Mezuak
-  label_message_last: Azken mezua
-  label_message_new: Mezu berria
-  label_message_posted: Mesua gehituta
-  label_reply_plural: Erantzunak
-  label_send_information: Erabiltzaileai kontuaren informazioa bidali
-  label_year: Urtea
-  label_month: Hilabetea
-  label_week: Astea
-  label_date_from: Nork
-  label_date_to: Nori
-  label_language_based: Erabiltzailearen hizkuntzaren arabera
-  label_sort_by: "Ordenazioa: %{value}"
-  label_send_test_email: Frogako mezua bidali
-  label_feeds_access_key: RSS atzipen giltza
-  label_missing_feeds_access_key: RSS atzipen giltza falta da
-  label_feeds_access_key_created_on: "RSS atzipen giltza orain dela %{value} sortuta"
-  label_module_plural: Moduluak
-  label_added_time_by: "%{author}, orain dela %{age} gehituta"
-  label_updated_time_by: "%{author}, orain dela %{age} eguneratuta"
-  label_updated_time: "Orain dela %{value} eguneratuta"
-  label_jump_to_a_project: Joan proiektura...
-  label_file_plural: Fitxategiak
-  label_changeset_plural: Aldaketak
-  label_default_columns: Lehenetsitako zutabeak
-  label_no_change_option: (Aldaketarik ez)
-  label_bulk_edit_selected_issues: Hautatutako zereginak batera editatu
-  label_theme: Itxura
-  label_default: Lehenetsia
-  label_search_titles_only: Izenburuetan bakarrik bilatu
-  label_user_mail_option_all: "Nire proiektu guztietako gertakari guztientzat"
-  label_user_mail_option_selected: "Hautatutako proiektuetako edozein gertakarientzat..."
-  label_user_mail_no_self_notified: "Ez dut nik egiten ditudan aldeketen jakinarazpenik jaso nahi"
-  label_registration_activation_by_email: kontuak epostaz gaitu
-  label_registration_manual_activation: kontuak eskuz gaitu
-  label_registration_automatic_activation: kontuak automatikoki gaitu
-  label_display_per_page: "Orriko: %{value}"
-  label_age: Adina
-  label_change_properties: Propietateak aldatu
-  label_general: Orokorra
-  label_more: Gehiago
-  label_scm: IKK
-  label_plugins: Pluginak
-  label_ldap_authentication: LDAP autentikazioa
-  label_downloads_abbr: Desk.
-  label_optional_description: Aukerako deskribapena
-  label_add_another_file: Beste fitxategia gehitu
-  label_preferences: Hobespenak
-  label_chronological_order: Orden kronologikoan
-  label_reverse_chronological_order: Alderantzizko orden kronologikoan
-  label_planning: Planifikazioa
-  label_incoming_emails: Sarrerako epostak
-  label_generate_key: Giltza sortu
-  label_issue_watchers: Behatzaileak
-  label_example: Adibidea
-  label_display: Bistaratzea
-  label_sort: Ordenatu
-  label_ascending: Gorantz
-  label_descending: Beherantz
-  label_date_from_to: "%{start}-tik %{end}-ra"
-  label_wiki_content_added: Wiki orria gehituta
-  label_wiki_content_updated: Wiki orria eguneratuta
-  label_group: Taldea
-  label_group_plural: Taldeak
-  label_group_new: Talde berria
-  label_time_entry_plural: Igarotako denbora
-  label_version_sharing_none: Ez partekatuta
-  label_version_sharing_descendants: Azpiproiektuekin
-  label_version_sharing_hierarchy: Proiektu Hierarkiarekin
-  label_version_sharing_tree: Proiektu zuhaitzarekin
-  label_version_sharing_system: Proiektu guztiekin
-  label_update_issue_done_ratios: Zereginen burututako erlazioa eguneratu
-  label_copy_source: Iturburua
-  label_copy_target: Helburua
-  label_copy_same_as_target: Helburuaren berdina
-  label_display_used_statuses_only: Aztarnari honetan erabiltzen diren egoerak bakarrik erakutsi
-  label_api_access_key: API atzipen giltza
-  label_missing_api_access_key: API atzipen giltza falta da
-  label_api_access_key_created_on: "API atzipen giltza sortuta orain dela %{value}"
-  
-  button_login: Saioa hasi
-  button_submit: Bidali
-  button_save: Gorde
-  button_check_all: Guztiak markatu
-  button_uncheck_all: Guztiak desmarkatu
-  button_delete: Ezabatu
-  button_create: Sortu
-  button_create_and_continue: Sortu eta jarraitu
-  button_test: Frogatu
-  button_edit: Editatu
-  button_add: Gehitu
-  button_change: Aldatu
-  button_apply: Aplikatu
-  button_clear: Garbitu
-  button_lock: Blokeatu
-  button_unlock: Desblokeatu
-  button_download: Deskargatu
-  button_list: Zerrenda
-  button_view: Ikusi
-  button_move: Mugitu
-  button_move_and_follow: Mugitu eta jarraitu
-  button_back: Atzera
-  button_cancel: Ezeztatu
-  button_activate: Gahitu
-  button_sort: Ordenatu
-  button_log_time: Denbora erregistratu
-  button_rollback: Itzuli bertsio honetara
-  button_watch: Behatu
-  button_unwatch: Behatzen utzi
-  button_reply: Erantzun
-  button_archive: Artxibatu
-  button_unarchive: Desartxibatu
-  button_reset: Berrezarri
-  button_rename: Berrizendatu
-  button_change_password: Pasahitza aldatu
-  button_copy: Kopiatu
-  button_copy_and_follow: Kopiatu eta jarraitu
-  button_annotate: Anotatu
-  button_update: Eguneratu
-  button_configure: Konfiguratu
-  button_quote: Aipatu
-  button_duplicate: Bikoiztu
-  button_show: Ikusi
-  
-  status_active: gaituta
-  status_registered: izena emanda
-  status_locked: blokeatuta
-  
-  version_status_open: irekita
-  version_status_locked: blokeatuta
-  version_status_closed: itxita
-
-  field_active: Gaituta
-  
-  text_select_mail_notifications: Jakinarazpenak zein ekintzetarako bidaliko diren hautatu.
-  text_regexp_info: adib. ^[A-Z0-9]+$
-  text_min_max_length_info: 0k mugarik gabe esan nahi du
-  text_project_destroy_confirmation: Ziur zaude proiektu hau eta erlazionatutako datu guztiak ezabatu nahi dituzula?
-  text_subprojects_destroy_warning: "%{value} azpiproiektuak ere ezabatuko dira."
-  text_workflow_edit: Hautatu rola eta aztarnaria workflow-a editatzeko
-  text_are_you_sure: Ziur zaude?
-  text_journal_changed: "%{label} %{old}-(e)tik %{new}-(e)ra aldatuta"
-  text_journal_set_to: "%{label}-k %{value} balioa hartu du"
-  text_journal_deleted: "%{label} ezabatuta (%{old})"
-  text_journal_added: "%{label} %{value} gehituta"
-  text_tip_issue_begin_day: gaur hasten diren zereginak
-  text_tip_issue_end_day: gaur bukatzen diren zereginak
-  text_tip_issue_begin_end_day: gaur hasi eta bukatzen diren zereginak
-  text_project_identifier_info: 'Letra xeheak (a-z), zenbakiak eta marrak erabil daitezke bakarrik.<br />Gorde eta gero identifikadorea ezin da aldatu.'
-  text_caracters_maximum: "%{count} karaktere gehienez."
-  text_caracters_minimum: "Gutxienez %{count} karaktereetako luzerakoa izan behar du."
-  text_length_between: "Luzera %{min} eta %{max} karaktereen artekoa."
-  text_tracker_no_workflow: Ez da workflow-rik definitu aztarnari honentzako
-  text_unallowed_characters: Debekatutako karaktereak
-  text_comma_separated: Balio anitz izan daitezke (komaz banatuta).
-  text_line_separated: Balio anitz izan daitezke (balio bakoitza lerro batean).
-  text_issues_ref_in_commit_messages: Commit-en mezuetan zereginak erlazionatu eta konpontzen
-  text_issue_added: "%{id} zeregina %{author}-(e)k jakinarazi du."
-  text_issue_updated: "%{id} zeregina %{author}-(e)k eguneratu du."
-  text_wiki_destroy_confirmation: Ziur zaude wiki hau eta bere eduki guztiak ezabatu nahi dituzula?
-  text_issue_category_destroy_question: "Zeregin batzuk (%{count}) kategoria honetara esleituta daude. Zer egin nahi duzu?"
-  text_issue_category_destroy_assignments: Kategoria esleipenak kendu
-  text_issue_category_reassign_to: Zereginak kategoria honetara esleitu
-  text_user_mail_option: "Hautatu gabeko proiektuetan, behatzen edo parte hartzen duzun gauzei buruzko jakinarazpenak jasoko dituzu (adib. zu egile zaren edo esleituta dituzun zereginak)."
-  text_no_configuration_data: "Rolak, aztarnariak, zeregin egoerak eta workflow-ak ez dira oraindik konfiguratu.\nOso gomendagarria de lehenetsitako kkonfigurazioa kargatzea. Kargatu eta gero aldatu ahalko duzu."
-  text_load_default_configuration: Lehenetsitako konfigurazioa kargatu
-  text_status_changed_by_changeset: "%{value} aldaketan aplikatuta."
-  text_issues_destroy_confirmation: 'Ziur zaude hautatutako zeregina(k) ezabatu nahi dituzula?'
-  text_select_project_modules: 'Hautatu proiektu honetan gaitu behar diren moduluak:'
-  text_default_administrator_account_changed: Lehenetsitako kudeatzaile kontua aldatuta
-  text_file_repository_writable: Eranskinen direktorioan idatz daiteke
-  text_plugin_assets_writable: Pluginen baliabideen direktorioan idatz daiteke
-  text_rmagick_available: RMagick eskuragarri (aukerazkoa)
-  text_destroy_time_entries_question: "%{hours} orduei buruz berri eman zen zuk ezabatzera zoazen zereginean. Zer egin nahi duzu?"
-  text_destroy_time_entries: Ezabatu berri emandako orduak
-  text_assign_time_entries_to_project: Berri emandako orduak proiektura esleitu
-  text_reassign_time_entries: 'Berri emandako orduak zeregin honetara esleitu:'
-  text_user_wrote: "%{value}-(e)k idatzi zuen:"
-  text_enumeration_destroy_question: "%{count} objetu balio honetara esleituta daude."
-  text_enumeration_category_reassign_to: 'Beste balio honetara esleitu:'
-  text_email_delivery_not_configured: "Eposta bidalketa ez dago konfiguratuta eta jakinarazpenak ezgaituta daude.\nKonfiguratu zure SMTP zerbitzaria config/configuration.yml-n eta aplikazioa berrabiarazi hauek gaitzeko."
-  text_repository_usernames_mapping: "Hautatu edo eguneratu Redmineko erabiltzailea biltegiko egunkarietan topatzen diren erabiltzaile izenekin erlazionatzeko.\nRedmine-n eta biltegian erabiltzaile izen edo eposta berdina duten erabiltzaileak automatikoki erlazionatzen dira."
-  text_diff_truncated: '... Diff hau moztua izan da erakus daitekeen tamaina maximoa gainditu duelako.'
-  text_custom_field_possible_values_info: 'Lerro bat balio bakoitzeko'
-  text_wiki_page_destroy_question: "Orri honek %{descendants} orri seme eta ondorengo ditu. Zer egin nahi duzu?"
-  text_wiki_page_nullify_children: "Orri semeak erro orri moduan mantendu"
-  text_wiki_page_destroy_children: "Orri semeak eta beraien ondorengo guztiak ezabatu"
-  text_wiki_page_reassign_children: "Orri semeak orri guraso honetara esleitu"
-  text_own_membership_delete_confirmation: "Zure baimen batzuk (edo guztiak) kentzera zoaz eta baliteke horren ondoren proiektu hau ezin editatzea.\n Ziur zaude jarraitu nahi duzula?"
-  
-  default_role_manager: Kudeatzailea
-  default_role_developer: Garatzailea
-  default_role_reporter: Berriemailea
-  default_tracker_bug: Errorea
-  default_tracker_feature: Eginbidea
-  default_tracker_support: Laguntza
-  default_issue_status_new: Berria
-  default_issue_status_in_progress: Lanean
-  default_issue_status_resolved: Ebatzita
-  default_issue_status_feedback: Berrelikadura
-  default_issue_status_closed: Itxita
-  default_issue_status_rejected: Baztertua
-  default_doc_category_user: Erabiltzaile dokumentazioa
-  default_doc_category_tech: Dokumentazio teknikoa
-  default_priority_low: Baxua
-  default_priority_normal: Normala
-  default_priority_high: Altua
-  default_priority_urgent: Larria
-  default_priority_immediate: Berehalakoa
-  default_activity_design: Diseinua
-  default_activity_development: Garapena
-  
-  enumeration_issue_priorities: Zeregin lehentasunak
-  enumeration_doc_categories: Dokumentu kategoriak
-  enumeration_activities: Jarduerak (denbora kontrola))
-  enumeration_system_activity: Sistemako Jarduera
-  label_board_sticky: Itsaskorra
-  label_board_locked: Blokeatuta
-  permission_export_wiki_pages: Wiki orriak esportatu
-  setting_cache_formatted_text: Formatudun testua katxeatu
-  permission_manage_project_activities: Proiektuaren jarduerak kudeatu
-  error_unable_delete_issue_status: Ezine da zereginaren egoera ezabatu
-  label_profile: Profila
-  permission_manage_subtasks: Azpiatazak kudeatu
-  field_parent_issue: Zeregin gurasoa
-  label_subtask_plural: Azpiatazak
-  label_project_copy_notifications: Proiektua kopiatzen den bitartean eposta jakinarazpenak bidali
-  error_can_not_delete_custom_field: Ezin da eremu pertsonalizatua ezabatu
-  error_unable_to_connect: Ezin da konektatu (%{value})
-  error_can_not_remove_role: Rol hau erabiltzen hari da eta ezin da ezabatu.
-  error_can_not_delete_tracker: Aztarnari honek zereginak ditu eta ezin da ezabatu.
-  field_principal: Ekintzaile
-  label_my_page_block: "Nire orriko blokea"
-  notice_failed_to_save_members: "Kidea(k) gordetzean errorea: %{errors}."
-  text_zoom_out: Zooma txikiagotu
-  text_zoom_in: Zooma handiagotu
-  notice_unable_delete_time_entry: "Ezin da hautatutako denbora erregistroa ezabatu."
-  label_overall_spent_time: Igarotako denbora guztira
-  field_time_entries: "Denbora erregistratu"
-  project_module_gantt: Gantt
-  project_module_calendar: Egutegia
-  button_edit_associated_wikipage: "Esleitutako wiki orria editatu: %{page_title}"
-  text_are_you_sure_with_children: "Zeregina eta azpi zeregin guztiak ezabatu?"
-  field_text: Testu eremua
-  label_user_mail_option_only_owner: "Jabea naizen gauzetarako barrarik"
-  setting_default_notification_option: "Lehenetsitako ohartarazpen aukera"
-  label_user_mail_option_only_my_events: "Behatzen ditudan edo partaide naizen gauzetarako bakarrik"
-  label_user_mail_option_only_assigned: "Niri esleitutako gauzentzat bakarrik"
-  label_user_mail_option_none: "Gertakaririk ez"
-  field_member_of_group: "Esleituta duenaren taldea"
-  field_assigned_to_role: "Esleituta duenaren rola"
-  notice_not_authorized_archived_project: "Atzitu nahi duzun proiektua artxibatua izan da."
-  label_principal_search: "Bilatu erabiltzaile edo taldea:"
-  label_user_search: "Erabiltzailea bilatu:"
-  field_visible: Ikusgai
-  setting_emails_header: "Eposten goiburua"
-  setting_commit_logtime_activity_id: "Erregistratutako denboraren jarduera"
-  text_time_logged_by_changeset: "%{value} aldaketan egindakoa."
-  setting_commit_logtime_enabled: "Erregistrutako denbora gaitu"
-  notice_gantt_chart_truncated: Grafikoa moztu da bistara daitekeen elementuen kopuru maximoa gainditu delako (%{max})
-  setting_gantt_items_limit: "Gantt grafikoan bistara daitekeen elementu kopuru maximoa"
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+# Redmine EU language
+# Author: Ales Zabala Alava (Shagi), <shagi@gisa-elkartea.org>
+# 2010-01-25
+# Distributed under the same terms as the Redmine itself.
+eu:
+  direction: ltr
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%Y/%m/%d"
+      short: "%b %d"
+      long: "%Y %B %d"
+      
+    day_names: [Igandea, Astelehena, Asteartea, Asteazkena, Osteguna, Ostirala, Larunbata]
+    abbr_day_names: [Ig., Al., Ar., Az., Og., Or., La.]
+      
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, Urtarrila, Otsaila, Martxoa, Apirila, Maiatza, Ekaina, Uztaila, Abuztua, Iraila, Urria, Azaroa, Abendua]
+    abbr_month_names: [~, Urt, Ots, Mar, Api, Mai, Eka, Uzt, Abu, Ira, Urr, Aza, Abe]
+    # Used in date_select and datime_select.
+    order:
+      - :year
+      - :month
+      - :day
+
+  time:
+    formats:
+      default: "%Y/%m/%d %H:%M"
+      time: "%H:%M"
+      short: "%b %d %H:%M"
+      long: "%Y %B %d %H:%M"
+    am: "am"
+    pm: "pm"
+      
+  datetime:
+    distance_in_words:
+      half_a_minute: "minutu erdi"
+      less_than_x_seconds:
+        one:   "segundu bat baino gutxiago"
+        other: "%{count} segundu baino gutxiago"
+      x_seconds:
+        one:   "segundu 1"
+        other: "%{count} segundu"
+      less_than_x_minutes:
+        one:   "minutu bat baino gutxiago"
+        other: "%{count} minutu baino gutxiago"
+      x_minutes:
+        one:   "minutu 1"
+        other: "%{count} minutu"
+      about_x_hours:
+        one:   "ordu 1 inguru"
+        other: "%{count} ordu inguru"
+      x_days:
+        one:   "egun 1"
+        other: "%{count} egun"
+      about_x_months:
+        one:   "hilabete 1 inguru"
+        other: "%{count} hilabete inguru"
+      x_months:
+        one:   "hilabete 1"
+        other: "%{count} hilabete"
+      about_x_years:
+        one:   "urte 1 inguru"
+        other: "%{count} urte inguru"
+      over_x_years:
+        one:   "urte 1 baino gehiago"
+        other: "%{count} urte baino gehiago"
+      almost_x_years:
+        one:   "ia urte 1"
+        other: "ia %{count} urte"
+
+  number:
+    format:
+      separator: "."
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Byte"
+            other: "Byte"
+          kb: "KB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+        
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "eta"
+      skip_last_comma: false
+      
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "Errore batek %{model} hau godetzea galarazi du."
+          other:  "%{count} errorek %{model} hau gordetzea galarazi dute."
+      messages:
+        inclusion: "ez dago zerrendan"
+        exclusion: "erreserbatuta dago"
+        invalid: "baliogabea da"
+        confirmation: "ez du berrespenarekin bat egiten"
+        accepted: "onartu behar da"
+        empty: "ezin da hutsik egon"
+        blank: "ezin da hutsik egon"
+        too_long: "luzeegia da (maximoa %{count} karaktere dira)"
+        too_short: "laburregia da (minimoa %{count} karaktere dira)"
+        wrong_length: "luzera ezegokia da (%{count} karakter izan beharko litzake)"
+        taken: "dagoeneko hartuta dago"
+        not_a_number: "ez da zenbaki bat"
+        not_a_date: "ez da baliozko data"
+        greater_than: "%{count} baino handiagoa izan behar du"
+        greater_than_or_equal_to: "%{count} edo handiagoa izan behar du"
+        equal_to: "%{count} izan behar du"
+        less_than: "%{count} baino gutxiago izan behar du"
+        less_than_or_equal_to: "%{count} edo gutxiago izan behar du"
+        odd: "bakoitia izan behar du"
+        even: "bikoitia izan behar du"
+        greater_than_start_date: "hasiera data baino handiagoa izan behar du"
+        not_same_project: "ez dago proiektu berdinean"
+        circular_dependency: "Erlazio honek mendekotasun zirkular bat sortuko luke"
+        cant_link_an_issue_with_a_descendant: "Zeregin bat ezin da bere azpiataza batekin estekatu."
+
+  actionview_instancetag_blank_option: Hautatu mesedez
+  
+  general_text_No: 'Ez'
+  general_text_Yes: 'Bai'
+  general_text_no: 'ez'
+  general_text_yes: 'bai'
+  general_lang_name: 'Euskara'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '1'
+  
+  notice_account_updated: Kontua ongi eguneratu da.
+  notice_account_invalid_creditentials: Erabiltzaile edo pasahitz ezegokia
+  notice_account_password_updated: Pasahitza ongi eguneratu da.
+  notice_account_wrong_password: Pasahitz ezegokia.
+  notice_account_register_done: Kontua ongi sortu da. Kontua gaitzeko klikatu epostan adierazi zaizun estekan.
+  notice_account_unknown_email: Erabiltzaile ezezaguna.
+  notice_can_t_change_password: Kontu honek kanpoko autentikazio bat erabiltzen du. Ezinezkoa da pasahitza aldatzea.
+  notice_account_lost_email_sent: Pasahitz berria aukeratzeko jarraibideak dituen eposta bat bidali zaizu.
+  notice_account_activated: Zure kontua gaituta dago. Orain saioa has dezakezu
+  notice_successful_create: Sortze arrakastatsua.
+  notice_successful_update: Eguneratze arrakastatsua.
+  notice_successful_delete: Ezabaketa arrakastatsua.
+  notice_successful_connection: Konexio arrakastatsua.
+  notice_file_not_found: Atzitu nahi duzun orria ez da exisitzen edo ezabatua izan da.
+  notice_locking_conflict: Beste erabiltzaile batek datuak eguneratu ditu.
+  notice_not_authorized: Ez duzu orri hau atzitzeko baimenik.
+  notice_email_sent: "%{value} helbidera eposta bat bidali da"
+  notice_email_error: "Errorea eposta bidaltzean (%{value})"
+  notice_feeds_access_key_reseted: Zure RSS atzipen giltza berrezarri da.
+  notice_api_access_key_reseted: Zure API atzipen giltza berrezarri da.
+  notice_failed_to_save_issues: "Hautatutako %{total} zereginetatik %{count} ezin izan dira konpondu: %{ids}."
+  notice_no_issue_selected: "Ez da zereginik hautatu! Mesedez, editatu nahi dituzun arazoak markatu."
+  notice_account_pending: "Zure kontua sortu da, orain kudeatzailearen onarpenaren zain dago."
+  notice_default_data_loaded: Lehenetsitako konfigurazioa ongi kargatu da.
+  notice_unable_delete_version: Ezin da bertsioa ezabatu.
+  notice_issue_done_ratios_updated: Burututako zereginen erlazioa eguneratu da.
+  
+  error_can_t_load_default_data: "Ezin izan da lehenetsitako konfigurazioa kargatu: %{value}"
+  error_scm_not_found: "Sarrera edo berrikuspena ez da biltegian topatu."
+  error_scm_command_failed: "Errorea gertatu da biltegia atzitzean: %{value}"
+  error_scm_annotate: "Sarrera ez da existitzen edo ezin da anotatu."
+  error_issue_not_found_in_project: 'Zeregina ez da topatu edo ez da proiektu honetakoa'
+  error_no_tracker_in_project: 'Proiektu honek ez du aztarnaririk esleituta. Mesedez egiaztatu Proiektuaren ezarpenak.'
+  error_no_default_issue_status: 'Zereginek ez dute lehenetsitako egoerarik.  Mesedez egiaztatu zure konfigurazioa ("Kudeaketa -> Arazoen egoerak" atalera joan).'
+  error_can_not_reopen_issue_on_closed_version: 'Itxitako bertsio batera esleitutako zereginak ezin dira berrireki'
+  error_can_not_archive_project: Proiektu hau ezin da artxibatu
+  error_issue_done_ratios_not_updated: "Burututako zereginen erlazioa ez da eguneratu."
+  error_workflow_copy_source: 'Mesedez hautatu iturburuko aztarnari edo rola'
+  error_workflow_copy_target: 'Mesedez hautatu helburuko aztarnari(ak) edo rola(k)'
+  
+  warning_attachments_not_saved: "%{count} fitxategi ezin izan d(ir)a gorde."
+  
+  mail_subject_lost_password: "Zure %{value} pasahitza"
+  mail_body_lost_password: 'Zure pasahitza aldatzeko hurrengo estekan klikatu:'
+  mail_subject_register: "Zure %{value} kontuaren gaitzea"
+  mail_body_register: 'Zure kontua gaitzeko hurrengo estekan klikatu:'
+  mail_body_account_information_external: "Zure %{value} kontua erabil dezakezu saioa hasteko."
+  mail_body_account_information: Zure kontuaren informazioa
+  mail_subject_account_activation_request: "%{value} kontu gaitzeko eskaera"
+  mail_body_account_activation_request: "Erabiltzaile berri bat (%{value}) erregistratu da. Kontua zure onarpenaren zain dago:"
+  mail_subject_reminder: "%{count} arazo hurrengo %{days} egunetan amaitzen d(ir)a"
+  mail_body_reminder: "Zuri esleituta dauden %{count} arazo hurrengo %{days} egunetan amaitzen d(ir)a:"
+  mail_subject_wiki_content_added: "'%{id}' wiki orria gehitu da"
+  mail_body_wiki_content_added: "%{author}-(e)k '%{id}' wiki orria gehitu du."
+  mail_subject_wiki_content_updated: "'%{id}' wiki orria eguneratu da"
+  mail_body_wiki_content_updated: "%{author}-(e)k '%{id}' wiki orria eguneratu du."
+  
+  gui_validation_error: akats 1
+  gui_validation_error_plural: "%{count} akats"
+  
+  field_name: Izena
+  field_description: Deskribapena
+  field_summary: Laburpena
+  field_is_required: Beharrezkoa
+  field_firstname: Izena
+  field_lastname: Abizenak
+  field_mail: Eposta
+  field_filename: Fitxategia
+  field_filesize: Tamaina
+  field_downloads: Deskargak
+  field_author: Egilea
+  field_created_on: Sortuta
+  field_updated_on: Eguneratuta
+  field_field_format: Formatua
+  field_is_for_all: Proiektu guztietarako
+  field_possible_values: Balio posibleak
+  field_regexp: Expresio erregularra
+  field_min_length: Luzera minimoa
+  field_max_length: Luzera maxioma
+  field_value: Balioa
+  field_category: Kategoria
+  field_title: Izenburua
+  field_project: Proiektua
+  field_issue: Zeregina
+  field_status: Egoera
+  field_notes: Oharrak
+  field_is_closed: Itxitako arazoa
+  field_is_default: Lehenetsitako balioa
+  field_tracker: Aztarnaria
+  field_subject: Gaia
+  field_due_date: Amaiera data
+  field_assigned_to: Esleituta
+  field_priority: Lehentasuna
+  field_fixed_version: Helburuko bertsioa
+  field_user: Erabiltzilea
+  field_role: Rola
+  field_homepage: Orri nagusia
+  field_is_public: Publikoa
+  field_parent: "Honen azpiproiektua:"
+  field_is_in_chlog: Zereginak aldaketa egunkarian ikusten dira
+  field_is_in_roadmap: Arazoak ibilbide-mapan erakutsi
+  field_login: Erabiltzaile izena
+  field_mail_notification: Eposta jakinarazpenak
+  field_admin: Kudeatzailea
+  field_last_login_on: Azken konexioa
+  field_language: Hizkuntza
+  field_effective_date: Data
+  field_password: Pasahitza
+  field_new_password: Pasahitz berria
+  field_password_confirmation: Berrespena
+  field_version: Bertsioa
+  field_type: Mota
+  field_host: Ostalaria
+  field_port: Portua
+  field_account: Kontua
+  field_base_dn: Base DN
+  field_attr_login: Erabiltzaile atributua
+  field_attr_firstname: Izena atributua
+  field_attr_lastname: Abizenak atributua
+  field_attr_mail: Eposta atributua
+  field_onthefly: Zuzeneko erabiltzaile sorrera
+  field_start_date: Hasiera
+  field_done_ratio: Egindako %
+  field_auth_source: Autentikazio modua
+  field_hide_mail: Nire eposta helbidea ezkutatu
+  field_comments: Iruzkina
+  field_url: URL
+  field_start_page: Hasierako orria
+  field_subproject: Azpiproiektua
+  field_hours: Ordu
+  field_activity: Jarduera
+  field_spent_on: Data
+  field_identifier: Identifikatzailea
+  field_is_filter: Iragazki moduan erabilita
+  field_issue_to: Erlazionatutako zereginak
+  field_delay: Atzerapena
+  field_assignable: Arazoak rol honetara esleitu daitezke
+  field_redirect_existing_links: Existitzen diren estekak berbideratu
+  field_estimated_hours: Estimatutako denbora
+  field_column_names: Zutabeak
+  field_time_zone: Ordu zonaldea
+  field_searchable: Bilagarria
+  field_default_value: Lehenetsitako balioa
+  field_comments_sorting: Iruzkinak erakutsi
+  field_parent_title: Orri gurasoa
+  field_editable: Editagarria
+  field_watcher: Behatzailea
+  field_identity_url: OpenID URLa
+  field_content: Edukia
+  field_group_by: Emaitzak honegatik taldekatu
+  field_sharing: Partekatzea
+
+  setting_app_title: Aplikazioaren izenburua
+  setting_app_subtitle: Aplikazioaren azpizenburua
+  setting_welcome_text: Ongietorriko testua
+  setting_default_language: Lehenetsitako hizkuntza
+  setting_login_required: Autentikazioa derrigorrezkoa
+  setting_self_registration: Norberak erregistratu
+  setting_attachment_max_size: Eranskinen tamaina max.
+  setting_issues_export_limit: Zereginen esportatze limitea
+  setting_mail_from: Igorlearen eposta helbidea
+  setting_bcc_recipients: Hartzaileak ezkutuko kopian (bcc)
+  setting_plain_text_mail: Testu soileko epostak (HTML-rik ez)
+  setting_host_name: Ostalari izena eta bidea
+  setting_text_formatting: Testu formatua
+  setting_wiki_compression: Wikiaren historia konprimitu
+  setting_feeds_limit: Jarioaren edukiera limitea
+  setting_default_projects_public: Proiektu berriak defektuz publikoak dira
+  setting_autofetch_changesets: Commit-ak automatikoki hartu
+  setting_sys_api_enabled: Biltegien kudeaketarako WS gaitu
+  setting_commit_ref_keywords: Erreferentzien gako-hitzak
+  setting_commit_fix_keywords: Konpontze gako-hitzak
+  setting_autologin: Saioa automatikoki hasi
+  setting_date_format: Data formatua
+  setting_time_format: Ordu formatua
+  setting_cross_project_issue_relations: Zereginak proiektuen artean erlazionatzea baimendu
+  setting_issue_list_default_columns: Zereginen zerrendan defektuz ikusten diren zutabeak
+  setting_repositories_encodings: Biltegien kodeketak
+  setting_emails_footer: Eposten oina
+  setting_protocol: Protokoloa
+  setting_per_page_options: Orriko objektuen aukerak
+  setting_user_format: Erabiltzaileak erakusteko formatua
+  setting_activity_days_default: Proiektuen jardueran erakusteko egunak
+  setting_display_subprojects_issues: Azpiproiektuen zereginak proiektu nagusian erakutsi defektuz
+  setting_enabled_scm: Gaitutako IKKak
+  setting_mail_handler_body_delimiters: "Lerro hauteko baten ondoren epostak moztu"
+  setting_mail_handler_api_enabled: Sarrerako epostentzako WS gaitu
+  setting_mail_handler_api_key: API giltza
+  setting_sequential_project_identifiers: Proiektuen identifikadore sekuentzialak sortu
+  setting_gravatar_enabled: Erabili Gravatar erabiltzaile ikonoak
+  setting_gravatar_default: Lehenetsitako Gravatar irudia
+  setting_diff_max_lines_displayed: Erakutsiko diren diff lerro kopuru maximoa
+  setting_file_max_size_displayed: Barnean erakuzten diren testu fitxategien tamaina maximoa
+  setting_repository_log_display_limit: Egunkari fitxategian erakutsiko diren berrikuspen kopuru maximoa.
+  setting_openid: Baimendu OpenID saio hasiera eta erregistatzea
+  setting_password_min_length: Pasahitzen luzera minimoa
+  setting_new_project_user_role_id: Proiektu berriak sortzerakoan kudeatzaile ez diren erabiltzaileei esleitutako rola
+  setting_default_projects_modules: Proiektu berrientzako defektuz gaitutako moduluak
+  setting_issue_done_ratio: "Zereginen burututako tasa kalkulatzean erabili:"
+  setting_issue_done_ratio_issue_field: Zeregin eremua erabili
+  setting_issue_done_ratio_issue_status: Zeregin egoera erabili
+  setting_start_of_week: "Egutegiak noiz hasi:"
+  setting_rest_api_enabled: Gaitu REST web zerbitzua
+  
+  permission_add_project: Proiektua sortu
+  permission_add_subprojects: Azpiproiektuak sortu
+  permission_edit_project: Proiektua editatu
+  permission_select_project_modules: Proiektuaren moduluak hautatu
+  permission_manage_members: Kideak kudeatu
+  permission_manage_versions: Bertsioak kudeatu
+  permission_manage_categories: Arazoen kategoriak kudeatu
+  permission_view_issues: Zereginak ikusi
+  permission_add_issues: Zereginak gehitu
+  permission_edit_issues: Zereginak aldatu
+  permission_manage_issue_relations: Zereginen erlazioak kudeatu
+  permission_add_issue_notes: Oharrak gehitu
+  permission_edit_issue_notes: Oharrak aldatu
+  permission_edit_own_issue_notes: Nork bere oharrak aldatu
+  permission_move_issues: Zereginak mugitu
+  permission_delete_issues: Zereginak ezabatu
+  permission_manage_public_queries: Galdera publikoak kudeatu
+  permission_save_queries: Galderak gorde
+  permission_view_gantt: Gantt grafikoa ikusi
+  permission_view_calendar: Egutegia ikusi
+  permission_view_issue_watchers: Behatzaileen zerrenda ikusi
+  permission_add_issue_watchers: Behatzaileak gehitu
+  permission_delete_issue_watchers: Behatzaileak ezabatu
+  permission_log_time: Igarotako denbora erregistratu
+  permission_view_time_entries: Igarotako denbora ikusi
+  permission_edit_time_entries: Denbora egunkariak editatu
+  permission_edit_own_time_entries: Nork bere denbora egunkariak editatu
+  permission_manage_news: Berriak kudeatu
+  permission_comment_news: Berrien iruzkinak egin
+  permission_manage_documents: Dokumentuak kudeatu
+  permission_view_documents: Dokumentuak ikusi
+  permission_manage_files: Fitxategiak kudeatu
+  permission_view_files: Fitxategiak ikusi
+  permission_manage_wiki: Wikia kudeatu
+  permission_rename_wiki_pages: Wiki orriak berrizendatu
+  permission_delete_wiki_pages: Wiki orriak ezabatu
+  permission_view_wiki_pages: Wikia ikusi
+  permission_view_wiki_edits: Wikiaren historia ikusi
+  permission_edit_wiki_pages: Wiki orriak editatu
+  permission_delete_wiki_pages_attachments: Eranskinak ezabatu
+  permission_protect_wiki_pages: Wiki orriak babestu
+  permission_manage_repository: Biltegiak kudeatu
+  permission_browse_repository: Biltegia arakatu
+  permission_view_changesets: Aldaketak ikusi
+  permission_commit_access: Commit atzipena
+  permission_manage_boards: Foroak kudeatu
+  permission_view_messages: Mezuak ikusi
+  permission_add_messages: Mezuak bidali
+  permission_edit_messages: Mezuak aldatu
+  permission_edit_own_messages: Nork bere mezuak aldatu
+  permission_delete_messages: Mezuak ezabatu
+  permission_delete_own_messages: Nork bere mezuak ezabatu
+  
+  project_module_issue_tracking: Zereginen jarraipena
+  project_module_time_tracking: Denbora jarraipena
+  project_module_news: Berriak
+  project_module_documents: Dokumentuak
+  project_module_files: Fitxategiak
+  project_module_wiki: Wiki
+  project_module_repository: Biltegia
+  project_module_boards: Foroak
+  
+  label_user: Erabiltzailea
+  label_user_plural: Erabiltzaileak
+  label_user_new: Erabiltzaile berria
+  label_user_anonymous: Ezezaguna
+  label_project: Proiektua
+  label_project_new: Proiektu berria
+  label_project_plural: Proiektuak
+  label_x_projects:
+    zero:  proiekturik ez
+    one:   proiektu bat
+    other: "%{count} proiektu"
+  label_project_all: Proiektu guztiak
+  label_project_latest: Azken proiektuak
+  label_issue: Zeregina
+  label_issue_new: Zeregin berria
+  label_issue_plural: Zereginak
+  label_issue_view_all: Zeregin guztiak ikusi
+  label_issues_by: "Zereginak honengatik: %{value}"
+  label_issue_added: Zeregina gehituta
+  label_issue_updated: Zeregina eguneratuta
+  label_document: Dokumentua
+  label_document_new: Dokumentu berria
+  label_document_plural: Dokumentuak
+  label_document_added: Dokumentua gehituta
+  label_role: Rola
+  label_role_plural: Rolak
+  label_role_new: Rol berria
+  label_role_and_permissions: Rolak eta baimenak
+  label_member: Kidea
+  label_member_new: Kide berria
+  label_member_plural: Kideak
+  label_tracker: Aztarnaria
+  label_tracker_plural: Aztarnariak
+  label_tracker_new: Aztarnari berria
+  label_workflow: Lan-fluxua
+  label_issue_status: Zeregin egoera
+  label_issue_status_plural: Zeregin egoerak
+  label_issue_status_new: Egoera berria
+  label_issue_category: Zeregin kategoria
+  label_issue_category_plural: Zeregin kategoriak
+  label_issue_category_new: Kategoria berria
+  label_custom_field: Eremu pertsonalizatua
+  label_custom_field_plural: Eremu pertsonalizatuak
+  label_custom_field_new: Eremu pertsonalizatu berria
+  label_enumerations: Enumerazioak
+  label_enumeration_new: Balio berria
+  label_information: Informazioa
+  label_information_plural: Informazioa
+  label_please_login: Saioa hasi mesedez
+  label_register: Erregistratu
+  label_login_with_open_id_option: edo OpenID-rekin saioa hasi
+  label_password_lost: Pasahitza galduta
+  label_home: Hasiera
+  label_home_heading: Hasiera
+  label_my_page: Nire orria
+  label_my_account: Nire kontua
+  label_my_projects: Nire proiektuak
+  label_administration: Kudeaketa
+  label_login: Saioa hasi
+  label_logout: Saioa bukatu
+  label_help: Laguntza
+  label_reported_issues: Berri emandako zereginak
+  label_assigned_to_me_issues: Niri esleitutako arazoak
+  label_last_login: Azken konexioa
+  label_registered_on: Noiz erregistratuta
+  label_activity: Jarduerak
+  label_overall_activity: Jarduera guztiak
+  label_user_activity: "%{value}-(r)en jarduerak"
+  label_new: Berria
+  label_logged_as: "Sartutako erabiltzailea:"
+  label_environment: Ingurune
+  label_authentication: Autentikazioa
+  label_auth_source: Autentikazio modua
+  label_auth_source_new: Autentikazio modu berria
+  label_auth_source_plural: Autentikazio moduak
+  label_subproject_plural: Azpiproiektuak
+  label_subproject_new: Azpiproiektu berria
+  label_and_its_subprojects: "%{value} eta bere azpiproiektuak"
+  label_min_max_length: Luzera min - max
+  label_list: Zerrenda
+  label_date: Data
+  label_integer: Osokoa
+  label_float: Koma higikorrekoa
+  label_boolean: Boolearra
+  label_string: Testua
+  label_text: Testu luzea
+  label_attribute: Atributua
+  label_attribute_plural: Atributuak
+  label_download: "Deskarga %{count}"
+  label_download_plural: "%{count} Deskarga"
+  label_no_data: Ez dago erakusteko daturik
+  label_change_status: Egoera aldatu
+  label_history: Historikoa
+  label_attachment: Fitxategia
+  label_attachment_new: Fitxategi berria
+  label_attachment_delete: Fitxategia ezabatu
+  label_attachment_plural: Fitxategiak
+  label_file_added: Fitxategia gehituta
+  label_report: Berri ematea
+  label_report_plural: Berri emateak
+  label_news: Berria
+  label_news_new: Berria gehitu
+  label_news_plural: Berriak
+  label_news_latest: Azken berriak
+  label_news_view_all: Berri guztiak ikusi
+  label_news_added: Berria gehituta
+  label_change_log: Aldaketa egunkaria
+  label_settings: Ezarpenak
+  label_overview: Gainbegirada
+  label_version: Bertsioa
+  label_version_new: Bertsio berria
+  label_version_plural: Bertsioak
+  label_close_versions: Burututako bertsioak itxi
+  label_confirmation: Baieztapena
+  label_export_to: 'Eskuragarri baita:'
+  label_read: Irakurri...
+  label_public_projects: Proiektu publikoak
+  label_open_issues: irekita
+  label_open_issues_plural: irekiak
+  label_closed_issues: itxita
+  label_closed_issues_plural: itxiak
+  label_x_open_issues_abbr_on_total:
+    zero:  0 irekita / %{total}
+    one:   1 irekita / %{total}
+    other: "%{count} irekiak / %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 irekita
+    one:   1 irekita
+    other: "%{count} irekiak"
+  label_x_closed_issues_abbr:
+    zero:  0 itxita
+    one:   1 itxita
+    other: "%{count} itxiak"
+  label_total: Guztira
+  label_permissions: Baimenak
+  label_current_status: Uneko egoera
+  label_new_statuses_allowed: Baimendutako egoera berriak
+  label_all: guztiak
+  label_none: ezer
+  label_nobody: inor
+  label_next: Hurrengoa
+  label_previous: Aurrekoak
+  label_used_by: Erabilita
+  label_details: Xehetasunak
+  label_add_note: Oharra gehitu
+  label_per_page: Orriko
+  label_calendar: Egutegia
+  label_months_from: hilabete noiztik
+  label_gantt: Gantt
+  label_internal: Barnekoa
+  label_last_changes: "azken %{count} aldaketak"
+  label_change_view_all: Aldaketa guztiak ikusi
+  label_personalize_page: Orri hau pertsonalizatu
+  label_comment: Iruzkin
+  label_comment_plural: Iruzkinak
+  label_x_comments:
+    zero: iruzkinik ez
+    one: iruzkin 1
+    other: "%{count} iruzkin"
+  label_comment_add: Iruzkina gehitu
+  label_comment_added: Iruzkina gehituta
+  label_comment_delete: Iruzkinak ezabatu
+  label_query: Galdera pertsonalizatua
+  label_query_plural: Pertsonalizatutako galderak
+  label_query_new: Galdera berria
+  label_filter_add: Iragazkia gehitu
+  label_filter_plural: Iragazkiak
+  label_equals: da
+  label_not_equals: ez da
+  label_in_less_than: baino gutxiagotan
+  label_in_more_than: baino gehiagotan
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: hauetan
+  label_today: gaur
+  label_all_time: denbora guztia
+  label_yesterday: atzo
+  label_this_week: aste honetan
+  label_last_week: pasadan astean
+  label_last_n_days: "azken %{count} egunetan"
+  label_this_month: hilabete hau
+  label_last_month: pasadan hilabetea
+  label_this_year: urte hau
+  label_date_range: Data tartea
+  label_less_than_ago: egun hauek baino gutxiago
+  label_more_than_ago: egun hauek baino gehiago
+  label_ago: orain dela
+  label_contains: dauka
+  label_not_contains: ez dauka
+  label_day_plural: egun
+  label_repository: Biltegia
+  label_repository_plural: Biltegiak
+  label_browse: Arakatu
+  label_modification: "aldaketa %{count}"
+  label_modification_plural: "%{count} aldaketa"
+  label_branch: Adarra
+  label_tag: Etiketa 
+  label_revision: Berrikuspena
+  label_revision_plural: Berrikuspenak
+  label_revision_id: "%{value} berrikuspen"
+  label_associated_revisions: Elkartutako berrikuspenak
+  label_added: gehituta
+  label_modified: aldatuta
+  label_copied: kopiatuta
+  label_renamed: berrizendatuta
+  label_deleted: ezabatuta
+  label_latest_revision: Azken berrikuspena
+  label_latest_revision_plural: Azken berrikuspenak
+  label_view_revisions: Berrikuspenak ikusi
+  label_view_all_revisions: Berrikuspen guztiak ikusi
+  label_max_size: Tamaina maximoa
+  label_sort_highest: Goraino mugitu
+  label_sort_higher: Gora mugitu
+  label_sort_lower: Behera mugitu
+  label_sort_lowest: Beheraino mugitu
+  label_roadmap: Ibilbide-mapa
+  label_roadmap_due_in: "Epea: %{value}"
+  label_roadmap_overdue: "%{value} berandu"
+  label_roadmap_no_issues: Ez dago zereginik bertsio honetan
+  label_search: Bilatu
+  label_result_plural: Emaitzak
+  label_all_words: hitz guztiak
+  label_wiki: Wikia
+  label_wiki_edit: Wiki edizioa
+  label_wiki_edit_plural: Wiki edizioak
+  label_wiki_page: Wiki orria
+  label_wiki_page_plural: Wiki orriak
+  label_index_by_title: Izenburuaren araberako indizea
+  label_index_by_date: Dataren araberako indizea
+  label_current_version: Uneko bertsioa
+  label_preview: Aurreikusi
+  label_feed_plural: Jarioak
+  label_changes_details: Aldaketa guztien xehetasunak
+  label_issue_tracking: Zeregin jarraipena
+  label_spent_time: Igarotako denbora
+  label_f_hour: "ordu %{value}"
+  label_f_hour_plural: "%{value} ordu"
+  label_time_tracking: Denbora jarraipena
+  label_change_plural: Aldaketak
+  label_statistics: Estatistikak
+  label_commits_per_month: Commit-ak hilabeteka
+  label_commits_per_author: Commit-ak egileka
+  label_view_diff: Ezberdintasunak ikusi
+  label_diff_inline: barnean
+  label_diff_side_by_side: aldez alde
+  label_options: Aukerak
+  label_copy_workflow_from: Kopiatu workflow-a hemendik
+  label_permissions_report: Baimenen txostena
+  label_watched_issues: Behatutako zereginak
+  label_related_issues: Erlazionatutako zereginak
+  label_applied_status: Aplikatutako egoera
+  label_loading: Kargatzen...
+  label_relation_new: Erlazio berria
+  label_relation_delete: Erlazioa ezabatu
+  label_relates_to: erlazionatuta dago
+  label_duplicates: bikoizten du
+  label_duplicated_by: honek bikoiztuta
+  label_blocks: blokeatzen du
+  label_blocked_by: honek blokeatuta
+  label_precedes: aurretik doa
+  label_follows: jarraitzen du
+  label_end_to_start: bukaeratik hasierara
+  label_end_to_end: bukaeratik bukaerara
+  label_start_to_start: hasieratik hasierhasieratik bukaerara
+  label_start_to_end: hasieratik bukaerara
+  label_stay_logged_in: Saioa mantendu
+  label_disabled: ezgaituta
+  label_show_completed_versions: Bukatutako bertsioak ikusi
+  label_me: ni
+  label_board: Foroa
+  label_board_new: Foro berria
+  label_board_plural: Foroak
+  label_topic_plural: Gaiak
+  label_message_plural: Mezuak
+  label_message_last: Azken mezua
+  label_message_new: Mezu berria
+  label_message_posted: Mezua gehituta
+  label_reply_plural: Erantzunak
+  label_send_information: Erabiltzaileai kontuaren informazioa bidali
+  label_year: Urtea
+  label_month: Hilabetea
+  label_week: Astea
+  label_date_from: Nork
+  label_date_to: Nori
+  label_language_based: Erabiltzailearen hizkuntzaren arabera
+  label_sort_by: "Ordenazioa: %{value}"
+  label_send_test_email: Frogako mezua bidali
+  label_feeds_access_key: RSS atzipen giltza
+  label_missing_feeds_access_key: RSS atzipen giltza falta da
+  label_feeds_access_key_created_on: "RSS atzipen giltza orain dela %{value} sortuta"
+  label_module_plural: Moduluak
+  label_added_time_by: "%{author}, orain dela %{age} gehituta"
+  label_updated_time_by: "%{author}, orain dela %{age} eguneratuta"
+  label_updated_time: "Orain dela %{value} eguneratuta"
+  label_jump_to_a_project: Joan proiektura...
+  label_file_plural: Fitxategiak
+  label_changeset_plural: Aldaketak
+  label_default_columns: Lehenetsitako zutabeak
+  label_no_change_option: (Aldaketarik ez)
+  label_bulk_edit_selected_issues: Hautatutako zereginak batera editatu
+  label_theme: Itxura
+  label_default: Lehenetsia
+  label_search_titles_only: Izenburuetan bakarrik bilatu
+  label_user_mail_option_all: "Nire proiektu guztietako gertakari guztientzat"
+  label_user_mail_option_selected: "Hautatutako proiektuetako edozein gertakarientzat..."
+  label_user_mail_no_self_notified: "Ez dut nik egiten ditudan aldeketen jakinarazpenik jaso nahi"
+  label_registration_activation_by_email: kontuak epostaz gaitu
+  label_registration_manual_activation: kontuak eskuz gaitu
+  label_registration_automatic_activation: kontuak automatikoki gaitu
+  label_display_per_page: "Orriko: %{value}"
+  label_age: Adina
+  label_change_properties: Propietateak aldatu
+  label_general: Orokorra
+  label_more: Gehiago
+  label_scm: IKK
+  label_plugins: Pluginak
+  label_ldap_authentication: LDAP autentikazioa
+  label_downloads_abbr: Desk.
+  label_optional_description: Aukerako deskribapena
+  label_add_another_file: Beste fitxategia gehitu
+  label_preferences: Hobespenak
+  label_chronological_order: Orden kronologikoan
+  label_reverse_chronological_order: Alderantzizko orden kronologikoan
+  label_planning: Planifikazioa
+  label_incoming_emails: Sarrerako epostak
+  label_generate_key: Giltza sortu
+  label_issue_watchers: Behatzaileak
+  label_example: Adibidea
+  label_display: Bistaratzea
+  label_sort: Ordenatu
+  label_ascending: Gorantz
+  label_descending: Beherantz
+  label_date_from_to: "%{start}-tik %{end}-ra"
+  label_wiki_content_added: Wiki orria gehituta
+  label_wiki_content_updated: Wiki orria eguneratuta
+  label_group: Taldea
+  label_group_plural: Taldeak
+  label_group_new: Talde berria
+  label_time_entry_plural: Igarotako denbora
+  label_version_sharing_none: Ez partekatuta
+  label_version_sharing_descendants: Azpiproiektuekin
+  label_version_sharing_hierarchy: Proiektu Hierarkiarekin
+  label_version_sharing_tree: Proiektu zuhaitzarekin
+  label_version_sharing_system: Proiektu guztiekin
+  label_update_issue_done_ratios: Zereginen burututako erlazioa eguneratu
+  label_copy_source: Iturburua
+  label_copy_target: Helburua
+  label_copy_same_as_target: Helburuaren berdina
+  label_display_used_statuses_only: Aztarnari honetan erabiltzen diren egoerak bakarrik erakutsi
+  label_api_access_key: API atzipen giltza
+  label_missing_api_access_key: API atzipen giltza falta da
+  label_api_access_key_created_on: "API atzipen giltza sortuta orain dela %{value}"
+  
+  button_login: Saioa hasi
+  button_submit: Bidali
+  button_save: Gorde
+  button_check_all: Guztiak markatu
+  button_uncheck_all: Guztiak desmarkatu
+  button_delete: Ezabatu
+  button_create: Sortu
+  button_create_and_continue: Sortu eta jarraitu
+  button_test: Frogatu
+  button_edit: Editatu
+  button_add: Gehitu
+  button_change: Aldatu
+  button_apply: Aplikatu
+  button_clear: Garbitu
+  button_lock: Blokeatu
+  button_unlock: Desblokeatu
+  button_download: Deskargatu
+  button_list: Zerrenda
+  button_view: Ikusi
+  button_move: Mugitu
+  button_move_and_follow: Mugitu eta jarraitu
+  button_back: Atzera
+  button_cancel: Ezeztatu
+  button_activate: Gahitu
+  button_sort: Ordenatu
+  button_log_time: Denbora erregistratu
+  button_rollback: Itzuli bertsio honetara
+  button_watch: Behatu
+  button_unwatch: Behatzen utzi
+  button_reply: Erantzun
+  button_archive: Artxibatu
+  button_unarchive: Desartxibatu
+  button_reset: Berrezarri
+  button_rename: Berrizendatu
+  button_change_password: Pasahitza aldatu
+  button_copy: Kopiatu
+  button_copy_and_follow: Kopiatu eta jarraitu
+  button_annotate: Anotatu
+  button_update: Eguneratu
+  button_configure: Konfiguratu
+  button_quote: Aipatu
+  button_duplicate: Bikoiztu
+  button_show: Ikusi
+  
+  status_active: gaituta
+  status_registered: izena emanda
+  status_locked: blokeatuta
+  
+  version_status_open: irekita
+  version_status_locked: blokeatuta
+  version_status_closed: itxita
+
+  field_active: Gaituta
+  
+  text_select_mail_notifications: Jakinarazpenak zein ekintzetarako bidaliko diren hautatu.
+  text_regexp_info: adib. ^[A-Z0-9]+$
+  text_min_max_length_info: 0k mugarik gabe esan nahi du
+  text_project_destroy_confirmation: Ziur zaude proiektu hau eta erlazionatutako datu guztiak ezabatu nahi dituzula?
+  text_subprojects_destroy_warning: "%{value} azpiproiektuak ere ezabatuko dira."
+  text_workflow_edit: Hautatu rola eta aztarnaria workflow-a editatzeko
+  text_are_you_sure: Ziur zaude?
+  text_journal_changed: "%{label} %{old}-(e)tik %{new}-(e)ra aldatuta"
+  text_journal_set_to: "%{label}-k %{value} balioa hartu du"
+  text_journal_deleted: "%{label} ezabatuta (%{old})"
+  text_journal_added: "%{label} %{value} gehituta"
+  text_tip_issue_begin_day: gaur hasten diren zereginak
+  text_tip_issue_end_day: gaur bukatzen diren zereginak
+  text_tip_issue_begin_end_day: gaur hasi eta bukatzen diren zereginak
+  text_project_identifier_info: 'Letra xeheak (a-z), zenbakiak eta marrak erabil daitezke bakarrik.<br />Gorde eta gero identifikadorea ezin da aldatu.'
+  text_caracters_maximum: "%{count} karaktere gehienez."
+  text_caracters_minimum: "Gutxienez %{count} karaktereetako luzerakoa izan behar du."
+  text_length_between: "Luzera %{min} eta %{max} karaktereen artekoa."
+  text_tracker_no_workflow: Ez da workflow-rik definitu aztarnari honentzako
+  text_unallowed_characters: Debekatutako karaktereak
+  text_comma_separated: Balio anitz izan daitezke (komaz banatuta).
+  text_line_separated: Balio anitz izan daitezke (balio bakoitza lerro batean).
+  text_issues_ref_in_commit_messages: Commit-en mezuetan zereginak erlazionatu eta konpontzen
+  text_issue_added: "%{id} zeregina %{author}-(e)k jakinarazi du."
+  text_issue_updated: "%{id} zeregina %{author}-(e)k eguneratu du."
+  text_wiki_destroy_confirmation: Ziur zaude wiki hau eta bere eduki guztiak ezabatu nahi dituzula?
+  text_issue_category_destroy_question: "Zeregin batzuk (%{count}) kategoria honetara esleituta daude. Zer egin nahi duzu?"
+  text_issue_category_destroy_assignments: Kategoria esleipenak kendu
+  text_issue_category_reassign_to: Zereginak kategoria honetara esleitu
+  text_user_mail_option: "Hautatu gabeko proiektuetan, behatzen edo parte hartzen duzun gauzei buruzko jakinarazpenak jasoko dituzu (adib. zu egile zaren edo esleituta dituzun zereginak)."
+  text_no_configuration_data: "Rolak, aztarnariak, zeregin egoerak eta workflow-ak ez dira oraindik konfiguratu.\nOso gomendagarria de lehenetsitako kkonfigurazioa kargatzea. Kargatu eta gero aldatu ahalko duzu."
+  text_load_default_configuration: Lehenetsitako konfigurazioa kargatu
+  text_status_changed_by_changeset: "%{value} aldaketan aplikatuta."
+  text_issues_destroy_confirmation: 'Ziur zaude hautatutako zeregina(k) ezabatu nahi dituzula?'
+  text_select_project_modules: 'Hautatu proiektu honetan gaitu behar diren moduluak:'
+  text_default_administrator_account_changed: Lehenetsitako kudeatzaile kontua aldatuta
+  text_file_repository_writable: Eranskinen direktorioan idatz daiteke
+  text_plugin_assets_writable: Pluginen baliabideen direktorioan idatz daiteke
+  text_rmagick_available: RMagick eskuragarri (aukerazkoa)
+  text_destroy_time_entries_question: "%{hours} orduei buruz berri eman zen zuk ezabatzera zoazen zereginean. Zer egin nahi duzu?"
+  text_destroy_time_entries: Ezabatu berri emandako orduak
+  text_assign_time_entries_to_project: Berri emandako orduak proiektura esleitu
+  text_reassign_time_entries: 'Berri emandako orduak zeregin honetara esleitu:'
+  text_user_wrote: "%{value}-(e)k idatzi zuen:"
+  text_enumeration_destroy_question: "%{count} objetu balio honetara esleituta daude."
+  text_enumeration_category_reassign_to: 'Beste balio honetara esleitu:'
+  text_email_delivery_not_configured: "Eposta bidalketa ez dago konfiguratuta eta jakinarazpenak ezgaituta daude.\nKonfiguratu zure SMTP zerbitzaria config/configuration.yml-n eta aplikazioa berrabiarazi hauek gaitzeko."
+  text_repository_usernames_mapping: "Hautatu edo eguneratu Redmineko erabiltzailea biltegiko egunkarietan topatzen diren erabiltzaile izenekin erlazionatzeko.\nRedmine-n eta biltegian erabiltzaile izen edo eposta berdina duten erabiltzaileak automatikoki erlazionatzen dira."
+  text_diff_truncated: '... Diff hau moztua izan da erakus daitekeen tamaina maximoa gainditu duelako.'
+  text_custom_field_possible_values_info: 'Lerro bat balio bakoitzeko'
+  text_wiki_page_destroy_question: "Orri honek %{descendants} orri seme eta ondorengo ditu. Zer egin nahi duzu?"
+  text_wiki_page_nullify_children: "Orri semeak erro orri moduan mantendu"
+  text_wiki_page_destroy_children: "Orri semeak eta beraien ondorengo guztiak ezabatu"
+  text_wiki_page_reassign_children: "Orri semeak orri guraso honetara esleitu"
+  text_own_membership_delete_confirmation: "Zure baimen batzuk (edo guztiak) kentzera zoaz eta baliteke horren ondoren proiektu hau ezin editatzea.\n Ziur zaude jarraitu nahi duzula?"
+  
+  default_role_manager: Kudeatzailea
+  default_role_developer: Garatzailea
+  default_role_reporter: Berriemailea
+  default_tracker_bug: Errorea
+  default_tracker_feature: Eginbidea
+  default_tracker_support: Laguntza
+  default_issue_status_new: Berria
+  default_issue_status_in_progress: Lanean
+  default_issue_status_resolved: Ebatzita
+  default_issue_status_feedback: Berrelikadura
+  default_issue_status_closed: Itxita
+  default_issue_status_rejected: Baztertua
+  default_doc_category_user: Erabiltzaile dokumentazioa
+  default_doc_category_tech: Dokumentazio teknikoa
+  default_priority_low: Baxua
+  default_priority_normal: Normala
+  default_priority_high: Altua
+  default_priority_urgent: Larria
+  default_priority_immediate: Berehalakoa
+  default_activity_design: Diseinua
+  default_activity_development: Garapena
+  
+  enumeration_issue_priorities: Zeregin lehentasunak
+  enumeration_doc_categories: Dokumentu kategoriak
+  enumeration_activities: Jarduerak (denbora kontrola))
+  enumeration_system_activity: Sistemako Jarduera
+  label_board_sticky: Itsaskorra
+  label_board_locked: Blokeatuta
+  permission_export_wiki_pages: Wiki orriak esportatu
+  setting_cache_formatted_text: Formatudun testua katxeatu
+  permission_manage_project_activities: Proiektuaren jarduerak kudeatu
+  error_unable_delete_issue_status: Ezine da zereginaren egoera ezabatu
+  label_profile: Profila
+  permission_manage_subtasks: Azpiatazak kudeatu
+  field_parent_issue: Zeregin gurasoa
+  label_subtask_plural: Azpiatazak
+  label_project_copy_notifications: Proiektua kopiatzen den bitartean eposta jakinarazpenak bidali
+  error_can_not_delete_custom_field: Ezin da eremu pertsonalizatua ezabatu
+  error_unable_to_connect: Ezin da konektatu (%{value})
+  error_can_not_remove_role: Rol hau erabiltzen hari da eta ezin da ezabatu.
+  error_can_not_delete_tracker: Aztarnari honek zereginak ditu eta ezin da ezabatu.
+  field_principal: Ekintzaile
+  label_my_page_block: "Nire orriko blokea"
+  notice_failed_to_save_members: "Kidea(k) gordetzean errorea: %{errors}."
+  text_zoom_out: Zooma txikiagotu
+  text_zoom_in: Zooma handiagotu
+  notice_unable_delete_time_entry: "Ezin da hautatutako denbora erregistroa ezabatu."
+  label_overall_spent_time: Igarotako denbora guztira
+  field_time_entries: "Denbora erregistratu"
+  project_module_gantt: Gantt
+  project_module_calendar: Egutegia
+  button_edit_associated_wikipage: "Esleitutako wiki orria editatu: %{page_title}"
+  text_are_you_sure_with_children: "Zeregina eta azpi zeregin guztiak ezabatu?"
+  field_text: Testu eremua
+  label_user_mail_option_only_owner: "Jabea naizen gauzetarako barrarik"
+  setting_default_notification_option: "Lehenetsitako ohartarazpen aukera"
+  label_user_mail_option_only_my_events: "Behatzen ditudan edo partaide naizen gauzetarako bakarrik"
+  label_user_mail_option_only_assigned: "Niri esleitutako gauzentzat bakarrik"
+  label_user_mail_option_none: "Gertakaririk ez"
+  field_member_of_group: "Esleituta duenaren taldea"
+  field_assigned_to_role: "Esleituta duenaren rola"
+  notice_not_authorized_archived_project: "Atzitu nahi duzun proiektua artxibatua izan da."
+  label_principal_search: "Bilatu erabiltzaile edo taldea:"
+  label_user_search: "Erabiltzailea bilatu:"
+  field_visible: Ikusgai
+  setting_emails_header: "Eposten goiburua"
+  setting_commit_logtime_activity_id: "Erregistratutako denboraren jarduera"
+  text_time_logged_by_changeset: "%{value} aldaketan egindakoa."
+  setting_commit_logtime_enabled: "Erregistrutako denbora gaitu"
+  notice_gantt_chart_truncated: Grafikoa moztu da bistara daitekeen elementuen kopuru maximoa gainditu delako (%{max})
+  setting_gantt_items_limit: "Gantt grafikoan bistara daitekeen elementu kopuru maximoa"
+  field_warn_on_leaving_unsaved: Gorde gabeko testua duen orri batetik ateratzen naizenean ohartarazi
+  text_warn_on_leaving_unsaved: Uneko orritik joaten bazara gorde gabeko testua galduko da.
+  label_my_queries: Nire galdera pertsonalizatuak
+  text_journal_changed_no_detail: "%{label} eguneratuta"
+  label_news_comment_added: Berri batera iruzkina gehituta
+  button_expand_all: Guztia zabaldu
+  button_collapse_all: Guztia tolestu
+  label_additional_workflow_transitions_for_assignee: Erabiltzaileak esleitua duenean baimendutako transtsizio gehigarriak
+  label_additional_workflow_transitions_for_author: Erabiltzailea egilea denean baimendutako transtsizio gehigarriak
+  label_bulk_edit_selected_time_entries: Hautatutako denbora egunkariak batera editatu
+  text_time_entries_destroy_confirmation: Ziur zaude hautatutako denbora egunkariak ezabatu nahi dituzula?
+  label_role_anonymous: Ezezaguna
+  label_role_non_member: Ez kidea
+  label_issue_note_added: Oharra gehituta
+  label_issue_status_updated: Egoera eguneratuta
+  label_issue_priority_updated: Lehentasuna eguneratuta
+  label_issues_visibility_own: Erabiltzaileak sortu edo esleituta dituen zereginak
+  field_issues_visibility: Zeregin ikusgarritasuna
+  label_issues_visibility_all: Zeregin guztiak
+  permission_set_own_issues_private: Nork bere zereginak publiko edo pribatu jarri
+  field_is_private: Pribatu
+  permission_set_issues_private: Zereginak publiko edo pribatu jarri
+  label_issues_visibility_public: Pribatu ez diren zeregin guztiak
+  text_issues_destroy_descendants_confirmation: Honek %{count} azpiataza ezabatuko ditu baita ere.
+  field_commit_logs_encoding: Commit-en egunkarien kodetzea
+  field_scm_path_encoding: Bidearen kodeketa
+  text_scm_path_encoding_note: "Lehentsita: UTF-8"
+  field_path_to_repository: Biltegirako bidea
+  field_root_directory: Erro direktorioa
+  field_cvs_module: Modulua
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Biltegi locala (adib. /hgrepo, c:\hgrepo)
+  text_scm_command: Komandoa
+  text_scm_command_version: Bertsioa
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/fa.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/fa.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -17,16 +17,19 @@
     month_names: [~, ژانویه, فوریه, مارس, آوریل, مه, ژوئن, ژوئیه, اوت, سپتامبر, اکتبر, نوامبر, دسامبر]
     abbr_month_names: [~, ژان, فور, مار, آور, مه, ژوئن, ژوئیه, اوت, سپت, اکت, نوا, دسا]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
-      default: "%Y/%m/%d %p %I:%M"
-      time: "%p %I:%M"
+      default: "%Y/%m/%d - %H:%M"
+      time: "%H:%M"
       short: "%d %b %H:%M"
-      long: "%B %d, %Y %H:%M"
-    am: "ق.ظ"
-    pm: "ب.ظ"
+      long: "%d %B %Y ساعت %H:%M"
+    am: "صبح"
+    pm: "عصر"
       
   datetime:
     distance_in_words:
@@ -207,7 +210,7 @@
   gui_validation_error_plural: "%{count} ایراد"
   
   field_name: نام
-  field_description: توضیح
+  field_description: یادداشت
   field_summary: خلاصه
   field_is_required: الزامی
   field_firstname: نام کوچک
@@ -231,7 +234,7 @@
   field_project: پروژه
   field_issue: پیامد
   field_status: وضعیت
-  field_notes: یادداشت‌ها
+  field_notes: یادداشت
   field_is_closed: پیامد بسته شده
   field_is_default: مقدار پیش‌گزیده
   field_tracker: پیگرد
@@ -246,7 +249,7 @@
   field_homepage: برگه خانه
   field_is_public: همگانی
   field_parent: پروژه پدر
-  field_is_in_roadmap: این پیامدها در نقشه راه نشان داده شوند
+  field_is_in_roadmap: این پیامدها در چشم‌انداز نشان داده شوند
   field_login: ورود
   field_mail_notification: آگاه سازی‌های ایمیلی
   field_admin: سرپرست
@@ -276,7 +279,7 @@
   field_start_page: برگه آغاز
   field_subproject: زیر پروژه
   field_hours: ساعت‌
-  field_activity: فعالیت
+  field_activity: گزارش
   field_spent_on: در تاریخ
   field_identifier: شناسه
   field_is_filter: پالایش پذیر
@@ -330,13 +333,12 @@
   setting_cross_project_issue_relations: توانایی وابستگی میان پروژه‌ای پیامدها
   setting_issue_list_default_columns: ستون‌های پیش‌گزیده نمایش داده شده در فهرست پیامدها
   setting_repositories_encodings: کدگذاری انباره‌ها
-  setting_commit_logs_encoding: کدگذاری پیام‌های انباره
   setting_emails_header: سرنویس ایمیل‌ها
   setting_emails_footer: پانویس ایمیل‌ها
   setting_protocol: پیوندنامه
   setting_per_page_options: گزینه‌های اندازه داده‌های هر برگ
   setting_user_format: قالب نمایشی کاربران
-  setting_activity_days_default: روزهای نمایش داده شده در فعالیت پروژه
+  setting_activity_days_default: روزهای نمایش داده شده در گزارش پروژه
   setting_display_subprojects_issues: پیش‌گزیده نمایش پیامدهای زیرپروژه در پروژه پدر
   setting_enabled_scm: فعالسازی SCM
   setting_mail_handler_body_delimiters: "بریدن ایمیل‌ها پس از یکی از این ردیف‌ها"
@@ -360,7 +362,7 @@
   setting_cache_formatted_text: نهان سازی نوشته‌های قالب بندی شده
   setting_default_notification_option: آگاه سازی پیش‌گزیده
   setting_commit_logtime_enabled: فعالسازی زمان گذاشته شده
-  setting_commit_logtime_activity_id: فعالیت زمان گذاشته شده
+  setting_commit_logtime_activity_id: کار زمان گذاشته شده
   setting_gantt_items_limit: بیشترین شمار بخش‌های نمایش داده شده در نمودار گانت
   
   permission_add_project: ساخت پروژه
@@ -368,15 +370,15 @@
   permission_edit_project: ویرایش پروژه
   permission_select_project_modules: گزینش پیمانه‌های پروژه
   permission_manage_members: سرپرستی اعضا
-  permission_manage_project_activities: سرپرستی فعالیت‌های پروژه
+  permission_manage_project_activities: سرپرستی کارهای پروژه
   permission_manage_versions: سرپرستی نگارش‌ها
   permission_manage_categories: سرپرستی دسته‌های پیامد
   permission_view_issues: دیدن پیامدها
   permission_add_issues: افزودن پیامدها
   permission_edit_issues: ویرایش پیامدها
   permission_manage_issue_relations: سرپرستی وابستگی پیامدها
-  permission_add_issue_notes: افزودن یادداشت‌ها
-  permission_edit_issue_notes: ویرایش یادداشت‌ها
+  permission_add_issue_notes: افزودن یادداشت
+  permission_edit_issue_notes: ویرایش یادداشت
   permission_edit_own_issue_notes: ویرایش یادداشت خود
   permission_move_issues: جابجایی پیامدها
   permission_delete_issues: پاک کردن پیامدها
@@ -447,7 +449,7 @@
   label_issue_new: پیامد تازه
   label_issue_plural: پیامد
   label_issue_view_all: دیدن همه پیامدها
-  label_issues_by: "پیامدهای دست%{value}"
+  label_issues_by: "دسته‌بندی پیامدها با %{value}"
   label_issue_added: پیامد افزوده شد
   label_issue_updated: پیامد بروز شد
   label_document: نوشتار
@@ -495,9 +497,9 @@
   label_assigned_to_me_issues: پیامدهای واگذار شده به من
   label_last_login: آخرین ورود
   label_registered_on: نام نویسی شده در
-  label_activity: فعالیت
-  label_overall_activity: فعالیت روی هم رفته
-  label_user_activity: "فعالیت %{value}"
+  label_activity: گزارش
+  label_overall_activity: گزارش روی هم رفته
+  label_user_activity: "گزارش %{value}"
   label_new: تازه
   label_logged_as: "نام کاربری:"
   label_environment: محیط
@@ -537,7 +539,7 @@
   label_news_view_all: دیدن همه رویدادها
   label_news_added: رویداد افزوده شد
   label_settings: پیکربندی
-  label_overview: دورنما
+  label_overview: در یک نگاه
   label_version: نگارش
   label_version_new: نگارش تازه
   label_version_plural: نگارش
@@ -644,7 +646,7 @@
   label_sort_higher: بردن به بالا
   label_sort_lower: بردن به پایین
   label_sort_lowest: بردن به پایان
-  label_roadmap: نقشه راه
+  label_roadmap: چشم‌انداز
   label_roadmap_due_in: "سررسید در %{value}"
   label_roadmap_overdue: "%{value} دیرکرد"
   label_roadmap_no_issues: هیچ پیامدی برای این نگارش نیست
@@ -754,7 +756,7 @@
   label_plugins: افزونه‌ها
   label_ldap_authentication: شناساییLDAP
   label_downloads_abbr: دریافت
-  label_optional_description: توضیح اختیاری
+  label_optional_description: یادداشت دلخواه
   label_add_another_file: افزودن پرونده دیگر
   label_preferences: پسندها
   label_chronological_order: به ترتیب تاریخ
@@ -933,13 +935,47 @@
   
   enumeration_issue_priorities: برتری‌های پیامد
   enumeration_doc_categories: دسته‌های نوشتار
-  enumeration_activities: فعالیت‌ها (پیگیری زمان)
-  enumeration_system_activity: فعالیت سامانه
+  enumeration_activities: کارها (پیگیری زمان)
+  enumeration_system_activity: کار سامانه
 
-  text_tip_issue_begin_day: issue beginning this day
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_tip_issue_begin_end_day: issue beginning and ending this day
-  text_tip_issue_end_day: issue ending this day
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  text_tip_issue_begin_day: پیامد در این روز آغاز می‌شود
+  field_warn_on_leaving_unsaved: هنگام ترک برگه‌ای که نوشته‌های آن نگهداری نشده، به من هشدار بده
+  text_tip_issue_begin_end_day: پیامد در این روز آغاز می‌شود و پایان می‌پذیرد
+  text_tip_issue_end_day: پیامد در این روز پایان می‌پذیرد
+  text_warn_on_leaving_unsaved: این برگه دارای نوشته‌های نگهداری نشده است که اگر آن را ترک کنید، از میان می‌روند.
+  label_my_queries: جستارهای سفارشی من
+  text_journal_changed_no_detail: "%{label} بروز شد"
+  label_news_comment_added: دیدگاه به یک رویداد افزوده شد
+  button_expand_all: باز کردن همه
+  button_collapse_all: بستن همه
+  label_additional_workflow_transitions_for_assignee: زمانی که به کاربر واگذار شده، گذارهای بیشتر پذیرفته می‌شود
+  label_additional_workflow_transitions_for_author: زمانی که کاربر نویسنده است، گذارهای بیشتر پذیرفته می‌شود
+  label_bulk_edit_selected_time_entries: ویرایش دسته‌ای زمان‌های گزارش شده گزینش شده
+  text_time_entries_destroy_confirmation: آیا می‌خواهید زمان‌های گزارش شده گزینش شده پاک شوند؟
+  label_role_anonymous: ناشناس
+  label_role_non_member: غیر عضو
+  label_issue_note_added: یادداشت افزوده شد
+  label_issue_status_updated: وضعیت بروز شد
+  label_issue_priority_updated: برتری بروز شد
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: کدگذاری پیام‌های انباره
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/fi.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/fi.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -13,7 +13,10 @@
     abbr_day_names: [Su, Ma, Ti, Ke, To, Pe, La]
     month_names: [~, Tammikuu, Helmikuu, Maaliskuu, Huhtikuu, Toukokuu, Kesäkuu, Heinäkuu, Elokuu, Syyskuu, Lokakuu, Marraskuu, Joulukuu]
     abbr_month_names: [~, Tammi, Helmi, Maalis, Huhti, Touko, Kesä, Heinä, Elo, Syys, Loka, Marras, Joulu]
-    order: [:day, :month, :year]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -159,7 +162,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-15
-  general_pdf_encoding: ISO-8859-15
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: Tilin päivitys onnistui.
@@ -263,7 +266,7 @@
   field_attr_mail: Sähköpostinmääre
   field_onthefly: Automaattinen käyttäjien luonti
   field_start_date: Alku
-  field_done_ratio: % Tehty
+  field_done_ratio: "% Tehty"
   field_auth_source: Varmennusmuoto
   field_hide_mail: Piiloita sähköpostiosoitteeni
   field_comments: Kommentti
@@ -756,7 +759,6 @@
   label_issue_watchers: Tapahtuman seuraajat
   button_quote: Vastaa
   setting_sequential_project_identifiers: Luo peräkkäiset projektien tunnisteet
-  setting_commit_logs_encoding: Tee viestien koodaus
   notice_unable_delete_version: Version poisto epäonnistui
   label_renamed: uudelleennimetty
   label_copied: kopioitu
@@ -962,3 +964,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Tee viestien koodaus
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/fr.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/fr.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -17,7 +17,10 @@
     abbr_day_names: [dim, lun, mar, mer, jeu, ven, sam]
     month_names: [~, janvier, février, mars, avril, mai, juin, juillet, août, septembre, octobre, novembre, décembre]
     abbr_month_names: [~, jan., fév., mar., avr., mai, juin, juil., août, sept., oct., nov., déc.]
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
   
   time:
     formats:
@@ -151,7 +154,7 @@
   general_csv_separator: ';'
   general_csv_decimal_separator: ','
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: Le compte a été mis à jour avec succès.
@@ -275,7 +278,7 @@
   field_attr_mail: Attribut Email
   field_onthefly: Création des utilisateurs à la volée
   field_start_date: Début
-  field_done_ratio: % réalisé
+  field_done_ratio: "% réalisé"
   field_auth_source: Mode d'authentification
   field_hide_mail: Cacher mon adresse mail
   field_comments: Commentaire
@@ -308,7 +311,10 @@
   field_parent_issue: Tâche parente
   field_visible: Visible
   field_warn_on_leaving_unsaved: "M'avertir lorsque je quitte une page contenant du texte non sauvegardé"
-  
+  field_issues_visibility: Visibilité des demandes
+  field_is_private: Privée
+  field_commit_logs_encoding: Encodage des messages de commit
+
   setting_app_title: Titre de l'application
   setting_app_subtitle: Sous-titre de l'application
   setting_welcome_text: Texte d'accueil
@@ -335,7 +341,6 @@
   setting_cross_project_issue_relations: Autoriser les relations entre demandes de différents projets
   setting_issue_list_default_columns: Colonnes affichées par défaut sur la liste des demandes
   setting_repositories_encodings: Encodages des dépôts
-  setting_commit_logs_encoding: Encodage des messages de commit
   setting_emails_footer: Pied-de-page des emails
   setting_protocol: Protocole
   setting_per_page_options: Options d'objets affichés par page
@@ -377,6 +382,8 @@
   permission_add_issues: Créer des demandes
   permission_edit_issues: Modifier les demandes
   permission_manage_issue_relations: Gérer les relations
+  permission_set_issues_private: Rendre les demandes publiques ou privées
+  permission_set_own_issues_private: Rendre ses propres demandes publiques ou privées
   permission_add_issue_notes: Ajouter des notes
   permission_edit_issue_notes: Modifier les notes
   permission_edit_own_issue_notes: Modifier ses propres notes
@@ -462,6 +469,8 @@
   label_role_plural: Rôles
   label_role_new: Nouveau rôle
   label_role_and_permissions: Rôles et permissions
+  label_role_anonymous: Anonyme
+  label_role_non_member: Non membre
   label_member: Membre
   label_member_new: Nouveau membre
   label_member_plural: Membres
@@ -541,6 +550,7 @@
   label_news_latest: Dernières annonces
   label_news_view_all: Voir toutes les annonces
   label_news_added: Annonce ajoutée
+  label_news_comment_added: Commentaire ajouté à une annonce
   label_settings: Configuration
   label_overview: Aperçu
   label_version: Version
@@ -787,12 +797,19 @@
   label_project_copy_notifications: Envoyer les notifications durant la copie du projet
   label_principal_search: "Rechercher un utilisateur ou un groupe :"
   label_user_search: "Rechercher un utilisateur :"
+  label_additional_workflow_transitions_for_author: Autorisations supplémentaires lorsque l'utilisateur a créé la demande
+  label_additional_workflow_transitions_for_assignee: Autorisations supplémentaires lorsque la demande est assignée à l'utilisateur
+  label_issues_visibility_all: Toutes les demandes
+  label_issues_visibility_public: Toutes les demandes non privées
+  label_issues_visibility_own: Demandes créées par ou assignées à l'utilisateur
   
   button_login: Connexion
   button_submit: Soumettre
   button_save: Sauvegarder
   button_check_all: Tout cocher
   button_uncheck_all: Tout décocher
+  button_collapse_all: Plier tout
+  button_expand_all: Déplier tout
   button_delete: Supprimer
   button_create: Créer
   button_create_and_continue: Créer et continuer
@@ -870,7 +887,8 @@
   text_load_default_configuration: Charger le paramétrage par défaut
   text_status_changed_by_changeset: "Appliqué par commit %{value}."
   text_time_logged_by_changeset: "Appliqué par commit %{value}"
-  text_issues_destroy_confirmation: 'Êtes-vous sûr de vouloir supprimer le(s) demandes(s) selectionnée(s) ?'
+  text_issues_destroy_confirmation: 'Êtes-vous sûr de vouloir supprimer la ou les demandes(s) selectionnée(s) ?'
+  text_issues_destroy_descendants_confirmation: "Cela entrainera également la suppression de %{count} sous-tâche(s)."
   text_select_project_modules: 'Sélectionner les modules à activer pour ce projet :'
   text_default_administrator_account_changed: Compte administrateur par défaut changé
   text_file_repository_writable: Répertoire de stockage des fichiers accessible en écriture
@@ -945,7 +963,7 @@
   text_zoom_in: Zoom avant
   notice_unable_delete_time_entry: Impossible de supprimer le temps passé.
   label_overall_spent_time: Temps passé global
-  field_time_entries: Log time
+  field_time_entries: Temps passé
   project_module_gantt: Gantt
   project_module_calendar: Calendrier
   button_edit_associated_wikipage: "Modifier la page wiki associée: %{page_title}"
@@ -958,4 +976,19 @@
   label_user_mail_option_none: Aucune notification
   field_member_of_group: Groupe de l'assigné
   field_assigned_to_role: Rôle de l'assigné
-  setting_emails_header: Emails header
+  setting_emails_header: En-tête des emails
+  label_bulk_edit_selected_time_entries: Modifier les temps passés sélectionnées
+  text_time_entries_destroy_confirmation: "Etes-vous sûr de vouloir supprimer les temps passés sélectionnés ?"
+  field_scm_path_encoding: Encodage des chemins
+  text_scm_path_encoding_note: "Défaut : UTF-8"
+  field_path_to_repository: Chemin du dépôt
+  field_root_directory: Répertoire racine
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: "Dépôt nu (bare) et local (exemples : /gitrepo, c:\gitrepo)"
+  text_mercurial_repository_note: "Dépôt local (exemples : /hgrepo, c:\hgrepo)"
+  text_scm_command: Commande
+  text_scm_command_version: Version
+  label_git_report_last_commit: Afficher le dernier commit des fichiers et répertoires
+  text_scm_config: Vous pouvez configurer les commandes des SCM dans config/configuration.yml. Redémarrer l'application après modification.
+  text_scm_command_not_available: Ce SCM n'est pas disponible. Vérifier les paramètres dans la section administration.
--- a/config/locales/gl.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/gl.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -55,7 +55,10 @@
     abbr_day_names:   [Dom, Lun, Mar, Mer, Xov, Ven, Sab]
     month_names:      [~, Xaneiro, Febreiro, Marzo, Abril, Maio, Xunio, Xullo, Agosto, Setembro, Outubro, Novembro, Decembro]
     abbr_month_names: [~, Xan, Feb, Maz, Abr, Mai, Xun, Xul, Ago, Set, Out, Nov, Dec]
-    order:            [:day, :month, :year]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -241,7 +244,7 @@
   field_default_value: Estado por defecto
   field_delay: Retraso
   field_description: Descrición
-  field_done_ratio: % Realizado
+  field_done_ratio: "% Realizado"
   field_downloads: Descargas
   field_due_date: Data fin
   field_effective_date: Data
@@ -310,7 +313,7 @@
   general_csv_separator: ';'
   general_first_day_of_week: '1'
   general_lang_name: 'Galego'
-  general_pdf_encoding: ISO-8859-15
+  general_pdf_encoding: UTF-8
   general_text_No: 'Non'
   general_text_Yes: 'Si'
   general_text_no: 'non'
@@ -655,7 +658,7 @@
   notice_default_data_loaded: Configuración por defecto cargada correctamente.
   notice_email_error: "Ocorreu un error enviando o correo (%{value})"
   notice_email_sent: "Enviouse un correo a %{value}"
-  notice_failed_to_save_issues: "Imposible gravar %s petición(s) en %{count} seleccionado: %{ids}."
+  notice_failed_to_save_issues: "Imposible gravar %{count} petición(s) de %{total} seleccionada(s): %{ids}."
   notice_feeds_access_key_reseted: A súa clave de acceso para RSS reiniciouse.
   notice_file_not_found: A páxina á que tenta acceder non existe.
   notice_locking_conflict: Os datos modificáronse por outro usuario.
@@ -730,7 +733,6 @@
   setting_autologin: Conexión automática
   setting_bcc_recipients: Ocultar as copias de carbón (bcc)
   setting_commit_fix_keywords: Palabras clave para a corrección
-  setting_commit_logs_encoding: Codificación das mensaxes de commit
   setting_commit_ref_keywords: Palabras clave para a referencia
   setting_cross_project_issue_relations: Permitir relacionar peticións de distintos proxectos
   setting_date_format: Formato da data
@@ -953,3 +955,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Codificación das mensaxes de commit
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/he.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/he.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -15,7 +15,10 @@
     abbr_day_names: ["א'", "ב'", "ג'", "ד'", "ה'", "ו'", "ש'"]
     month_names: [~, ינואר, פברואר, מרץ, אפריל, מאי, יוני, יולי, אוגוסט, ספטמבר, אוקטובר, נובמבר, דצמבר]
     abbr_month_names: [~, יאנ, פבר, מרץ, אפר, מאי, יונ, יול, אוג, ספט, אוק, נוב, דצמ]
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -139,7 +142,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-8
-  general_pdf_encoding: ISO-8859-8
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '7'
 
   notice_account_updated: החשבון עודכן בהצלחה!
@@ -163,7 +166,7 @@
   notice_email_error: "ארעה שגיאה בעת שליחת הדואל (%{value})"
   notice_feeds_access_key_reseted: מפתח ה־RSS שלך אופס.
   notice_api_access_key_reseted: מפתח הגישה שלך ל־API אופס.
-  notice_failed_to_save_issues: "נכשרת בשמירת %{count} נושא\ים ב %{total} נבחרו: %{ids}."
+  notice_failed_to_save_issues: "נכשרת בשמירת %{count} נושאים ב %{total} נבחרו: %{ids}."
   notice_failed_to_save_members: "כשלון בשמירת חבר(ים): %{errors}."
   notice_no_issue_selected: "לא נבחר אף נושא! בחר בבקשה את הנושאים שברצונך לערוך."
   notice_account_pending: "החשבון שלך נוצר ועתה מחכה לאישור מנהל המערכת."
@@ -271,7 +274,7 @@
   field_attr_mail: תכונת דוא"ל
   field_onthefly: יצירת משתמשים זריזה
   field_start_date: תאריך התחלה
-  field_done_ratio: % גמור
+  field_done_ratio: "% גמור"
   field_auth_source: מקור הזדהות
   field_hide_mail: החבא את כתובת הדוא"ל שלי
   field_comments: הערות
@@ -330,7 +333,6 @@
   setting_cross_project_issue_relations: הרשה קישור נושאים בין פרויקטים
   setting_issue_list_default_columns: עמודות ברירת מחדל המוצגות ברשימת הנושאים
   setting_repositories_encodings: קידוד המאגרים
-  setting_commit_logs_encoding: קידוד הודעות הפקדה
   setting_emails_footer: תחתית דוא"ל
   setting_protocol: פרוטוקול
   setting_per_page_options: אפשרויות אוביקטים לפי דף
@@ -847,7 +849,7 @@
   text_regexp_info: כגון. ^[A-Z0-9]+$
   text_min_max_length_info: 0 משמעו ללא הגבלות
   text_project_destroy_confirmation: האם אתה בטוח שברצונך למחוק את הפרויקט ואת כל המידע הקשור אליו?
-  text_subprojects_destroy_warning: "תת־הפרויקט\ים: %{value} ימחקו גם כן."
+  text_subprojects_destroy_warning: "תת־הפרויקטים: %{value} ימחקו גם כן."
   text_workflow_edit: בחר תפקיד וסיווג כדי לערוך את זרימת העבודה
   text_are_you_sure: האם אתה בטוח?
   text_are_you_sure_with_children: האם למחוק את הנושא ואת כל בניו?
@@ -877,7 +879,7 @@
   text_no_configuration_data: "לא הוגדרה תצורה עבור תפקידים, סיווגים, מצבי נושא וזרימת עבודה.\nמומלץ מאד לטעון את תצורת ברירת המחדל. תוכל לשנותה מאוחר יותר."
   text_load_default_configuration: טען את אפשרויות ברירת המחדל
   text_status_changed_by_changeset: "הוחל בסדרת השינויים %{value}."
-  text_issues_destroy_confirmation: 'האם אתה בטוח שברצונך למחוק את הנושא\ים?'
+  text_issues_destroy_confirmation: 'האם אתה בטוח שברצונך למחוק את הנושאים?'
   text_select_project_modules: 'בחר מודולים להחיל על פרויקט זה:'
   text_default_administrator_account_changed: מנהל המערכת ברירת המחדל שונה
   text_file_repository_writable: מאגר הקבצים ניתן לכתיבה
@@ -946,3 +948,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: קידוד הודעות הפקדה
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/hr.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/hr.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -19,7 +19,10 @@
     month_names: [~, Sijecanj, Veljaca, Ožujak, Travanj, Svibanj, Lipanj, Srpanj, Kolovoz, Rujan, Listopad, Studeni, Prosinac]
     abbr_month_names: [~, Sij, Velj, Ožu, Tra, Svi, Lip, Srp, Kol, Ruj, List, Stu, Pro]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -132,8 +135,8 @@
   general_lang_name: 'Hrvatski'
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
-  general_csv_encoding: utf8
-  general_pdf_encoding: utf8
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '7'
   
   notice_account_updated: Vaš profil je uspješno promijenjen.
@@ -258,7 +261,7 @@
   field_attr_mail: Atribut e-pošte
   field_onthefly: "Izrada korisnika \"u hodu\""
   field_start_date: Pocetak
-  field_done_ratio: % Učinjeno
+  field_done_ratio: "% Učinjeno"
   field_auth_source: Vrsta prijavljivanja
   field_hide_mail: Sakrij moju adresu e-pošte
   field_comments: Komentar
@@ -313,7 +316,6 @@
   setting_cross_project_issue_relations: Dozvoli povezivanje predmeta izmedu različitih projekata
   setting_issue_list_default_columns: Stupci prikazani na listi predmeta
   setting_repositories_encodings: Kodna stranica
-  setting_commit_logs_encoding: Commit messages encoding
   setting_emails_footer: Zaglavlje e-pošte
   setting_protocol: Protokol
   setting_per_page_options: Objekata po stranici opcija
@@ -948,3 +950,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/hu.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/hu.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -16,7 +16,10 @@
     abbr_day_names: [v., h., k., sze., cs., p., szo.]
     month_names: [~, január, február, március, április, május, június, július, augusztus, szeptember, október, november, december]
     abbr_month_names: [~, jan., febr., márc., ápr., máj., jún., júl., aug., szept., okt., nov., dec.]
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -155,7 +158,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-2
-  general_pdf_encoding: ISO-8859-2
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: A fiók adatai sikeresen frissítve.
@@ -752,7 +755,6 @@
   text_email_delivery_not_configured: "Az E-mail küldés nincs konfigurálva, és az értesítések ki vannak kapcsolva.\nÁllítsd be az SMTP szervert a config/configuration.yml fájlban és indítsd újra az alkalmazást, hogy érvénybe lépjen."
   field_parent_title: Szülő oldal
   label_issue_watchers: Megfigyelők
-  setting_commit_logs_encoding: Commit üzenetek kódlapja
   button_quote: Hozzászólás / Idézet
   setting_sequential_project_identifiers: Szekvenciális projekt azonosítók generálása
   notice_unable_delete_version: A verziót nem lehet törölni
@@ -932,31 +934,65 @@
   text_zoom_out: Kicsinyít
   text_zoom_in: Nagyít
   notice_unable_delete_time_entry: Az időrögzítés nem törölhető
-  label_overall_spent_time: Összes rászánt idő
-  field_time_entries: Log time
+  label_overall_spent_time: Összes ráfordított idő
+  field_time_entries: Idő rögzítés
   project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  project_module_calendar: Naptár
+  button_edit_associated_wikipage: "Hozzárendelt Wiki oldal szerkesztése: %{page_title}"
+  text_are_you_sure_with_children: A feladat törlése az összes alfeladattal együtt?
+  field_text: Szöveg mező
+  label_user_mail_option_only_owner: Csak arról, aminek én vagyok a tulajdonosa
+  setting_default_notification_option: Alapértelmezett értesítési beállítások
+  label_user_mail_option_only_my_events: Csak az általam megfigyelt dolgokról vagy amiben részt veszek
+  label_user_mail_option_only_assigned: Csak a hozzámrendelt dolgokról
+  label_user_mail_option_none: Semilyen eseményről
+  field_member_of_group: Hozzárendelt csoport
+  field_assigned_to_role: Hozzárendelt szerepkör
+  notice_not_authorized_archived_project: A projekt, amihez hozzá szeretnél férni archiválva lett.
+  label_principal_search: "Felhasználó vagy csoport keresése:"
+  label_user_search: "Felhasználó keresése:"
+  field_visible: Látható
+  setting_emails_header: Emailek fejléce
+  setting_commit_logtime_activity_id: A rögzített időhöz tartozó tevékenység
+  text_time_logged_by_changeset: Alkalmazva a %{value} changeset-ben.
+  setting_commit_logtime_enabled: Időrögzítés engedélyezése
+  notice_gantt_chart_truncated: A diagram le lett vágva, mert elérte a maximálisan megjeleníthető elemek számát (%{max})
+  setting_gantt_items_limit: A gantt diagrammon megjeleníthető maximális elemek száma
+  field_warn_on_leaving_unsaved: Figyelmeztessen, nem mentett módosításokat tartalmazó oldal elhagyásakor
+  text_warn_on_leaving_unsaved: A jelenlegi oldal nem mentett módosításokat tartalmaz, ami elvész, ha elhagyja az oldalt.
+  label_my_queries: Egyéni lekérdezéseim
+  text_journal_changed_no_detail: "%{label} módosítva"
+  label_news_comment_added: Megjegyzés hozzáadva a hírhez
+  button_expand_all: Mindet kibont
+  button_collapse_all: Mindet összecsuk
+  label_additional_workflow_transitions_for_assignee: További átmenetek engedélyezettek, ha a felhasználó a hozzárendelt
+  label_additional_workflow_transitions_for_author: További átmenetek engedélyezettek, ha a felhasználó a szerző
+  label_bulk_edit_selected_time_entries: A kiválasztott idő bejegyzések csoportos szerkesztése
+  text_time_entries_destroy_confirmation: Biztos benne, hogy törölni szeretné a kiválasztott idő bejegyzés(eke)t?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Nem tag
+  label_issue_note_added: Jegyzet hozzáadva
+  label_issue_status_updated: Állapot módosítva
+  label_issue_priority_updated: Prioritás módosítva
+  label_issues_visibility_own: A felhasználó által létrehozott vagy hozzárendelt feladatok
+  field_issues_visibility: Feladatok láthatósága
+  label_issues_visibility_all: Minden feladat
+  permission_set_own_issues_private: Saját feladatok beállítása nyilvánosra vagy privátra
+  field_is_private: Privát
+  permission_set_issues_private: Feladatok beállítása nyilvánosra vagy privátra
+  label_issues_visibility_public: Minden nem privát feladat
+  text_issues_destroy_descendants_confirmation: Ezzel törölni fog %{count} alfeladatot is.
+  field_commit_logs_encoding: Commit üzenetek kódlapja
+  field_scm_path_encoding: Elérési útvonal kódlapja
+  text_scm_path_encoding_note: "Alapértelmezett: UTF-8"
+  field_path_to_repository: A repository elérési útja
+  field_root_directory: Gyökér könyvtár
+  field_cvs_module: Modul
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Helyi repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Parancs
+  text_scm_command_version: Verzió
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/id.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/id.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -14,7 +14,10 @@
       
     month_names: [~, Januari, Februari, Maret, April, Mei, Juni, Juli, Agustus, September, Oktober, November, Desember]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, Mei, Jun, Jul, Agu, Sep, Okt, Nov, Des]
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -135,7 +138,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '7'
   
   notice_account_updated: Akun sudah berhasil diperbarui.
@@ -256,7 +259,7 @@
   field_attr_mail: Atribut email
   field_onthefly: Pembuatan pengguna seketika
   field_start_date: Mulai
-  field_done_ratio: % Selesai
+  field_done_ratio: "% Selesai"
   field_auth_source: Mode otentikasi
   field_hide_mail: Sembunyikan email saya
   field_comments: Komentar
@@ -312,7 +315,6 @@
   setting_cross_project_issue_relations: Perbolehkan kaitan masalah proyek berbeda
   setting_issue_list_default_columns: Kolom default ditampilkan di daftar masalah
   setting_repositories_encodings: Repositories encodings
-  setting_commit_logs_encoding: Commit messages encoding
   setting_emails_footer: Footer untuk email
   setting_protocol: Protokol
   setting_per_page_options: Pilihan obyek per halaman
@@ -949,3 +951,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/it.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/it.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -16,7 +16,10 @@
     abbr_day_names: [Dom, Lun, Mar, Mer, Gio, Ven, Sab]
     month_names: [~, Gennaio, Febbraio, Marzo, Aprile, Maggio, Giugno, Luglio, Agosto, Settembre, Ottobre, Novembre, Dicembre]
     abbr_month_names: [~, Gen, Feb, Mar, Apr, Mag, Giu, Lug, Ago, Set, Ott, Nov, Dic]
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
   
   time:
     formats:
@@ -136,10 +139,10 @@
   general_text_no: 'no'
   general_text_yes: 'sì'
   general_lang_name: 'Italiano'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
+  general_csv_separator: ';'
+  general_csv_decimal_separator: ','
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: L'utente è stato aggiornato.
@@ -234,7 +237,7 @@
   field_attr_mail: Attributo email
   field_onthefly: Creazione utente "al volo"
   field_start_date: Inizio
-  field_done_ratio: % completato
+  field_done_ratio: "% completato"
   field_auth_source: Modalità di autenticazione
   field_hide_mail: Nascondi il mio indirizzo email
   field_comments: Commento
@@ -734,7 +737,6 @@
   text_email_delivery_not_configured: "La consegna via email non è configurata e le notifiche sono disabilitate.\nConfigura il tuo server SMTP in config/configuration.yml e riavvia l'applicazione per abilitarle."
   field_parent_title: Pagina principale
   label_issue_watchers: Osservatori
-  setting_commit_logs_encoding: Codifica dei messaggi di commit
   button_quote: Quota
   setting_sequential_project_identifiers: Genera progetti con identificativi in sequenza
   notice_unable_delete_version: Impossibile eliminare la versione
@@ -942,3 +944,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Codifica dei messaggi di commit
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/ja.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/ja.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,4 +1,4 @@
-# Japanese translations for Ruby on Rails 
+# Japanese translations for Ruby on Rails
 # by Akira Matsuda (ronnie@dio.jp)
 # AR error messages are basically taken from Ruby-GetText-Package. Thanks to Masao Mutoh.
 
@@ -12,15 +12,18 @@
       default: "%Y/%m/%d"
       short: "%m/%d"
       long: "%Y年%m月%d日(%a)"
-      
+
     day_names: [日曜日, 月曜日, 火曜日, 水曜日, 木曜日, 金曜日, 土曜日]
     abbr_day_names: [日, 月, 火, 水, 木, 金, 土]
-      
+
     # Don't forget the nil at the beginning; there's no such thing as a 0th month
     month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
     abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -30,7 +33,7 @@
       long: "%Y年%m月%d日(%a) %H時%M分%S秒 %Z"
     am: "午前"
     pm: "午後"
-      
+
   datetime:
     distance_in_words:
       half_a_minute: "30秒前後"
@@ -105,13 +108,12 @@
           gb: "GB"
           tb: "TB"
 
-        
 # Used in array.to_sentence.
   support:
     array:
       sentence_connector: "及び"
       skip_last_comma: true
-      
+
   activerecord:
     errors:
       template:
@@ -147,7 +149,7 @@
         cant_link_an_issue_with_a_descendant: "指定したチケットとは親子関係になっているため関連づけられません"
 
   actionview_instancetag_blank_option: 選んでください
-  
+
   general_text_No: 'いいえ'
   general_text_Yes: 'はい'
   general_text_no: 'いいえ'
@@ -158,7 +160,7 @@
   general_csv_encoding: CP932
   general_pdf_encoding: CP932
   general_first_day_of_week: '7'
-  
+
   notice_account_updated: アカウントが更新されました。
   notice_account_invalid_creditentials: ユーザ名もしくはパスワードが無効
   notice_account_password_updated: パスワードが更新されました。
@@ -189,7 +191,7 @@
   notice_unable_delete_time_entry: 作業時間を削除できません
   notice_issue_done_ratios_updated: チケットの進捗が更新されました。
   notice_gantt_chart_truncated: ガントチャートは、最大表示項目数(%{max})を超えたたため切り捨てられました。
-  
+
   error_can_t_load_default_data: "デフォルト設定がロードできませんでした: %{value}"
   error_scm_not_found: リポジトリに、エントリ/リビジョンが存在しません。
   error_scm_command_failed: "リポジトリへアクセスしようとしてエラーになりました: %{value}"
@@ -207,9 +209,9 @@
   error_workflow_copy_source: 'コピー元となるトラッカーまたはロールを選択してください'
   error_workflow_copy_target: 'コピー先となるトラッカーとロールを選択してください'
   error_can_not_delete_tracker: 'このトラッカーは使用されています。削除できません。'
-  
+
   warning_attachments_not_saved: "%{count}個の添付ファイルが保存できませんでした。"
-  
+
   mail_subject_lost_password: "%{value} パスワード再発行"
   mail_body_lost_password: 'パスワードを変更するには、以下のリンクをクリックしてください:'
   mail_subject_register: "%{value} アカウント登録の確認"
@@ -224,10 +226,10 @@
   mail_body_wiki_content_added: "%{author} によってWikiページ %{id} が追加されました。"
   mail_subject_wiki_content_updated: "Wikiページ %{id} が更新されました"
   mail_body_wiki_content_updated: "%{author} によってWikiページ %{id} が更新されました。"
-  
+
   gui_validation_error: 1件のエラー
   gui_validation_error_plural: "%{count}件のエラー"
-  
+
   field_name: 名称
   field_description: 説明
   field_summary: サマリー
@@ -325,7 +327,14 @@
   field_assigned_to_role: 担当者のロール
   field_text: テキスト
   field_visible: 表示
-  
+  field_warn_on_leaving_unsaved: データを保存せずにページから移動するときに警告
+  field_commit_logs_encoding: コミットメッセージのエンコーディング
+  field_scm_path_encoding: パスのエンコーディング
+  field_path_to_repository: リポジトリのパス
+  field_root_directory: ルートディレクトリ
+  field_cvsroot: CVSROOT
+  field_cvs_module: モジュール
+
   setting_app_title: アプリケーションのタイトル
   setting_app_subtitle: アプリケーションのサブタイトル
   setting_welcome_text: ウェルカムメッセージ
@@ -353,7 +362,6 @@
   setting_cross_project_issue_relations: 異なるプロジェクトのチケット間で関係の設定を許可
   setting_issue_list_default_columns: チケットの一覧で表示する項目
   setting_repositories_encodings: リポジトリのエンコーディング
-  setting_commit_logs_encoding: コミットメッセージのエンコーディング
   setting_emails_header: メールのヘッダ
   setting_emails_footer: メールのフッタ
   setting_protocol: プロトコル
@@ -384,7 +392,7 @@
   setting_commit_logtime_enabled: コミット時に作業時間を記録する
   setting_commit_logtime_activity_id: 作業時間の作業分類
   setting_gantt_items_limit: ガントチャート最大表示項目数
-  
+
   permission_add_project: プロジェクトの追加
   permission_add_subprojects: サブプロジェクトの追加
   permission_edit_project: プロジェクトの編集
@@ -440,7 +448,7 @@
   permission_delete_messages: メッセージの削除
   permission_delete_own_messages: 自身が記入したメッセージの削除
   permission_manage_subtasks: 子チケットの管理
-  
+
   project_module_issue_tracking: チケットトラッキング
   project_module_time_tracking: 時間トラッキング
   project_module_news: ニュース
@@ -451,7 +459,7 @@
   project_module_boards: フォーラム
   project_module_gantt: ガントチャート
   project_module_calendar: カレンダー
-  
+
   label_user: ユーザ
   label_user_plural: ユーザ
   label_user_new: 新しいユーザ
@@ -469,7 +477,7 @@
   label_issue: チケット
   label_issue_new: 新しいチケット
   label_issue_plural: チケット
-  label_issue_view_all: 全てのチケットを見る
+  label_issue_view_all: すべてのチケットを見る
   label_issues_by: "%{value} 別のチケット"
   label_issue_added: チケットが追加されました
   label_issue_updated: チケットが更新されました
@@ -520,7 +528,7 @@
   label_last_login: 最近の接続
   label_registered_on: 登録日
   label_activity: 活動
-  label_overall_activity: 全ての活動
+  label_overall_activity: すべての活動
   label_user_activity: "%{value} の活動"
   label_new: 新しく作成
   label_logged_as: ログイン中:
@@ -558,8 +566,9 @@
   label_news_new: ニュースを追加
   label_news_plural: ニュース
   label_news_latest: 最新ニュース
-  label_news_view_all: 全てのニュースを見る
+  label_news_view_all: すべてのニュースを見る
   label_news_added: ニュースが追加されました
+  label_news_comment_added: ニュースにコメントが追加されました
   label_settings: 設定
   label_overview: 概要
   label_version: バージョン
@@ -590,7 +599,7 @@
   label_permissions: 権限
   label_current_status: 現在のステータス
   label_new_statuses_allowed: ステータスの移行先
-  label_all: 全て
+  label_all: すべて
   label_none: なし
   label_nobody: 無記名
   label_next: 次
@@ -604,7 +613,7 @@
   label_gantt: ガントチャート
   label_internal: 内部
   label_last_changes: "最新の変更 %{count}件"
-  label_change_view_all: 全ての変更を見る
+  label_change_view_all: すべての変更を見る
   label_personalize_page: このページをパーソナライズする
   label_comment: コメント
   label_comment_plural: コメント
@@ -618,6 +627,7 @@
   label_query: カスタムクエリ
   label_query_plural: カスタムクエリ
   label_query_new: 新しいクエリ
+  label_my_queries: マイカスタムクエリ
   label_filter_add: フィルタ追加
   label_filter_plural: フィルタ
   label_equals: 等しい
@@ -630,13 +640,13 @@
   label_today: 今日
   label_all_time: 全期間
   label_yesterday: 昨日
-  label_this_week: この週
+  label_this_week: 今週
   label_last_week: 先週
-  label_last_n_days: "最後の%{count}日間"
+  label_last_n_days: "直近%{count}日間"
   label_this_month: 今月
   label_last_month: 先月
   label_this_year: 今年
-  label_date_range: 日付の範囲
+  label_date_range: 期間
   label_less_than_ago: が今日より○日前以降
   label_more_than_ago: が今日より○日前以前
   label_ago: 日前
@@ -662,7 +672,7 @@
   label_latest_revision: 最新リビジョン
   label_latest_revision_plural: 最新リビジョン
   label_view_revisions: リビジョンを見る
-  label_view_all_revisions: 全てのリビジョンを見る
+  label_view_all_revisions: すべてのリビジョンを見る
   label_max_size: 最大サイズ
   label_sort_highest: 一番上へ
   label_sort_higher: 上へ
@@ -688,7 +698,7 @@
   label_changes_details: 全変更の詳細
   label_issue_tracking: チケットトラッキング
   label_spent_time: 作業時間の記録
-  label_overall_spent_time: 全ての作業時間の記録
+  label_overall_spent_time: すべての作業時間の記録
   label_f_hour: "%{value}時間"
   label_f_hour_plural: "%{value}時間"
   label_time_tracking: 時間トラッキング
@@ -759,8 +769,8 @@
   label_theme: テーマ
   label_default: 既定
   label_search_titles_only: タイトルのみ
-  label_user_mail_option_all: "参加しているプロジェクトの全ての通知"
-  label_user_mail_option_selected: "選択したプロジェクトの全ての通知..."
+  label_user_mail_option_all: "参加しているプロジェクトのすべての通知"
+  label_user_mail_option_selected: "選択したプロジェクトのすべての通知..."
   label_user_mail_option_none: "通知しない"
   label_user_mail_option_only_my_events: "ウォッチまたは関係している事柄のみ"
   label_user_mail_option_only_assigned: "自分が担当している事柄のみ"
@@ -816,12 +826,15 @@
   label_project_copy_notifications: コピーしたチケットのメール通知を送信する
   label_principal_search: "ユーザまたはグループの検索:"
   label_user_search: "ユーザの検索:"
-  
+  label_git_report_last_commit: ファイルとディレクトリの最新コミットを表示する
+
   button_login: ログイン
   button_submit: 変更
   button_save: 保存
-  button_check_all: 全てにチェックをつける
-  button_uncheck_all: 全てのチェックを外す
+  button_check_all: すべてにチェックをつける
+  button_uncheck_all: すべてのチェックを外す
+  button_expand_all: 展開
+  button_collapse_all: 折りたたみ
   button_delete: 削除
   button_create: 作成
   button_create_and_continue: 連続作成
@@ -871,16 +884,17 @@
   version_status_closed: 終了
 
   field_active: 有効
-  
+
   text_select_mail_notifications: どのメール通知を送信するか、アクションを選択してください。
   text_regexp_info: 例) ^[A-Z0-9]+$
   text_min_max_length_info: 0だと無制限になります
-  text_project_destroy_confirmation: 本当にこのプロジェクトと関連データを削除してもよろしいですか?
+  text_project_destroy_confirmation: 本当にこのプロジェクトと関連データを削除しますか?
   text_subprojects_destroy_warning: "サブプロジェクト %{value} も削除されます。"
   text_workflow_edit: ワークフローを編集するロールとトラッカーを選んでください
   text_are_you_sure: よろしいですか?
-  text_are_you_sure_with_children: チケットとその子チケット全てを削除しますか?
+  text_are_you_sure_with_children: チケットとその子チケットすべてを削除しますか?
   text_journal_changed: "%{label} を %{old} から %{new} に変更"
+  text_journal_changed_no_detail: "%{label} を更新"
   text_journal_set_to: "%{label} を %{value} にセット"
   text_journal_deleted: "%{label} を削除 (%{old})"
   text_journal_added: "%{label} %{value} を追加"
@@ -898,7 +912,7 @@
   text_issues_ref_in_commit_messages: コミットメッセージ内でチケットの参照/修正
   text_issue_added: "チケット %{id} が %{author} によって報告されました。"
   text_issue_updated: "チケット %{id} が %{author} によって更新されました。"
-  text_wiki_destroy_confirmation: 本当にこのwikiとその内容の全てを削除しますか?
+  text_wiki_destroy_confirmation: 本当にこのwikiとその内容のすべてを削除しますか?
   text_issue_category_destroy_question: "%{count}件のチケットがこのカテゴリに割り当てられています。"
   text_issue_category_destroy_assignments: カテゴリの割り当てを削除する
   text_issue_category_reassign_to: チケットをこのカテゴリに再割り当てする
@@ -928,10 +942,18 @@
   text_wiki_page_nullify_children: "子ページをメインページ配下に移動する"
   text_wiki_page_destroy_children: "配下の子孫ページも削除する"
   text_wiki_page_reassign_children: "子ページを次の親ページの配下に移動する"
-  text_own_membership_delete_confirmation: "いくつかまたはすべての権限をあなた自身から剥奪しようとしているため、このプロジェクトを編集できなくなるかもしれません。\n本当に続けてもよろしいですか?"
+  text_own_membership_delete_confirmation: "一部またはすべての権限を自分自身から剥奪しようとしているため、このプロジェクトを編集できなくなる可能性があります。\n本当に続けますか?"
   text_zoom_in: 拡大
   text_zoom_out: 縮小
-  
+  text_warn_on_leaving_unsaved: このページから移動すると、保存されていないデータが失われます。
+  text_scm_path_encoding_note: "デフォルト: UTF-8"
+  text_git_repository_note: "Bare、かつ、ローカルリポジトリ (例: /gitrepo, c:\gitrepo)"
+  text_mercurial_repository_note: "ローカルリポジトリ (例: /hgrepo, c:\hgrepo)"
+  text_scm_command: コマンド
+  text_scm_command_version: バージョン
+  text_scm_config: バージョン管理システムのコマンドをconfig/configuration.ymlで設定できます。設定後、Redmineを再起動してください。
+  text_scm_command_not_available: バージョン管理システムのコマンドが利用できません。管理画面にて設定を確認してください。
+
   default_role_manager: 管理者
   default_role_developer: 開発者
   default_role_reporter: 報告者
@@ -958,7 +980,22 @@
   enumeration_doc_categories: 文書カテゴリ
   enumeration_activities: 作業分類 (時間トラッキング)
   enumeration_system_activity: システム作業分類
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  label_additional_workflow_transitions_for_assignee: チケット担当者に追加で許可する遷移
+  label_additional_workflow_transitions_for_author: チケット作成者に追加で許可する遷移
+  label_bulk_edit_selected_time_entries: 作業時間の一括編集
+  text_time_entries_destroy_confirmation: 本当に選択した作業時間を削除しますか?
+
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+
+  label_issue_note_added: 注記が追加されました
+  label_issue_status_updated: ステータスが更新されました
+  label_issue_priority_updated: 優先度が更新されました
+  label_issues_visibility_own: 作成者か担当者であるチケット
+  field_issues_visibility: 表示できるチケット
+  label_issues_visibility_all: すべてのチケット
+  permission_set_own_issues_private: 自分のチケットをプライベートに設定
+  field_is_private: プライベート
+  permission_set_issues_private: チケットをプライベートに設定
+  label_issues_visibility_public: プライベートチケット以外
+  text_issues_destroy_descendants_confirmation: %{count}個の子チケットも削除されます。
--- a/config/locales/ko.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/ko.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -21,7 +21,10 @@
     month_names: [~, 1월, 2월, 3월, 4월, 5월, 6월, 7월, 8월, 9월, 10월, 11월, 12월]
     abbr_month_names: [~, 1월, 2월, 3월, 4월, 5월, 6월, 7월, 8월, 9월, 10월, 11월, 12월]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -355,7 +358,6 @@
   setting_cross_project_issue_relations: 다른 프로젝트의 일감과 연결하는 것을 허용
   setting_issue_list_default_columns: 일감 목록에 표시할 항목 
   setting_repositories_encodings:  저장소 인코딩
-  setting_commit_logs_encoding: 제출(commit) 기록 인코딩
   setting_emails_footer: 메일 꼬리
   setting_protocol: 프로토콜
   setting_per_page_options: 목록에서, 한 페이지에 표시할 행
@@ -993,3 +995,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: 제출(commit) 기록 인코딩
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/lt.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/lt.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -22,7 +22,10 @@
     month_names: [~, sausio, vasario, kovo, balandžio, gegužės, birželio, liepos, rugpjūčio, rugsėjo, spalio, lapkričio, gruodžio]
     abbr_month_names: [~, Sau, Vas, Kov, Bal, Geg, Bir, Lie, Rgp, Rgs, Spa, Lap, Grd]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -311,7 +314,7 @@
   field_attr_mail: Elektroninio pašto požymis
   field_onthefly: Automatinis vartotojų registravimas
   field_start_date: Pradėti
-  field_done_ratio: % atlikta
+  field_done_ratio: "% atlikta"
   field_auth_source: Autentiškumo nustatymo būdas
   field_hide_mail: Paslėpkite mano elektroninio pašto adresą
   field_comments: Komentaras
@@ -368,7 +371,6 @@
   setting_cross_project_issue_relations: Leisti tarprojektinius darbų ryšius
   setting_issue_list_default_columns: Numatytosios skiltys darbų sąraše
   setting_repositories_encodings: Saugyklos koduotė
-  setting_commit_logs_encoding: Commit pranešimų koduotė
   setting_emails_footer: elektroninio pašto puslapinė poraštė
   setting_protocol: Protokolas
   setting_per_page_options: Įrašų puslapyje nustatimas
@@ -1001,3 +1003,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit pranešimų koduotė
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/lv.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/lv.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,938 +1,974 @@
-# translated by Dzintars Bergs (dzintars.bergs@gmail.com)
-
-lv:
-  direction: ltr
-  date:
-    formats:
-      default: "%d.%m.%Y"
-      short: "%d %b"
-      long: "%d %B %Y"
-      
-    day_names: [Svētdiena, Pirmdiena, Otrdiena, Trešdiena, Ceturtdiena, Piektdiena, Sestdiena]
-    abbr_day_names: [Sv, Pr, Ot, Tr, Ct, Pk, St]
-      
-    month_names: [~, Janvāris, Februāris, Marts, Aprīlis , Maijs, Jūnijs, Jūlijs, Augusts, Septembris, Oktobris, Novembris, Decembris]
-    abbr_month_names: [~, Jan, Feb, Mar, Apr, Mai, Jūn, Jūl, Aug, Sep, Okt, Nov, Dec]
-    order: [ :day, :month, :year ]
-
-  time:
-    formats:
-      default: "%a, %d %b %Y, %H:%M:%S %z"
-      time: "%H:%M"
-      short: "%d %b, %H:%M"
-      long: "%B %d, %Y %H:%M"
-    am: "rītā"
-    pm: "vakarā"
-      
-  datetime:
-    distance_in_words:
-      half_a_minute: "pus minūte"
-      less_than_x_seconds:
-        one:   "mazāk kā 1 sekunde"
-        other: "mazāk kā %{count} sekundes"
-      x_seconds:
-        one:   "1 sekunde"
-        other: "%{count} sekundes"
-      less_than_x_minutes:
-        one:   "mazāk kā minūte"
-        other: "mazāk kā %{count} minūtes"
-      x_minutes:
-        one:   "1 minūte"
-        other: "%{count} minūtes"
-      about_x_hours:
-        one:   "aptuveni 1 stunda"
-        other: "aptuveni %{count} stundas"
-      x_days:
-        one:   "1 diena"
-        other: "%{count} dienas"
-      about_x_months:
-        one:   "aptuveni 1 mēnesis"
-        other: "aptuveni %{count} mēneši"
-      x_months:
-        one:   "1 mēnesis"
-        other: "%{count} mēneši"
-      about_x_years:
-        one:   "aptuveni 1 gads"
-        other: "aptuveni %{count} gadi"
-      over_x_years:
-        one:   "ilgāk par 1 gadu"
-        other: "ilgāk par %{count} gadiem"
-      almost_x_years:
-        one:   "gandrīz 1 gadu"
-        other: "gandrīz %{count} gadus"
-
-  number:
-    format:
-      separator: "."
-      delimiter: ""
-      precision: 3
-    human:
-      format:
-        delimiter: " "
-        precision: 1
-      storage_units:
-        format: "%n %u"
-        units:
-          byte:
-            one: "Baits"
-            other: "Baiti"
-          kb: "KB"
-          mb: "MB"
-          gb: "GB"
-          tb: "TB"
-
-        
-  support:
-    array:
-      sentence_connector: "un"
-      skip_last_comma: false
-      
-  activerecord:
-    errors:
-      template:
-        header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
-      messages:
-        inclusion: "nav iekļauts sarakstā"
-        exclusion: "ir rezervēts"
-        invalid: "nederīgs"
-        confirmation: "apstiprinājums nesakrīt"
-        accepted: "jābūt akceptētam"
-        empty: "nevar būt tukšs"
-        blank: "nevar būt neaizpildīts"
-        too_long: "ir pārāk gara(š) (maksimālais garums ir %{count} simboli)"
-        too_short: "ir pārāk īsa(s) (minimālais garums ir %{count} simboli)"
-        wrong_length: "ir nepareiza garuma (vajadzētu būt %{count} simboli)"
-        taken: "eksistē"
-        not_a_number: "nav skaitlis"
-        not_a_date: "nav derīgs datums"
-        greater_than: "jābūt lielākam par %{count}"
-        greater_than_or_equal_to: "jābūt lielākam vai vienādam ar %{count}"
-        equal_to: "jābūt vienādam ar %{count}"
-        less_than: "jābūt mazākam kā %{count}"
-        less_than_or_equal_to: "jābūt mazākam vai vienādam ar %{count}"
-        odd: "jāatšķirās"
-        even: "jāsakrīt"
-        greater_than_start_date: "jābūt vēlākam par sākuma datumu"
-        not_same_project: "nepieder pie tā paša projekta"
-        circular_dependency: "Šī relācija radītu ciklisku atkarību"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
-
-  actionview_instancetag_blank_option: Izvēlieties
-  
-  general_text_No: 'Nē'
-  general_text_Yes: 'Jā'
-  general_text_no: 'nē'
-  general_text_yes: 'jā'
-  general_lang_name: 'Latvian (Latviešu)'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
-  general_csv_encoding: UTF-8
-  general_pdf_encoding: UTF-8
-  general_first_day_of_week: '1'
-  
-  notice_account_updated: Konts tika atjaunots veiksmīgi.
-  notice_account_invalid_creditentials: Nepareizs lietotāja vārds vai parole.
-  notice_account_password_updated: Parole tika veiksmīgi atjaunota.
-  notice_account_wrong_password: Nepareiza parole
-  notice_account_register_done: Konts veiksmīgi izveidots. Lai aktivizētu kontu, spiediet uz saites, kas Jums tika nosūtīta.
-  notice_account_unknown_email: Nezināms lietotājs
-  notice_can_t_change_password: Šis konts izmanto ārēju pilnvarošanas avotu. Nav iespējams nomainīt paroli.
-  notice_account_lost_email_sent: Jums tika nosūtīts e-pasts ar instrukcijām, kā izveidot jaunu paroli.
-  notice_account_activated: Jūsu konts ir aktivizēts. Varat pieslēgties sistēmai.
-  notice_successful_create: Veiksmīga izveide.
-  notice_successful_update: Veiksmīga atjaunošana.
-  notice_successful_delete: Veiksmīga dzēšana.
-  notice_successful_connection: Veiksmīgs savienojums.
-  notice_file_not_found: Lapa, ko Jūs mēģināt atvērt, neeksistē vai ir pārvietota.
-  notice_locking_conflict: Datus ir atjaunojis cits lietotājs.
-  notice_not_authorized: Jums nav tiesību piekļūt šai lapai.
-  notice_email_sent: "E-pasts tika nosūtīts uz %{value}"
-  notice_email_error: "Kļūda sūtot e-pastu (%{value})"
-  notice_feeds_access_key_reseted: Jūsu RSS pieejas atslēga tika iestatīta sākuma stāvoklī.
-  notice_api_access_key_reseted: Jūsu API pieejas atslēga tika iestatīta sākuma stāvoklī.
-  notice_failed_to_save_issues: "Neizdevās saglabāt %{count} uzdevumu(us) no %{total} izvēlēti: %{ids}."
-  notice_no_issue_selected: "Nav izvēlēts uzdevums! Lūdzu, atzīmējiet uzdevumus, kurus vēlaties rediģēt!"
-  notice_account_pending: "Jūsu konts tika izveidots un šobrīd gaida administratora apstiprinājumu."
-  notice_default_data_loaded: Noklusētā konfigurācija tika veiksmīgi ielādēta.
-  notice_unable_delete_version: Neizdevās dzēst versiju.
-  notice_issue_done_ratios_updated: Uzdevuma izpildes koeficients atjaunots.
-  
-  error_can_t_load_default_data: "Nevar ielādēt noklusētos konfigurācijas datus: %{value}"
-  error_scm_not_found: "Ieraksts vai versija nebija repozitorijā."
-  error_scm_command_failed: "Mēģinot piekļūt repozitorijam, notika kļūda: %{value}"
-  error_scm_annotate: "Ieraksts neeksistē vai tam nevar tikt pievienots paskaidrojums."
-  error_issue_not_found_in_project: 'Uzdevums netika atrasts vai nepieder šim projektam.'
-  error_no_tracker_in_project: 'Neviens trakeris nav saistīts ar šo projektu. Pārbaudiet projekta iestatījumus.'
-  error_no_default_issue_status: 'Nav definēts uzdevuma noklusētais statuss. Pārbaudiet konfigurāciju (Ejat uz: "Administrācija -> Uzdevumu statusi")!'
-  error_can_not_reopen_issue_on_closed_version: 'Nevar pievienot atsauksmi uzdevumam, kas saistīts ar slēgtu versiju.'
-  error_can_not_archive_project: Šis projekts nevar tikt arhivēts
-  error_issue_done_ratios_not_updated: "Uzdevuma izpildes koeficients nav atjaunots."
-  error_workflow_copy_source: 'Lūdzu izvēlieties avota trakeri vai lomu'
-  error_workflow_copy_target: 'Lūdzu izvēlēties mērķa trakeri(us) un lomu(as)'
-  
-  warning_attachments_not_saved: "%{count} datnes netika saglabātas."
-  
-  mail_subject_lost_password: "Jūsu %{value} parole"
-  mail_body_lost_password: 'Lai mainītu paroli, spiediet uz šīs saites:'
-  mail_subject_register: "Jūsu %{value} konta aktivizācija"
-  mail_body_register: 'Lai izveidotu kontu, spiediet uz šīs saites:'
-  mail_body_account_information_external: "Varat izmantot Jūsu %{value} kontu, lai pieslēgtos."
-  mail_body_account_information: Jūsu konta informācija
-  mail_subject_account_activation_request: "%{value} konta aktivizācijas pieprasījums"
-  mail_body_account_activation_request: "Jauns lietotājs (%{value}) ir reģistrēts. Lietotāja konts gaida Jūsu apstiprinājumu:"
-  mail_subject_reminder: "%{count} uzdevums(i) sagaidāms(i) tuvākajās %{days} dienās"
-  mail_body_reminder: "%{count} uzdevums(i), kurš(i) ir nozīmēts(i) Jums, sagaidāms(i) tuvākajās %{days} dienās:"
-  mail_subject_wiki_content_added: "'%{id}' Wiki lapa pievienota"
-  mail_body_wiki_content_added: "The '%{id}' Wiki lapu pievienojis %{author}."
-  mail_subject_wiki_content_updated: "'%{id}' Wiki lapa atjaunota"
-  mail_body_wiki_content_updated: "The '%{id}' Wiki lapu atjaunojis %{author}."
-  
-  gui_validation_error: 1 kļūda
-  gui_validation_error_plural: "%{count} kļūdas"
-  
-  field_name: Nosaukums
-  field_description: Apraksts
-  field_summary: Kopsavilkums
-  field_is_required: Nepieciešams
-  field_firstname: Vārds
-  field_lastname: Uzvārds
-  field_mail: "E-pasts"
-  field_filename: Datne
-  field_filesize: Izmērs
-  field_downloads: Lejupielādes
-  field_author: Autors
-  field_created_on: Izveidots
-  field_updated_on: Atjaunots
-  field_field_format: Formāts
-  field_is_for_all: Visiem projektiem
-  field_possible_values: Iespējamās vērtības
-  field_regexp: Regulārā izteiksme
-  field_min_length: Minimālais garums
-  field_max_length: Maksimālais garums
-  field_value: Vērtība
-  field_category: Kategorija
-  field_title: Nosaukums
-  field_project: Projekts
-  field_issue: Uzdevums
-  field_status: Statuss
-  field_notes: Piezīmes
-  field_is_closed: Uzdevums slēgts
-  field_is_default: Noklusētā vērtība
-  field_tracker: Trakeris
-  field_subject: Temats
-  field_due_date: Sagaidāmais datums
-  field_assigned_to: Piešķirts
-  field_priority: Prioritāte
-  field_fixed_version: Mērķa versija
-  field_user: Lietotājs
-  field_role: Loma
-  field_homepage: Vietne
-  field_is_public: Publisks
-  field_parent: Apakšprojekts projektam
-  field_is_in_roadmap: Ceļvedī parādītie uzdevumi
-  field_login: Pieslēgties
-  field_mail_notification: "E-pasta paziņojumi"
-  field_admin: Administrators
-  field_last_login_on: Pēdējo reizi pieslēdzies
-  field_language: Valoda
-  field_effective_date: Datums
-  field_password: Parole
-  field_new_password: Janā parole
-  field_password_confirmation: Paroles apstiprinājums
-  field_version: Versija
-  field_type: Tips
-  field_host: Hosts
-  field_port: Ports
-  field_account: Konts
-  field_base_dn: Base DN
-  field_attr_login: Pieslēgšanās atribūts
-  field_attr_firstname: Vārda atribūts
-  field_attr_lastname: Uzvārda atribūts
-  field_attr_mail: "E-pasta atribūts"
-  field_onthefly: "Lietotāja izveidošana on-the-fly"
-  field_start_date: Sākuma datums
-  field_done_ratio: % padarīti
-  field_auth_source: Pilnvarošanas režīms
-  field_hide_mail: "Paslēpt manu e-pasta adresi"
-  field_comments: Komentārs
-  field_url: URL
-  field_start_page: Sākuma lapa
-  field_subproject: Apakšprojekts
-  field_hours: Stundas
-  field_activity: Aktivitāte
-  field_spent_on: Datums
-  field_identifier: Identifikators
-  field_is_filter: Izmantots kā filtrs
-  field_issue_to: Saistīts uzdevums
-  field_delay: Kavējums
-  field_assignable: Uzdevums var tikt piesaistīts šai lomai
-  field_redirect_existing_links: Pāradresēt eksistējošās saites
-  field_estimated_hours: Paredzētais laiks
-  field_column_names: Kolonnas
-  field_time_zone: Laika zona
-  field_searchable: Meklējams
-  field_default_value: Noklusētā vērtība
-  field_comments_sorting: Rādīt komentārus
-  field_parent_title: Vecāka lapa
-  field_editable: Rediģējams
-  field_watcher: Vērotājs
-  field_identity_url: OpenID URL
-  field_content: Saturs
-  field_group_by: Grupēt rezultātus pēc
-  field_sharing: Koplietošana
-  
-  setting_app_title: Programmas nosaukums
-  setting_app_subtitle: Programmas apakš-nosaukums
-  setting_welcome_text: Sveiciena teksts
-  setting_default_language: Noklusētā valoda
-  setting_login_required: Nepieciešama pilnvarošana
-  setting_self_registration: Pašreģistrēšanās
-  setting_attachment_max_size: Pielikuma maksimālais izmērs
-  setting_issues_export_limit: Uzdevumu eksporta ierobežojums
-  setting_mail_from: "E-pasta adrese informācijas nosūtīšanai"
-  setting_bcc_recipients: "Saņēmēju adreses neparādīsies citu saņēmēju vēstulēs (bcc)"
-  setting_plain_text_mail: "Vēstule brīvā tekstā (bez HTML)"
-  setting_host_name: Hosta nosaukums un piekļuves ceļš
-  setting_text_formatting: Teksta formatēšana
-  setting_wiki_compression: Wiki vēstures saspiešana
-  setting_feeds_limit: Barotnes satura ierobežojums
-  setting_default_projects_public: Jaunie projekti noklusēti ir publiski pieejami
-  setting_autofetch_changesets: "Automātiski lietot jaunāko versiju, pieslēdzoties repozitorijam (Autofetch)"
-  setting_sys_api_enabled: Ieslēgt WS repozitoriju menedžmentam
-  setting_commit_ref_keywords: Norādes atslēgvārdi
-  setting_commit_fix_keywords:  Fiksējošie atslēgvārdi
-  setting_autologin: Automātiskā pieslēgšanās
-  setting_date_format: Datuma formāts
-  setting_time_format: Laika formāts
-  setting_cross_project_issue_relations: "Atļaut starp-projektu uzdevumu relācijas"
-  setting_issue_list_default_columns: Noklusēti rādītās kolonnas uzdevumu sarakstā
-  setting_repositories_encodings: Repozitoriju kodējumi
-  setting_commit_logs_encoding: Kodēt ziņojumus
-  setting_emails_footer: "E-pastu kājene"
-  setting_protocol: Protokols
-  setting_per_page_options: Objekti vienā lapā
-  setting_user_format: Lietotāju rādīšanas formāts
-  setting_activity_days_default: Dienus skaits aktivitāšu rādīšanai aktivitāšu sadaļā
-  setting_display_subprojects_issues: Rādīt apakšprojekta uzdevumus galvenajā projektā pēc noklusējuma
-  setting_enabled_scm: Lietot SCM
-  setting_mail_handler_body_delimiters: "Saīsināt pēc vienas no šim rindām"
-  setting_mail_handler_api_enabled: "Lietot WS ienākošajiem e-pastiem"
-  setting_mail_handler_api_key: API atslēga
-  setting_sequential_project_identifiers: Ģenerēt secīgus projektu identifikatorus
-  setting_gravatar_enabled: Izmantot Gravatar lietotāju ikonas
-  setting_gravatar_default: Noklusētais Gravatar attēls
-  setting_diff_max_lines_displayed: Maksimālais rādīto diff rindu skaits
-  setting_file_max_size_displayed: Maksimālais izmērs iekļautajiem teksta failiem
-  setting_repository_log_display_limit: Maksimālais žurnāla datnē rādīto revīziju skaits
-  setting_openid: Atļaut OpenID pieslēgšanos un reģistrēšanos
-  setting_password_min_length: Minimālais paroles garums
-  setting_new_project_user_role_id: Loma, kura tiek piešķirta ne-administratora lietotājam, kurš izveido projektu
-  setting_default_projects_modules: Noklusētie lietotie moduļi jaunam projektam
-  setting_issue_done_ratio: Aprēķināt uzdevuma izpildes koeficientu ar
-  setting_issue_done_ratio_issue_field: uzdevuma lauku
-  setting_issue_done_ratio_issue_status: uzdevuma statusu
-  setting_start_of_week: Sākt kalendāru ar
-  setting_rest_api_enabled: Lietot REST web-servisu
-  setting_cache_formatted_text: Kešot formatētu tekstu
-  
-  permission_add_project: Izveidot projektu
-  permission_add_subprojects: Izveidot apakšprojektu
-  permission_edit_project: Rediģēt projektu
-  permission_select_project_modules: Izvēlēties projekta moduļus
-  permission_manage_members: Pārvaldīt dalībniekus
-  permission_manage_project_activities: Pārvaldīt projekta aktivitātes
-  permission_manage_versions: Pārvaldīt versijas
-  permission_manage_categories: Pārvaldīt uzdevumu kategorijas
-  permission_view_issues: Apskatīt uzdevumus
-  permission_add_issues: Pievienot uzdevumus
-  permission_edit_issues: Rediģēt uzdevumus
-  permission_manage_issue_relations: Pārvaldīt uzdevumu relācijas
-  permission_add_issue_notes: Pievienot piezīmes
-  permission_edit_issue_notes: Rediģēt piezīmes
-  permission_edit_own_issue_notes: Rediģēt paša piezīmes
-  permission_move_issues: Pārvietot uzdevumus
-  permission_delete_issues: Dzēst uzdevumus
-  permission_manage_public_queries: Pārvaldīt publiskos pieprasījumus
-  permission_save_queries: Saglabāt pieprasījumus
-  permission_view_gantt: Skatīt Ganta diagrammu
-  permission_view_calendar: Skatīt kalendāru
-  permission_view_issue_watchers: Skatīt vērotāju sarakstu
-  permission_add_issue_watchers: Pievienot vērotājus
-  permission_delete_issue_watchers: Dzēst vērotājus
-  permission_log_time: Piereģistrēt pavadīto laiku
-  permission_view_time_entries: Skatīt pavadīto laiku
-  permission_edit_time_entries: Rdiģēt laika reģistrus
-  permission_edit_own_time_entries:  Rediģēt savus laika reģistrus
-  permission_manage_news: Pārvaldīt jaunumus
-  permission_comment_news: Komentēt jaunumus
-  permission_manage_documents: Pārvaldīt dokumentus
-  permission_view_documents: Skatīt dokumentus
-  permission_manage_files: Pārvaldīt failus
-  permission_view_files: Skatīt failus
-  permission_manage_wiki: Pārvaldīt wiki
-  permission_rename_wiki_pages: Pārsaukt wiki lapas
-  permission_delete_wiki_pages: Dzēst wiki lapas
-  permission_view_wiki_pages: Skatīt wiki
-  permission_view_wiki_edits: Skatīt wiki vēsturi
-  permission_edit_wiki_pages: Rdiģēt wiki lapas
-  permission_delete_wiki_pages_attachments: Dzēst pielikumus
-  permission_protect_wiki_pages: Projekta wiki lapas
-  permission_manage_repository: Pārvaldīt repozitoriju
-  permission_browse_repository: Pārlūkot repozitoriju
-  permission_view_changesets: Skatīt izmaiņu kopumus  
-  permission_commit_access: Atļaut piekļuvi
-  permission_manage_boards: Pārvaldīt ziņojumu dēļus
-  permission_view_messages: Skatīt ziņas
-  permission_add_messages: Publicēt ziņas
-  permission_edit_messages: Rediģēt ziņas
-  permission_edit_own_messages: Rediģēt savas ziņas
-  permission_delete_messages: Dzēst ziņas
-  permission_delete_own_messages: Dzēst savas ziņas
-  permission_export_wiki_pages: Eksportēt Wiki lapas
-  
-  project_module_issue_tracking: Uzdevumu uzskaite
-  project_module_time_tracking: Laika uzskaite
-  project_module_news: Jaunumi
-  project_module_documents: Dokumenti
-  project_module_files: Datnes
-  project_module_wiki: Wiki
-  project_module_repository: Repozitorijs
-  project_module_boards: Ziņojumu dēļi
-  
-  label_user: Lietotājs
-  label_user_plural: Lietotāji
-  label_user_new: Jauns lietotājs
-  label_user_anonymous: Anonīms
-  label_project: Projekts
-  label_project_new: Jauns projekts
-  label_project_plural: Projekti
-  label_x_projects:
-    zero:  nav projektu
-    one:   1 projekts
-    other: "%{count} projekti"
-  label_project_all: Visi projekti
-  label_project_latest: Jaunākie projekti
-  label_issue: Uzdevums
-  label_issue_new: Jauns uzdevums
-  label_issue_plural: Uzdevumi
-  label_issue_view_all: Skatīt visus uzdevumus
-  label_issues_by: "Kārtot pēc %{value}"
-  label_issue_added: Uzdevums pievienots
-  label_issue_updated: Uzdevums atjaunots
-  label_document: Dokuments
-  label_document_new: Jauns dokuments
-  label_document_plural: Dokumenti
-  label_document_added: Dokuments pievienots
-  label_role: Loma
-  label_role_plural: Lomas
-  label_role_new: Jauna loma
-  label_role_and_permissions: Lomas un atļaujas
-  label_member: Dalībnieks
-  label_member_new: Jauns dalībnieks
-  label_member_plural: Dalībnieki
-  label_tracker: Trakeris
-  label_tracker_plural: Trakeri
-  label_tracker_new: Jauns trakeris
-  label_workflow: Darba gaita
-  label_issue_status: Uzdevuma statuss
-  label_issue_status_plural: Uzdevumu statusi
-  label_issue_status_new: Jauns statuss
-  label_issue_category: Uzdevuma kategorija
-  label_issue_category_plural: Uzdevumu kategorijas
-  label_issue_category_new: Jauna kategorija
-  label_custom_field: Pielāgojams lauks
-  label_custom_field_plural: Pielāgojami lauki
-  label_custom_field_new: Jauns pielāgojams lauks
-  label_enumerations: Uzskaitījumi
-  label_enumeration_new: Jauna vērtība
-  label_information: Informācija
-  label_information_plural: Informācija
-  label_please_login: Lūdzu pieslēdzieties
-  label_register: Reģistrēties
-  label_login_with_open_id_option: vai pieslēgties ar OpenID
-  label_password_lost: Nozaudēta parole
-  label_home: Sākums
-  label_home_heading: Sākums
-  label_my_page: Mana lapa
-  label_my_account: Mans konts
-  label_my_projects: Mani projekti
-  label_administration: Administrācija
-  label_login: Pieslēgties
-  label_logout: Atslēgties
-  label_help: Palīdzība
-  label_reported_issues: Ziņotie uzdevumi
-  label_assigned_to_me_issues: Man piesaistītie uzdevumi
-  label_last_login: Pēdējā pieslēgšanās
-  label_registered_on: Reģistrējies
-  label_activity: Aktivitāte
-  label_overall_activity: Kopējās aktivitātes
-  label_user_activity: "Lietotāja %{value} aktivitātes"
-  label_new: Jauns
-  label_logged_as: Pieslēdzies kā
-  label_environment: Vide
-  label_authentication: Pilnvarošana
-  label_auth_source: Pilnvarošanas režīms
-  label_auth_source_new: Jauns pilnvarošanas režīms
-  label_auth_source_plural: Pilnvarošanas režīmi
-  label_subproject_plural: Apakšprojekti
-  label_subproject_new: Jauns apakšprojekts
-  label_and_its_subprojects: "%{value} un tā apakšprojekti"
-  label_min_max_length: Minimālais - Maksimālais garums
-  label_list: Saraksts
-  label_date: Datums
-  label_integer: Vesels skaitlis
-  label_float: Decimālskaitlis
-  label_boolean: Patiesuma vērtība
-  label_string: Teksts
-  label_text: Garš teksts
-  label_attribute: Atribūts
-  label_attribute_plural: Atribūti
-  label_download: "%{count} Lejupielāde"
-  label_download_plural: "%{count} Lejupielādes"
-  label_no_data: Nav datu, ko parādīt
-  label_change_status: Mainīt statusu
-  label_history: Vēsture
-  label_attachment: Pielikums
-  label_attachment_new: Jauns pielikums
-  label_attachment_delete: Dzēst pielikumu
-  label_attachment_plural: Pielikumi
-  label_file_added: Lauks pievienots
-  label_report: Atskaite
-  label_report_plural: Atskaites
-  label_news: Ziņa
-  label_news_new: Pievienot ziņu
-  label_news_plural: Ziņas
-  label_news_latest: Jaunākās ziņas
-  label_news_view_all: Skatīt visas ziņas
-  label_news_added: Ziņas pievienotas
-  label_settings: Iestatījumi
-  label_overview: Pārskats
-  label_version: Versija
-  label_version_new: Jauna versija
-  label_version_plural: Versijas
-  label_close_versions: Aizvērt pabeigtās versijas
-  label_confirmation: Apstiprinājums
-  label_export_to: 'Pieejams arī:'
-  label_read: Lasīt...
-  label_public_projects: Publiskie projekti
-  label_open_issues: atvērts
-  label_open_issues_plural: atvērti
-  label_closed_issues: slēgts
-  label_closed_issues_plural: slēgti
-  label_x_open_issues_abbr_on_total:
-    zero:  0 atvērti / %{total}
-    one:   1 atvērts / %{total}
-    other: "%{count} atvērti / %{total}"
-  label_x_open_issues_abbr:
-    zero:  0 atvērti
-    one:   1 atvērts
-    other: "%{count} atvērti"
-  label_x_closed_issues_abbr:
-    zero:  0 slēgti
-    one:   1 slēgts
-    other: "%{count} slēgti"
-  label_total: Kopā
-  label_permissions: Atļaujas
-  label_current_status: Pašreizējais statuss
-  label_new_statuses_allowed: Jauni statusi atļauti
-  label_all: visi
-  label_none: neviens
-  label_nobody: nekas
-  label_next: Nākošais
-  label_previous: Iepriekšējais
-  label_used_by: Izmanto
-  label_details: Detaļas
-  label_add_note: Pievienot piezīmi
-  label_per_page: katrā lapā
-  label_calendar: Kalendārs
-  label_months_from: mēneši no
-  label_gantt: Ganta diagramma
-  label_internal: Iekšējais
-  label_last_changes: "pēdējās %{count} izmaiņas"
-  label_change_view_all: Skatīt visas izmaiņas
-  label_personalize_page: Pielāgot šo lapu
-  label_comment: Komentārs
-  label_comment_plural: Komentāri
-  label_x_comments:
-    zero: nav komentāru
-    one: 1 komentārs
-    other: "%{count} komentāri"
-  label_comment_add: Pievienot komentāru
-  label_comment_added: Komentārs pievienots
-  label_comment_delete: Dzēst komentārus
-  label_query: Pielāgots pieprasījums
-  label_query_plural: Pielāgoti pieprasījumi
-  label_query_new: Jauns pieprasījums
-  label_filter_add: Pievienot filtru
-  label_filter_plural: Filtri
-  label_equals: ir
-  label_not_equals: nav
-  label_in_less_than: ir mazāk kā
-  label_in_more_than: ir vairāk kā
-  label_greater_or_equal: '>='
-  label_less_or_equal: '<='
-  label_in: iekš
-  label_today: šodien
-  label_all_time: visu laiku
-  label_yesterday: vakar
-  label_this_week: šonedēļ
-  label_last_week: pagājušo šonedēļ
-  label_last_n_days: "pēdējās %{count} dienas"
-  label_this_month: šomēnes
-  label_last_month: pagājušo mēnes
-  label_this_year: šogad
-  label_date_range: Datumu apgabals
-  label_less_than_ago: mazāk kā dienas iepriekš
-  label_more_than_ago: vairāk kā dienas iepriekš
-  label_ago: dienas iepriekš
-  label_contains: satur
-  label_not_contains: nesatur
-  label_day_plural: dienas
-  label_repository: Repozitorijs
-  label_repository_plural: Repozitoriji
-  label_browse: Pārlūkot
-  label_modification: "%{count} izmaiņa"
-  label_modification_plural: "%{count} izmaiņas"
-  label_branch: Zars
-  label_tag: Birka 
-  label_revision: Revīzija
-  label_revision_plural: Revīzijas
-  label_revision_id: "Revīzija %{value}"
-  label_associated_revisions: Saistītās revīzijas
-  label_added: pievienots
-  label_modified: modificēts
-  label_copied: nokopēts
-  label_renamed: pārsaukts
-  label_deleted: dzēsts
-  label_latest_revision: Pēdējā revīzija
-  label_latest_revision_plural: Pēdējās revīzijas
-  label_view_revisions: Skatīt revīzijas
-  label_view_all_revisions: Skatīt visas revīzijas
-  label_max_size: Maksimālais izmērs
-  label_sort_highest: Pārvietot uz augšu
-  label_sort_higher: Pārvietot soli augšup
-  label_sort_lower: Pārvietot uz leju
-  label_sort_lowest: Pārvietot vienu soli uz leju
-  label_roadmap: Ceļvedis
-  label_roadmap_due_in: "Sagaidāms pēc %{value}"
-  label_roadmap_overdue: "nokavēts %{value}"
-  label_roadmap_no_issues: Šai versijai nav uzdevumu
-  label_search: Meklēt
-  label_result_plural: Rezultāti
-  label_all_words: Visi vārdi
-  label_wiki: Wiki
-  label_wiki_edit: Wiki labojums
-  label_wiki_edit_plural: Wiki labojumi
-  label_wiki_page: Wiki lapa
-  label_wiki_page_plural: Wiki lapas
-  label_index_by_title: Indeksēt pēc nosaukuma
-  label_index_by_date: Indeksēt pēc datuma
-  label_current_version: Tekošā versija
-  label_preview: Priekšskatījums
-  label_feed_plural: Barotnes
-  label_changes_details: Visu izmaiņu detaļas
-  label_issue_tracking: Uzdevumu uzskaite
-  label_spent_time: Pavadītais laiks
-  label_f_hour: "%{value} stunda"
-  label_f_hour_plural: "%{value} stundas"
-  label_time_tracking: Laika uzskaite
-  label_change_plural: Izmaiņas
-  label_statistics: Statistika
-  label_commits_per_month: Nodevumi mēnesī
-  label_commits_per_author: Nodevumi no autora
-  label_view_diff: Skatīt atšķirības
-  label_diff_inline: iekļauts
-  label_diff_side_by_side: blakus
-  label_options: Opcijas
-  label_copy_workflow_from: Kopēt darba plūsmu no
-  label_permissions_report: Atļauju atskaite
-  label_watched_issues: Vērotie uzdevumi
-  label_related_issues: Saistītie uzdevumi
-  label_applied_status: Piešķirtais statuss
-  label_loading: Lādējas...
-  label_relation_new: Jauna relācija
-  label_relation_delete: Dzēst relāciju
-  label_relates_to: saistīts ar
-  label_duplicates: dublikāti
-  label_duplicated_by: dublējas ar
-  label_blocks: bloķē
-  label_blocked_by: nobloķējis
-  label_precedes: pirms
-  label_follows: seko
-  label_end_to_start: no beigām uz sākumu
-  label_end_to_end: no beigām uz beigām
-  label_start_to_start: no sākuma uz sākumu
-  label_start_to_end: no sākuma uz beigām
-  label_stay_logged_in: Atcerēties mani
-  label_disabled: izslēgts
-  label_show_completed_versions: Rādīt pabeigtās versijas
-  label_me: es
-  label_board: Forums
-  label_board_new: Jauns forums
-  label_board_plural: Forumi
-  label_board_locked: Slēgts
-  label_board_sticky: Svarīgs
-  label_topic_plural: Tēmas
-  label_message_plural: Ziņas
-  label_message_last: Pēdējā ziņa
-  label_message_new: Jauna ziņa
-  label_message_posted: Ziņa pievienota
-  label_reply_plural: Atbildes
-  label_send_information: Sūtīt konta informāciju lietotājam
-  label_year: Gads
-  label_month: Mēnesis
-  label_week: Nedēļa
-  label_date_from: No
-  label_date_to: Kam
-  label_language_based: Izmantot lietotāja valodu
-  label_sort_by: "Kārtot pēc %{value}"
-  label_send_test_email: "Sūtīt testa e-pastu"
-  label_feeds_access_key: RSS piekļuves atslēga
-  label_missing_feeds_access_key: Trūkst RSS piekļuves atslēgas
-  label_feeds_access_key_created_on: "RSS piekļuves atslēga izveidota pirms %{value}"
-  label_module_plural: Moduļi
-  label_added_time_by: "Pievienojis %{author} pirms %{age}"
-  label_updated_time_by: "Atjaunojis %{author} pirms %{age}"
-  label_updated_time: "Atjaunots pirms %{value}"
-  label_jump_to_a_project: Pāriet uz projektu...
-  label_file_plural: Datnes
-  label_changeset_plural: Izmaiņu kopumi
-  label_default_columns: Noklusētās kolonnas
-  label_no_change_option: (Nav izmaiņu)
-  label_bulk_edit_selected_issues: Labot visus izvēlētos uzdevumus
-  label_theme: Tēma
-  label_default: Noklusēts
-  label_search_titles_only: Meklēt tikai nosaukumos
-  label_user_mail_option_all: "Par visiem notikumiem visos manos projektos"
-  label_user_mail_option_selected: "Par visiem notikumiem tikai izvēlētajos projektos..."
-  label_user_mail_no_self_notified: "Neziņot man par izmaiņām, kuras veicu es pats"
-  label_registration_activation_by_email: "konta aktivizācija caur e-pastu"
-  label_registration_manual_activation: manuālā konta aktivizācija
-  label_registration_automatic_activation: automātiskā konta aktivizācija
-  label_display_per_page: "Rādīt vienā lapā: %{value}"
-  label_age: Vecums
-  label_change_properties: Mainīt atribūtus
-  label_general: Galvenais
-  label_more: Vēl
-  label_scm: SCM
-  label_plugins: Spraudņi
-  label_ldap_authentication: LDAP pilnvarošana
-  label_downloads_abbr: L-lād.
-  label_optional_description: "Apraksts (neobligāts)"
-  label_add_another_file: Pievienot citu failu
-  label_preferences: Priekšrocības
-  label_chronological_order: Hronoloģiskā kārtībā
-  label_reverse_chronological_order: Apgriezti hronoloģiskā kārtībā
-  label_planning: Plānošana
-  label_incoming_emails: "Ienākošie e-pasti"
-  label_generate_key: Ģenerēt atslēgu
-  label_issue_watchers: Vērotāji
-  label_example: Piemērs
-  label_display: Rādīt
-  label_sort: Kārtot
-  label_ascending: Augoši
-  label_descending: Dilstoši
-  label_date_from_to: "No %{start} līdz %{end}"
-  label_wiki_content_added: Wiki lapa pievienota
-  label_wiki_content_updated: Wiki lapa atjaunota
-  label_group: Grupa
-  label_group_plural: Grupas
-  label_group_new: Jauna grupa
-  label_time_entry_plural: Pavadītais laiks
-  label_version_sharing_none: Nav koplietošanai
-  label_version_sharing_descendants: Ar apakšprojektiem
-  label_version_sharing_hierarchy: Ar projektu hierarhiju
-  label_version_sharing_tree: Ar projekta koku
-  label_version_sharing_system: Ar visiem projektiem
-  label_update_issue_done_ratios: Atjaunot uzdevuma veikuma attiecību
-  label_copy_source: Avots
-  label_copy_target: Mērķis
-  label_copy_same_as_target: Tāds pats kā mērķis
-  label_display_used_statuses_only: "Rādīt tikai statusus, ko lieto šis trakeris"
-  label_api_access_key: API pieejas atslēga
-  label_missing_api_access_key: Trūkst API pieejas atslēga
-  label_api_access_key_created_on: "API pieejas atslēga izveidota pirms %{value}"
-  
-  button_login: Pieslēgties
-  button_submit: Nosūtīt
-  button_save: Saglabāt
-  button_check_all: Atzīmēt visu
-  button_uncheck_all: Noņemt visus atzīmējumus
-  button_delete: Dzēst
-  button_create: Izveidot
-  button_create_and_continue: Izveidot un turpināt
-  button_test: Testēt
-  button_edit: Labot
-  button_add: Pievienot
-  button_change: Mainīt
-  button_apply: Apstiprināt
-  button_clear: Notīrīt
-  button_lock: Slēgt
-  button_unlock: Atslēgt
-  button_download: Lejuplādēt
-  button_list: Saraksts
-  button_view: Skats
-  button_move: Pārvietot
-  button_move_and_follow: Pārvietot un sekot
-  button_back: Atpakaļ
-  button_cancel: Atcelt
-  button_activate: Aktivizēt
-  button_sort: Kārtot
-  button_log_time: Ilgs laiks
-  button_rollback: Atjaunot uz šo versiju
-  button_watch: Vērot
-  button_unwatch: Nevērot
-  button_reply: Atbildēt
-  button_archive: Arhivēt
-  button_unarchive: Atarhivēt
-  button_reset: Atiestatīt
-  button_rename: Pārsaukt
-  button_change_password: Mainīt paroli
-  button_copy: Kopēt
-  button_copy_and_follow: Kopēt un sekot
-  button_annotate: Pierakstīt paskaidrojumu
-  button_update: Atjaunot
-  button_configure: Konfigurēt
-  button_quote: Citāts
-  button_duplicate: Dublēt
-  button_show: Rādīt
-  
-  status_active: aktīvs
-  status_registered: reģistrēts
-  status_locked: slēgts
-  
-  version_status_open: atvērta
-  version_status_locked: slēgta
-  version_status_closed: aizvērta
-
-  field_active: Aktīvs
-  
-  text_select_mail_notifications: "Izvēlieties darbības, par kurām vēlaties saņemt ziņojumus e-pastā"
-  text_regexp_info: "piem. ^[A-Z0-9]+$"
-  text_min_max_length_info: "0 nozīmē, ka nav ierobežojumu"
-  text_project_destroy_confirmation: "Vai tiešām vēlaties dzēst šo projektu un ar to saistītos datus?"
-  text_subprojects_destroy_warning: "Tā apakšprojekts(i): %{value} arī tiks dzēsts(i)."
-  text_workflow_edit: Lai labotu darba plūsmu, izvēlieties lomu un trakeri
-  text_are_you_sure: "Vai esat pārliecināts?"
-  text_journal_changed: "%{label} mainīts no %{old} uz %{new}"
-  text_journal_set_to: "%{label} iestatīts uz %{value}"
-  text_journal_deleted: "%{label} dzēsts (%{old})"
-  text_journal_added: "%{label} %{value} pievienots"
-  text_tip_issue_begin_day: uzdevums sākas šodien
-  text_tip_issue_end_day: uzdevums beidzas šodien
-  text_tip_issue_begin_end_day: uzdevums sākas un beidzas šodien
-  text_project_identifier_info: 'Tikai mazie burti (a-z), cipari un domuzīmes ir atļauti.<br />Kad saglabāts, identifikators nevar tikt mainīts.'
-  text_caracters_maximum: "%{count} simboli maksimāli."
-  text_caracters_minimum: "Jābūt vismaz %{count} simbolu garumā."
-  text_length_between: "Garums starp %{min} un %{max} simboliem."
-  text_tracker_no_workflow: Šim trakerim nav definēta darba plūsma
-  text_unallowed_characters: Neatļauti simboli
-  text_comma_separated: "Atļautas vairākas vērtības (atdalīt ar komatu)."
-  text_line_separated: "Atļautas vairākas vērtības (rakstīt katru savā rindā)."
-  text_issues_ref_in_commit_messages: "Izmaiņu salīdzināšana izejot no ziņojumiem"
-  text_issue_added: "Uzdevumu %{id} pievienojis %{author}."
-  text_issue_updated: "Uzdevumu %{id} atjaunojis %{author}."
-  text_wiki_destroy_confirmation: "Vai esat drošs, ka vēlaties dzēst šo wiki un visu tās saturu?"
-  text_issue_category_destroy_question: "Daži uzdevumi (%{count}) ir nozīmēti šai kategorijai. Ko Jūs vēlaties darīt?"
-  text_issue_category_destroy_assignments: Dzēst kategoriju nozīmējumus
-  text_issue_category_reassign_to: Nozīmēt uzdevumus šai kategorijai
-  text_user_mail_option: "No neizvēlētajiem projektiem Jūs saņemsiet ziņojumus e-pastā tikai par notikumiem, kuriem Jūs sekojat vai kuros esat iesaistīts." 
-  text_no_configuration_data: "Lomas, trakeri, uzdevumu statusi un darba plūsmas vēl nav konfigurētas.\nĻoti ieteicams ielādēt noklusēto konfigurāciju. Pēc ielādēšanas to būs iespējams modificēt."
-  text_load_default_configuration: Ielādēt noklusēto konfigurāciju
-  text_status_changed_by_changeset: "Apstiprināts izmaiņu kopumā %{value}."
-  text_issues_destroy_confirmation: 'Vai tiešām vēlaties dzēst izvēlēto uzdevumu(us)?'
-  text_select_project_modules: 'Izvēlieties moduļus šim projektam:'
-  text_default_administrator_account_changed: Noklusētais administratora konts mainīts
-  text_file_repository_writable: Pielikumu direktorijā atļauts rakstīt
-  text_plugin_assets_writable: Spraudņu kataloga direktorijā atļauts rakstīt
-  text_rmagick_available: "RMagick pieejams (neobligāts)"
-  text_destroy_time_entries_question: "%{hours} stundas tika ziņotas par uzdevumu, ko vēlaties dzēst. Ko darīt?"
-  text_destroy_time_entries: Dzēst ziņotās stundas
-  text_assign_time_entries_to_project: Piešķirt ziņotās stundas projektam
-  text_reassign_time_entries: 'Piešķirt ziņotās stundas uzdevumam:'
-  text_user_wrote: "%{value} rakstīja:"
-  text_enumeration_destroy_question: "%{count} objekti ir piešķirti šai vērtībai."
-  text_enumeration_category_reassign_to: 'Piešķirt tos šai vērtībai:'
-  text_email_delivery_not_configured: "E-pastu nosūtīšana nav konfigurēta, un ziņojumi ir izslēgti.\nKonfigurējiet savu SMTP serveri datnē config/configuration.yml un pārstartējiet lietotni."
-  text_repository_usernames_mapping: "Izvēlieties vai atjaunojiet Redmine lietotāju, saistītu ar katru lietotājvārdu, kas atrodams repozitorija žurnālā.\nLietotāji ar to pašu Redmine un repozitorija lietotājvārdu būs saistīti automātiski."
-  text_diff_truncated: '... Šis diff tika nošķelts, jo tas pārsniedz maksimālo izmēru, ko var parādīt.'
-  text_custom_field_possible_values_info: 'Katra vērtības savā rindā'
-  text_wiki_page_destroy_question: "Šij lapai ir %{descendants} apakšlapa(as) un pēcnācēji. Ko darīt?"
-  text_wiki_page_nullify_children: "Paturēt apakšlapas kā pamatlapas"
-  text_wiki_page_destroy_children: "Dzēst apakšlapas un visus pēcnācējus"
-  text_wiki_page_reassign_children: "Piešķirt apakšlapas šai lapai"
-  text_own_membership_delete_confirmation: "Jūs tūlīt dzēsīsiet dažas vai visas atļaujas, un Jums pēc tam var nebūt atļauja labot šo projektu.\nVai turpināt?"
-  
-  default_role_manager: Menedžeris
-  default_role_developer: Izstrādātājs
-  default_role_reporter: Ziņotājs
-  default_tracker_bug: Kļūda
-  default_tracker_feature: Iezīme
-  default_tracker_support: Atbalsts
-  default_issue_status_new: Jauns
-  default_issue_status_in_progress: Attīstībā
-  default_issue_status_resolved: Atrisināts
-  default_issue_status_feedback: Atsauksmes
-  default_issue_status_closed: Slēgts
-  default_issue_status_rejected: Noraidīts
-  default_doc_category_user: Lietotāja dokumentācija
-  default_doc_category_tech: Tehniskā dokumentācija
-  default_priority_low: Zema
-  default_priority_normal: Normāla
-  default_priority_high: Augsta
-  default_priority_urgent: Steidzama
-  default_priority_immediate: Tūlītēja
-  default_activity_design: Dizains
-  default_activity_development: Izstrādāšana
-  
-  enumeration_issue_priorities: Uzdevumu prioritātes
-  enumeration_doc_categories: Dokumentu kategorijas
-  enumeration_activities: Aktivitātes (laika uzskaite)
-  enumeration_system_activity: Sistēmas aktivitātes
-
-  error_can_not_delete_custom_field: Unable to delete custom field
-  permission_manage_subtasks: Manage subtasks
-  label_profile: Profile
-  error_unable_to_connect: Unable to connect (%{value})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  field_parent_issue: Parent task
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_subtask_plural: Subtasks
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
-  label_project_copy_notifications: Send email notifications during the project copy
-  field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
-  project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+# translated by Dzintars Bergs (dzintars.bergs@gmail.com)
+
+lv:
+  direction: ltr
+  date:
+    formats:
+      default: "%d.%m.%Y"
+      short: "%d %b"
+      long: "%d %B %Y"
+      
+    day_names: [Svētdiena, Pirmdiena, Otrdiena, Trešdiena, Ceturtdiena, Piektdiena, Sestdiena]
+    abbr_day_names: [Sv, Pr, Ot, Tr, Ct, Pk, St]
+      
+    month_names: [~, Janvāris, Februāris, Marts, Aprīlis , Maijs, Jūnijs, Jūlijs, Augusts, Septembris, Oktobris, Novembris, Decembris]
+    abbr_month_names: [~, Jan, Feb, Mar, Apr, Mai, Jūn, Jūl, Aug, Sep, Okt, Nov, Dec]
+    order:
+      - :day
+      - :month
+      - :year
+
+  time:
+    formats:
+      default: "%a, %d %b %Y, %H:%M:%S %z"
+      time: "%H:%M"
+      short: "%d %b, %H:%M"
+      long: "%B %d, %Y %H:%M"
+    am: "rītā"
+    pm: "vakarā"
+      
+  datetime:
+    distance_in_words:
+      half_a_minute: "pus minūte"
+      less_than_x_seconds:
+        one:   "mazāk kā 1 sekunde"
+        other: "mazāk kā %{count} sekundes"
+      x_seconds:
+        one:   "1 sekunde"
+        other: "%{count} sekundes"
+      less_than_x_minutes:
+        one:   "mazāk kā minūte"
+        other: "mazāk kā %{count} minūtes"
+      x_minutes:
+        one:   "1 minūte"
+        other: "%{count} minūtes"
+      about_x_hours:
+        one:   "aptuveni 1 stunda"
+        other: "aptuveni %{count} stundas"
+      x_days:
+        one:   "1 diena"
+        other: "%{count} dienas"
+      about_x_months:
+        one:   "aptuveni 1 mēnesis"
+        other: "aptuveni %{count} mēneši"
+      x_months:
+        one:   "1 mēnesis"
+        other: "%{count} mēneši"
+      about_x_years:
+        one:   "aptuveni 1 gads"
+        other: "aptuveni %{count} gadi"
+      over_x_years:
+        one:   "ilgāk par 1 gadu"
+        other: "ilgāk par %{count} gadiem"
+      almost_x_years:
+        one:   "gandrīz 1 gadu"
+        other: "gandrīz %{count} gadus"
+
+  number:
+    format:
+      separator: "."
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: " "
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Baits"
+            other: "Baiti"
+          kb: "KB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+        
+  support:
+    array:
+      sentence_connector: "un"
+      skip_last_comma: false
+      
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "1 error prohibited this %{model} from being saved"
+          other:  "%{count} errors prohibited this %{model} from being saved"
+      messages:
+        inclusion: "nav iekļauts sarakstā"
+        exclusion: "ir rezervēts"
+        invalid: "nederīgs"
+        confirmation: "apstiprinājums nesakrīt"
+        accepted: "jābūt akceptētam"
+        empty: "nevar būt tukšs"
+        blank: "nevar būt neaizpildīts"
+        too_long: "ir pārāk gara(š) (maksimālais garums ir %{count} simboli)"
+        too_short: "ir pārāk īsa(s) (minimālais garums ir %{count} simboli)"
+        wrong_length: "ir nepareiza garuma (vajadzētu būt %{count} simboli)"
+        taken: "eksistē"
+        not_a_number: "nav skaitlis"
+        not_a_date: "nav derīgs datums"
+        greater_than: "jābūt lielākam par %{count}"
+        greater_than_or_equal_to: "jābūt lielākam vai vienādam ar %{count}"
+        equal_to: "jābūt vienādam ar %{count}"
+        less_than: "jābūt mazākam kā %{count}"
+        less_than_or_equal_to: "jābūt mazākam vai vienādam ar %{count}"
+        odd: "jāatšķirās"
+        even: "jāsakrīt"
+        greater_than_start_date: "jābūt vēlākam par sākuma datumu"
+        not_same_project: "nepieder pie tā paša projekta"
+        circular_dependency: "Šī relācija radītu ciklisku atkarību"
+        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+
+  actionview_instancetag_blank_option: Izvēlieties
+  
+  general_text_No: 'Nē'
+  general_text_Yes: 'Jā'
+  general_text_no: 'nē'
+  general_text_yes: 'jā'
+  general_lang_name: 'Latvian (Latviešu)'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '1'
+  
+  notice_account_updated: Konts tika atjaunots veiksmīgi.
+  notice_account_invalid_creditentials: Nepareizs lietotāja vārds vai parole.
+  notice_account_password_updated: Parole tika veiksmīgi atjaunota.
+  notice_account_wrong_password: Nepareiza parole
+  notice_account_register_done: Konts veiksmīgi izveidots. Lai aktivizētu kontu, spiediet uz saites, kas Jums tika nosūtīta.
+  notice_account_unknown_email: Nezināms lietotājs
+  notice_can_t_change_password: Šis konts izmanto ārēju pilnvarošanas avotu. Nav iespējams nomainīt paroli.
+  notice_account_lost_email_sent: Jums tika nosūtīts e-pasts ar instrukcijām, kā izveidot jaunu paroli.
+  notice_account_activated: Jūsu konts ir aktivizēts. Varat pieslēgties sistēmai.
+  notice_successful_create: Veiksmīga izveide.
+  notice_successful_update: Veiksmīga atjaunošana.
+  notice_successful_delete: Veiksmīga dzēšana.
+  notice_successful_connection: Veiksmīgs savienojums.
+  notice_file_not_found: Lapa, ko Jūs mēģināt atvērt, neeksistē vai ir pārvietota.
+  notice_locking_conflict: Datus ir atjaunojis cits lietotājs.
+  notice_not_authorized: Jums nav tiesību piekļūt šai lapai.
+  notice_email_sent: "E-pasts tika nosūtīts uz %{value}"
+  notice_email_error: "Kļūda sūtot e-pastu (%{value})"
+  notice_feeds_access_key_reseted: Jūsu RSS pieejas atslēga tika iestatīta sākuma stāvoklī.
+  notice_api_access_key_reseted: Jūsu API pieejas atslēga tika iestatīta sākuma stāvoklī.
+  notice_failed_to_save_issues: "Neizdevās saglabāt %{count} uzdevumu(us) no %{total} izvēlēti: %{ids}."
+  notice_no_issue_selected: "Nav izvēlēts uzdevums! Lūdzu, atzīmējiet uzdevumus, kurus vēlaties rediģēt!"
+  notice_account_pending: "Jūsu konts tika izveidots un šobrīd gaida administratora apstiprinājumu."
+  notice_default_data_loaded: Noklusētā konfigurācija tika veiksmīgi ielādēta.
+  notice_unable_delete_version: Neizdevās dzēst versiju.
+  notice_issue_done_ratios_updated: Uzdevuma izpildes koeficients atjaunots.
+  
+  error_can_t_load_default_data: "Nevar ielādēt noklusētos konfigurācijas datus: %{value}"
+  error_scm_not_found: "Ieraksts vai versija nebija repozitorijā."
+  error_scm_command_failed: "Mēģinot piekļūt repozitorijam, notika kļūda: %{value}"
+  error_scm_annotate: "Ieraksts neeksistē vai tam nevar tikt pievienots paskaidrojums."
+  error_issue_not_found_in_project: 'Uzdevums netika atrasts vai nepieder šim projektam.'
+  error_no_tracker_in_project: 'Neviens trakeris nav saistīts ar šo projektu. Pārbaudiet projekta iestatījumus.'
+  error_no_default_issue_status: 'Nav definēts uzdevuma noklusētais statuss. Pārbaudiet konfigurāciju (Ejat uz: "Administrācija -> Uzdevumu statusi")!'
+  error_can_not_reopen_issue_on_closed_version: 'Nevar pievienot atsauksmi uzdevumam, kas saistīts ar slēgtu versiju.'
+  error_can_not_archive_project: Šis projekts nevar tikt arhivēts
+  error_issue_done_ratios_not_updated: "Uzdevuma izpildes koeficients nav atjaunots."
+  error_workflow_copy_source: 'Lūdzu izvēlieties avota trakeri vai lomu'
+  error_workflow_copy_target: 'Lūdzu izvēlēties mērķa trakeri(us) un lomu(as)'
+  
+  warning_attachments_not_saved: "%{count} datnes netika saglabātas."
+  
+  mail_subject_lost_password: "Jūsu %{value} parole"
+  mail_body_lost_password: 'Lai mainītu paroli, spiediet uz šīs saites:'
+  mail_subject_register: "Jūsu %{value} konta aktivizācija"
+  mail_body_register: 'Lai izveidotu kontu, spiediet uz šīs saites:'
+  mail_body_account_information_external: "Varat izmantot Jūsu %{value} kontu, lai pieslēgtos."
+  mail_body_account_information: Jūsu konta informācija
+  mail_subject_account_activation_request: "%{value} konta aktivizācijas pieprasījums"
+  mail_body_account_activation_request: "Jauns lietotājs (%{value}) ir reģistrēts. Lietotāja konts gaida Jūsu apstiprinājumu:"
+  mail_subject_reminder: "%{count} uzdevums(i) sagaidāms(i) tuvākajās %{days} dienās"
+  mail_body_reminder: "%{count} uzdevums(i), kurš(i) ir nozīmēts(i) Jums, sagaidāms(i) tuvākajās %{days} dienās:"
+  mail_subject_wiki_content_added: "'%{id}' Wiki lapa pievienota"
+  mail_body_wiki_content_added: "The '%{id}' Wiki lapu pievienojis %{author}."
+  mail_subject_wiki_content_updated: "'%{id}' Wiki lapa atjaunota"
+  mail_body_wiki_content_updated: "The '%{id}' Wiki lapu atjaunojis %{author}."
+  
+  gui_validation_error: 1 kļūda
+  gui_validation_error_plural: "%{count} kļūdas"
+  
+  field_name: Nosaukums
+  field_description: Apraksts
+  field_summary: Kopsavilkums
+  field_is_required: Nepieciešams
+  field_firstname: Vārds
+  field_lastname: Uzvārds
+  field_mail: "E-pasts"
+  field_filename: Datne
+  field_filesize: Izmērs
+  field_downloads: Lejupielādes
+  field_author: Autors
+  field_created_on: Izveidots
+  field_updated_on: Atjaunots
+  field_field_format: Formāts
+  field_is_for_all: Visiem projektiem
+  field_possible_values: Iespējamās vērtības
+  field_regexp: Regulārā izteiksme
+  field_min_length: Minimālais garums
+  field_max_length: Maksimālais garums
+  field_value: Vērtība
+  field_category: Kategorija
+  field_title: Nosaukums
+  field_project: Projekts
+  field_issue: Uzdevums
+  field_status: Statuss
+  field_notes: Piezīmes
+  field_is_closed: Uzdevums slēgts
+  field_is_default: Noklusētā vērtība
+  field_tracker: Trakeris
+  field_subject: Temats
+  field_due_date: Sagaidāmais datums
+  field_assigned_to: Piešķirts
+  field_priority: Prioritāte
+  field_fixed_version: Mērķa versija
+  field_user: Lietotājs
+  field_role: Loma
+  field_homepage: Vietne
+  field_is_public: Publisks
+  field_parent: Apakšprojekts projektam
+  field_is_in_roadmap: Ceļvedī parādītie uzdevumi
+  field_login: Pieslēgties
+  field_mail_notification: "E-pasta paziņojumi"
+  field_admin: Administrators
+  field_last_login_on: Pēdējo reizi pieslēdzies
+  field_language: Valoda
+  field_effective_date: Datums
+  field_password: Parole
+  field_new_password: Janā parole
+  field_password_confirmation: Paroles apstiprinājums
+  field_version: Versija
+  field_type: Tips
+  field_host: Hosts
+  field_port: Ports
+  field_account: Konts
+  field_base_dn: Base DN
+  field_attr_login: Pieslēgšanās atribūts
+  field_attr_firstname: Vārda atribūts
+  field_attr_lastname: Uzvārda atribūts
+  field_attr_mail: "E-pasta atribūts"
+  field_onthefly: "Lietotāja izveidošana on-the-fly"
+  field_start_date: Sākuma datums
+  field_done_ratio: "% padarīti"
+  field_auth_source: Pilnvarošanas režīms
+  field_hide_mail: "Paslēpt manu e-pasta adresi"
+  field_comments: Komentārs
+  field_url: URL
+  field_start_page: Sākuma lapa
+  field_subproject: Apakšprojekts
+  field_hours: Stundas
+  field_activity: Aktivitāte
+  field_spent_on: Datums
+  field_identifier: Identifikators
+  field_is_filter: Izmantots kā filtrs
+  field_issue_to: Saistīts uzdevums
+  field_delay: Kavējums
+  field_assignable: Uzdevums var tikt piesaistīts šai lomai
+  field_redirect_existing_links: Pāradresēt eksistējošās saites
+  field_estimated_hours: Paredzētais laiks
+  field_column_names: Kolonnas
+  field_time_zone: Laika zona
+  field_searchable: Meklējams
+  field_default_value: Noklusētā vērtība
+  field_comments_sorting: Rādīt komentārus
+  field_parent_title: Vecāka lapa
+  field_editable: Rediģējams
+  field_watcher: Vērotājs
+  field_identity_url: OpenID URL
+  field_content: Saturs
+  field_group_by: Grupēt rezultātus pēc
+  field_sharing: Koplietošana
+  
+  setting_app_title: Programmas nosaukums
+  setting_app_subtitle: Programmas apakš-nosaukums
+  setting_welcome_text: Sveiciena teksts
+  setting_default_language: Noklusētā valoda
+  setting_login_required: Nepieciešama pilnvarošana
+  setting_self_registration: Pašreģistrēšanās
+  setting_attachment_max_size: Pielikuma maksimālais izmērs
+  setting_issues_export_limit: Uzdevumu eksporta ierobežojums
+  setting_mail_from: "E-pasta adrese informācijas nosūtīšanai"
+  setting_bcc_recipients: "Saņēmēju adreses neparādīsies citu saņēmēju vēstulēs (bcc)"
+  setting_plain_text_mail: "Vēstule brīvā tekstā (bez HTML)"
+  setting_host_name: Hosta nosaukums un piekļuves ceļš
+  setting_text_formatting: Teksta formatēšana
+  setting_wiki_compression: Wiki vēstures saspiešana
+  setting_feeds_limit: Barotnes satura ierobežojums
+  setting_default_projects_public: Jaunie projekti noklusēti ir publiski pieejami
+  setting_autofetch_changesets: "Automātiski lietot jaunāko versiju, pieslēdzoties repozitorijam (Autofetch)"
+  setting_sys_api_enabled: Ieslēgt WS repozitoriju menedžmentam
+  setting_commit_ref_keywords: Norādes atslēgvārdi
+  setting_commit_fix_keywords:  Fiksējošie atslēgvārdi
+  setting_autologin: Automātiskā pieslēgšanās
+  setting_date_format: Datuma formāts
+  setting_time_format: Laika formāts
+  setting_cross_project_issue_relations: "Atļaut starp-projektu uzdevumu relācijas"
+  setting_issue_list_default_columns: Noklusēti rādītās kolonnas uzdevumu sarakstā
+  setting_repositories_encodings: Repozitoriju kodējumi
+  setting_emails_footer: "E-pastu kājene"
+  setting_protocol: Protokols
+  setting_per_page_options: Objekti vienā lapā
+  setting_user_format: Lietotāju rādīšanas formāts
+  setting_activity_days_default: Dienus skaits aktivitāšu rādīšanai aktivitāšu sadaļā
+  setting_display_subprojects_issues: Rādīt apakšprojekta uzdevumus galvenajā projektā pēc noklusējuma
+  setting_enabled_scm: Lietot SCM
+  setting_mail_handler_body_delimiters: "Saīsināt pēc vienas no šim rindām"
+  setting_mail_handler_api_enabled: "Lietot WS ienākošajiem e-pastiem"
+  setting_mail_handler_api_key: API atslēga
+  setting_sequential_project_identifiers: Ģenerēt secīgus projektu identifikatorus
+  setting_gravatar_enabled: Izmantot Gravatar lietotāju ikonas
+  setting_gravatar_default: Noklusētais Gravatar attēls
+  setting_diff_max_lines_displayed: Maksimālais rādīto diff rindu skaits
+  setting_file_max_size_displayed: Maksimālais izmērs iekļautajiem teksta failiem
+  setting_repository_log_display_limit: Maksimālais žurnāla datnē rādīto revīziju skaits
+  setting_openid: Atļaut OpenID pieslēgšanos un reģistrēšanos
+  setting_password_min_length: Minimālais paroles garums
+  setting_new_project_user_role_id: Loma, kura tiek piešķirta ne-administratora lietotājam, kurš izveido projektu
+  setting_default_projects_modules: Noklusētie lietotie moduļi jaunam projektam
+  setting_issue_done_ratio: Aprēķināt uzdevuma izpildes koeficientu ar
+  setting_issue_done_ratio_issue_field: uzdevuma lauku
+  setting_issue_done_ratio_issue_status: uzdevuma statusu
+  setting_start_of_week: Sākt kalendāru ar
+  setting_rest_api_enabled: Lietot REST web-servisu
+  setting_cache_formatted_text: Kešot formatētu tekstu
+  
+  permission_add_project: Izveidot projektu
+  permission_add_subprojects: Izveidot apakšprojektu
+  permission_edit_project: Rediģēt projektu
+  permission_select_project_modules: Izvēlēties projekta moduļus
+  permission_manage_members: Pārvaldīt dalībniekus
+  permission_manage_project_activities: Pārvaldīt projekta aktivitātes
+  permission_manage_versions: Pārvaldīt versijas
+  permission_manage_categories: Pārvaldīt uzdevumu kategorijas
+  permission_view_issues: Apskatīt uzdevumus
+  permission_add_issues: Pievienot uzdevumus
+  permission_edit_issues: Rediģēt uzdevumus
+  permission_manage_issue_relations: Pārvaldīt uzdevumu relācijas
+  permission_add_issue_notes: Pievienot piezīmes
+  permission_edit_issue_notes: Rediģēt piezīmes
+  permission_edit_own_issue_notes: Rediģēt paša piezīmes
+  permission_move_issues: Pārvietot uzdevumus
+  permission_delete_issues: Dzēst uzdevumus
+  permission_manage_public_queries: Pārvaldīt publiskos pieprasījumus
+  permission_save_queries: Saglabāt pieprasījumus
+  permission_view_gantt: Skatīt Ganta diagrammu
+  permission_view_calendar: Skatīt kalendāru
+  permission_view_issue_watchers: Skatīt vērotāju sarakstu
+  permission_add_issue_watchers: Pievienot vērotājus
+  permission_delete_issue_watchers: Dzēst vērotājus
+  permission_log_time: Piereģistrēt pavadīto laiku
+  permission_view_time_entries: Skatīt pavadīto laiku
+  permission_edit_time_entries: Rdiģēt laika reģistrus
+  permission_edit_own_time_entries:  Rediģēt savus laika reģistrus
+  permission_manage_news: Pārvaldīt jaunumus
+  permission_comment_news: Komentēt jaunumus
+  permission_manage_documents: Pārvaldīt dokumentus
+  permission_view_documents: Skatīt dokumentus
+  permission_manage_files: Pārvaldīt failus
+  permission_view_files: Skatīt failus
+  permission_manage_wiki: Pārvaldīt wiki
+  permission_rename_wiki_pages: Pārsaukt wiki lapas
+  permission_delete_wiki_pages: Dzēst wiki lapas
+  permission_view_wiki_pages: Skatīt wiki
+  permission_view_wiki_edits: Skatīt wiki vēsturi
+  permission_edit_wiki_pages: Rdiģēt wiki lapas
+  permission_delete_wiki_pages_attachments: Dzēst pielikumus
+  permission_protect_wiki_pages: Projekta wiki lapas
+  permission_manage_repository: Pārvaldīt repozitoriju
+  permission_browse_repository: Pārlūkot repozitoriju
+  permission_view_changesets: Skatīt izmaiņu kopumus  
+  permission_commit_access: Atļaut piekļuvi
+  permission_manage_boards: Pārvaldīt ziņojumu dēļus
+  permission_view_messages: Skatīt ziņas
+  permission_add_messages: Publicēt ziņas
+  permission_edit_messages: Rediģēt ziņas
+  permission_edit_own_messages: Rediģēt savas ziņas
+  permission_delete_messages: Dzēst ziņas
+  permission_delete_own_messages: Dzēst savas ziņas
+  permission_export_wiki_pages: Eksportēt Wiki lapas
+  
+  project_module_issue_tracking: Uzdevumu uzskaite
+  project_module_time_tracking: Laika uzskaite
+  project_module_news: Jaunumi
+  project_module_documents: Dokumenti
+  project_module_files: Datnes
+  project_module_wiki: Wiki
+  project_module_repository: Repozitorijs
+  project_module_boards: Ziņojumu dēļi
+  
+  label_user: Lietotājs
+  label_user_plural: Lietotāji
+  label_user_new: Jauns lietotājs
+  label_user_anonymous: Anonīms
+  label_project: Projekts
+  label_project_new: Jauns projekts
+  label_project_plural: Projekti
+  label_x_projects:
+    zero:  nav projektu
+    one:   1 projekts
+    other: "%{count} projekti"
+  label_project_all: Visi projekti
+  label_project_latest: Jaunākie projekti
+  label_issue: Uzdevums
+  label_issue_new: Jauns uzdevums
+  label_issue_plural: Uzdevumi
+  label_issue_view_all: Skatīt visus uzdevumus
+  label_issues_by: "Kārtot pēc %{value}"
+  label_issue_added: Uzdevums pievienots
+  label_issue_updated: Uzdevums atjaunots
+  label_document: Dokuments
+  label_document_new: Jauns dokuments
+  label_document_plural: Dokumenti
+  label_document_added: Dokuments pievienots
+  label_role: Loma
+  label_role_plural: Lomas
+  label_role_new: Jauna loma
+  label_role_and_permissions: Lomas un atļaujas
+  label_member: Dalībnieks
+  label_member_new: Jauns dalībnieks
+  label_member_plural: Dalībnieki
+  label_tracker: Trakeris
+  label_tracker_plural: Trakeri
+  label_tracker_new: Jauns trakeris
+  label_workflow: Darba gaita
+  label_issue_status: Uzdevuma statuss
+  label_issue_status_plural: Uzdevumu statusi
+  label_issue_status_new: Jauns statuss
+  label_issue_category: Uzdevuma kategorija
+  label_issue_category_plural: Uzdevumu kategorijas
+  label_issue_category_new: Jauna kategorija
+  label_custom_field: Pielāgojams lauks
+  label_custom_field_plural: Pielāgojami lauki
+  label_custom_field_new: Jauns pielāgojams lauks
+  label_enumerations: Uzskaitījumi
+  label_enumeration_new: Jauna vērtība
+  label_information: Informācija
+  label_information_plural: Informācija
+  label_please_login: Lūdzu pieslēdzieties
+  label_register: Reģistrēties
+  label_login_with_open_id_option: vai pieslēgties ar OpenID
+  label_password_lost: Nozaudēta parole
+  label_home: Sākums
+  label_home_heading: Sākums
+  label_my_page: Mana lapa
+  label_my_account: Mans konts
+  label_my_projects: Mani projekti
+  label_administration: Administrācija
+  label_login: Pieslēgties
+  label_logout: Atslēgties
+  label_help: Palīdzība
+  label_reported_issues: Ziņotie uzdevumi
+  label_assigned_to_me_issues: Man piesaistītie uzdevumi
+  label_last_login: Pēdējā pieslēgšanās
+  label_registered_on: Reģistrējies
+  label_activity: Aktivitāte
+  label_overall_activity: Kopējās aktivitātes
+  label_user_activity: "Lietotāja %{value} aktivitātes"
+  label_new: Jauns
+  label_logged_as: Pieslēdzies kā
+  label_environment: Vide
+  label_authentication: Pilnvarošana
+  label_auth_source: Pilnvarošanas režīms
+  label_auth_source_new: Jauns pilnvarošanas režīms
+  label_auth_source_plural: Pilnvarošanas režīmi
+  label_subproject_plural: Apakšprojekti
+  label_subproject_new: Jauns apakšprojekts
+  label_and_its_subprojects: "%{value} un tā apakšprojekti"
+  label_min_max_length: Minimālais - Maksimālais garums
+  label_list: Saraksts
+  label_date: Datums
+  label_integer: Vesels skaitlis
+  label_float: Decimālskaitlis
+  label_boolean: Patiesuma vērtība
+  label_string: Teksts
+  label_text: Garš teksts
+  label_attribute: Atribūts
+  label_attribute_plural: Atribūti
+  label_download: "%{count} Lejupielāde"
+  label_download_plural: "%{count} Lejupielādes"
+  label_no_data: Nav datu, ko parādīt
+  label_change_status: Mainīt statusu
+  label_history: Vēsture
+  label_attachment: Pielikums
+  label_attachment_new: Jauns pielikums
+  label_attachment_delete: Dzēst pielikumu
+  label_attachment_plural: Pielikumi
+  label_file_added: Lauks pievienots
+  label_report: Atskaite
+  label_report_plural: Atskaites
+  label_news: Ziņa
+  label_news_new: Pievienot ziņu
+  label_news_plural: Ziņas
+  label_news_latest: Jaunākās ziņas
+  label_news_view_all: Skatīt visas ziņas
+  label_news_added: Ziņas pievienotas
+  label_settings: Iestatījumi
+  label_overview: Pārskats
+  label_version: Versija
+  label_version_new: Jauna versija
+  label_version_plural: Versijas
+  label_close_versions: Aizvērt pabeigtās versijas
+  label_confirmation: Apstiprinājums
+  label_export_to: 'Pieejams arī:'
+  label_read: Lasīt...
+  label_public_projects: Publiskie projekti
+  label_open_issues: atvērts
+  label_open_issues_plural: atvērti
+  label_closed_issues: slēgts
+  label_closed_issues_plural: slēgti
+  label_x_open_issues_abbr_on_total:
+    zero:  0 atvērti / %{total}
+    one:   1 atvērts / %{total}
+    other: "%{count} atvērti / %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 atvērti
+    one:   1 atvērts
+    other: "%{count} atvērti"
+  label_x_closed_issues_abbr:
+    zero:  0 slēgti
+    one:   1 slēgts
+    other: "%{count} slēgti"
+  label_total: Kopā
+  label_permissions: Atļaujas
+  label_current_status: Pašreizējais statuss
+  label_new_statuses_allowed: Jauni statusi atļauti
+  label_all: visi
+  label_none: neviens
+  label_nobody: nekas
+  label_next: Nākošais
+  label_previous: Iepriekšējais
+  label_used_by: Izmanto
+  label_details: Detaļas
+  label_add_note: Pievienot piezīmi
+  label_per_page: katrā lapā
+  label_calendar: Kalendārs
+  label_months_from: mēneši no
+  label_gantt: Ganta diagramma
+  label_internal: Iekšējais
+  label_last_changes: "pēdējās %{count} izmaiņas"
+  label_change_view_all: Skatīt visas izmaiņas
+  label_personalize_page: Pielāgot šo lapu
+  label_comment: Komentārs
+  label_comment_plural: Komentāri
+  label_x_comments:
+    zero: nav komentāru
+    one: 1 komentārs
+    other: "%{count} komentāri"
+  label_comment_add: Pievienot komentāru
+  label_comment_added: Komentārs pievienots
+  label_comment_delete: Dzēst komentārus
+  label_query: Pielāgots pieprasījums
+  label_query_plural: Pielāgoti pieprasījumi
+  label_query_new: Jauns pieprasījums
+  label_filter_add: Pievienot filtru
+  label_filter_plural: Filtri
+  label_equals: ir
+  label_not_equals: nav
+  label_in_less_than: ir mazāk kā
+  label_in_more_than: ir vairāk kā
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: iekš
+  label_today: šodien
+  label_all_time: visu laiku
+  label_yesterday: vakar
+  label_this_week: šonedēļ
+  label_last_week: pagājušo šonedēļ
+  label_last_n_days: "pēdējās %{count} dienas"
+  label_this_month: šomēnes
+  label_last_month: pagājušo mēnes
+  label_this_year: šogad
+  label_date_range: Datumu apgabals
+  label_less_than_ago: mazāk kā dienas iepriekš
+  label_more_than_ago: vairāk kā dienas iepriekš
+  label_ago: dienas iepriekš
+  label_contains: satur
+  label_not_contains: nesatur
+  label_day_plural: dienas
+  label_repository: Repozitorijs
+  label_repository_plural: Repozitoriji
+  label_browse: Pārlūkot
+  label_modification: "%{count} izmaiņa"
+  label_modification_plural: "%{count} izmaiņas"
+  label_branch: Zars
+  label_tag: Birka 
+  label_revision: Revīzija
+  label_revision_plural: Revīzijas
+  label_revision_id: "Revīzija %{value}"
+  label_associated_revisions: Saistītās revīzijas
+  label_added: pievienots
+  label_modified: modificēts
+  label_copied: nokopēts
+  label_renamed: pārsaukts
+  label_deleted: dzēsts
+  label_latest_revision: Pēdējā revīzija
+  label_latest_revision_plural: Pēdējās revīzijas
+  label_view_revisions: Skatīt revīzijas
+  label_view_all_revisions: Skatīt visas revīzijas
+  label_max_size: Maksimālais izmērs
+  label_sort_highest: Pārvietot uz augšu
+  label_sort_higher: Pārvietot soli augšup
+  label_sort_lower: Pārvietot uz leju
+  label_sort_lowest: Pārvietot vienu soli uz leju
+  label_roadmap: Ceļvedis
+  label_roadmap_due_in: "Sagaidāms pēc %{value}"
+  label_roadmap_overdue: "nokavēts %{value}"
+  label_roadmap_no_issues: Šai versijai nav uzdevumu
+  label_search: Meklēt
+  label_result_plural: Rezultāti
+  label_all_words: Visi vārdi
+  label_wiki: Wiki
+  label_wiki_edit: Wiki labojums
+  label_wiki_edit_plural: Wiki labojumi
+  label_wiki_page: Wiki lapa
+  label_wiki_page_plural: Wiki lapas
+  label_index_by_title: Indeksēt pēc nosaukuma
+  label_index_by_date: Indeksēt pēc datuma
+  label_current_version: Tekošā versija
+  label_preview: Priekšskatījums
+  label_feed_plural: Barotnes
+  label_changes_details: Visu izmaiņu detaļas
+  label_issue_tracking: Uzdevumu uzskaite
+  label_spent_time: Pavadītais laiks
+  label_f_hour: "%{value} stunda"
+  label_f_hour_plural: "%{value} stundas"
+  label_time_tracking: Laika uzskaite
+  label_change_plural: Izmaiņas
+  label_statistics: Statistika
+  label_commits_per_month: Nodevumi mēnesī
+  label_commits_per_author: Nodevumi no autora
+  label_view_diff: Skatīt atšķirības
+  label_diff_inline: iekļauts
+  label_diff_side_by_side: blakus
+  label_options: Opcijas
+  label_copy_workflow_from: Kopēt darba plūsmu no
+  label_permissions_report: Atļauju atskaite
+  label_watched_issues: Vērotie uzdevumi
+  label_related_issues: Saistītie uzdevumi
+  label_applied_status: Piešķirtais statuss
+  label_loading: Lādējas...
+  label_relation_new: Jauna relācija
+  label_relation_delete: Dzēst relāciju
+  label_relates_to: saistīts ar
+  label_duplicates: dublikāti
+  label_duplicated_by: dublējas ar
+  label_blocks: bloķē
+  label_blocked_by: nobloķējis
+  label_precedes: pirms
+  label_follows: seko
+  label_end_to_start: no beigām uz sākumu
+  label_end_to_end: no beigām uz beigām
+  label_start_to_start: no sākuma uz sākumu
+  label_start_to_end: no sākuma uz beigām
+  label_stay_logged_in: Atcerēties mani
+  label_disabled: izslēgts
+  label_show_completed_versions: Rādīt pabeigtās versijas
+  label_me: es
+  label_board: Forums
+  label_board_new: Jauns forums
+  label_board_plural: Forumi
+  label_board_locked: Slēgts
+  label_board_sticky: Svarīgs
+  label_topic_plural: Tēmas
+  label_message_plural: Ziņas
+  label_message_last: Pēdējā ziņa
+  label_message_new: Jauna ziņa
+  label_message_posted: Ziņa pievienota
+  label_reply_plural: Atbildes
+  label_send_information: Sūtīt konta informāciju lietotājam
+  label_year: Gads
+  label_month: Mēnesis
+  label_week: Nedēļa
+  label_date_from: No
+  label_date_to: Kam
+  label_language_based: Izmantot lietotāja valodu
+  label_sort_by: "Kārtot pēc %{value}"
+  label_send_test_email: "Sūtīt testa e-pastu"
+  label_feeds_access_key: RSS piekļuves atslēga
+  label_missing_feeds_access_key: Trūkst RSS piekļuves atslēgas
+  label_feeds_access_key_created_on: "RSS piekļuves atslēga izveidota pirms %{value}"
+  label_module_plural: Moduļi
+  label_added_time_by: "Pievienojis %{author} pirms %{age}"
+  label_updated_time_by: "Atjaunojis %{author} pirms %{age}"
+  label_updated_time: "Atjaunots pirms %{value}"
+  label_jump_to_a_project: Pāriet uz projektu...
+  label_file_plural: Datnes
+  label_changeset_plural: Izmaiņu kopumi
+  label_default_columns: Noklusētās kolonnas
+  label_no_change_option: (Nav izmaiņu)
+  label_bulk_edit_selected_issues: Labot visus izvēlētos uzdevumus
+  label_theme: Tēma
+  label_default: Noklusēts
+  label_search_titles_only: Meklēt tikai nosaukumos
+  label_user_mail_option_all: "Par visiem notikumiem visos manos projektos"
+  label_user_mail_option_selected: "Par visiem notikumiem tikai izvēlētajos projektos..."
+  label_user_mail_no_self_notified: "Neziņot man par izmaiņām, kuras veicu es pats"
+  label_registration_activation_by_email: "konta aktivizācija caur e-pastu"
+  label_registration_manual_activation: manuālā konta aktivizācija
+  label_registration_automatic_activation: automātiskā konta aktivizācija
+  label_display_per_page: "Rādīt vienā lapā: %{value}"
+  label_age: Vecums
+  label_change_properties: Mainīt atribūtus
+  label_general: Galvenais
+  label_more: Vēl
+  label_scm: SCM
+  label_plugins: Spraudņi
+  label_ldap_authentication: LDAP pilnvarošana
+  label_downloads_abbr: L-lād.
+  label_optional_description: "Apraksts (neobligāts)"
+  label_add_another_file: Pievienot citu failu
+  label_preferences: Priekšrocības
+  label_chronological_order: Hronoloģiskā kārtībā
+  label_reverse_chronological_order: Apgriezti hronoloģiskā kārtībā
+  label_planning: Plānošana
+  label_incoming_emails: "Ienākošie e-pasti"
+  label_generate_key: Ģenerēt atslēgu
+  label_issue_watchers: Vērotāji
+  label_example: Piemērs
+  label_display: Rādīt
+  label_sort: Kārtot
+  label_ascending: Augoši
+  label_descending: Dilstoši
+  label_date_from_to: "No %{start} līdz %{end}"
+  label_wiki_content_added: Wiki lapa pievienota
+  label_wiki_content_updated: Wiki lapa atjaunota
+  label_group: Grupa
+  label_group_plural: Grupas
+  label_group_new: Jauna grupa
+  label_time_entry_plural: Pavadītais laiks
+  label_version_sharing_none: Nav koplietošanai
+  label_version_sharing_descendants: Ar apakšprojektiem
+  label_version_sharing_hierarchy: Ar projektu hierarhiju
+  label_version_sharing_tree: Ar projekta koku
+  label_version_sharing_system: Ar visiem projektiem
+  label_update_issue_done_ratios: Atjaunot uzdevuma veikuma attiecību
+  label_copy_source: Avots
+  label_copy_target: Mērķis
+  label_copy_same_as_target: Tāds pats kā mērķis
+  label_display_used_statuses_only: "Rādīt tikai statusus, ko lieto šis trakeris"
+  label_api_access_key: API pieejas atslēga
+  label_missing_api_access_key: Trūkst API pieejas atslēga
+  label_api_access_key_created_on: "API pieejas atslēga izveidota pirms %{value}"
+  
+  button_login: Pieslēgties
+  button_submit: Nosūtīt
+  button_save: Saglabāt
+  button_check_all: Atzīmēt visu
+  button_uncheck_all: Noņemt visus atzīmējumus
+  button_delete: Dzēst
+  button_create: Izveidot
+  button_create_and_continue: Izveidot un turpināt
+  button_test: Testēt
+  button_edit: Labot
+  button_add: Pievienot
+  button_change: Mainīt
+  button_apply: Apstiprināt
+  button_clear: Notīrīt
+  button_lock: Slēgt
+  button_unlock: Atslēgt
+  button_download: Lejuplādēt
+  button_list: Saraksts
+  button_view: Skats
+  button_move: Pārvietot
+  button_move_and_follow: Pārvietot un sekot
+  button_back: Atpakaļ
+  button_cancel: Atcelt
+  button_activate: Aktivizēt
+  button_sort: Kārtot
+  button_log_time: Ilgs laiks
+  button_rollback: Atjaunot uz šo versiju
+  button_watch: Vērot
+  button_unwatch: Nevērot
+  button_reply: Atbildēt
+  button_archive: Arhivēt
+  button_unarchive: Atarhivēt
+  button_reset: Atiestatīt
+  button_rename: Pārsaukt
+  button_change_password: Mainīt paroli
+  button_copy: Kopēt
+  button_copy_and_follow: Kopēt un sekot
+  button_annotate: Pierakstīt paskaidrojumu
+  button_update: Atjaunot
+  button_configure: Konfigurēt
+  button_quote: Citāts
+  button_duplicate: Dublēt
+  button_show: Rādīt
+  
+  status_active: aktīvs
+  status_registered: reģistrēts
+  status_locked: slēgts
+  
+  version_status_open: atvērta
+  version_status_locked: slēgta
+  version_status_closed: aizvērta
+
+  field_active: Aktīvs
+  
+  text_select_mail_notifications: "Izvēlieties darbības, par kurām vēlaties saņemt ziņojumus e-pastā"
+  text_regexp_info: "piem. ^[A-Z0-9]+$"
+  text_min_max_length_info: "0 nozīmē, ka nav ierobežojumu"
+  text_project_destroy_confirmation: "Vai tiešām vēlaties dzēst šo projektu un ar to saistītos datus?"
+  text_subprojects_destroy_warning: "Tā apakšprojekts(i): %{value} arī tiks dzēsts(i)."
+  text_workflow_edit: Lai labotu darba plūsmu, izvēlieties lomu un trakeri
+  text_are_you_sure: "Vai esat pārliecināts?"
+  text_journal_changed: "%{label} mainīts no %{old} uz %{new}"
+  text_journal_set_to: "%{label} iestatīts uz %{value}"
+  text_journal_deleted: "%{label} dzēsts (%{old})"
+  text_journal_added: "%{label} %{value} pievienots"
+  text_tip_issue_begin_day: uzdevums sākas šodien
+  text_tip_issue_end_day: uzdevums beidzas šodien
+  text_tip_issue_begin_end_day: uzdevums sākas un beidzas šodien
+  text_project_identifier_info: 'Tikai mazie burti (a-z), cipari un domuzīmes ir atļauti.<br />Kad saglabāts, identifikators nevar tikt mainīts.'
+  text_caracters_maximum: "%{count} simboli maksimāli."
+  text_caracters_minimum: "Jābūt vismaz %{count} simbolu garumā."
+  text_length_between: "Garums starp %{min} un %{max} simboliem."
+  text_tracker_no_workflow: Šim trakerim nav definēta darba plūsma
+  text_unallowed_characters: Neatļauti simboli
+  text_comma_separated: "Atļautas vairākas vērtības (atdalīt ar komatu)."
+  text_line_separated: "Atļautas vairākas vērtības (rakstīt katru savā rindā)."
+  text_issues_ref_in_commit_messages: "Izmaiņu salīdzināšana izejot no ziņojumiem"
+  text_issue_added: "Uzdevumu %{id} pievienojis %{author}."
+  text_issue_updated: "Uzdevumu %{id} atjaunojis %{author}."
+  text_wiki_destroy_confirmation: "Vai esat drošs, ka vēlaties dzēst šo wiki un visu tās saturu?"
+  text_issue_category_destroy_question: "Daži uzdevumi (%{count}) ir nozīmēti šai kategorijai. Ko Jūs vēlaties darīt?"
+  text_issue_category_destroy_assignments: Dzēst kategoriju nozīmējumus
+  text_issue_category_reassign_to: Nozīmēt uzdevumus šai kategorijai
+  text_user_mail_option: "No neizvēlētajiem projektiem Jūs saņemsiet ziņojumus e-pastā tikai par notikumiem, kuriem Jūs sekojat vai kuros esat iesaistīts." 
+  text_no_configuration_data: "Lomas, trakeri, uzdevumu statusi un darba plūsmas vēl nav konfigurētas.\nĻoti ieteicams ielādēt noklusēto konfigurāciju. Pēc ielādēšanas to būs iespējams modificēt."
+  text_load_default_configuration: Ielādēt noklusēto konfigurāciju
+  text_status_changed_by_changeset: "Apstiprināts izmaiņu kopumā %{value}."
+  text_issues_destroy_confirmation: 'Vai tiešām vēlaties dzēst izvēlēto uzdevumu(us)?'
+  text_select_project_modules: 'Izvēlieties moduļus šim projektam:'
+  text_default_administrator_account_changed: Noklusētais administratora konts mainīts
+  text_file_repository_writable: Pielikumu direktorijā atļauts rakstīt
+  text_plugin_assets_writable: Spraudņu kataloga direktorijā atļauts rakstīt
+  text_rmagick_available: "RMagick pieejams (neobligāts)"
+  text_destroy_time_entries_question: "%{hours} stundas tika ziņotas par uzdevumu, ko vēlaties dzēst. Ko darīt?"
+  text_destroy_time_entries: Dzēst ziņotās stundas
+  text_assign_time_entries_to_project: Piešķirt ziņotās stundas projektam
+  text_reassign_time_entries: 'Piešķirt ziņotās stundas uzdevumam:'
+  text_user_wrote: "%{value} rakstīja:"
+  text_enumeration_destroy_question: "%{count} objekti ir piešķirti šai vērtībai."
+  text_enumeration_category_reassign_to: 'Piešķirt tos šai vērtībai:'
+  text_email_delivery_not_configured: "E-pastu nosūtīšana nav konfigurēta, un ziņojumi ir izslēgti.\nKonfigurējiet savu SMTP serveri datnē config/configuration.yml un pārstartējiet lietotni."
+  text_repository_usernames_mapping: "Izvēlieties vai atjaunojiet Redmine lietotāju, saistītu ar katru lietotājvārdu, kas atrodams repozitorija žurnālā.\nLietotāji ar to pašu Redmine un repozitorija lietotājvārdu būs saistīti automātiski."
+  text_diff_truncated: '... Šis diff tika nošķelts, jo tas pārsniedz maksimālo izmēru, ko var parādīt.'
+  text_custom_field_possible_values_info: 'Katra vērtības savā rindā'
+  text_wiki_page_destroy_question: "Šij lapai ir %{descendants} apakšlapa(as) un pēcnācēji. Ko darīt?"
+  text_wiki_page_nullify_children: "Paturēt apakšlapas kā pamatlapas"
+  text_wiki_page_destroy_children: "Dzēst apakšlapas un visus pēcnācējus"
+  text_wiki_page_reassign_children: "Piešķirt apakšlapas šai lapai"
+  text_own_membership_delete_confirmation: "Jūs tūlīt dzēsīsiet dažas vai visas atļaujas, un Jums pēc tam var nebūt atļauja labot šo projektu.\nVai turpināt?"
+  
+  default_role_manager: Menedžeris
+  default_role_developer: Izstrādātājs
+  default_role_reporter: Ziņotājs
+  default_tracker_bug: Kļūda
+  default_tracker_feature: Iezīme
+  default_tracker_support: Atbalsts
+  default_issue_status_new: Jauns
+  default_issue_status_in_progress: Attīstībā
+  default_issue_status_resolved: Atrisināts
+  default_issue_status_feedback: Atsauksmes
+  default_issue_status_closed: Slēgts
+  default_issue_status_rejected: Noraidīts
+  default_doc_category_user: Lietotāja dokumentācija
+  default_doc_category_tech: Tehniskā dokumentācija
+  default_priority_low: Zema
+  default_priority_normal: Normāla
+  default_priority_high: Augsta
+  default_priority_urgent: Steidzama
+  default_priority_immediate: Tūlītēja
+  default_activity_design: Dizains
+  default_activity_development: Izstrādāšana
+  
+  enumeration_issue_priorities: Uzdevumu prioritātes
+  enumeration_doc_categories: Dokumentu kategorijas
+  enumeration_activities: Aktivitātes (laika uzskaite)
+  enumeration_system_activity: Sistēmas aktivitātes
+
+  error_can_not_delete_custom_field: Unable to delete custom field
+  permission_manage_subtasks: Manage subtasks
+  label_profile: Profile
+  error_unable_to_connect: Unable to connect (%{value})
+  error_can_not_remove_role: This role is in use and can not be deleted.
+  field_parent_issue: Parent task
+  error_unable_delete_issue_status: Unable to delete issue status
+  label_subtask_plural: Subtasks
+  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
+  label_project_copy_notifications: Send email notifications during the project copy
+  field_principal: Principal
+  label_my_page_block: My page block
+  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
+  text_zoom_out: Zoom out
+  text_zoom_in: Zoom in
+  notice_unable_delete_time_entry: Unable to delete time log entry.
+  label_overall_spent_time: Overall spent time
+  field_time_entries: Log time
+  project_module_gantt: Gantt
+  project_module_calendar: Calendar
+  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
+  text_are_you_sure_with_children: Delete issue and all child issues?
+  field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
+  setting_commit_logtime_activity_id: Activity for logged time
+  text_time_logged_by_changeset: Applied in changeset %{value}.
+  setting_commit_logtime_enabled: Enable time logging
+  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
+  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kodēt ziņojumus
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/mk.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/mk.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,943 +1,979 @@
-mk:
-  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
-  direction: ltr
-  date:
-    formats:
-      # Use the strftime parameters for formats.
-      # When no format has been given, it uses default.
-      # You can provide other formats here if you like!
-      default: "%d/%m/%Y"
-      short: "%d %b"
-      long: "%d %B, %Y"
-
-    day_names: [недела, понеделник, вторник, среда, четврток, петок, сабота]
-    abbr_day_names: [нед, пон, вто, сре, чет, пет, саб]
-
-    # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, јануари, февруари, март, април, мај, јуни, јули, август, септември, октомври, ноември, декември]
-    abbr_month_names: [~, јан, фев, мар, апр, мај, јун, јул, авг, сеп, окт, ное, дек]
-    # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
-
-  time:
-    formats:
-      default: "%d/%m/%Y %H:%M"
-      time: "%H:%M"
-      short: "%d %b %H:%M"
-      long: "%d %B, %Y %H:%M"
-    am: "предпладне"
-    pm: "попладне"
-
-  datetime:
-    distance_in_words:
-      half_a_minute: "пола минута"
-      less_than_x_seconds:
-        one:   "помалку од 1 секунда"
-        other: "помалку од %{count} секунди"
-      x_seconds:
-        one:   "1 секунда"
-        other: "%{count} секунди"
-      less_than_x_minutes:
-        one:   "помалку од 1 минута"
-        other: "помалку од %{count} минути"
-      x_minutes:
-        one:   "1 минута"
-        other: "%{count} минути"
-      about_x_hours:
-        one:   "околу 1 час"
-        other: "околу %{count} часа"
-      x_days:
-        one:   "1 ден"
-        other: "%{count} дена"
-      about_x_months:
-        one:   "околу 1 месец"
-        other: "околу %{count} месеци"
-      x_months:
-        one:   "1 месец"
-        other: "%{count} месеци"
-      about_x_years:
-        one:   "околу 1 година"
-        other: "околу %{count} години"
-      over_x_years:
-        one:   "преку 1 година"
-        other: "преку %{count} години"
-      almost_x_years:
-        one:   "скоро 1 година"
-        other: "скоро %{count} години"
-
-  number:
-    # Default format for numbers
-    format:
-      separator: "."
-      delimiter: ""
-      precision: 3
-    human:
-      format:
-        delimiter: ""
-        precision: 1
-      storage_units:
-        format: "%n %u"
-        units:
-          byte:
-            one: "Byte"
-            other: "Bytes"
-          kb: "KB"
-          mb: "MB"
-          gb: "GB"
-          tb: "TB"
-
-
-# Used in array.to_sentence.
-  support:
-    array:
-      sentence_connector: "и"
-      skip_last_comma: false
-
-  activerecord:
-    errors:
-      template:
-        header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
-      messages:
-        inclusion: "не е вклучено во листата"
-        exclusion: "е резервирано"
-        invalid: "е невалидно"
-        confirmation: "не се совпаѓа со потврдата"
-        accepted: "мора да е прифатено"
-        empty: "неможе да е празно"
-        blank: "неможе да е празно"
-        too_long: "е предолго (макс. %{count} знаци)"
-        too_short: "е прекратко (мин. %{count} знаци)"
-        wrong_length: "е погрешна должина (треба да е  %{count} знаци)"
-        taken: "е веќе зафатено"
-        not_a_number: "не е број"
-        not_a_date: "не е валидна дата"
-        greater_than: "мора да е поголемо од %{count}"
-        greater_than_or_equal_to: "мора да е поголемо или еднакво на %{count}"
-        equal_to: "мора да е еднакво на %{count}"
-        less_than: "мора да е помало од %{count}"
-        less_than_or_equal_to: "мора да е помало или еднакво на %{count}"
-        odd: "мора да е непарно"
-        even: "мора да е парно"
-        greater_than_start_date: "мора да е поголема од почетната дата"
-        not_same_project: "не припаѓа на истиот проект"
-        circular_dependency: "Оваа врска ќе креира кружна зависност"
-        cant_link_an_issue_with_a_descendant: "Задача неможе да се поврзе со една од нејзините подзадачи"
-
-  actionview_instancetag_blank_option: Изберете
-
-  general_text_No: 'Не'
-  general_text_Yes: 'Да'
-  general_text_no: 'не'
-  general_text_yes: 'да'
-  general_lang_name: 'Macedonian (Македонски)'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
-  general_csv_encoding: UTF-8
-  general_pdf_encoding: UTF-8
-  general_first_day_of_week: '1'
-
-  notice_account_updated: Профилот е успешно ажуриран.
-  notice_account_invalid_creditentials: Неточен корисник или лозинка
-  notice_account_password_updated: Лозинката е успешно ажурирана.
-  notice_account_wrong_password: Погрешна лозинка
-  notice_account_register_done: Профилот е успешно креиран. За активација, клкнете на врската што ви е пратена по е-пошта.
-  notice_account_unknown_email: Непознат корисник.
-  notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
-  notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
-  notice_account_activated: Your account has been activated. You can now log in.
-  notice_successful_create: Успешно креирање.
-  notice_successful_update: Успешно ажурирање.
-  notice_successful_delete: Успешно бришење.
-  notice_successful_connection: Успешна конекција.
-  notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
-  notice_locking_conflict: Data has been updated by another user.
-  notice_not_authorized: You are not authorized to access this page.
-  notice_email_sent: "Е-порака е пратена на %{value}"
-  notice_email_error: "Се случи грешка при праќање на е-пораката (%{value})"
-  notice_feeds_access_key_reseted: Вашиот RSS клуч за пристап е reset.
-  notice_api_access_key_reseted: Вашиот API клуч за пристап е reset.
-  notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
-  notice_account_pending: "Your account was created and is now pending administrator approval."
-  notice_default_data_loaded: Default configuration successfully loaded.
-  notice_unable_delete_version: Unable to delete version.
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-
-  error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
-  error_scm_not_found: "The entry or revision was not found in the repository."
-  error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
-  error_scm_annotate: "The entry does not exist or can not be annotated."
-  error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
-  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
-  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_can_not_delete_tracker: "This tracker contains issues and can't be deleted."
-  error_can_not_remove_role: "This role is in use and can not be deleted."
-  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
-  error_can_not_archive_project: This project can not be archived
-  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
-  error_workflow_copy_source: 'Please select a source tracker or role'
-  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
-  error_unable_delete_issue_status: 'Unable to delete issue status'
-  error_unable_to_connect: "Unable to connect (%{value})"
-  warning_attachments_not_saved: "%{count} file(s) could not be saved."
-
-  mail_subject_lost_password: "Вашата %{value} лозинка"
-  mail_body_lost_password: 'To change your password, click on the following link:'
-  mail_subject_register: "Your %{value} account activation"
-  mail_body_register: 'To activate your account, click on the following link:'
-  mail_body_account_information_external: "You can use your %{value} account to log in."
-  mail_body_account_information: Your account information
-  mail_subject_account_activation_request: "%{value} account activation request"
-  mail_body_account_activation_request: "Нов корисник (%{value}) е регистриран. The account is pending your approval:"
-  mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
-  mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
-  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
-  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
-  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
-
-  gui_validation_error: 1 грешка
-  gui_validation_error_plural: "%{count} грешки"
-
-  field_name: Име
-  field_description: Опис
-  field_summary: Краток опис
-  field_is_required: Задолжително
-  field_firstname: Име
-  field_lastname: Презиме
-  field_mail: Е-пошта
-  field_filename: Датотека
-  field_filesize: Големина
-  field_downloads: Превземања
-  field_author: Автор
-  field_created_on: Креиран
-  field_updated_on: Ажурирано
-  field_field_format: Формат
-  field_is_for_all: За сите проекти
-  field_possible_values: Можни вредности
-  field_regexp: Regular expression
-  field_min_length: Минимална должина
-  field_max_length: Максимална должина
-  field_value: Вредност
-  field_category: Категорија
-  field_title: Наслов
-  field_project: Проект
-  field_issue: Задача
-  field_status: Статус
-  field_notes: Белешки
-  field_is_closed: Задачата е затворена
-  field_is_default: Default value
-  field_tracker: Tracker
-  field_subject: Наслов
-  field_due_date: Краен рок
-  field_assigned_to: Доделена на
-  field_priority: Приоритет
-  field_fixed_version: Target version
-  field_user: Корисник
-  field_principal: Principal
-  field_role: Улога
-  field_homepage: Веб страна
-  field_is_public: Јавен
-  field_parent: Подпроект на
-  field_is_in_roadmap: Issues displayed in roadmap
-  field_login: Корисник
-  field_mail_notification: Известувања по e-пошта
-  field_admin: Администратор
-  field_last_login_on: Последна најава
-  field_language: Јазик
-  field_effective_date: Дата
-  field_password: Лозинка
-  field_new_password: Нова лозинка
-  field_password_confirmation: Потврда
-  field_version: Верзија
-  field_type: Тип
-  field_host: Хост
-  field_port: Порт
-  field_account: Account
-  field_base_dn: Base DN
-  field_attr_login: Login attribute
-  field_attr_firstname: Firstname attribute
-  field_attr_lastname: Lastname attribute
-  field_attr_mail: Email attribute
-  field_onthefly: Моментално (On-the-fly) креирање на корисници
-  field_start_date: Почеток
-  field_done_ratio: % Завршено
-  field_auth_source: Режим на автентикација
-  field_hide_mail: Криј ја мојата адреса на е-пошта
-  field_comments: Коментар
-  field_url: URL
-  field_start_page: Почетна страна
-  field_subproject: Подпроект
-  field_hours: Часови
-  field_activity: Активност
-  field_spent_on: Дата
-  field_identifier: Идентификатор
-  field_is_filter: Користи како филтер
-  field_issue_to: Поврзана задача
-  field_delay: Доцнење
-  field_assignable: На оваа улога може да се доделуваат задачи
-  field_redirect_existing_links: Пренасочи ги постоечките врски
-  field_estimated_hours: Проценето време
-  field_column_names: Колони
-  field_time_entries: Бележи време
-  field_time_zone: Временска зона
-  field_searchable: Може да се пребарува
-  field_default_value: Default value
-  field_comments_sorting: Прикажувај коментари
-  field_parent_title: Parent page
-  field_editable: Може да се уредува
-  field_watcher: Watcher
-  field_identity_url: OpenID URL
-  field_content: Содржина
-  field_group_by: Групирај ги резултатите според
-  field_sharing: Споделување
-  field_parent_issue: Parent task
-
-  setting_app_title: Наслов на апликацијата
-  setting_app_subtitle: Поднаслов на апликацијата
-  setting_welcome_text: Текст за добредојде
-  setting_default_language: Default јазик
-  setting_login_required: Задолжителна автентикација
-  setting_self_registration: Само-регистрација
-  setting_attachment_max_size: Макс. големина на прилог
-  setting_issues_export_limit: Issues export limit
-  setting_mail_from: Emission email address
-  setting_bcc_recipients: Blind carbon copy recipients (bcc)
-  setting_plain_text_mail: Текстуални е-пораки (без HTML)
-  setting_host_name: Име на хост и патека
-  setting_text_formatting: Форматирање на текст
-  setting_wiki_compression: Компресија на историјата на вики
-  setting_feeds_limit: Feed content limit
-  setting_default_projects_public: Новите проекти се иницијално јавни
-  setting_autofetch_changesets: Autofetch commits
-  setting_sys_api_enabled: Enable WS for repository management
-  setting_commit_ref_keywords: Referencing keywords
-  setting_commit_fix_keywords: Fixing keywords
-  setting_autologin: Автоматска најава
-  setting_date_format: Формат на дата
-  setting_time_format: Формат на време
-  setting_cross_project_issue_relations: Дозволи релации на задачи меѓу проекти
-  setting_issue_list_default_columns: Default columns displayed on the issue list
-  setting_repositories_encodings: Repositories encodings
-  setting_commit_logs_encoding: Commit messages encoding
-  setting_emails_footer: Emails footer
-  setting_protocol: Протокол
-  setting_per_page_options: Objects per page options
-  setting_user_format: Приказ на корисниците
-  setting_activity_days_default: Денови прикажана во активноста на проектот
-  setting_display_subprojects_issues: Прикажи ги задачите на подпроектите во главните проекти
-  setting_enabled_scm: Овозможи SCM
-  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
-  setting_mail_handler_api_enabled: Enable WS for incoming emails
-  setting_mail_handler_api_key: API клуч
-  setting_sequential_project_identifiers: Генерирај последователни идентификатори на проекти
-  setting_gravatar_enabled: Користи Gravatar кориснички икони
-  setting_gravatar_default: Default Gravatar image
-  setting_diff_max_lines_displayed: Max number of diff lines displayed
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_openid: Дозволи OpenID најава и регистрација
-  setting_password_min_length: Мин. должина на лозинка
-  setting_new_project_user_role_id: Улога доделена на неадминистраторски корисник кој креира проект
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_field: Use the issue field
-  setting_issue_done_ratio_issue_status: Use the issue status
-  setting_start_of_week: Start calendars on
-  setting_rest_api_enabled: Enable REST web service
-  setting_cache_formatted_text: Cache formatted text
-
-  permission_add_project: Креирај проекти
-  permission_add_subprojects: Креирај подпроекти
-  permission_edit_project: Уреди проект
-  permission_select_project_modules: Изберете модули за проект
-  permission_manage_members: Manage members
-  permission_manage_project_activities: Manage project activities
-  permission_manage_versions: Manage versions
-  permission_manage_categories: Manage issue categories
-  permission_view_issues: Прегледај задачи
-  permission_add_issues: Додавај задачи
-  permission_edit_issues: Уредувај задачи
-  permission_manage_issue_relations: Manage issue relations
-  permission_add_issue_notes: Додавај белешки
-  permission_edit_issue_notes: Уредувај белешки
-  permission_edit_own_issue_notes: Уредувај сопствени белешки
-  permission_move_issues: Преместувај задачи
-  permission_delete_issues: Бриши задачи
-  permission_manage_public_queries: Manage public queries
-  permission_save_queries: Save queries
-  permission_view_gantt: View gantt chart
-  permission_view_calendar: View calendar
-  permission_view_issue_watchers: View watchers list
-  permission_add_issue_watchers: Add watchers
-  permission_delete_issue_watchers: Delete watchers
-  permission_log_time: Бележи потрошено време
-  permission_view_time_entries: Прегледај потрошено време
-  permission_edit_time_entries: Уредувај белешки за потрошено време
-  permission_edit_own_time_entries: Уредувај сопствени белешки за потрошено време
-  permission_manage_news: Manage news
-  permission_comment_news: Коментирај на вести
-  permission_manage_documents: Manage documents
-  permission_view_documents: Прегледувај документи
-  permission_manage_files: Manage files
-  permission_view_files: Прегледувај датотеки
-  permission_manage_wiki: Manage wiki
-  permission_rename_wiki_pages: Преименувај вики страници
-  permission_delete_wiki_pages: Бриши вики страници
-  permission_view_wiki_pages: Прегледувај вики
-  permission_view_wiki_edits: Прегледувај вики историја
-  permission_edit_wiki_pages: Уредувај вики страници
-  permission_delete_wiki_pages_attachments: Бриши прилози
-  permission_protect_wiki_pages: Заштитувај вики страници
-  permission_manage_repository: Manage repository
-  permission_browse_repository: Browse repository
-  permission_view_changesets: View changesets
-  permission_commit_access: Commit access
-  permission_manage_boards: Manage boards
-  permission_view_messages: View messages
-  permission_add_messages: Post messages
-  permission_edit_messages: Уредувај пораки
-  permission_edit_own_messages: Уредувај сопствени пораки
-  permission_delete_messages: Бриши пораки
-  permission_delete_own_messages: Бриши сопствени пораки
-  permission_export_wiki_pages: Export wiki pages
-  permission_manage_subtasks: Manage subtasks
-
-  project_module_issue_tracking: Следење на задачи
-  project_module_time_tracking: Следење на време
-  project_module_news: Вести
-  project_module_documents: Документи
-  project_module_files: Датотеки
-  project_module_wiki: Вики
-  project_module_repository: Repository
-  project_module_boards: Форуми
-  project_module_calendar: Календар
-  project_module_gantt: Gantt
-
-  label_user: Корисник
-  label_user_plural: Корисници
-  label_user_new: Нов корисник
-  label_user_anonymous: Анонимен
-  label_project: Проект
-  label_project_new: Нов проект
-  label_project_plural: Проекти
-  label_x_projects:
-    zero:  нема проекти
-    one:   1 проект
-    other: "%{count} проекти"
-  label_project_all: Сите проекти
-  label_project_latest: Последните проекти
-  label_issue: Задача
-  label_issue_new: Нова задача
-  label_issue_plural: Задачи
-  label_issue_view_all: Прегледај ги сите задачи
-  label_issues_by: "Задачи по %{value}"
-  label_issue_added: Задачата е додадена
-  label_issue_updated: Задачата е ажурирана
-  label_document: Документ
-  label_document_new: Нов документ
-  label_document_plural: Документи
-  label_document_added: Документот е додаден
-  label_role: Улога
-  label_role_plural: Улоги
-  label_role_new: Нова улога
-  label_role_and_permissions: Улоги и овластувања
-  label_member: Член
-  label_member_new: Нов член
-  label_member_plural: Членови
-  label_tracker: Tracker
-  label_tracker_plural: Trackers
-  label_tracker_new: New tracker
-  label_workflow: Workflow
-  label_issue_status: Статус на задача
-  label_issue_status_plural: Статуси на задачи
-  label_issue_status_new: Нов статус
-  label_issue_category: Категорија на задача
-  label_issue_category_plural: Категории на задачи
-  label_issue_category_new: Нова категорија
-  label_custom_field: Прилагодено поле
-  label_custom_field_plural: Прилагодени полиња
-  label_custom_field_new: Ново прилагодено поле
-  label_enumerations: Enumerations
-  label_enumeration_new: Нова вредност
-  label_information: Информација
-  label_information_plural: Информации
-  label_please_login: Најави се
-  label_register: Регистрирај се
-  label_login_with_open_id_option: или најави се со OpenID
-  label_password_lost: Изгубена лозинка
-  label_home: Почетна
-  label_home_heading: Почетна
-  label_my_page: Мојата страна
-  label_my_account: Мојот профил
-  label_my_projects: Мои проекти
-  label_my_page_block: Блок елемент
-  label_administration: Администрација
-  label_login: Најави се
-  label_logout: Одјави се
-  label_help: Помош
-  label_reported_issues: Пријавени задачи
-  label_assigned_to_me_issues: Задачи доделени на мене
-  label_last_login: Последна најава
-  label_registered_on: Регистриран на
-  label_activity: Активност
-  label_overall_activity: Севкупна активност
-  label_user_activity: "Активност на %{value}"
-  label_new: Нова
-  label_logged_as: Најавени сте како
-  label_environment: Опкружување
-  label_authentication: Автентикација
-  label_auth_source: Режим на автентикација
-  label_auth_source_new: Нов режим на автентикација
-  label_auth_source_plural: Режими на автентикација
-  label_subproject_plural: Подпроекти
-  label_subproject_new: Нов подпроект
-  label_and_its_subprojects: "%{value} и неговите подпроекти"
-  label_min_max_length: Мин. - Макс. должина
-  label_list: Листа
-  label_date: Дата
-  label_integer: Integer
-  label_float: Float
-  label_boolean: Boolean
-  label_string: Текст
-  label_text: Долг текст
-  label_attribute: Атрибут
-  label_attribute_plural: Атрибути
-  label_download: "%{count} превземање"
-  label_download_plural: "%{count} превземања"
-  label_no_data: Нема податоци за прикажување
-  label_change_status: Промени статус
-  label_history: Историја
-  label_attachment: Датотека
-  label_attachment_new: Нова датотека
-  label_attachment_delete: Избриши датотека
-  label_attachment_plural: Датотеки
-  label_file_added: Датотеката е додадена
-  label_report: Извештај
-  label_report_plural: Извештаи
-  label_news: Новост
-  label_news_new: Додади новост
-  label_news_plural: Новости
-  label_news_latest: Последни новости
-  label_news_view_all: Прегледај ги сите новости
-  label_news_added: Новостта е додадена
-  label_settings: Settings
-  label_overview: Преглед
-  label_version: Верзија
-  label_version_new: Нова верзија
-  label_version_plural: Верзии
-  label_close_versions: Затвори ги завршените врзии
-  label_confirmation: Потврда
-  label_export_to: 'Достапно и во:'
-  label_read: Прочитај...
-  label_public_projects: Јавни проекти
-  label_open_issues: отворена
-  label_open_issues_plural: отворени
-  label_closed_issues: затворена
-  label_closed_issues_plural: затворени
-  label_x_open_issues_abbr_on_total:
-    zero:  0 отворени / %{total}
-    one:   1 отворена / %{total}
-    other: "%{count} отворени / %{total}"
-  label_x_open_issues_abbr:
-    zero:  0 отворени
-    one:   1 отворена
-    other: "%{count} отворени"
-  label_x_closed_issues_abbr:
-    zero:  0 затворени
-    one:   1 затворена
-    other: "%{count} затворени"
-  label_total: Вкупно
-  label_permissions: Овластувања
-  label_current_status: Моментален статус
-  label_new_statuses_allowed: Дозволени нови статуси
-  label_all: сите
-  label_none: ниеден
-  label_nobody: никој
-  label_next: Следно
-  label_previous: Претходно
-  label_used_by: Користено од
-  label_details: Детали
-  label_add_note: Додади белешка
-  label_per_page: По страна
-  label_calendar: Календар
-  label_months_from: месеци од
-  label_gantt: Gantt
-  label_internal: Internal
-  label_last_changes: "последни %{count} промени"
-  label_change_view_all: Прегледај ги сите промени
-  label_personalize_page: Прилагоди ја странава
-  label_comment: Коментар
-  label_comment_plural: Коментари
-  label_x_comments:
-    zero: нема коментари
-    one: 1 коментар
-    other: "%{count} коментари"
-  label_comment_add: Додади коментар
-  label_comment_added: Коментарот е додаден
-  label_comment_delete: Избриши коментари
-  label_query: Custom query
-  label_query_plural: Custom queries
-  label_query_new: New query
-  label_filter_add: Додади филтер
-  label_filter_plural: Филтри
-  label_equals: е
-  label_not_equals: не е
-  label_in_less_than: за помалку од
-  label_in_more_than: за повеќе од
-  label_greater_or_equal: '>='
-  label_less_or_equal: '<='
-  label_in: во
-  label_today: денес
-  label_all_time: цело време
-  label_yesterday: вчера
-  label_this_week: оваа недела
-  label_last_week: минатата недела
-  label_last_n_days: "последните %{count} дена"
-  label_this_month: овој месец
-  label_last_month: минатиот месец
-  label_this_year: оваа година
-  label_date_range: Date range
-  label_less_than_ago: пред помалку од денови
-  label_more_than_ago: пред повеќе од денови
-  label_ago: пред денови
-  label_contains: содржи
-  label_not_contains: не содржи
-  label_day_plural: денови
-  label_repository: Складиште
-  label_repository_plural: Складишта
-  label_browse: Прелистувај
-  label_modification: "%{count} промени"
-  label_modification_plural: "%{count} промени"
-  label_branch: Гранка
-  label_tag: Tag
-  label_revision: Ревизија
-  label_revision_plural: Ревизии
-  label_revision_id: "Ревизија %{value}"
-  label_associated_revisions: Associated revisions
-  label_added: added
-  label_modified: modified
-  label_copied: copied
-  label_renamed: renamed
-  label_deleted: deleted
-  label_latest_revision: Последна ревизија
-  label_latest_revision_plural: Последни ревизии
-  label_view_revisions: Прегледај ги ревизиите
-  label_view_all_revisions: Прегледај ги сите ревизии
-  label_max_size: Макс. големина
-  label_sort_highest: Премести најгоре
-  label_sort_higher: Премести нагоре
-  label_sort_lower: Премести надоле
-  label_sort_lowest: Премести најдоле
-  label_roadmap: Roadmap
-  label_roadmap_due_in: "Due in %{value}"
-  label_roadmap_overdue: "Касни %{value}"
-  label_roadmap_no_issues: Нема задачи за оваа верзија
-  label_search: Барај
-  label_result_plural: Резултати
-  label_all_words: Сите зборови
-  label_wiki: Вики
-  label_wiki_edit: Вики уредување
-  label_wiki_edit_plural: Вики уредувања
-  label_wiki_page: Вики страница
-  label_wiki_page_plural: Вики страници
-  label_index_by_title: Индекс по наслов
-  label_index_by_date: Индекс по дата
-  label_current_version: Current version
-  label_preview: Preview
-  label_feed_plural: Feeds
-  label_changes_details: Детали за сите промени
-  label_issue_tracking: Следење на задачи
-  label_spent_time: Потрошено време
-  label_overall_spent_time: Вкупно потрошено време
-  label_f_hour: "%{value} час"
-  label_f_hour_plural: "%{value} часа"
-  label_time_tracking: Следење на време
-  label_change_plural: Промени
-  label_statistics: Статистики
-  label_commits_per_month: Commits per month
-  label_commits_per_author: Commits per author
-  label_view_diff: View differences
-  label_diff_inline: inline
-  label_diff_side_by_side: side by side
-  label_options: Опции
-  label_copy_workflow_from: Copy workflow from
-  label_permissions_report: Permissions report
-  label_watched_issues: Watched issues
-  label_related_issues: Поврзани задачи
-  label_applied_status: Applied status
-  label_loading: Loading...
-  label_relation_new: Нова релација
-  label_relation_delete: Избриши релација
-  label_relates_to: related to
-  label_duplicates: дупликати
-  label_duplicated_by: duplicated by
-  label_blocks: blocks
-  label_blocked_by: блокирано од
-  label_precedes: претходи
-  label_follows: следи
-  label_end_to_start: крај до почеток
-  label_end_to_end: крај до крај
-  label_start_to_start: почеток до почеток
-  label_start_to_end: почеток до крај
-  label_stay_logged_in: Останете најавени
-  label_disabled: disabled
-  label_show_completed_versions: Show completed versions
-  label_me: јас
-  label_board: Форум
-  label_board_new: Нов форум
-  label_board_plural: Форуми
-  label_board_locked: Заклучен
-  label_board_sticky: Sticky
-  label_topic_plural: Теми
-  label_message_plural: Пораки
-  label_message_last: Последна порака
-  label_message_new: Нова порака
-  label_message_posted: Поракате е додадена
-  label_reply_plural: Одговори
-  label_send_information: Испрати ги информациите за профилот на корисникот
-  label_year: Година
-  label_month: Месец
-  label_week: Недела
-  label_date_from: Од
-  label_date_to: До
-  label_language_based: Според јазикот на корисникот
-  label_sort_by: "Подреди според %{value}"
-  label_send_test_email: Испрати тест е-порака
-  label_feeds_access_key: RSS клуч за пристап
-  label_missing_feeds_access_key: Недостика RSS клуч за пристап
-  label_feeds_access_key_created_on: "RSS клучот за пристап креиран пред %{value}"
-  label_module_plural: Модули
-  label_added_time_by: "Додадено од %{author} пред %{age}"
-  label_updated_time_by: "Ажурирано од %{author} пред %{age}"
-  label_updated_time: "Ажурирано пред %{value}"
-  label_jump_to_a_project: Префрли се на проект...
-  label_file_plural: Датотеки
-  label_changeset_plural: Changesets
-  label_default_columns: Основни колони
-  label_no_change_option: (Без промена)
-  label_bulk_edit_selected_issues: Групно уредување на задачи
-  label_theme: Тема
-  label_default: Default
-  label_search_titles_only: Пребарувај само наслови
-  label_user_mail_option_all: "За било кој настан во сите мои проекти"
-  label_user_mail_option_selected: "За било кој настан само во избраните проекти..."
-  label_user_mail_no_self_notified: "Не ме известувај за промените што јас ги правам"
-  label_registration_activation_by_email: активација на профил преку е-пошта
-  label_registration_manual_activation: мануелна активација на профил
-  label_registration_automatic_activation: автоматска активација на профил
-  label_display_per_page: "По страна: %{value}"
-  label_age: Age
-  label_change_properties: Change properties
-  label_general: Општо
-  label_more: Повеќе
-  label_scm: SCM
-  label_plugins: Додатоци
-  label_ldap_authentication: LDAP автентикација
-  label_downloads_abbr: Превземања
-  label_optional_description: Опис (незадолжително)
-  label_add_another_file: Додади уште една датотека
-  label_preferences: Preferences
-  label_chronological_order: Во хронолошки ред
-  label_reverse_chronological_order: In reverse chronological order
-  label_planning: Планирање
-  label_incoming_emails: Дојдовни е-пораки
-  label_generate_key: Генерирај клуч
-  label_issue_watchers: Watchers
-  label_example: Пример
-  label_display: Прикажи
-  label_sort: Подреди
-  label_ascending: Растечки
-  label_descending: Опаѓачки
-  label_date_from_to: Од %{start} до %{end}
-  label_wiki_content_added: Вики страница додадена
-  label_wiki_content_updated: Вики страница ажурирана
-  label_group: Група
-  label_group_plural: Групи
-  label_group_new: Нова група
-  label_time_entry_plural: Потрошено време
-  label_version_sharing_none: Не споделено
-  label_version_sharing_descendants: Со сите подпроекти
-  label_version_sharing_hierarchy: Со хиерархијата на проектот
-  label_version_sharing_tree: Со дрвото на проектот
-  label_version_sharing_system: Со сите проекти
-  label_update_issue_done_ratios: Update issue done ratios
-  label_copy_source: Извор
-  label_copy_target: Дестинација
-  label_copy_same_as_target: Исто како дестинацијата
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_api_access_key: API клуч за пристап
-  label_missing_api_access_key: Недостига API клуч за пристап
-  label_api_access_key_created_on: "API клучот за пристап е креиран пред %{value}"
-  label_profile: Профил
-  label_subtask_plural: Подзадачи
-  label_project_copy_notifications: Праќај известувања по е-пошта при копирање на проект
-
-  button_login: Најави се
-  button_submit: Испрати
-  button_save: Зачувај
-  button_check_all: Штиклирај ги сите
-  button_uncheck_all: Одштиклирај ги сите
-  button_delete: Избриши
-  button_create: Креирај
-  button_create_and_continue: Креирај и продолжи
-  button_test: Тест
-  button_edit: Уреди
-  button_add: Додади
-  button_change: Промени
-  button_apply: Примени
-  button_clear: Избриши
-  button_lock: Заклучи
-  button_unlock: Отклучи
-  button_download: Превземи
-  button_list: List
-  button_view: Прегледај
-  button_move: Премести
-  button_move_and_follow: Премести и следи
-  button_back: Back
-  button_cancel: Откажи
-  button_activate: Активирај
-  button_sort: Подреди
-  button_log_time: Бележи време
-  button_rollback: Rollback to this version
-  button_watch: Следи
-  button_unwatch: Не следи
-  button_reply: Одговори
-  button_archive: Архивирај
-  button_unarchive: Одархивирај
-  button_reset: Reset
-  button_rename: Преименувај
-  button_change_password: Промени лозинка
-  button_copy: Копирај
-  button_copy_and_follow: Копирај и следи
-  button_annotate: Annotate
-  button_update: Ажурирај
-  button_configure: Конфигурирај
-  button_quote: Цитирај
-  button_duplicate: Копирај
-  button_show: Show
-
-  status_active: активни
-  status_registered: регистрирани
-  status_locked: заклучени
-
-  version_status_open: отворени
-  version_status_locked: заклучени
-  version_status_closed: затворени
-
-  field_active: Active
-
-  text_select_mail_notifications: Изберете за кои настани да се праќаат известувања по е-пошта да се праќаат.
-  text_regexp_info: eg. ^[A-Z0-9]+$
-  text_min_max_length_info: 0 значи без ограничување
-  text_project_destroy_confirmation: Дали сте сигурни дека сакате да го избришете проектот и сите поврзани податоци?
-  text_subprojects_destroy_warning: "Неговите подпроекти: %{value} исто така ќе бидат избришани."
-  text_workflow_edit: Select a role and a tracker to edit the workflow
-  text_are_you_sure: Дали сте сигурни?
-  text_journal_changed: "%{label} променето од %{old} во %{new}"
-  text_journal_set_to: "%{label} set to %{value}"
-  text_journal_deleted: "%{label} избришан (%{old})"
-  text_journal_added: "%{label} %{value} додаден"
-  text_tip_issue_begin_day: задачи што почнуваат овој ден
-  text_tip_issue_end_day: задачи што завршуваат овој ден
-  text_tip_issue_begin_end_day: задачи што почнуваат и завршуваат овој ден
-  text_project_identifier_info: 'Само мали букви (a-z), бројки и dashes се дозволени<br />По зачувувањето, идентификаторот неможе да се смени.'
-  text_caracters_maximum: "%{count} знаци максимум."
-  text_caracters_minimum: "Мора да е најмалку %{count} знаци долго."
-  text_length_between: "Должина помеѓу %{min} и %{max} знаци."
-  text_tracker_no_workflow: No workflow defined for this tracker
-  text_unallowed_characters: Недозволени знаци
-  text_comma_separated: Дозволени се повеќе вредности (разделени со запирка).
-  text_line_separated: Дозволени се повеќе вредности (една линија за секоја вредност).
-  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
-  text_issue_added: "Задачата %{id} е пријавена од %{author}."
-  text_issue_updated: "Задачата %{id} е ажурирана од %{author}."
-  text_wiki_destroy_confirmation: Дали сте сигурни дека сакате да го избришете ова вики и целата негова содржина?
-  text_issue_category_destroy_question: "Некои задачи (%{count}) се доделени на оваа категорија. Што сакате да правите?"
-  text_issue_category_destroy_assignments: Remove category assignments
-  text_issue_category_reassign_to: Додели ги задачите на оваа категорија
-  text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
-  text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
-  text_load_default_configuration: Load the default configuration
-  text_status_changed_by_changeset: "Applied in changeset %{value}."
-  text_issues_destroy_confirmation: 'Дали сте сигурни дека сакате да ги избришете избраните задачи?'
-  text_select_project_modules: 'Изберете модули за овој проект:'
-  text_default_administrator_account_changed: Default administrator account changed
-  text_file_repository_writable: Во папката за прилози може да се запишува
-  text_plugin_assets_writable: Во папката за додатоци може да се запишува
-  text_rmagick_available: RMagick available (незадолжително)
-  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do ?"
-  text_destroy_time_entries: Delete reported hours
-  text_assign_time_entries_to_project: Додели ги пријавените часови на проектот
-  text_reassign_time_entries: 'Reassign reported hours to this issue:'
-  text_user_wrote: "%{value} напиша:"
-  text_enumeration_destroy_question: "%{count} objects are assigned to this value."
-  text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_email_delivery_not_configured: "Доставата по е-пошта не е конфигурирана, и известувањата се оневозможени.\nКонфигурирајте го Вашиот  SMTP сервер во config/configuration.yml и рестартирајте ја апликацијата."
-  text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
-  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-  text_custom_field_possible_values_info: 'One line for each value'
-  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
-  text_wiki_page_nullify_children: "Keep child pages as root pages"
-  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
-  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
-  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
-  text_zoom_in: Zoom in
-  text_zoom_out: Zoom out
-
-  default_role_manager: Менаџер
-  default_role_developer: Developer
-  default_role_reporter: Reporter
-  default_tracker_bug: Грешка
-  default_tracker_feature: Функционалност
-  default_tracker_support: Поддршка
-  default_issue_status_new: Нова
-  default_issue_status_in_progress: Во прогрес
-  default_issue_status_resolved: Разрешена
-  default_issue_status_feedback: Feedback
-  default_issue_status_closed: Затворена
-  default_issue_status_rejected: Одбиена
-  default_doc_category_user: Корисничка документација
-  default_doc_category_tech: Техничка документација
-  default_priority_low: Низок
-  default_priority_normal: Нормален
-  default_priority_high: Висок
-  default_priority_urgent: Итно
-  default_priority_immediate: Веднаш
-  default_activity_design: Дизајн
-  default_activity_development: Развој
-
-  enumeration_issue_priorities: Приоритети на задача
-  enumeration_doc_categories: Категории на документ
-  enumeration_activities: Активности (следење на време)
-  enumeration_system_activity: Системска активност
-
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+mk:
+  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
+  direction: ltr
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%d/%m/%Y"
+      short: "%d %b"
+      long: "%d %B, %Y"
+
+    day_names: [недела, понеделник, вторник, среда, четврток, петок, сабота]
+    abbr_day_names: [нед, пон, вто, сре, чет, пет, саб]
+
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, јануари, февруари, март, април, мај, јуни, јули, август, септември, октомври, ноември, декември]
+    abbr_month_names: [~, јан, фев, мар, апр, мај, јун, јул, авг, сеп, окт, ное, дек]
+    # Used in date_select and datime_select.
+    order:
+      - :day
+      - :month
+      - :year
+
+  time:
+    formats:
+      default: "%d/%m/%Y %H:%M"
+      time: "%H:%M"
+      short: "%d %b %H:%M"
+      long: "%d %B, %Y %H:%M"
+    am: "предпладне"
+    pm: "попладне"
+
+  datetime:
+    distance_in_words:
+      half_a_minute: "пола минута"
+      less_than_x_seconds:
+        one:   "помалку од 1 секунда"
+        other: "помалку од %{count} секунди"
+      x_seconds:
+        one:   "1 секунда"
+        other: "%{count} секунди"
+      less_than_x_minutes:
+        one:   "помалку од 1 минута"
+        other: "помалку од %{count} минути"
+      x_minutes:
+        one:   "1 минута"
+        other: "%{count} минути"
+      about_x_hours:
+        one:   "околу 1 час"
+        other: "околу %{count} часа"
+      x_days:
+        one:   "1 ден"
+        other: "%{count} дена"
+      about_x_months:
+        one:   "околу 1 месец"
+        other: "околу %{count} месеци"
+      x_months:
+        one:   "1 месец"
+        other: "%{count} месеци"
+      about_x_years:
+        one:   "околу 1 година"
+        other: "околу %{count} години"
+      over_x_years:
+        one:   "преку 1 година"
+        other: "преку %{count} години"
+      almost_x_years:
+        one:   "скоро 1 година"
+        other: "скоро %{count} години"
+
+  number:
+    # Default format for numbers
+    format:
+      separator: "."
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Byte"
+            other: "Bytes"
+          kb: "KB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "и"
+      skip_last_comma: false
+
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "1 error prohibited this %{model} from being saved"
+          other:  "%{count} errors prohibited this %{model} from being saved"
+      messages:
+        inclusion: "не е вклучено во листата"
+        exclusion: "е резервирано"
+        invalid: "е невалидно"
+        confirmation: "не се совпаѓа со потврдата"
+        accepted: "мора да е прифатено"
+        empty: "неможе да е празно"
+        blank: "неможе да е празно"
+        too_long: "е предолго (макс. %{count} знаци)"
+        too_short: "е прекратко (мин. %{count} знаци)"
+        wrong_length: "е погрешна должина (треба да е  %{count} знаци)"
+        taken: "е веќе зафатено"
+        not_a_number: "не е број"
+        not_a_date: "не е валидна дата"
+        greater_than: "мора да е поголемо од %{count}"
+        greater_than_or_equal_to: "мора да е поголемо или еднакво на %{count}"
+        equal_to: "мора да е еднакво на %{count}"
+        less_than: "мора да е помало од %{count}"
+        less_than_or_equal_to: "мора да е помало или еднакво на %{count}"
+        odd: "мора да е непарно"
+        even: "мора да е парно"
+        greater_than_start_date: "мора да е поголема од почетната дата"
+        not_same_project: "не припаѓа на истиот проект"
+        circular_dependency: "Оваа врска ќе креира кружна зависност"
+        cant_link_an_issue_with_a_descendant: "Задача неможе да се поврзе со една од нејзините подзадачи"
+
+  actionview_instancetag_blank_option: Изберете
+
+  general_text_No: 'Не'
+  general_text_Yes: 'Да'
+  general_text_no: 'не'
+  general_text_yes: 'да'
+  general_lang_name: 'Macedonian (Македонски)'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '1'
+
+  notice_account_updated: Профилот е успешно ажуриран.
+  notice_account_invalid_creditentials: Неточен корисник или лозинка
+  notice_account_password_updated: Лозинката е успешно ажурирана.
+  notice_account_wrong_password: Погрешна лозинка
+  notice_account_register_done: Профилот е успешно креиран. За активација, клкнете на врската што ви е пратена по е-пошта.
+  notice_account_unknown_email: Непознат корисник.
+  notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
+  notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
+  notice_account_activated: Your account has been activated. You can now log in.
+  notice_successful_create: Успешно креирање.
+  notice_successful_update: Успешно ажурирање.
+  notice_successful_delete: Успешно бришење.
+  notice_successful_connection: Успешна конекција.
+  notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
+  notice_locking_conflict: Data has been updated by another user.
+  notice_not_authorized: You are not authorized to access this page.
+  notice_email_sent: "Е-порака е пратена на %{value}"
+  notice_email_error: "Се случи грешка при праќање на е-пораката (%{value})"
+  notice_feeds_access_key_reseted: Вашиот RSS клуч за пристап е reset.
+  notice_api_access_key_reseted: Вашиот API клуч за пристап е reset.
+  notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
+  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
+  notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
+  notice_account_pending: "Your account was created and is now pending administrator approval."
+  notice_default_data_loaded: Default configuration successfully loaded.
+  notice_unable_delete_version: Unable to delete version.
+  notice_unable_delete_time_entry: Unable to delete time log entry.
+  notice_issue_done_ratios_updated: Issue done ratios updated.
+
+  error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
+  error_scm_not_found: "The entry or revision was not found in the repository."
+  error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
+  error_scm_annotate: "The entry does not exist or can not be annotated."
+  error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
+  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
+  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
+  error_can_not_delete_custom_field: Unable to delete custom field
+  error_can_not_delete_tracker: "This tracker contains issues and can't be deleted."
+  error_can_not_remove_role: "This role is in use and can not be deleted."
+  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
+  error_can_not_archive_project: This project can not be archived
+  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
+  error_workflow_copy_source: 'Please select a source tracker or role'
+  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
+  error_unable_delete_issue_status: 'Unable to delete issue status'
+  error_unable_to_connect: "Unable to connect (%{value})"
+  warning_attachments_not_saved: "%{count} file(s) could not be saved."
+
+  mail_subject_lost_password: "Вашата %{value} лозинка"
+  mail_body_lost_password: 'To change your password, click on the following link:'
+  mail_subject_register: "Your %{value} account activation"
+  mail_body_register: 'To activate your account, click on the following link:'
+  mail_body_account_information_external: "You can use your %{value} account to log in."
+  mail_body_account_information: Your account information
+  mail_subject_account_activation_request: "%{value} account activation request"
+  mail_body_account_activation_request: "Нов корисник (%{value}) е регистриран. The account is pending your approval:"
+  mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
+  mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
+  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
+  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
+  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
+
+  gui_validation_error: 1 грешка
+  gui_validation_error_plural: "%{count} грешки"
+
+  field_name: Име
+  field_description: Опис
+  field_summary: Краток опис
+  field_is_required: Задолжително
+  field_firstname: Име
+  field_lastname: Презиме
+  field_mail: Е-пошта
+  field_filename: Датотека
+  field_filesize: Големина
+  field_downloads: Превземања
+  field_author: Автор
+  field_created_on: Креиран
+  field_updated_on: Ажурирано
+  field_field_format: Формат
+  field_is_for_all: За сите проекти
+  field_possible_values: Можни вредности
+  field_regexp: Regular expression
+  field_min_length: Минимална должина
+  field_max_length: Максимална должина
+  field_value: Вредност
+  field_category: Категорија
+  field_title: Наслов
+  field_project: Проект
+  field_issue: Задача
+  field_status: Статус
+  field_notes: Белешки
+  field_is_closed: Задачата е затворена
+  field_is_default: Default value
+  field_tracker: Tracker
+  field_subject: Наслов
+  field_due_date: Краен рок
+  field_assigned_to: Доделена на
+  field_priority: Приоритет
+  field_fixed_version: Target version
+  field_user: Корисник
+  field_principal: Principal
+  field_role: Улога
+  field_homepage: Веб страна
+  field_is_public: Јавен
+  field_parent: Подпроект на
+  field_is_in_roadmap: Issues displayed in roadmap
+  field_login: Корисник
+  field_mail_notification: Известувања по e-пошта
+  field_admin: Администратор
+  field_last_login_on: Последна најава
+  field_language: Јазик
+  field_effective_date: Дата
+  field_password: Лозинка
+  field_new_password: Нова лозинка
+  field_password_confirmation: Потврда
+  field_version: Верзија
+  field_type: Тип
+  field_host: Хост
+  field_port: Порт
+  field_account: Account
+  field_base_dn: Base DN
+  field_attr_login: Login attribute
+  field_attr_firstname: Firstname attribute
+  field_attr_lastname: Lastname attribute
+  field_attr_mail: Email attribute
+  field_onthefly: Моментално (On-the-fly) креирање на корисници
+  field_start_date: Почеток
+  field_done_ratio: "% Завршено"
+  field_auth_source: Режим на автентикација
+  field_hide_mail: Криј ја мојата адреса на е-пошта
+  field_comments: Коментар
+  field_url: URL
+  field_start_page: Почетна страна
+  field_subproject: Подпроект
+  field_hours: Часови
+  field_activity: Активност
+  field_spent_on: Дата
+  field_identifier: Идентификатор
+  field_is_filter: Користи како филтер
+  field_issue_to: Поврзана задача
+  field_delay: Доцнење
+  field_assignable: На оваа улога може да се доделуваат задачи
+  field_redirect_existing_links: Пренасочи ги постоечките врски
+  field_estimated_hours: Проценето време
+  field_column_names: Колони
+  field_time_entries: Бележи време
+  field_time_zone: Временска зона
+  field_searchable: Може да се пребарува
+  field_default_value: Default value
+  field_comments_sorting: Прикажувај коментари
+  field_parent_title: Parent page
+  field_editable: Може да се уредува
+  field_watcher: Watcher
+  field_identity_url: OpenID URL
+  field_content: Содржина
+  field_group_by: Групирај ги резултатите според
+  field_sharing: Споделување
+  field_parent_issue: Parent task
+
+  setting_app_title: Наслов на апликацијата
+  setting_app_subtitle: Поднаслов на апликацијата
+  setting_welcome_text: Текст за добредојде
+  setting_default_language: Default јазик
+  setting_login_required: Задолжителна автентикација
+  setting_self_registration: Само-регистрација
+  setting_attachment_max_size: Макс. големина на прилог
+  setting_issues_export_limit: Issues export limit
+  setting_mail_from: Emission email address
+  setting_bcc_recipients: Blind carbon copy recipients (bcc)
+  setting_plain_text_mail: Текстуални е-пораки (без HTML)
+  setting_host_name: Име на хост и патека
+  setting_text_formatting: Форматирање на текст
+  setting_wiki_compression: Компресија на историјата на вики
+  setting_feeds_limit: Feed content limit
+  setting_default_projects_public: Новите проекти се иницијално јавни
+  setting_autofetch_changesets: Autofetch commits
+  setting_sys_api_enabled: Enable WS for repository management
+  setting_commit_ref_keywords: Referencing keywords
+  setting_commit_fix_keywords: Fixing keywords
+  setting_autologin: Автоматска најава
+  setting_date_format: Формат на дата
+  setting_time_format: Формат на време
+  setting_cross_project_issue_relations: Дозволи релации на задачи меѓу проекти
+  setting_issue_list_default_columns: Default columns displayed on the issue list
+  setting_repositories_encodings: Repositories encodings
+  setting_emails_footer: Emails footer
+  setting_protocol: Протокол
+  setting_per_page_options: Objects per page options
+  setting_user_format: Приказ на корисниците
+  setting_activity_days_default: Денови прикажана во активноста на проектот
+  setting_display_subprojects_issues: Прикажи ги задачите на подпроектите во главните проекти
+  setting_enabled_scm: Овозможи SCM
+  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
+  setting_mail_handler_api_enabled: Enable WS for incoming emails
+  setting_mail_handler_api_key: API клуч
+  setting_sequential_project_identifiers: Генерирај последователни идентификатори на проекти
+  setting_gravatar_enabled: Користи Gravatar кориснички икони
+  setting_gravatar_default: Default Gravatar image
+  setting_diff_max_lines_displayed: Max number of diff lines displayed
+  setting_file_max_size_displayed: Max size of text files displayed inline
+  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
+  setting_openid: Дозволи OpenID најава и регистрација
+  setting_password_min_length: Мин. должина на лозинка
+  setting_new_project_user_role_id: Улога доделена на неадминистраторски корисник кој креира проект
+  setting_default_projects_modules: Default enabled modules for new projects
+  setting_issue_done_ratio: Calculate the issue done ratio with
+  setting_issue_done_ratio_issue_field: Use the issue field
+  setting_issue_done_ratio_issue_status: Use the issue status
+  setting_start_of_week: Start calendars on
+  setting_rest_api_enabled: Enable REST web service
+  setting_cache_formatted_text: Cache formatted text
+
+  permission_add_project: Креирај проекти
+  permission_add_subprojects: Креирај подпроекти
+  permission_edit_project: Уреди проект
+  permission_select_project_modules: Изберете модули за проект
+  permission_manage_members: Manage members
+  permission_manage_project_activities: Manage project activities
+  permission_manage_versions: Manage versions
+  permission_manage_categories: Manage issue categories
+  permission_view_issues: Прегледај задачи
+  permission_add_issues: Додавај задачи
+  permission_edit_issues: Уредувај задачи
+  permission_manage_issue_relations: Manage issue relations
+  permission_add_issue_notes: Додавај белешки
+  permission_edit_issue_notes: Уредувај белешки
+  permission_edit_own_issue_notes: Уредувај сопствени белешки
+  permission_move_issues: Преместувај задачи
+  permission_delete_issues: Бриши задачи
+  permission_manage_public_queries: Manage public queries
+  permission_save_queries: Save queries
+  permission_view_gantt: View gantt chart
+  permission_view_calendar: View calendar
+  permission_view_issue_watchers: View watchers list
+  permission_add_issue_watchers: Add watchers
+  permission_delete_issue_watchers: Delete watchers
+  permission_log_time: Бележи потрошено време
+  permission_view_time_entries: Прегледај потрошено време
+  permission_edit_time_entries: Уредувај белешки за потрошено време
+  permission_edit_own_time_entries: Уредувај сопствени белешки за потрошено време
+  permission_manage_news: Manage news
+  permission_comment_news: Коментирај на вести
+  permission_manage_documents: Manage documents
+  permission_view_documents: Прегледувај документи
+  permission_manage_files: Manage files
+  permission_view_files: Прегледувај датотеки
+  permission_manage_wiki: Manage wiki
+  permission_rename_wiki_pages: Преименувај вики страници
+  permission_delete_wiki_pages: Бриши вики страници
+  permission_view_wiki_pages: Прегледувај вики
+  permission_view_wiki_edits: Прегледувај вики историја
+  permission_edit_wiki_pages: Уредувај вики страници
+  permission_delete_wiki_pages_attachments: Бриши прилози
+  permission_protect_wiki_pages: Заштитувај вики страници
+  permission_manage_repository: Manage repository
+  permission_browse_repository: Browse repository
+  permission_view_changesets: View changesets
+  permission_commit_access: Commit access
+  permission_manage_boards: Manage boards
+  permission_view_messages: View messages
+  permission_add_messages: Post messages
+  permission_edit_messages: Уредувај пораки
+  permission_edit_own_messages: Уредувај сопствени пораки
+  permission_delete_messages: Бриши пораки
+  permission_delete_own_messages: Бриши сопствени пораки
+  permission_export_wiki_pages: Export wiki pages
+  permission_manage_subtasks: Manage subtasks
+
+  project_module_issue_tracking: Следење на задачи
+  project_module_time_tracking: Следење на време
+  project_module_news: Вести
+  project_module_documents: Документи
+  project_module_files: Датотеки
+  project_module_wiki: Вики
+  project_module_repository: Repository
+  project_module_boards: Форуми
+  project_module_calendar: Календар
+  project_module_gantt: Gantt
+
+  label_user: Корисник
+  label_user_plural: Корисници
+  label_user_new: Нов корисник
+  label_user_anonymous: Анонимен
+  label_project: Проект
+  label_project_new: Нов проект
+  label_project_plural: Проекти
+  label_x_projects:
+    zero:  нема проекти
+    one:   1 проект
+    other: "%{count} проекти"
+  label_project_all: Сите проекти
+  label_project_latest: Последните проекти
+  label_issue: Задача
+  label_issue_new: Нова задача
+  label_issue_plural: Задачи
+  label_issue_view_all: Прегледај ги сите задачи
+  label_issues_by: "Задачи по %{value}"
+  label_issue_added: Задачата е додадена
+  label_issue_updated: Задачата е ажурирана
+  label_document: Документ
+  label_document_new: Нов документ
+  label_document_plural: Документи
+  label_document_added: Документот е додаден
+  label_role: Улога
+  label_role_plural: Улоги
+  label_role_new: Нова улога
+  label_role_and_permissions: Улоги и овластувања
+  label_member: Член
+  label_member_new: Нов член
+  label_member_plural: Членови
+  label_tracker: Tracker
+  label_tracker_plural: Trackers
+  label_tracker_new: New tracker
+  label_workflow: Workflow
+  label_issue_status: Статус на задача
+  label_issue_status_plural: Статуси на задачи
+  label_issue_status_new: Нов статус
+  label_issue_category: Категорија на задача
+  label_issue_category_plural: Категории на задачи
+  label_issue_category_new: Нова категорија
+  label_custom_field: Прилагодено поле
+  label_custom_field_plural: Прилагодени полиња
+  label_custom_field_new: Ново прилагодено поле
+  label_enumerations: Enumerations
+  label_enumeration_new: Нова вредност
+  label_information: Информација
+  label_information_plural: Информации
+  label_please_login: Најави се
+  label_register: Регистрирај се
+  label_login_with_open_id_option: или најави се со OpenID
+  label_password_lost: Изгубена лозинка
+  label_home: Почетна
+  label_home_heading: Почетна
+  label_my_page: Мојата страна
+  label_my_account: Мојот профил
+  label_my_projects: Мои проекти
+  label_my_page_block: Блок елемент
+  label_administration: Администрација
+  label_login: Најави се
+  label_logout: Одјави се
+  label_help: Помош
+  label_reported_issues: Пријавени задачи
+  label_assigned_to_me_issues: Задачи доделени на мене
+  label_last_login: Последна најава
+  label_registered_on: Регистриран на
+  label_activity: Активност
+  label_overall_activity: Севкупна активност
+  label_user_activity: "Активност на %{value}"
+  label_new: Нова
+  label_logged_as: Најавени сте како
+  label_environment: Опкружување
+  label_authentication: Автентикација
+  label_auth_source: Режим на автентикација
+  label_auth_source_new: Нов режим на автентикација
+  label_auth_source_plural: Режими на автентикација
+  label_subproject_plural: Подпроекти
+  label_subproject_new: Нов подпроект
+  label_and_its_subprojects: "%{value} и неговите подпроекти"
+  label_min_max_length: Мин. - Макс. должина
+  label_list: Листа
+  label_date: Дата
+  label_integer: Integer
+  label_float: Float
+  label_boolean: Boolean
+  label_string: Текст
+  label_text: Долг текст
+  label_attribute: Атрибут
+  label_attribute_plural: Атрибути
+  label_download: "%{count} превземање"
+  label_download_plural: "%{count} превземања"
+  label_no_data: Нема податоци за прикажување
+  label_change_status: Промени статус
+  label_history: Историја
+  label_attachment: Датотека
+  label_attachment_new: Нова датотека
+  label_attachment_delete: Избриши датотека
+  label_attachment_plural: Датотеки
+  label_file_added: Датотеката е додадена
+  label_report: Извештај
+  label_report_plural: Извештаи
+  label_news: Новост
+  label_news_new: Додади новост
+  label_news_plural: Новости
+  label_news_latest: Последни новости
+  label_news_view_all: Прегледај ги сите новости
+  label_news_added: Новостта е додадена
+  label_settings: Settings
+  label_overview: Преглед
+  label_version: Верзија
+  label_version_new: Нова верзија
+  label_version_plural: Верзии
+  label_close_versions: Затвори ги завршените врзии
+  label_confirmation: Потврда
+  label_export_to: 'Достапно и во:'
+  label_read: Прочитај...
+  label_public_projects: Јавни проекти
+  label_open_issues: отворена
+  label_open_issues_plural: отворени
+  label_closed_issues: затворена
+  label_closed_issues_plural: затворени
+  label_x_open_issues_abbr_on_total:
+    zero:  0 отворени / %{total}
+    one:   1 отворена / %{total}
+    other: "%{count} отворени / %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 отворени
+    one:   1 отворена
+    other: "%{count} отворени"
+  label_x_closed_issues_abbr:
+    zero:  0 затворени
+    one:   1 затворена
+    other: "%{count} затворени"
+  label_total: Вкупно
+  label_permissions: Овластувања
+  label_current_status: Моментален статус
+  label_new_statuses_allowed: Дозволени нови статуси
+  label_all: сите
+  label_none: ниеден
+  label_nobody: никој
+  label_next: Следно
+  label_previous: Претходно
+  label_used_by: Користено од
+  label_details: Детали
+  label_add_note: Додади белешка
+  label_per_page: По страна
+  label_calendar: Календар
+  label_months_from: месеци од
+  label_gantt: Gantt
+  label_internal: Internal
+  label_last_changes: "последни %{count} промени"
+  label_change_view_all: Прегледај ги сите промени
+  label_personalize_page: Прилагоди ја странава
+  label_comment: Коментар
+  label_comment_plural: Коментари
+  label_x_comments:
+    zero: нема коментари
+    one: 1 коментар
+    other: "%{count} коментари"
+  label_comment_add: Додади коментар
+  label_comment_added: Коментарот е додаден
+  label_comment_delete: Избриши коментари
+  label_query: Custom query
+  label_query_plural: Custom queries
+  label_query_new: New query
+  label_filter_add: Додади филтер
+  label_filter_plural: Филтри
+  label_equals: е
+  label_not_equals: не е
+  label_in_less_than: за помалку од
+  label_in_more_than: за повеќе од
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: во
+  label_today: денес
+  label_all_time: цело време
+  label_yesterday: вчера
+  label_this_week: оваа недела
+  label_last_week: минатата недела
+  label_last_n_days: "последните %{count} дена"
+  label_this_month: овој месец
+  label_last_month: минатиот месец
+  label_this_year: оваа година
+  label_date_range: Date range
+  label_less_than_ago: пред помалку од денови
+  label_more_than_ago: пред повеќе од денови
+  label_ago: пред денови
+  label_contains: содржи
+  label_not_contains: не содржи
+  label_day_plural: денови
+  label_repository: Складиште
+  label_repository_plural: Складишта
+  label_browse: Прелистувај
+  label_modification: "%{count} промени"
+  label_modification_plural: "%{count} промени"
+  label_branch: Гранка
+  label_tag: Tag
+  label_revision: Ревизија
+  label_revision_plural: Ревизии
+  label_revision_id: "Ревизија %{value}"
+  label_associated_revisions: Associated revisions
+  label_added: added
+  label_modified: modified
+  label_copied: copied
+  label_renamed: renamed
+  label_deleted: deleted
+  label_latest_revision: Последна ревизија
+  label_latest_revision_plural: Последни ревизии
+  label_view_revisions: Прегледај ги ревизиите
+  label_view_all_revisions: Прегледај ги сите ревизии
+  label_max_size: Макс. големина
+  label_sort_highest: Премести најгоре
+  label_sort_higher: Премести нагоре
+  label_sort_lower: Премести надоле
+  label_sort_lowest: Премести најдоле
+  label_roadmap: Roadmap
+  label_roadmap_due_in: "Due in %{value}"
+  label_roadmap_overdue: "Касни %{value}"
+  label_roadmap_no_issues: Нема задачи за оваа верзија
+  label_search: Барај
+  label_result_plural: Резултати
+  label_all_words: Сите зборови
+  label_wiki: Вики
+  label_wiki_edit: Вики уредување
+  label_wiki_edit_plural: Вики уредувања
+  label_wiki_page: Вики страница
+  label_wiki_page_plural: Вики страници
+  label_index_by_title: Индекс по наслов
+  label_index_by_date: Индекс по дата
+  label_current_version: Current version
+  label_preview: Preview
+  label_feed_plural: Feeds
+  label_changes_details: Детали за сите промени
+  label_issue_tracking: Следење на задачи
+  label_spent_time: Потрошено време
+  label_overall_spent_time: Вкупно потрошено време
+  label_f_hour: "%{value} час"
+  label_f_hour_plural: "%{value} часа"
+  label_time_tracking: Следење на време
+  label_change_plural: Промени
+  label_statistics: Статистики
+  label_commits_per_month: Commits per month
+  label_commits_per_author: Commits per author
+  label_view_diff: View differences
+  label_diff_inline: inline
+  label_diff_side_by_side: side by side
+  label_options: Опции
+  label_copy_workflow_from: Copy workflow from
+  label_permissions_report: Permissions report
+  label_watched_issues: Watched issues
+  label_related_issues: Поврзани задачи
+  label_applied_status: Applied status
+  label_loading: Loading...
+  label_relation_new: Нова релација
+  label_relation_delete: Избриши релација
+  label_relates_to: related to
+  label_duplicates: дупликати
+  label_duplicated_by: duplicated by
+  label_blocks: blocks
+  label_blocked_by: блокирано од
+  label_precedes: претходи
+  label_follows: следи
+  label_end_to_start: крај до почеток
+  label_end_to_end: крај до крај
+  label_start_to_start: почеток до почеток
+  label_start_to_end: почеток до крај
+  label_stay_logged_in: Останете најавени
+  label_disabled: disabled
+  label_show_completed_versions: Show completed versions
+  label_me: јас
+  label_board: Форум
+  label_board_new: Нов форум
+  label_board_plural: Форуми
+  label_board_locked: Заклучен
+  label_board_sticky: Sticky
+  label_topic_plural: Теми
+  label_message_plural: Пораки
+  label_message_last: Последна порака
+  label_message_new: Нова порака
+  label_message_posted: Поракате е додадена
+  label_reply_plural: Одговори
+  label_send_information: Испрати ги информациите за профилот на корисникот
+  label_year: Година
+  label_month: Месец
+  label_week: Недела
+  label_date_from: Од
+  label_date_to: До
+  label_language_based: Според јазикот на корисникот
+  label_sort_by: "Подреди според %{value}"
+  label_send_test_email: Испрати тест е-порака
+  label_feeds_access_key: RSS клуч за пристап
+  label_missing_feeds_access_key: Недостика RSS клуч за пристап
+  label_feeds_access_key_created_on: "RSS клучот за пристап креиран пред %{value}"
+  label_module_plural: Модули
+  label_added_time_by: "Додадено од %{author} пред %{age}"
+  label_updated_time_by: "Ажурирано од %{author} пред %{age}"
+  label_updated_time: "Ажурирано пред %{value}"
+  label_jump_to_a_project: Префрли се на проект...
+  label_file_plural: Датотеки
+  label_changeset_plural: Changesets
+  label_default_columns: Основни колони
+  label_no_change_option: (Без промена)
+  label_bulk_edit_selected_issues: Групно уредување на задачи
+  label_theme: Тема
+  label_default: Default
+  label_search_titles_only: Пребарувај само наслови
+  label_user_mail_option_all: "За било кој настан во сите мои проекти"
+  label_user_mail_option_selected: "За било кој настан само во избраните проекти..."
+  label_user_mail_no_self_notified: "Не ме известувај за промените што јас ги правам"
+  label_registration_activation_by_email: активација на профил преку е-пошта
+  label_registration_manual_activation: мануелна активација на профил
+  label_registration_automatic_activation: автоматска активација на профил
+  label_display_per_page: "По страна: %{value}"
+  label_age: Age
+  label_change_properties: Change properties
+  label_general: Општо
+  label_more: Повеќе
+  label_scm: SCM
+  label_plugins: Додатоци
+  label_ldap_authentication: LDAP автентикација
+  label_downloads_abbr: Превземања
+  label_optional_description: Опис (незадолжително)
+  label_add_another_file: Додади уште една датотека
+  label_preferences: Preferences
+  label_chronological_order: Во хронолошки ред
+  label_reverse_chronological_order: In reverse chronological order
+  label_planning: Планирање
+  label_incoming_emails: Дојдовни е-пораки
+  label_generate_key: Генерирај клуч
+  label_issue_watchers: Watchers
+  label_example: Пример
+  label_display: Прикажи
+  label_sort: Подреди
+  label_ascending: Растечки
+  label_descending: Опаѓачки
+  label_date_from_to: Од %{start} до %{end}
+  label_wiki_content_added: Вики страница додадена
+  label_wiki_content_updated: Вики страница ажурирана
+  label_group: Група
+  label_group_plural: Групи
+  label_group_new: Нова група
+  label_time_entry_plural: Потрошено време
+  label_version_sharing_none: Не споделено
+  label_version_sharing_descendants: Со сите подпроекти
+  label_version_sharing_hierarchy: Со хиерархијата на проектот
+  label_version_sharing_tree: Со дрвото на проектот
+  label_version_sharing_system: Со сите проекти
+  label_update_issue_done_ratios: Update issue done ratios
+  label_copy_source: Извор
+  label_copy_target: Дестинација
+  label_copy_same_as_target: Исто како дестинацијата
+  label_display_used_statuses_only: Only display statuses that are used by this tracker
+  label_api_access_key: API клуч за пристап
+  label_missing_api_access_key: Недостига API клуч за пристап
+  label_api_access_key_created_on: "API клучот за пристап е креиран пред %{value}"
+  label_profile: Профил
+  label_subtask_plural: Подзадачи
+  label_project_copy_notifications: Праќај известувања по е-пошта при копирање на проект
+
+  button_login: Најави се
+  button_submit: Испрати
+  button_save: Зачувај
+  button_check_all: Штиклирај ги сите
+  button_uncheck_all: Одштиклирај ги сите
+  button_delete: Избриши
+  button_create: Креирај
+  button_create_and_continue: Креирај и продолжи
+  button_test: Тест
+  button_edit: Уреди
+  button_add: Додади
+  button_change: Промени
+  button_apply: Примени
+  button_clear: Избриши
+  button_lock: Заклучи
+  button_unlock: Отклучи
+  button_download: Превземи
+  button_list: List
+  button_view: Прегледај
+  button_move: Премести
+  button_move_and_follow: Премести и следи
+  button_back: Back
+  button_cancel: Откажи
+  button_activate: Активирај
+  button_sort: Подреди
+  button_log_time: Бележи време
+  button_rollback: Rollback to this version
+  button_watch: Следи
+  button_unwatch: Не следи
+  button_reply: Одговори
+  button_archive: Архивирај
+  button_unarchive: Одархивирај
+  button_reset: Reset
+  button_rename: Преименувај
+  button_change_password: Промени лозинка
+  button_copy: Копирај
+  button_copy_and_follow: Копирај и следи
+  button_annotate: Annotate
+  button_update: Ажурирај
+  button_configure: Конфигурирај
+  button_quote: Цитирај
+  button_duplicate: Копирај
+  button_show: Show
+
+  status_active: активни
+  status_registered: регистрирани
+  status_locked: заклучени
+
+  version_status_open: отворени
+  version_status_locked: заклучени
+  version_status_closed: затворени
+
+  field_active: Active
+
+  text_select_mail_notifications: Изберете за кои настани да се праќаат известувања по е-пошта да се праќаат.
+  text_regexp_info: eg. ^[A-Z0-9]+$
+  text_min_max_length_info: 0 значи без ограничување
+  text_project_destroy_confirmation: Дали сте сигурни дека сакате да го избришете проектот и сите поврзани податоци?
+  text_subprojects_destroy_warning: "Неговите подпроекти: %{value} исто така ќе бидат избришани."
+  text_workflow_edit: Select a role and a tracker to edit the workflow
+  text_are_you_sure: Дали сте сигурни?
+  text_journal_changed: "%{label} променето од %{old} во %{new}"
+  text_journal_set_to: "%{label} set to %{value}"
+  text_journal_deleted: "%{label} избришан (%{old})"
+  text_journal_added: "%{label} %{value} додаден"
+  text_tip_issue_begin_day: задачи што почнуваат овој ден
+  text_tip_issue_end_day: задачи што завршуваат овој ден
+  text_tip_issue_begin_end_day: задачи што почнуваат и завршуваат овој ден
+  text_project_identifier_info: 'Само мали букви (a-z), бројки и dashes се дозволени<br />По зачувувањето, идентификаторот неможе да се смени.'
+  text_caracters_maximum: "%{count} знаци максимум."
+  text_caracters_minimum: "Мора да е најмалку %{count} знаци долго."
+  text_length_between: "Должина помеѓу %{min} и %{max} знаци."
+  text_tracker_no_workflow: No workflow defined for this tracker
+  text_unallowed_characters: Недозволени знаци
+  text_comma_separated: Дозволени се повеќе вредности (разделени со запирка).
+  text_line_separated: Дозволени се повеќе вредности (една линија за секоја вредност).
+  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
+  text_issue_added: "Задачата %{id} е пријавена од %{author}."
+  text_issue_updated: "Задачата %{id} е ажурирана од %{author}."
+  text_wiki_destroy_confirmation: Дали сте сигурни дека сакате да го избришете ова вики и целата негова содржина?
+  text_issue_category_destroy_question: "Некои задачи (%{count}) се доделени на оваа категорија. Што сакате да правите?"
+  text_issue_category_destroy_assignments: Remove category assignments
+  text_issue_category_reassign_to: Додели ги задачите на оваа категорија
+  text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
+  text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
+  text_load_default_configuration: Load the default configuration
+  text_status_changed_by_changeset: "Applied in changeset %{value}."
+  text_issues_destroy_confirmation: 'Дали сте сигурни дека сакате да ги избришете избраните задачи?'
+  text_select_project_modules: 'Изберете модули за овој проект:'
+  text_default_administrator_account_changed: Default administrator account changed
+  text_file_repository_writable: Во папката за прилози може да се запишува
+  text_plugin_assets_writable: Во папката за додатоци може да се запишува
+  text_rmagick_available: RMagick available (незадолжително)
+  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do ?"
+  text_destroy_time_entries: Delete reported hours
+  text_assign_time_entries_to_project: Додели ги пријавените часови на проектот
+  text_reassign_time_entries: 'Reassign reported hours to this issue:'
+  text_user_wrote: "%{value} напиша:"
+  text_enumeration_destroy_question: "%{count} objects are assigned to this value."
+  text_enumeration_category_reassign_to: 'Reassign them to this value:'
+  text_email_delivery_not_configured: "Доставата по е-пошта не е конфигурирана, и известувањата се оневозможени.\nКонфигурирајте го Вашиот  SMTP сервер во config/configuration.yml и рестартирајте ја апликацијата."
+  text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
+  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
+  text_custom_field_possible_values_info: 'One line for each value'
+  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
+  text_wiki_page_nullify_children: "Keep child pages as root pages"
+  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
+  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
+  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
+  text_zoom_in: Zoom in
+  text_zoom_out: Zoom out
+
+  default_role_manager: Менаџер
+  default_role_developer: Developer
+  default_role_reporter: Reporter
+  default_tracker_bug: Грешка
+  default_tracker_feature: Функционалност
+  default_tracker_support: Поддршка
+  default_issue_status_new: Нова
+  default_issue_status_in_progress: Во прогрес
+  default_issue_status_resolved: Разрешена
+  default_issue_status_feedback: Feedback
+  default_issue_status_closed: Затворена
+  default_issue_status_rejected: Одбиена
+  default_doc_category_user: Корисничка документација
+  default_doc_category_tech: Техничка документација
+  default_priority_low: Низок
+  default_priority_normal: Нормален
+  default_priority_high: Висок
+  default_priority_urgent: Итно
+  default_priority_immediate: Веднаш
+  default_activity_design: Дизајн
+  default_activity_development: Развој
+
+  enumeration_issue_priorities: Приоритети на задача
+  enumeration_doc_categories: Категории на документ
+  enumeration_activities: Активности (следење на време)
+  enumeration_system_activity: Системска активност
+
+  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
+  text_are_you_sure_with_children: Delete issue and all child issues?
+  field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
+  setting_commit_logtime_activity_id: Activity for logged time
+  text_time_logged_by_changeset: Applied in changeset %{value}.
+  setting_commit_logtime_enabled: Enable time logging
+  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
+  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/mn.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/mn.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,944 +1,980 @@
-mn:
-  direction: ltr
-  date:
-    formats:
-      # Use the strftime parameters for formats.
-      # When no format has been given, it uses default.
-      # You can provide other formats here if you like!
-      default: "%Y/%m/%d"
-      short: "%b %d"
-      long: "%Y, %B %d"
-      
-    day_names: [Даваа, Мягмар, Лхагва, Пүрэв, Баасан, Бямба, Ням]
-    abbr_day_names: [Дав, Мяг, Лха, Пүр, Бсн, Бям, Ням]
-      
-    # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, 1-р сар, 2-р сар, 3-р сар, 4-р сар, 5-р сар, 6-р сар, 7-р сар, 8-р сар, 9-р сар, 10-р сар, 11-р сар, 12-р сар]
-    abbr_month_names: [~, 1сар, 2сар, 3сар, 4сар, 5сар, 6сар, 7сар, 8сар, 9сар, 10сар, 11сар, 12сар]
-    # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
-
-  time:
-    formats:
-      default: "%Y/%m/%d %I:%M %p"
-      time: "%I:%M %p"
-      short: "%d %b %H:%M"
-      long: "%Y, %B %d %H:%M"
-    am: "am"
-    pm: "pm"
-      
-  datetime:
-    distance_in_words:
-      half_a_minute: "хагас минут"
-      less_than_x_seconds:
-        one:   "секунд орчим"
-        other: "%{count} секундээс бага хугацаа"
-      x_seconds:
-        one:   "1 секунд"
-        other: "%{count} секунд"
-      less_than_x_minutes:
-        one:   "минутаас бага хугацаа"
-        other: "%{count} минутаас бага хугацаа"
-      x_minutes:
-        one:   "1 минут"
-        other: "%{count} минут"
-      about_x_hours:
-        one:   "1 цаг орчим"
-        other: "ойролцоогоор %{count} цаг"
-      x_days:
-        one:   "1 өдөр"
-        other: "%{count} өдөр"
-      about_x_months:
-        one:   "1 сар орчим"
-        other: "ойролцоогоор %{count} сар"
-      x_months:
-        one:   "1 сар"
-        other: "%{count} сар"
-      about_x_years:
-        one:   "ойролцоогоор 1 жил"
-        other: "ойролцоогоор %{count} жил"
-      over_x_years:
-        one:   "1 жилээс их"
-        other: "%{count} жилээс их"
-      almost_x_years:
-        one:   "бараг 1 жил"
-        other: "бараг %{count} жил"
-
-  number:
-    format:
-      separator: "."
-      delimiter: ""
-      precision: 3
-    human:
-      format:
-        delimiter: ""
-        precision: 1
-      storage_units:
-        format: "%n %u"
-        units:
-          byte:
-            one: "Байт"
-            other: "Байт"
-          kb: "KB"
-          mb: "MB"
-          gb: "GB"
-          tb: "TB"
-
-        
-# Used in array.to_sentence.
-  support:
-    array:
-      sentence_connector: "бас"
-      skip_last_comma: false
-      
-  activerecord:
-    errors:
-      template:
-        header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
-      messages:
-        inclusion: "жагсаалтад заагдаагүй байна"
-        exclusion: "нөөцлөгдсөн"
-        invalid: "буруу"
-        confirmation: "баталгаажсан өгөгдөлтэй таарахгүй байна"
-        accepted: "хүлээж авах ёстой"
-        empty: "хоосон байж болохгүй"
-        blank: "бланк байж болохгүй"
-        too_long: "дэндүү урт байна (хамгийн ихдээ %{count} тэмдэгт)"
-        too_short: "дэндүү богино байна (хамгийн багадаа %{count} тэмдэгт)"
-        wrong_length: "буруу урттай байна (заавал %{count} тэмдэгт)"
-        taken: "аль хэдийнэ авсан байна"
-        not_a_number: "тоо биш байна"
-        not_a_date: "зөв огноо биш байна"
-        greater_than: "%{count} их байх ёстой"
-        greater_than_or_equal_to: "must be greater than or equal to %{count}"
-        equal_to: "must be equal to %{count}"
-        less_than: "must be less than %{count}"
-        less_than_or_equal_to: "must be less than or equal to %{count}"
-        odd: "заавал сондгой"
-        even: "заавал тэгш"
-        greater_than_start_date: "must be greater than start date"
-        not_same_project: "нэг ижил төсөлд хамаарахгүй байна"
-        circular_dependency: "Энэ харьцаа нь гинжин(рекурсив) харьцаа үүсгэх юм байна"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
-
-  actionview_instancetag_blank_option: Сонгоно уу
-  
-  general_text_No: 'Үгүй'
-  general_text_Yes: 'Тийм'
-  general_text_no: 'үгүй'
-  general_text_yes: 'тийм'
-  general_lang_name: 'Mongolian (Монгол)'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
-  general_csv_encoding: UTF-8
-  general_pdf_encoding: UTF-8
-  general_first_day_of_week: '7'
-  
-  notice_account_updated: Дансыг амжилттай өөрчиллөө.
-  notice_account_invalid_creditentials: Хэрэглэгчийн нэр эсвэл нууц үг буруу байна
-  notice_account_password_updated: Нууц үгийг амжилттай өөрчиллөө.
-  notice_account_wrong_password: Буруу нууц үг
-  notice_account_register_done: Шинэ хэрэглэгч амжилттай үүсгэлээ. Идэвхжүүлэхийн тулд, бидний тань луу илгээсэн мэйл дотор байгаа холбоос дээр дараарай.
-  notice_account_unknown_email: Үл мэдэгдэх хэрэглэгч.
-  notice_can_t_change_password: Энэ эрх гадаад нэвтрэлтэд ашигладаг учраас нууц үгийг өөрчлөх боломжгүй.
-  notice_account_lost_email_sent: Бид таньд мэйлээр нууц үгээ өөрчлөх зааврыг илгээсэн байгаа.
-  notice_account_activated: Таны данс идэвхжлээ. Одоо нэвтэрч орж болно.
-  notice_successful_create: Амжилттай үүсгэлээ.
-  notice_successful_update: Амжилттай өөрчиллөө.
-  notice_successful_delete: Амжилттай устгалаа.
-  notice_successful_connection: Амжилттай холбогдлоо.
-  notice_file_not_found: Таны үзэх гэсэн хуудас байхгүй юмуу устгагдсан байна.
-  notice_locking_conflict: Өгөгдлийг өөр хүн өөрчилсөн байна.
-  notice_not_authorized: Танд энэ хуудсыг үзэх эрх байхгүй байна.
-  notice_email_sent: "%{value} - руу мэйл илгээлээ"
-  notice_email_error: "Мэйл илгээхэд алдаа гарлаа (%{value})"
-  notice_feeds_access_key_reseted: Таны RSS хандалтын түлхүүрийг дахин эхлүүллээ.
-  notice_api_access_key_reseted: Your API access key was reset.
-  notice_failed_to_save_issues: "%{total} асуудал сонгогдсоноос %{count} асуудлыг нь хадгалахад алдаа гарлаа: %{ids}."
-  notice_no_issue_selected: "Ямар ч асуудал сонгогдоогүй байна! Засварлах асуудлуудаа сонгоно уу."
-  notice_account_pending: "Таны дансыг үүсгэж дууслаа, администратор баталгаажуулах хүртэл хүлээнэ үү."
-  notice_default_data_loaded: Стандарт тохиргоог амжилттай ачааллаа.
-  notice_unable_delete_version: Хувилбарыг устгах боломжгүй.
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  
-  error_can_t_load_default_data: "Стандарт тохиргоог ачаалж чадсангүй: %{value}"
-  error_scm_not_found: "Repository дотор тухайн бичлэг эсвэл хувилбарыг олсонгүй."
-  error_scm_command_failed: "Repository-д хандахад алдаа гарлаа:  %{value}"
-  error_scm_annotate: "Бичлэг байхгүй байна, эсвэл бичлэгт тайлбар хавсаргаж болохгүй."
-  error_issue_not_found_in_project: 'Сонгосон асуудал энэ төсөлд хамаардаггүй юм уу эсвэл системд байхгүй байна.'
-  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
-  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
-  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
-  error_can_not_archive_project: This project can not be archived
-  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
-  error_workflow_copy_source: 'Please select a source tracker or role'
-  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
-  
-  warning_attachments_not_saved: "%{count} file(s) файлыг хадгалж чадсангүй."
-  
-  mail_subject_lost_password: "Таны %{value} нууц үг"
-  mail_body_lost_password: 'Нууц үгээ өөрчлөхийн тулд доорх холбоос дээр дарна уу:'
-  mail_subject_register: "Таны %{value} дансыг идэвхжүүлэх"
-  mail_body_register: 'Дансаа идэвхжүүлэхийн тулд доорх холбоос дээр дарна уу:'
-  mail_body_account_information_external: "Та өөрийнхөө %{value} дансыг ашиглаж холбогдож болно."
-  mail_body_account_information: Таны дансны тухай мэдээлэл
-  mail_subject_account_activation_request: "%{value} дансыг идэвхжүүлэх хүсэлт"
-  mail_body_account_activation_request: "Шинэ хэрэглэгч (%{value}) бүртгүүлсэн байна. Таны баталгаажуулахыг хүлээж байна:"
-  mail_subject_reminder: "Дараагийн өдрүүдэд %{count} асуудлыг шийдэх хэрэгтэй (%{days})"
-  mail_body_reminder: "Танд оноогдсон %{count} асуудлуудыг дараагийн %{days} өдрүүдэд шийдэх хэрэгтэй:"
-  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
-  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
-  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
-  
-  gui_validation_error: 1 алдаа
-  gui_validation_error_plural: "%{count} алдаа"
-  
-  field_name: Нэр
-  field_description: Тайлбар
-  field_summary: Дүгнэлт
-  field_is_required: Зайлшгүй
-  field_firstname: Таны нэр
-  field_lastname: Овог
-  field_mail: Имэйл
-  field_filename: Файл
-  field_filesize: Хэмжээ
-  field_downloads: Татаж авах зүйлс
-  field_author: Зохиогч
-  field_created_on: Үүссэн
-  field_updated_on: Өөрчилсөн
-  field_field_format: Формат
-  field_is_for_all: Бүх төслийн хувьд
-  field_possible_values: Боломжтой утгууд
-  field_regexp: Энгийн илэрхийлэл
-  field_min_length: Минимум урт
-  field_max_length: Максимум урт
-  field_value: Утга
-  field_category: Төрөл
-  field_title: Гарчиг
-  field_project: Төсөл
-  field_issue: Асуудал
-  field_status: Төлөв
-  field_notes: Тэмдэглэлүүд
-  field_is_closed: Асуудал хаагдсан
-  field_is_default: Стандарт утга
-  field_tracker: Чиглэл
-  field_subject: Гарчиг
-  field_due_date: Дуусах огноо
-  field_assigned_to: Оноогдсон
-  field_priority: Зэрэглэл
-  field_fixed_version: Хувилбар
-  field_user: Хэрэглэгч
-  field_role: Хандалтын эрх
-  field_homepage: Нүүр хуудас
-  field_is_public: Олон нийтийн
-  field_parent: Эцэг төсөл нь
-  field_is_in_roadmap: Асуудлуудыг явцын зураг дээр харуулах
-  field_login: Нэвтрэх нэр
-  field_mail_notification: Имэйл мэдэгдлүүд
-  field_admin: Администратор
-  field_last_login_on: Сүүлийн холбоо
-  field_language: Хэл
-  field_effective_date: Огноо
-  field_password: Нууц үг
-  field_new_password: Шннэ нууц үг
-  field_password_confirmation: Баталгаажуулах
-  field_version: Хувилбар
-  field_type: Төрөл
-  field_host: Хост
-  field_port: Порт
-  field_account: Данс
-  field_base_dn: Үндсэн ДН
-  field_attr_login: Нэвтрэх аттрибут
-  field_attr_firstname: Таны нэр аттрибут
-  field_attr_lastname: Овог аттрибут
-  field_attr_mail: Имэйл аттрибут
-  field_onthefly: Хүссэн үедээ хэрэглэгч үүсгэх
-  field_start_date: Эхлэл
-  field_done_ratio: %% Гүйцэтгэсэн
-  field_auth_source: Нэвтрэх арга
-  field_hide_mail: Миний имэйл хаягийг нуу
-  field_comments: Тайлбар
-  field_url: URL Хаяг
-  field_start_page: Тэргүүн хуудас
-  field_subproject: Дэд төсөл
-  field_hours: Цаг
-  field_activity: Үйл ажиллагаа
-  field_spent_on: Огноо
-  field_identifier: Төслийн глобал нэр
-  field_is_filter: Шүүлтүүр болгон хэрэглэгддэг
-  field_issue_to: Хамаатай асуудал
-  field_delay: Хоцролт
-  field_assignable: Энэ хандалтын эрхэд асуудлуудыг оноож өгч болно
-  field_redirect_existing_links: Байгаа холбоосуудыг дахин чиглүүлэх
-  field_estimated_hours: Барагцаалсан цаг
-  field_column_names: Баганууд
-  field_time_zone: Цагын бүс
-  field_searchable: Хайж болох
-  field_default_value: Стандарт утга
-  field_comments_sorting: Тайлбаруудыг харуул
-  field_parent_title: Эцэг хуудас
-  field_editable: Засварлагдана
-  field_watcher: Харна
-  field_identity_url: OpenID URL
-  field_content: Агуулга
-  field_group_by: Үр дүнгээр бүлэглэх
-  field_sharing: Sharing
-  
-  setting_app_title: Программын гарчиг
-  setting_app_subtitle: Программын дэд гарчиг
-  setting_welcome_text: Мэндчилгээ
-  setting_default_language: Стандарт хэл
-  setting_login_required: Нэвтрэх шаардлагатай
-  setting_self_registration: Өөрийгөө бүртгүүлэх
-  setting_attachment_max_size: Хавсралт файлын дээд хэмжээ
-  setting_issues_export_limit: Асуудал экспортлох хязгаар
-  setting_mail_from: Ямар имэйл хаяг үүсгэх
-  setting_bcc_recipients: BCC талбарын хаягууд (bcc)
-  setting_plain_text_mail: дан текст мэйл (HTML биш)
-  setting_host_name: Хостын нэр болон зам
-  setting_text_formatting: Текст хэлбэржүүлэлт
-  setting_wiki_compression: Вики хуудсуудын түүх дээр шахалт хийх
-  setting_feeds_limit: Фийд агуулгын хязгаар
-  setting_default_projects_public: Шинэ төслүүд автоматаар олон нийтийнх байна
-  setting_autofetch_changesets: Комитуудыг автоматаар татаж авах
-  setting_sys_api_enabled: Репозитори менежментэд зориулан WS-ийг идэвхжүүлэх
-  setting_commit_ref_keywords: Хамааруулах түлхүүр үгс
-  setting_commit_fix_keywords: Зоолттой түлхүүр үгс
-  setting_autologin: Компьютер дээр санах
-  setting_date_format: Огнооны формат
-  setting_time_format: Цагийн формат
-  setting_cross_project_issue_relations: Төсөл хооронд асуудал хамааруулахыг зөвшөөрөх
-  setting_issue_list_default_columns: Асуудлуудыг харуулах стандарт баганууд
-  setting_repositories_encodings: Репозиторийн энкодинг
-  setting_commit_logs_encoding: Коммит хийх үед харуулах текстүүдийн энкодинг
-  setting_emails_footer: Имэйлүүдийн хөл хэсэг
-  setting_protocol: Протокол
-  setting_per_page_options: Нэг хуудсанд байх обьектуудын тохиргоо
-  setting_user_format: Хэрэглэгчдийг харуулах формат
-  setting_activity_days_default: Төслийн үйл ажиллагаа хэсэгт үзүүлэх өдрийн тоо
-  setting_display_subprojects_issues: Дэд төслүүдийн асуудлуудыг автоматаар гол төсөл дээр харуулах
-  setting_enabled_scm: SCM - ийг идэвхжүүлэх
-  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
-  setting_mail_handler_api_enabled: Ирсэн мэйлүүдийн хувьд WS-ийг идэвхжүүлэх
-  setting_mail_handler_api_key: API түлхүүр
-  setting_sequential_project_identifiers: Дэс дараалсан төслийн глобал нэр үүсгэж байх
-  setting_gravatar_enabled: Gravatar дүрсүүдийг хэрэглэгчдэд хэрэглэж байх
-  setting_gravatar_default: Default Gravatar image
-  setting_diff_max_lines_displayed: Ялгаатай мөрүүдийн тоо (дээд тал нь)
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_openid: Allow OpenID login and registration
-  setting_password_min_length: Minimum password length
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_field: Use the issue field
-  setting_issue_done_ratio_issue_status: Use the issue status
-  setting_start_of_week: Start calendars on
-  setting_rest_api_enabled: Enable REST web service
-  setting_cache_formatted_text: Cache formatted text
-  
-  permission_add_project: Create project
-  permission_add_subprojects: Create subprojects
-  permission_edit_project: Төслийг засварлах
-  permission_select_project_modules: Төслийн модулуудийг сонгоно уу
-  permission_manage_members: Системийн хэрэглэгчид
-  permission_manage_project_activities: Manage project activities
-  permission_manage_versions: Хувилбарууд
-  permission_manage_categories: Асуудлын ангиллууд
-  permission_view_issues: Асуудлуудыг харах
-  permission_add_issues: Асуудлууд нэмэх
-  permission_edit_issues: Асуудлуудыг засварлах
-  permission_manage_issue_relations: Асуудлын хамаарлыг зохицуулах
-  permission_add_issue_notes: Тэмдэглэл нэмэх
-  permission_edit_issue_notes: Тэмдэглэлүүд засварлах
-  permission_edit_own_issue_notes: Өөрийн үлдээсэн тэмдэглэлүүдийг засварлах
-  permission_move_issues: Асуудлуудыг зөөх
-  permission_delete_issues: Асуудлуудыг устгах
-  permission_manage_public_queries: Олон нийтийн асуултууд
-  permission_save_queries: Асуултуудыг хадгалах
-  permission_view_gantt: Гант диаграмыг үзэх
-  permission_view_calendar: Календарь үзэх
-  permission_view_issue_watchers: Ажиглагчдын жагсаалтыг харах
-  permission_add_issue_watchers: Ажиглагчид нэмэх
-  permission_delete_issue_watchers: Ажиглагчдыг устгах
-  permission_log_time: Зарцуулсан хугацааг лог хийх
-  permission_view_time_entries: Зарцуулсан хугацааг харах
-  permission_edit_time_entries: Хугацааны логуудыг засварлах
-  permission_edit_own_time_entries: Өөрийн хугацааны логуудыг засварлах
-  permission_manage_news: Мэдээ мэдээллүүд
-  permission_comment_news: Мэдээнд тайлбар үлдээх
-  permission_manage_documents: Бичиг баримтууд
-  permission_view_documents: Бичиг баримтуудыг харах
-  permission_manage_files: Файлууд
-  permission_view_files: Файлуудыг харах
-  permission_manage_wiki: Вики удирдах
-  permission_rename_wiki_pages: Вики хуудсуудыг дахиж нэрлэх
-  permission_delete_wiki_pages: Вики хуудсуудыг устгах
-  permission_view_wiki_pages: Вики үзэх
-  permission_view_wiki_edits: Вики түүх үзэх
-  permission_edit_wiki_pages: Вики хуудсуудыг засварлах
-  permission_delete_wiki_pages_attachments: Хавсралтуудыг устгах
-  permission_protect_wiki_pages: Вики хуудсуудыг хамгаалах
-  permission_manage_repository: Репозитори
-  permission_browse_repository: Репозиторийг үзэх
-  permission_view_changesets: Өөрчлөлтүүдийг харах
-  permission_commit_access: Коммит хандалт
-  permission_manage_boards: Самбарууд
-  permission_view_messages: Зурвасуудыг харах
-  permission_add_messages: Зурвас илгээх
-  permission_edit_messages: Зурвасуудыг засварлах
-  permission_edit_own_messages: Өөрийн зурвасуудыг засварлах
-  permission_delete_messages: Зурвасуудыг устгах
-  permission_delete_own_messages: Өөрийн зурвасуудыг устгах
-  permission_export_wiki_pages: Вики хуудсуудыг экспорт хийх
-  
-  project_module_issue_tracking: Асуудал хянах
-  project_module_time_tracking: Хугацаа хянах
-  project_module_news: Мэдээ мэдээллүүд
-  project_module_documents: Бичиг баримтууд
-  project_module_files: Файлууд
-  project_module_wiki: Вики
-  project_module_repository: Репозитори
-  project_module_boards: Самбарууд
-  
-  label_user: Хэрэглэгч
-  label_user_plural: Хэрэглэгчид
-  label_user_new: Шинэ хэрэглэгч
-  label_user_anonymous: Хамаагүй хэрэглэгч
-  label_project: Төсөл
-  label_project_new: Шинэ төсөл
-  label_project_plural: Төслүүд
-  label_x_projects:
-    zero:  төсөл байхгүй
-    one:   1 төсөл
-    other: "%{count} төслүүд"
-  label_project_all: Бүх Төслүүд
-  label_project_latest: Сүүлийн үеийн төслүүд
-  label_issue: Асуудал
-  label_issue_new: Шинэ асуудал
-  label_issue_plural: Асуудлууд
-  label_issue_view_all: Бүх асуудлуудыг харах
-  label_issues_by: "%{value} - н асуудлууд"
-  label_issue_added: Асуудал нэмэгдлээ
-  label_issue_updated: Асуудал өөрчлөгдлөө
-  label_document: Бичиг баримт
-  label_document_new: Шинэ бичиг баримт
-  label_document_plural: Бичиг баримтууд
-  label_document_added: Бичиг баримт нэмэгдлээ
-  label_role: Хандалтын эрх
-  label_role_plural: Хандалтын эрхүүд
-  label_role_new: Шинэ хандалтын эрх
-  label_role_and_permissions: Хандалтын эрхүүд болон зөвшөөрлүүд
-  label_member: Гишүүн
-  label_member_new: Шинэ гишүүн
-  label_member_plural: Гишүүд
-  label_tracker: Чиглэл
-  label_tracker_plural: Чиглэлүүд
-  label_tracker_new: Шинэ чиглэл
-  label_workflow: Ажлын дараалал
-  label_issue_status: Асуудлын төлөв
-  label_issue_status_plural: Асуудлын төлвүүд
-  label_issue_status_new: Шинэ төлөв
-  label_issue_category: Асуудлын ангилал
-  label_issue_category_plural: Асуудлын ангиллууд
-  label_issue_category_new: Шинэ ангилал
-  label_custom_field: Хэрэглэгчийн тодорхойлсон талбар
-  label_custom_field_plural: Хэрэглэгчийн тодорхойлсон талбарууд
-  label_custom_field_new: Шинээр хэрэглэгчийн тодорхойлсон талбар үүсгэх
-  label_enumerations: Ангиллууд
-  label_enumeration_new: Шинэ утга
-  label_information: Мэдээлэл
-  label_information_plural: Мэдээллүүд
-  label_please_login: Нэвтэрч орно уу
-  label_register: Бүртгүүлэх
-  label_login_with_open_id_option: or login with OpenID
-  label_password_lost: Нууц үгээ алдсан
-  label_home: Нүүр
-  label_home_heading: Нүүр
-  label_my_page: Миний хуудас
-  label_my_account: Миний данс
-  label_my_projects: Миний төслүүд
-  label_administration: Админ хэсэг
-  label_login: Нэвтрэх
-  label_logout: Гарах
-  label_help: Тусламж
-  label_reported_issues: Мэдэгдсэн асуудлууд
-  label_assigned_to_me_issues: Надад оноогдсон асуудлууд
-  label_last_login: Сүүлийн холболт
-  label_registered_on: Бүртгүүлсэн огноо
-  label_activity: Үйл ажиллагаа
-  label_overall_activity: Ерөнхий үйл ажиллагаа
-  label_user_activity: "%{value}-ийн үйл ажиллагаа"
-  label_new: Шинэ
-  label_logged_as: Холбогдсон нэр
-  label_environment: Орчин
-  label_authentication: Нэвтрэх
-  label_auth_source: Нэвтрэх арга
-  label_auth_source_new: Шинэ нэвтрэх арга
-  label_auth_source_plural: Нэвтрэх аргууд
-  label_subproject_plural: Дэд төслүүд
-  label_subproject_new: Шинэ дэд төсөл
-  label_and_its_subprojects: "%{value} болон холбогдох дэд төслүүд"
-  label_min_max_length: Дээд - Доод урт
-  label_list: Жагсаалт
-  label_date: Огноо
-  label_integer: Бүхэл тоо
-  label_float: Бутархай тоо
-  label_boolean: Үнэн худал утга
-  label_string: Текст
-  label_text: Урт текст
-  label_attribute: Аттрибут
-  label_attribute_plural: Аттрибутууд
-  label_download: "%{count} Татаж авсан зүйл"
-  label_download_plural: "%{count} Татаж авсан зүйлс"
-  label_no_data: Үзүүлэх өгөгдөл байхгүй байна
-  label_change_status: Төлвийг өөрчлөх
-  label_history: Түүх
-  label_attachment: Файл
-  label_attachment_new: Шинэ файл
-  label_attachment_delete: Файл устгах
-  label_attachment_plural: Файлууд
-  label_file_added: Файл нэмэгдлээ
-  label_report: Тайлан
-  label_report_plural: Тайлангууд 
-  label_news: Мэдээ
-  label_news_new: Шинэ мэдээ
-  label_news_plural: Мэдээ
-  label_news_latest: Сүүлийн үеийн мэдээнүүд
-  label_news_view_all: Бүх мэдээг харах
-  label_news_added: Мэдээ нэмэгдлээ
-  label_change_log: Өөрчлөлтийн лог
-  label_settings: Тохиргоо
-  label_overview: Эхлэл
-  label_version: Хувилбар
-  label_version_new: Шинэ хувилбар
-  label_version_plural: Хувилбарууд
-  label_close_versions: Гүйцэт хувилбаруудыг хаалаа
-  label_confirmation: Баталгаажуулах
-  label_export_to: 'Өөр авч болох формат:'
-  label_read: Унших...
-  label_public_projects: Олон нийтийн төслүүд
-  label_open_issues: нээлттэй
-  label_open_issues_plural: нээлттэй
-  label_closed_issues: хаалттай
-  label_closed_issues_plural: хаалттай
-  label_x_open_issues_abbr_on_total:
-    zero:  0 нээлттэй / %{total}
-    one:   1 нээлттэй / %{total}
-    other: "%{count} нээлттэй / %{total}"
-  label_x_open_issues_abbr:
-    zero:  0 нээлттэй
-    one:   1 нээлттэй
-    other: "%{count} нээлттэй"
-  label_x_closed_issues_abbr:
-    zero:  0 хаалттай
-    one:   1 хаалттай
-    other: "%{count} хаалттай"
-  label_total: Нийт
-  label_permissions: Зөвшөөрлүүд
-  label_current_status: Одоогийн төлөв
-  label_new_statuses_allowed: Шинээр олгож болох төлвүүд
-  label_all: бүгд
-  label_none: хоосон
-  label_nobody: хэн ч биш
-  label_next: Дараагийн
-  label_previous: Өмнөх
-  label_used_by: Хэрэглэгддэг
-  label_details: Дэлгэрэнгүй
-  label_add_note: Тэмдэглэл нэмэх
-  label_per_page: Нэг хуудсанд
-  label_calendar: Календарь
-  label_months_from: Саруудыг хаанаас
-  label_gantt: Гант диаграм
-  label_internal: Дотоод
-  label_last_changes: "сүүлийн %{count} өөрчлөлтүүд"
-  label_change_view_all: Бүх өөрчлөлтүүдийг харах
-  label_personalize_page: Энэ хуудсыг өөрт зориулан өөрчлөх
-  label_comment: Тайлбар
-  label_comment_plural: Тайлбарууд
-  label_x_comments:
-    zero: сэтгэгдэл байхгүй
-    one: 1 сэтгэгдэлтэй
-    other: "%{count} сэтгэгдэлтэй"
-  label_comment_add: Тайлбар нэмэх
-  label_comment_added: Тайлбар нэмэгдлээ
-  label_comment_delete: Тайлбарууд устгах
-  label_query: Хэрэглэгчийн тодорхойлсон асуулт
-  label_query_plural: Хэрэглэгчийн тодорхойлсон асуултууд
-  label_query_new: Шинээр хэрэглэгчийн тодорхойлсон асуулт үүсгэх
-  label_filter_add: Шүүлтүүр нэмэх
-  label_filter_plural: Шүүлтүүрүүд
-  label_equals: бол
-  label_not_equals: биш
-  label_in_less_than: аас бага
-  label_in_more_than: аас их
-  label_greater_or_equal: '>='
-  label_less_or_equal: '<='
-  label_in: дотор
-  label_today: өнөөдөр
-  label_all_time: бүх хугацаа
-  label_yesterday: өчигдөр
-  label_this_week: энэ долоо хоног
-  label_last_week: өнгөрсөн долоо хоног
-  label_last_n_days: "сүүлийн %{count} өдрүүд"
-  label_this_month: энэ сар
-  label_last_month: сүүлийн сар
-  label_this_year: энэ жил
-  label_date_range: Хязгаар огноо
-  label_less_than_ago: бага өдрийн дотор
-  label_more_than_ago: их өдрийн дотор
-  label_ago: өдрийн өмнө
-  label_contains: агуулж байгаа
-  label_not_contains: агуулаагүй
-  label_day_plural: өдрүүд
-  label_repository: Репозитори
-  label_repository_plural: Репозиторууд
-  label_browse: Үзэх
-  label_modification: "%{count} өөрчлөлт"
-  label_modification_plural: "%{count} өөрчлөлтүүд"
-  label_branch: Салбар
-  label_tag: Шошго 
-  label_revision: Хувилбар
-  label_revision_plural: Хувилбарууд
-  label_revision_id: "%{value} Хувилбар"
-  label_associated_revisions: Хамааралтай хувилбарууд
-  label_added: нэмэгдсэн
-  label_modified: өөрчлөгдсөн
-  label_copied: хуулсан
-  label_renamed: нэрийг нь өөрчилсөн
-  label_deleted: устгасан
-  label_latest_revision: Сүүлийн үеийн хувилбар
-  label_latest_revision_plural: Сүүлийн үеийн хувилбарууд
-  label_view_revisions: Хувилбаруудыг харах
-  label_view_all_revisions: Бүх хувилбаруудыг харах
-  label_max_size: Maximum size
-  label_sort_highest: Хамгийн дээр
-  label_sort_higher: Дээш нь
-  label_sort_lower: Доош нь
-  label_sort_lowest: Хамгийн доор
-  label_roadmap: Хөтөч
-  label_roadmap_due_in: "%{value} дотор дуусгах"
-  label_roadmap_overdue: "%{value} оройтсон"
-  label_roadmap_no_issues: Энэ хувилбарт асуудал байхгүй байна
-  label_search: Хайх
-  label_result_plural: Үр дүн
-  label_all_words: Бүх үгс
-  label_wiki: Вики
-  label_wiki_edit: Вики засвар
-  label_wiki_edit_plural: Вики засварууд
-  label_wiki_page: Вики хуудас
-  label_wiki_page_plural: Вики хуудас
-  label_index_by_title: Гарчгаар эрэмбэлэх
-  label_index_by_date: Огноогоор эрэмбэлэх
-  label_current_version: Одоогийн хувилбар
-  label_preview: Ямар харагдахыг шалгах
-  label_feed_plural: Feeds
-  label_changes_details: Бүх өөрчлөлтүүдийн дэлгэрэнгүй
-  label_issue_tracking: Асуудал хянах
-  label_spent_time: Зарцуулсан хугацаа
-  label_f_hour: "%{value} цаг"
-  label_f_hour_plural: "%{value} цаг"
-  label_time_tracking: Хугацааг хянах
-  label_change_plural: Өөрчлөлтүүд
-  label_statistics: Статистик
-  label_commits_per_month: Сард хийсэн коммитын тоо
-  label_commits_per_author: Зохиогч бүрийн хувьд коммитын тоо
-  label_view_diff: Ялгаануудыг харах
-  label_diff_inline: дотор нь
-  label_diff_side_by_side: зэрэгцүүлж
-  label_options: Тохиргоо
-  label_copy_workflow_from: Ажлын дарааллыг хуулах
-  label_permissions_report: Зөвшөөрлүүдийн таблиц
-  label_watched_issues: Ажиглагдаж байгаа асуудлууд
-  label_related_issues: Хамааралтай асуудлууд
-  label_applied_status: Олгосон төлөв
-  label_loading: Ачаалж байна...
-  label_relation_new: Шинэ хамаарал
-  label_relation_delete: Хамаарлыг устгах
-  label_relates_to: энгийн хамааралтай
-  label_duplicates: хос хамааралтай
-  label_duplicated_by: давхардуулсан эзэн
-  label_blocks: шаардах хамааралтай
-  label_blocked_by: блоколсон эзэн
-  label_precedes: урьдчилах хамааралтай
-  label_follows: дагаж
-  label_end_to_start: хойноос нь урагшаа
-  label_end_to_end: хойноос нь хойшоо
-  label_start_to_start: урдаас нь урагаа
-  label_start_to_end: урдаас нь хойшоо
-  label_stay_logged_in: Энэ комьютер дээр санах
-  label_disabled: идэвхгүй болсон
-  label_show_completed_versions: Гүйцэд хувилбаруудыг харуулах
-  label_me: би
-  label_board: Форум
-  label_board_new: Шинэ форум
-  label_board_plural: Форумууд
-  label_board_locked: Түгжээтэй
-  label_board_sticky: Sticky
-  label_topic_plural: Сэдвүүд
-  label_message_plural: Зурвасууд
-  label_message_last: Сүүлийн зурвас
-  label_message_new: Шинэ зурвас
-  label_message_posted: Зурвас нэмэгдлээ
-  label_reply_plural: Хариултууд
-  label_send_information: Дансны мэдээллийг хэрэглэгчид илгээх
-  label_year: Жил
-  label_month: Сар
-  label_week: Долоо хоног
-  label_date_from: Хэзээнээс
-  label_date_to: Хэдий хүртэл
-  label_language_based: Хэрэглэгчийн хэлнас шалтгаалан
-  label_sort_by: "%{value} талбараар нь эрэмбэлэх"
-  label_send_test_email: Турших мэйл илгээх
-  label_feeds_access_key: RSS хандах түлхүүр
-  label_missing_feeds_access_key: RSS хандах түлхүүр алга
-  label_feeds_access_key_created_on: "RSS хандалтын түлхүүр %{value}-ийн өмнө үүссэн"
-  label_module_plural: Модулууд
-  label_added_time_by: "%{author} %{age}-ийн өмнө нэмсэн"
-  label_updated_time_by: "%{author} %{age}-ийн өмнө өөрчилсөн"
-  label_updated_time: "%{value} -ийн өмнө өөрчлөгдсөн"
-  label_jump_to_a_project: Төсөл рүү очих...
-  label_file_plural: Файлууд
-  label_changeset_plural: Өөрчлөлтүүд
-  label_default_columns: Стандарт баганууд
-  label_no_change_option: (Өөрчлөлт байхгүй)
-  label_bulk_edit_selected_issues: Сонгогдсон асуудлуудыг бөөнөөр засварлах
-  label_theme: Системийн Дизайн
-  label_default: Стандарт
-  label_search_titles_only: Зөвхөн гарчиг хайх
-  label_user_mail_option_all: "Миний бүх төсөл дээрх бүх үзэгдлүүдийн хувьд"
-  label_user_mail_option_selected: "Сонгогдсон төслүүдийн хувьд бүх үзэгдэл дээр..."
-  label_user_mail_no_self_notified: "Миний өөрийн хийсэн өөрчлөлтүүдийн тухай надад мэдэгдэх хэрэггүй"
-  label_registration_activation_by_email: дансыг имэйлээр идэвхжүүлэх
-  label_registration_manual_activation: дансыг гараар идэвхжүүлэх
-  label_registration_automatic_activation: дансыг автоматаар идэвхжүүлэх
-  label_display_per_page: 'Нэг хуудсанд: %{value}'
-  label_age: Нас
-  label_change_properties: Тохиргоог өөрчлөх
-  label_general: Ерөнхий
-  label_more: Цааш нь
-  label_scm: SCM
-  label_plugins: Модулууд
-  label_ldap_authentication: LDAP нэвтрэх горим
-  label_downloads_abbr: D/L
-  label_optional_description: Дурын тайлбар
-  label_add_another_file: Дахин файл нэмэх
-  label_preferences: Тохиргоо
-  label_chronological_order: Цагаан толгойн үсгийн дарааллаар
-  label_reverse_chronological_order: Урвуу цагаан толгойн үсгийн дарааллаар
-  label_planning: Төлөвлөлт
-  label_incoming_emails: Ирсэн мэйлүүд
-  label_generate_key: Түлхүүр үүсгэх
-  label_issue_watchers: Ажиглагчид
-  label_example: Жишээ
-  label_display: Display
-  label_sort: Sort
-  label_ascending: Ascending
-  label_descending: Descending
-  label_date_from_to: From %{start} to %{end}
-  label_wiki_content_added: Wiki page added
-  label_wiki_content_updated: Wiki page updated
-  label_group: Group
-  label_group_plural: Groups
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  label_version_sharing_none: Not shared
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_tree: With project tree
-  label_version_sharing_system: With all projects
-  label_update_issue_done_ratios: Update issue done ratios
-  label_copy_source: Source
-  label_copy_target: Target
-  label_copy_same_as_target: Same as target
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_api_access_key: API access key
-  label_missing_api_access_key: Missing an API access key
-  label_api_access_key_created_on: "API access key created %{value} ago"
-  
-  button_login: Нэвтрэх
-  button_submit: Илгээх
-  button_save: Хадгалах
-  button_check_all: Бүгдийг сонго
-  button_uncheck_all: Бүгдийг үл сонго
-  button_delete: Устгах
-  button_create: Үүсгэх
-  button_create_and_continue: Үүсгээд цааш үргэлжлүүлэх
-  button_test: Турших
-  button_edit: Засварлах
-  button_add: Нэмэх
-  button_change: Өөрчлөх
-  button_apply: Өөрчлөлтийг хадгалах
-  button_clear: Цэвэрлэх
-  button_lock: Түгжих
-  button_unlock: Түгжээг тайлах
-  button_download: Татах
-  button_list: Жагсаалт
-  button_view: Харах
-  button_move: Зөөх
-  button_move_and_follow: Зөө бас дага
-  button_back: Буцах
-  button_cancel: Болих
-  button_activate: Идэвхжүүлэх
-  button_sort: Эрэмбэлэх
-  button_log_time: Лог хийсэн хугацаа
-  button_rollback: Энэ хувилбар руу буцах
-  button_watch: Ажиглах
-  button_unwatch: Ажиглахаа болих
-  button_reply: Хариулах
-  button_archive: Архивлах
-  button_unarchive: Архивыг задлах
-  button_reset: Анхны утгууд
-  button_rename: Нэрийг нь солих
-  button_change_password: Нууц үгээ өөрчлөх
-  button_copy: Хуулах
-  button_copy_and_follow: Зөө бас дага
-  button_annotate: Тайлбар хавсаргах
-  button_update: Шинэчлэх
-  button_configure: Тохируулах
-  button_quote: Ишлэл
-  button_duplicate: Хуулбар
-  button_show: Үзэх
-  
-  status_active: идэвхтэй
-  status_registered: бүртгүүлсэн
-  status_locked: түгжээтэй
-  
-  version_status_open: нээлттэй
-  version_status_locked: түгжээтэй
-  version_status_closed: хаалттай
-
-  field_active: идэвхтэй
-  
-  text_select_mail_notifications: Ямар үед имэйлээр мэдэгдэл илгээхийг сонгоно уу.
-  text_regexp_info: eg. ^[A-Z0-9]+$
-  text_min_max_length_info: 0 гэвэл ямар ч хязгааргүй гэсэн үг
-  text_project_destroy_confirmation: Та энэ төсөл болоод бусад мэдээллийг нь үнэхээр устгамаар байна уу ?
-  text_subprojects_destroy_warning: "Уг төслийн дэд төслүүд : %{value} нь бас устгагдах болно."
-  text_workflow_edit: Ажлын дарааллыг өөрчлөхийн тулд хандалтын эрх болон асуудлын чиглэлийг сонгоно уу
-  text_are_you_sure: Та итгэлтэй байна уу ?
-  text_journal_changed: "%{label} %{old} байсан нь %{new} болов"
-  text_journal_set_to: "%{label} %{value} болгож өөрчиллөө"
-  text_journal_deleted: "%{label} устсан (%{old})"
-  text_journal_added: "%{label} %{value} нэмэгдсэн"
-  text_tip_issue_begin_day: энэ өдөр эхлэх ажил
-  text_tip_issue_end_day: энэ өдөр дуусах ажил
-  text_tip_issue_begin_end_day: энэ өдөр эхлээд мөн дуусч байгаа ажил
-  text_project_identifier_info: 'Зөвхөн жижиг үсгүүд болон (a-z), тоо and дундуур зураас ашиглаж болно.<br />Нэгэнт хадгалсан хойно, төслийн глобал нэрийг өөрлчөх боломжгүй.'
-  text_caracters_maximum: "дээд тал нь %{count} үсэг."
-  text_caracters_minimum: "Хамгийн багадаа ядаж %{count} тэмдэгт байх."
-  text_length_between: "Урт нь багадаа %{min}, ихдээ %{max} тэмдэгт."
-  text_tracker_no_workflow: Энэхүү асуудлын чиглэлд ямар ч ажлын дараалал тодорхойлогдоогүй байна
-  text_unallowed_characters: Хэрэглэж болохгүй тэмдэгтүүд
-  text_comma_separated: Таслалаар зааглан олон утга оруулж болно.
-  text_line_separated: Multiple values allowed (one line for each value).
-  text_issues_ref_in_commit_messages: Коммитийн зурвасуудад хамааруулсан болон байнгын асуудлууд
-  text_issue_added: "Асуудал %{id} - ийг хэрэглэгч %{author} мэдэгдсэн байна."
-  text_issue_updated: "Асуудал %{id} - ийг хэрэглэгч %{author} өөрчилсөн байна."
-  text_wiki_destroy_confirmation: Та энэ вики болон холбогдох бүх мэдээллийг үнэхээр устгамаар байна уу ?
-  text_issue_category_destroy_question: "Энэ ангилалд зарим асуудлууд (%{count})  орсон байна. Та яах вэ ?"
-  text_issue_category_destroy_assignments: Асуудлуудыг энэ ангиллаас авах
-  text_issue_category_reassign_to: Асуудлуудыг энэ ангилалд дахин оноох
-  text_user_mail_option: "Сонгогдоогүй төслүүдийн хувьд, та зөвхөн өөрийнхөө ажиглаж байгаа зүйлс юмуу танд хамаатай зүйлсийн талаар мэдэгдэл авах болно (Таны оруулсан асуудал, эсвэл танд оноосон гэх мэт)."
-  text_no_configuration_data: "Хандалтын эрхүүд, чиглэлүүд, асуудлын төлвүүд болон ажлын дарааллын тухай мэдээллийг хараахан оруулаагүй байна.\nТа стандарт өгөгдлүүдийг даруйхан оруулахыг зөвлөж байна, оруулсан хойно та засварлаж болно."
-  text_load_default_configuration: Стандарт өгөгдлийг ачаалах
-  text_status_changed_by_changeset: "%{value} өөрчлөлтөд хийгдсэн."
-  text_issues_destroy_confirmation: 'Та сонгогдсон асуудлуудыг үнэхээр устгамаар байна уу ?'
-  text_select_project_modules:  'Энэ төслийн хувьд идэвхжүүлэх модулуудаа сонгоно уу:'
-  text_default_administrator_account_changed: Стандарт администраторын бүртгэл өөрчлөгдлөө
-  text_file_repository_writable: Хавсралт файл хадгалах хавтас руу бичих эрхтэй
-  text_plugin_assets_writable: Плагин модулийн ассет хавтас руу бичих эрхтэй
-  text_rmagick_available: RMagick суулгагдсан (заавал биш)
-  text_destroy_time_entries_question: "Таны устгах гэж байгаа асуудлууд дээр нийт %{hours} цаг зарцуулсан юм байна, та яах вэ ?"
-  text_destroy_time_entries: Мэдэгдсэн цагуудыг устгах
-  text_assign_time_entries_to_project: Мэдэгдсэн асуудлуудыг төсөлд оноох
-  text_reassign_time_entries: 'Мэдэгдсэн асуудлуудыг энэ асуудалд дахин оноо:'
-  text_user_wrote: "%{value} бичихдээ:"
-  text_enumeration_destroy_question: "Энэ утгад %{count} обьект оноогдсон байна."
-  text_enumeration_category_reassign_to: 'Тэдгээрийг энэ утгад дахин оноо:'
-  text_email_delivery_not_configured: "Имэйлийн тохиргоог хараахан тохируулаагүй байна, тиймээс имэйл мэдэгдэл явуулах боломжгүй байна.\nSMTP сервэрээ config/configuration.yml файл дотор тохируулаад төслийн менежерээ дахиад эхлүүлээрэй."
-  text_repository_usernames_mapping: "Репозиторийн логд байгаа бүх хэрэглэгчийн нэрүүдэд харгалзсан Төслийн Менежер системд бүртгэлтэй хэрэглэгчдийг Сонгох юмуу шинэчилнэ үү.\nТөслийн менежер болон репозиторид байгаа ижилхэн нэр юмуу имэйлтэй хэрэглэгчид харилцан харгалзна."
-  text_diff_truncated: '... Файлын ялгаврын хэмжээ үзүүлэхэд дэндүү урт байгаа учраас төгсгөлөөс нь хасч үзүүлэв.'
-  text_custom_field_possible_values_info: 'One line for each value'
-  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
-  text_wiki_page_nullify_children: "Keep child pages as root pages"
-  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
-  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
-  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
-  
-  default_role_manager: Менежер
-  default_role_developer: Хөгжүүлэгч
-  default_role_reporter: Мэдэгдэгч
-  default_tracker_bug: Алдаа
-  default_tracker_feature: Онцлог
-  default_tracker_support: Тусламж
-  default_issue_status_new: Шинэ
-  default_issue_status_in_progress: Ахицтай
-  default_issue_status_assigned: Оноогдсон
-  default_issue_status_resolved: Шийдвэрлэгдсэн
-  default_issue_status_feedback: Feedback
-  default_issue_status_closed: Хаагдсан
-  default_issue_status_rejected: Хүлээж аваагүй
-  default_doc_category_user: Хэрэглэгчийн бичиг баримт
-  default_doc_category_tech: Техникийн бичиг баримт
-  default_priority_low: Бага
-  default_priority_normal: Хэвийн
-  default_priority_high: Өндөр
-  default_priority_urgent: Нэн яаралтай
-  default_priority_immediate: Нэн даруй
-  default_activity_design: Дизайн
-  default_activity_development: Хөгжүүлэлт
-  
-  enumeration_issue_priorities: Асуудлын зэрэглэлүүд
-  enumeration_doc_categories: Бичиг баримтын ангиллууд
-  enumeration_activities: Үйл ажиллагаанууд (хугацааг хянах)
-  enumeration_system_activity: Системийн үйл ажиллагаа
-
-  permission_manage_subtasks: Manage subtasks
-  label_profile: Profile
-  field_parent_issue: Parent task
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_subtask_plural: Subtasks
-  label_project_copy_notifications: Send email notifications during the project copy
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_unable_to_connect: Unable to connect (%{value})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
-  field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
-  project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+mn:
+  direction: ltr
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%Y/%m/%d"
+      short: "%b %d"
+      long: "%Y, %B %d"
+      
+    day_names: [Даваа, Мягмар, Лхагва, Пүрэв, Баасан, Бямба, Ням]
+    abbr_day_names: [Дав, Мяг, Лха, Пүр, Бсн, Бям, Ням]
+      
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, 1-р сар, 2-р сар, 3-р сар, 4-р сар, 5-р сар, 6-р сар, 7-р сар, 8-р сар, 9-р сар, 10-р сар, 11-р сар, 12-р сар]
+    abbr_month_names: [~, 1сар, 2сар, 3сар, 4сар, 5сар, 6сар, 7сар, 8сар, 9сар, 10сар, 11сар, 12сар]
+    # Used in date_select and datime_select.
+    order:
+      - :day
+      - :month
+      - :year
+
+  time:
+    formats:
+      default: "%Y/%m/%d %I:%M %p"
+      time: "%I:%M %p"
+      short: "%d %b %H:%M"
+      long: "%Y, %B %d %H:%M"
+    am: "am"
+    pm: "pm"
+      
+  datetime:
+    distance_in_words:
+      half_a_minute: "хагас минут"
+      less_than_x_seconds:
+        one:   "секунд орчим"
+        other: "%{count} секундээс бага хугацаа"
+      x_seconds:
+        one:   "1 секунд"
+        other: "%{count} секунд"
+      less_than_x_minutes:
+        one:   "минутаас бага хугацаа"
+        other: "%{count} минутаас бага хугацаа"
+      x_minutes:
+        one:   "1 минут"
+        other: "%{count} минут"
+      about_x_hours:
+        one:   "1 цаг орчим"
+        other: "ойролцоогоор %{count} цаг"
+      x_days:
+        one:   "1 өдөр"
+        other: "%{count} өдөр"
+      about_x_months:
+        one:   "1 сар орчим"
+        other: "ойролцоогоор %{count} сар"
+      x_months:
+        one:   "1 сар"
+        other: "%{count} сар"
+      about_x_years:
+        one:   "ойролцоогоор 1 жил"
+        other: "ойролцоогоор %{count} жил"
+      over_x_years:
+        one:   "1 жилээс их"
+        other: "%{count} жилээс их"
+      almost_x_years:
+        one:   "бараг 1 жил"
+        other: "бараг %{count} жил"
+
+  number:
+    format:
+      separator: "."
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Байт"
+            other: "Байт"
+          kb: "KB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+        
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "бас"
+      skip_last_comma: false
+      
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "1 error prohibited this %{model} from being saved"
+          other:  "%{count} errors prohibited this %{model} from being saved"
+      messages:
+        inclusion: "жагсаалтад заагдаагүй байна"
+        exclusion: "нөөцлөгдсөн"
+        invalid: "буруу"
+        confirmation: "баталгаажсан өгөгдөлтэй таарахгүй байна"
+        accepted: "хүлээж авах ёстой"
+        empty: "хоосон байж болохгүй"
+        blank: "бланк байж болохгүй"
+        too_long: "дэндүү урт байна (хамгийн ихдээ %{count} тэмдэгт)"
+        too_short: "дэндүү богино байна (хамгийн багадаа %{count} тэмдэгт)"
+        wrong_length: "буруу урттай байна (заавал %{count} тэмдэгт)"
+        taken: "аль хэдийнэ авсан байна"
+        not_a_number: "тоо биш байна"
+        not_a_date: "зөв огноо биш байна"
+        greater_than: "%{count} их байх ёстой"
+        greater_than_or_equal_to: "must be greater than or equal to %{count}"
+        equal_to: "must be equal to %{count}"
+        less_than: "must be less than %{count}"
+        less_than_or_equal_to: "must be less than or equal to %{count}"
+        odd: "заавал сондгой"
+        even: "заавал тэгш"
+        greater_than_start_date: "must be greater than start date"
+        not_same_project: "нэг ижил төсөлд хамаарахгүй байна"
+        circular_dependency: "Энэ харьцаа нь гинжин(рекурсив) харьцаа үүсгэх юм байна"
+        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+
+  actionview_instancetag_blank_option: Сонгоно уу
+  
+  general_text_No: 'Үгүй'
+  general_text_Yes: 'Тийм'
+  general_text_no: 'үгүй'
+  general_text_yes: 'тийм'
+  general_lang_name: 'Mongolian (Монгол)'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '7'
+  
+  notice_account_updated: Дансыг амжилттай өөрчиллөө.
+  notice_account_invalid_creditentials: Хэрэглэгчийн нэр эсвэл нууц үг буруу байна
+  notice_account_password_updated: Нууц үгийг амжилттай өөрчиллөө.
+  notice_account_wrong_password: Буруу нууц үг
+  notice_account_register_done: Шинэ хэрэглэгч амжилттай үүсгэлээ. Идэвхжүүлэхийн тулд, бидний тань луу илгээсэн мэйл дотор байгаа холбоос дээр дараарай.
+  notice_account_unknown_email: Үл мэдэгдэх хэрэглэгч.
+  notice_can_t_change_password: Энэ эрх гадаад нэвтрэлтэд ашигладаг учраас нууц үгийг өөрчлөх боломжгүй.
+  notice_account_lost_email_sent: Бид таньд мэйлээр нууц үгээ өөрчлөх зааврыг илгээсэн байгаа.
+  notice_account_activated: Таны данс идэвхжлээ. Одоо нэвтэрч орж болно.
+  notice_successful_create: Амжилттай үүсгэлээ.
+  notice_successful_update: Амжилттай өөрчиллөө.
+  notice_successful_delete: Амжилттай устгалаа.
+  notice_successful_connection: Амжилттай холбогдлоо.
+  notice_file_not_found: Таны үзэх гэсэн хуудас байхгүй юмуу устгагдсан байна.
+  notice_locking_conflict: Өгөгдлийг өөр хүн өөрчилсөн байна.
+  notice_not_authorized: Танд энэ хуудсыг үзэх эрх байхгүй байна.
+  notice_email_sent: "%{value} - руу мэйл илгээлээ"
+  notice_email_error: "Мэйл илгээхэд алдаа гарлаа (%{value})"
+  notice_feeds_access_key_reseted: Таны RSS хандалтын түлхүүрийг дахин эхлүүллээ.
+  notice_api_access_key_reseted: Your API access key was reset.
+  notice_failed_to_save_issues: "%{total} асуудал сонгогдсоноос %{count} асуудлыг нь хадгалахад алдаа гарлаа: %{ids}."
+  notice_no_issue_selected: "Ямар ч асуудал сонгогдоогүй байна! Засварлах асуудлуудаа сонгоно уу."
+  notice_account_pending: "Таны дансыг үүсгэж дууслаа, администратор баталгаажуулах хүртэл хүлээнэ үү."
+  notice_default_data_loaded: Стандарт тохиргоог амжилттай ачааллаа.
+  notice_unable_delete_version: Хувилбарыг устгах боломжгүй.
+  notice_issue_done_ratios_updated: Issue done ratios updated.
+  
+  error_can_t_load_default_data: "Стандарт тохиргоог ачаалж чадсангүй: %{value}"
+  error_scm_not_found: "Repository дотор тухайн бичлэг эсвэл хувилбарыг олсонгүй."
+  error_scm_command_failed: "Repository-д хандахад алдаа гарлаа:  %{value}"
+  error_scm_annotate: "Бичлэг байхгүй байна, эсвэл бичлэгт тайлбар хавсаргаж болохгүй."
+  error_issue_not_found_in_project: 'Сонгосон асуудал энэ төсөлд хамаардаггүй юм уу эсвэл системд байхгүй байна.'
+  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
+  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
+  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
+  error_can_not_archive_project: This project can not be archived
+  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
+  error_workflow_copy_source: 'Please select a source tracker or role'
+  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
+  
+  warning_attachments_not_saved: "%{count} file(s) файлыг хадгалж чадсангүй."
+  
+  mail_subject_lost_password: "Таны %{value} нууц үг"
+  mail_body_lost_password: 'Нууц үгээ өөрчлөхийн тулд доорх холбоос дээр дарна уу:'
+  mail_subject_register: "Таны %{value} дансыг идэвхжүүлэх"
+  mail_body_register: 'Дансаа идэвхжүүлэхийн тулд доорх холбоос дээр дарна уу:'
+  mail_body_account_information_external: "Та өөрийнхөө %{value} дансыг ашиглаж холбогдож болно."
+  mail_body_account_information: Таны дансны тухай мэдээлэл
+  mail_subject_account_activation_request: "%{value} дансыг идэвхжүүлэх хүсэлт"
+  mail_body_account_activation_request: "Шинэ хэрэглэгч (%{value}) бүртгүүлсэн байна. Таны баталгаажуулахыг хүлээж байна:"
+  mail_subject_reminder: "Дараагийн өдрүүдэд %{count} асуудлыг шийдэх хэрэгтэй (%{days})"
+  mail_body_reminder: "Танд оноогдсон %{count} асуудлуудыг дараагийн %{days} өдрүүдэд шийдэх хэрэгтэй:"
+  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
+  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
+  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
+  
+  gui_validation_error: 1 алдаа
+  gui_validation_error_plural: "%{count} алдаа"
+  
+  field_name: Нэр
+  field_description: Тайлбар
+  field_summary: Дүгнэлт
+  field_is_required: Зайлшгүй
+  field_firstname: Таны нэр
+  field_lastname: Овог
+  field_mail: Имэйл
+  field_filename: Файл
+  field_filesize: Хэмжээ
+  field_downloads: Татаж авах зүйлс
+  field_author: Зохиогч
+  field_created_on: Үүссэн
+  field_updated_on: Өөрчилсөн
+  field_field_format: Формат
+  field_is_for_all: Бүх төслийн хувьд
+  field_possible_values: Боломжтой утгууд
+  field_regexp: Энгийн илэрхийлэл
+  field_min_length: Минимум урт
+  field_max_length: Максимум урт
+  field_value: Утга
+  field_category: Төрөл
+  field_title: Гарчиг
+  field_project: Төсөл
+  field_issue: Асуудал
+  field_status: Төлөв
+  field_notes: Тэмдэглэлүүд
+  field_is_closed: Асуудал хаагдсан
+  field_is_default: Стандарт утга
+  field_tracker: Чиглэл
+  field_subject: Гарчиг
+  field_due_date: Дуусах огноо
+  field_assigned_to: Оноогдсон
+  field_priority: Зэрэглэл
+  field_fixed_version: Хувилбар
+  field_user: Хэрэглэгч
+  field_role: Хандалтын эрх
+  field_homepage: Нүүр хуудас
+  field_is_public: Олон нийтийн
+  field_parent: Эцэг төсөл нь
+  field_is_in_roadmap: Асуудлуудыг явцын зураг дээр харуулах
+  field_login: Нэвтрэх нэр
+  field_mail_notification: Имэйл мэдэгдлүүд
+  field_admin: Администратор
+  field_last_login_on: Сүүлийн холбоо
+  field_language: Хэл
+  field_effective_date: Огноо
+  field_password: Нууц үг
+  field_new_password: Шннэ нууц үг
+  field_password_confirmation: Баталгаажуулах
+  field_version: Хувилбар
+  field_type: Төрөл
+  field_host: Хост
+  field_port: Порт
+  field_account: Данс
+  field_base_dn: Үндсэн ДН
+  field_attr_login: Нэвтрэх аттрибут
+  field_attr_firstname: Таны нэр аттрибут
+  field_attr_lastname: Овог аттрибут
+  field_attr_mail: Имэйл аттрибут
+  field_onthefly: Хүссэн үедээ хэрэглэгч үүсгэх
+  field_start_date: Эхлэл
+  field_done_ratio: "%% Гүйцэтгэсэн"
+  field_auth_source: Нэвтрэх арга
+  field_hide_mail: Миний имэйл хаягийг нуу
+  field_comments: Тайлбар
+  field_url: URL Хаяг
+  field_start_page: Тэргүүн хуудас
+  field_subproject: Дэд төсөл
+  field_hours: Цаг
+  field_activity: Үйл ажиллагаа
+  field_spent_on: Огноо
+  field_identifier: Төслийн глобал нэр
+  field_is_filter: Шүүлтүүр болгон хэрэглэгддэг
+  field_issue_to: Хамаатай асуудал
+  field_delay: Хоцролт
+  field_assignable: Энэ хандалтын эрхэд асуудлуудыг оноож өгч болно
+  field_redirect_existing_links: Байгаа холбоосуудыг дахин чиглүүлэх
+  field_estimated_hours: Барагцаалсан цаг
+  field_column_names: Баганууд
+  field_time_zone: Цагын бүс
+  field_searchable: Хайж болох
+  field_default_value: Стандарт утга
+  field_comments_sorting: Тайлбаруудыг харуул
+  field_parent_title: Эцэг хуудас
+  field_editable: Засварлагдана
+  field_watcher: Харна
+  field_identity_url: OpenID URL
+  field_content: Агуулга
+  field_group_by: Үр дүнгээр бүлэглэх
+  field_sharing: Sharing
+  
+  setting_app_title: Программын гарчиг
+  setting_app_subtitle: Программын дэд гарчиг
+  setting_welcome_text: Мэндчилгээ
+  setting_default_language: Стандарт хэл
+  setting_login_required: Нэвтрэх шаардлагатай
+  setting_self_registration: Өөрийгөө бүртгүүлэх
+  setting_attachment_max_size: Хавсралт файлын дээд хэмжээ
+  setting_issues_export_limit: Асуудал экспортлох хязгаар
+  setting_mail_from: Ямар имэйл хаяг үүсгэх
+  setting_bcc_recipients: BCC талбарын хаягууд (bcc)
+  setting_plain_text_mail: дан текст мэйл (HTML биш)
+  setting_host_name: Хостын нэр болон зам
+  setting_text_formatting: Текст хэлбэржүүлэлт
+  setting_wiki_compression: Вики хуудсуудын түүх дээр шахалт хийх
+  setting_feeds_limit: Фийд агуулгын хязгаар
+  setting_default_projects_public: Шинэ төслүүд автоматаар олон нийтийнх байна
+  setting_autofetch_changesets: Комитуудыг автоматаар татаж авах
+  setting_sys_api_enabled: Репозитори менежментэд зориулан WS-ийг идэвхжүүлэх
+  setting_commit_ref_keywords: Хамааруулах түлхүүр үгс
+  setting_commit_fix_keywords: Зоолттой түлхүүр үгс
+  setting_autologin: Компьютер дээр санах
+  setting_date_format: Огнооны формат
+  setting_time_format: Цагийн формат
+  setting_cross_project_issue_relations: Төсөл хооронд асуудал хамааруулахыг зөвшөөрөх
+  setting_issue_list_default_columns: Асуудлуудыг харуулах стандарт баганууд
+  setting_repositories_encodings: Репозиторийн энкодинг
+  setting_emails_footer: Имэйлүүдийн хөл хэсэг
+  setting_protocol: Протокол
+  setting_per_page_options: Нэг хуудсанд байх обьектуудын тохиргоо
+  setting_user_format: Хэрэглэгчдийг харуулах формат
+  setting_activity_days_default: Төслийн үйл ажиллагаа хэсэгт үзүүлэх өдрийн тоо
+  setting_display_subprojects_issues: Дэд төслүүдийн асуудлуудыг автоматаар гол төсөл дээр харуулах
+  setting_enabled_scm: SCM - ийг идэвхжүүлэх
+  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
+  setting_mail_handler_api_enabled: Ирсэн мэйлүүдийн хувьд WS-ийг идэвхжүүлэх
+  setting_mail_handler_api_key: API түлхүүр
+  setting_sequential_project_identifiers: Дэс дараалсан төслийн глобал нэр үүсгэж байх
+  setting_gravatar_enabled: Gravatar дүрсүүдийг хэрэглэгчдэд хэрэглэж байх
+  setting_gravatar_default: Default Gravatar image
+  setting_diff_max_lines_displayed: Ялгаатай мөрүүдийн тоо (дээд тал нь)
+  setting_file_max_size_displayed: Max size of text files displayed inline
+  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
+  setting_openid: Allow OpenID login and registration
+  setting_password_min_length: Minimum password length
+  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
+  setting_default_projects_modules: Default enabled modules for new projects
+  setting_issue_done_ratio: Calculate the issue done ratio with
+  setting_issue_done_ratio_issue_field: Use the issue field
+  setting_issue_done_ratio_issue_status: Use the issue status
+  setting_start_of_week: Start calendars on
+  setting_rest_api_enabled: Enable REST web service
+  setting_cache_formatted_text: Cache formatted text
+  
+  permission_add_project: Create project
+  permission_add_subprojects: Create subprojects
+  permission_edit_project: Төслийг засварлах
+  permission_select_project_modules: Төслийн модулуудийг сонгоно уу
+  permission_manage_members: Системийн хэрэглэгчид
+  permission_manage_project_activities: Manage project activities
+  permission_manage_versions: Хувилбарууд
+  permission_manage_categories: Асуудлын ангиллууд
+  permission_view_issues: Асуудлуудыг харах
+  permission_add_issues: Асуудлууд нэмэх
+  permission_edit_issues: Асуудлуудыг засварлах
+  permission_manage_issue_relations: Асуудлын хамаарлыг зохицуулах
+  permission_add_issue_notes: Тэмдэглэл нэмэх
+  permission_edit_issue_notes: Тэмдэглэлүүд засварлах
+  permission_edit_own_issue_notes: Өөрийн үлдээсэн тэмдэглэлүүдийг засварлах
+  permission_move_issues: Асуудлуудыг зөөх
+  permission_delete_issues: Асуудлуудыг устгах
+  permission_manage_public_queries: Олон нийтийн асуултууд
+  permission_save_queries: Асуултуудыг хадгалах
+  permission_view_gantt: Гант диаграмыг үзэх
+  permission_view_calendar: Календарь үзэх
+  permission_view_issue_watchers: Ажиглагчдын жагсаалтыг харах
+  permission_add_issue_watchers: Ажиглагчид нэмэх
+  permission_delete_issue_watchers: Ажиглагчдыг устгах
+  permission_log_time: Зарцуулсан хугацааг лог хийх
+  permission_view_time_entries: Зарцуулсан хугацааг харах
+  permission_edit_time_entries: Хугацааны логуудыг засварлах
+  permission_edit_own_time_entries: Өөрийн хугацааны логуудыг засварлах
+  permission_manage_news: Мэдээ мэдээллүүд
+  permission_comment_news: Мэдээнд тайлбар үлдээх
+  permission_manage_documents: Бичиг баримтууд
+  permission_view_documents: Бичиг баримтуудыг харах
+  permission_manage_files: Файлууд
+  permission_view_files: Файлуудыг харах
+  permission_manage_wiki: Вики удирдах
+  permission_rename_wiki_pages: Вики хуудсуудыг дахиж нэрлэх
+  permission_delete_wiki_pages: Вики хуудсуудыг устгах
+  permission_view_wiki_pages: Вики үзэх
+  permission_view_wiki_edits: Вики түүх үзэх
+  permission_edit_wiki_pages: Вики хуудсуудыг засварлах
+  permission_delete_wiki_pages_attachments: Хавсралтуудыг устгах
+  permission_protect_wiki_pages: Вики хуудсуудыг хамгаалах
+  permission_manage_repository: Репозитори
+  permission_browse_repository: Репозиторийг үзэх
+  permission_view_changesets: Өөрчлөлтүүдийг харах
+  permission_commit_access: Коммит хандалт
+  permission_manage_boards: Самбарууд
+  permission_view_messages: Зурвасуудыг харах
+  permission_add_messages: Зурвас илгээх
+  permission_edit_messages: Зурвасуудыг засварлах
+  permission_edit_own_messages: Өөрийн зурвасуудыг засварлах
+  permission_delete_messages: Зурвасуудыг устгах
+  permission_delete_own_messages: Өөрийн зурвасуудыг устгах
+  permission_export_wiki_pages: Вики хуудсуудыг экспорт хийх
+  
+  project_module_issue_tracking: Асуудал хянах
+  project_module_time_tracking: Хугацаа хянах
+  project_module_news: Мэдээ мэдээллүүд
+  project_module_documents: Бичиг баримтууд
+  project_module_files: Файлууд
+  project_module_wiki: Вики
+  project_module_repository: Репозитори
+  project_module_boards: Самбарууд
+  
+  label_user: Хэрэглэгч
+  label_user_plural: Хэрэглэгчид
+  label_user_new: Шинэ хэрэглэгч
+  label_user_anonymous: Хамаагүй хэрэглэгч
+  label_project: Төсөл
+  label_project_new: Шинэ төсөл
+  label_project_plural: Төслүүд
+  label_x_projects:
+    zero:  төсөл байхгүй
+    one:   1 төсөл
+    other: "%{count} төслүүд"
+  label_project_all: Бүх Төслүүд
+  label_project_latest: Сүүлийн үеийн төслүүд
+  label_issue: Асуудал
+  label_issue_new: Шинэ асуудал
+  label_issue_plural: Асуудлууд
+  label_issue_view_all: Бүх асуудлуудыг харах
+  label_issues_by: "%{value} - н асуудлууд"
+  label_issue_added: Асуудал нэмэгдлээ
+  label_issue_updated: Асуудал өөрчлөгдлөө
+  label_document: Бичиг баримт
+  label_document_new: Шинэ бичиг баримт
+  label_document_plural: Бичиг баримтууд
+  label_document_added: Бичиг баримт нэмэгдлээ
+  label_role: Хандалтын эрх
+  label_role_plural: Хандалтын эрхүүд
+  label_role_new: Шинэ хандалтын эрх
+  label_role_and_permissions: Хандалтын эрхүүд болон зөвшөөрлүүд
+  label_member: Гишүүн
+  label_member_new: Шинэ гишүүн
+  label_member_plural: Гишүүд
+  label_tracker: Чиглэл
+  label_tracker_plural: Чиглэлүүд
+  label_tracker_new: Шинэ чиглэл
+  label_workflow: Ажлын дараалал
+  label_issue_status: Асуудлын төлөв
+  label_issue_status_plural: Асуудлын төлвүүд
+  label_issue_status_new: Шинэ төлөв
+  label_issue_category: Асуудлын ангилал
+  label_issue_category_plural: Асуудлын ангиллууд
+  label_issue_category_new: Шинэ ангилал
+  label_custom_field: Хэрэглэгчийн тодорхойлсон талбар
+  label_custom_field_plural: Хэрэглэгчийн тодорхойлсон талбарууд
+  label_custom_field_new: Шинээр хэрэглэгчийн тодорхойлсон талбар үүсгэх
+  label_enumerations: Ангиллууд
+  label_enumeration_new: Шинэ утга
+  label_information: Мэдээлэл
+  label_information_plural: Мэдээллүүд
+  label_please_login: Нэвтэрч орно уу
+  label_register: Бүртгүүлэх
+  label_login_with_open_id_option: or login with OpenID
+  label_password_lost: Нууц үгээ алдсан
+  label_home: Нүүр
+  label_home_heading: Нүүр
+  label_my_page: Миний хуудас
+  label_my_account: Миний данс
+  label_my_projects: Миний төслүүд
+  label_administration: Админ хэсэг
+  label_login: Нэвтрэх
+  label_logout: Гарах
+  label_help: Тусламж
+  label_reported_issues: Мэдэгдсэн асуудлууд
+  label_assigned_to_me_issues: Надад оноогдсон асуудлууд
+  label_last_login: Сүүлийн холболт
+  label_registered_on: Бүртгүүлсэн огноо
+  label_activity: Үйл ажиллагаа
+  label_overall_activity: Ерөнхий үйл ажиллагаа
+  label_user_activity: "%{value}-ийн үйл ажиллагаа"
+  label_new: Шинэ
+  label_logged_as: Холбогдсон нэр
+  label_environment: Орчин
+  label_authentication: Нэвтрэх
+  label_auth_source: Нэвтрэх арга
+  label_auth_source_new: Шинэ нэвтрэх арга
+  label_auth_source_plural: Нэвтрэх аргууд
+  label_subproject_plural: Дэд төслүүд
+  label_subproject_new: Шинэ дэд төсөл
+  label_and_its_subprojects: "%{value} болон холбогдох дэд төслүүд"
+  label_min_max_length: Дээд - Доод урт
+  label_list: Жагсаалт
+  label_date: Огноо
+  label_integer: Бүхэл тоо
+  label_float: Бутархай тоо
+  label_boolean: Үнэн худал утга
+  label_string: Текст
+  label_text: Урт текст
+  label_attribute: Аттрибут
+  label_attribute_plural: Аттрибутууд
+  label_download: "%{count} Татаж авсан зүйл"
+  label_download_plural: "%{count} Татаж авсан зүйлс"
+  label_no_data: Үзүүлэх өгөгдөл байхгүй байна
+  label_change_status: Төлвийг өөрчлөх
+  label_history: Түүх
+  label_attachment: Файл
+  label_attachment_new: Шинэ файл
+  label_attachment_delete: Файл устгах
+  label_attachment_plural: Файлууд
+  label_file_added: Файл нэмэгдлээ
+  label_report: Тайлан
+  label_report_plural: Тайлангууд 
+  label_news: Мэдээ
+  label_news_new: Шинэ мэдээ
+  label_news_plural: Мэдээ
+  label_news_latest: Сүүлийн үеийн мэдээнүүд
+  label_news_view_all: Бүх мэдээг харах
+  label_news_added: Мэдээ нэмэгдлээ
+  label_change_log: Өөрчлөлтийн лог
+  label_settings: Тохиргоо
+  label_overview: Эхлэл
+  label_version: Хувилбар
+  label_version_new: Шинэ хувилбар
+  label_version_plural: Хувилбарууд
+  label_close_versions: Гүйцэт хувилбаруудыг хаалаа
+  label_confirmation: Баталгаажуулах
+  label_export_to: 'Өөр авч болох формат:'
+  label_read: Унших...
+  label_public_projects: Олон нийтийн төслүүд
+  label_open_issues: нээлттэй
+  label_open_issues_plural: нээлттэй
+  label_closed_issues: хаалттай
+  label_closed_issues_plural: хаалттай
+  label_x_open_issues_abbr_on_total:
+    zero:  0 нээлттэй / %{total}
+    one:   1 нээлттэй / %{total}
+    other: "%{count} нээлттэй / %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 нээлттэй
+    one:   1 нээлттэй
+    other: "%{count} нээлттэй"
+  label_x_closed_issues_abbr:
+    zero:  0 хаалттай
+    one:   1 хаалттай
+    other: "%{count} хаалттай"
+  label_total: Нийт
+  label_permissions: Зөвшөөрлүүд
+  label_current_status: Одоогийн төлөв
+  label_new_statuses_allowed: Шинээр олгож болох төлвүүд
+  label_all: бүгд
+  label_none: хоосон
+  label_nobody: хэн ч биш
+  label_next: Дараагийн
+  label_previous: Өмнөх
+  label_used_by: Хэрэглэгддэг
+  label_details: Дэлгэрэнгүй
+  label_add_note: Тэмдэглэл нэмэх
+  label_per_page: Нэг хуудсанд
+  label_calendar: Календарь
+  label_months_from: Саруудыг хаанаас
+  label_gantt: Гант диаграм
+  label_internal: Дотоод
+  label_last_changes: "сүүлийн %{count} өөрчлөлтүүд"
+  label_change_view_all: Бүх өөрчлөлтүүдийг харах
+  label_personalize_page: Энэ хуудсыг өөрт зориулан өөрчлөх
+  label_comment: Тайлбар
+  label_comment_plural: Тайлбарууд
+  label_x_comments:
+    zero: сэтгэгдэл байхгүй
+    one: 1 сэтгэгдэлтэй
+    other: "%{count} сэтгэгдэлтэй"
+  label_comment_add: Тайлбар нэмэх
+  label_comment_added: Тайлбар нэмэгдлээ
+  label_comment_delete: Тайлбарууд устгах
+  label_query: Хэрэглэгчийн тодорхойлсон асуулт
+  label_query_plural: Хэрэглэгчийн тодорхойлсон асуултууд
+  label_query_new: Шинээр хэрэглэгчийн тодорхойлсон асуулт үүсгэх
+  label_filter_add: Шүүлтүүр нэмэх
+  label_filter_plural: Шүүлтүүрүүд
+  label_equals: бол
+  label_not_equals: биш
+  label_in_less_than: аас бага
+  label_in_more_than: аас их
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: дотор
+  label_today: өнөөдөр
+  label_all_time: бүх хугацаа
+  label_yesterday: өчигдөр
+  label_this_week: энэ долоо хоног
+  label_last_week: өнгөрсөн долоо хоног
+  label_last_n_days: "сүүлийн %{count} өдрүүд"
+  label_this_month: энэ сар
+  label_last_month: сүүлийн сар
+  label_this_year: энэ жил
+  label_date_range: Хязгаар огноо
+  label_less_than_ago: бага өдрийн дотор
+  label_more_than_ago: их өдрийн дотор
+  label_ago: өдрийн өмнө
+  label_contains: агуулж байгаа
+  label_not_contains: агуулаагүй
+  label_day_plural: өдрүүд
+  label_repository: Репозитори
+  label_repository_plural: Репозиторууд
+  label_browse: Үзэх
+  label_modification: "%{count} өөрчлөлт"
+  label_modification_plural: "%{count} өөрчлөлтүүд"
+  label_branch: Салбар
+  label_tag: Шошго 
+  label_revision: Хувилбар
+  label_revision_plural: Хувилбарууд
+  label_revision_id: "%{value} Хувилбар"
+  label_associated_revisions: Хамааралтай хувилбарууд
+  label_added: нэмэгдсэн
+  label_modified: өөрчлөгдсөн
+  label_copied: хуулсан
+  label_renamed: нэрийг нь өөрчилсөн
+  label_deleted: устгасан
+  label_latest_revision: Сүүлийн үеийн хувилбар
+  label_latest_revision_plural: Сүүлийн үеийн хувилбарууд
+  label_view_revisions: Хувилбаруудыг харах
+  label_view_all_revisions: Бүх хувилбаруудыг харах
+  label_max_size: Maximum size
+  label_sort_highest: Хамгийн дээр
+  label_sort_higher: Дээш нь
+  label_sort_lower: Доош нь
+  label_sort_lowest: Хамгийн доор
+  label_roadmap: Хөтөч
+  label_roadmap_due_in: "%{value} дотор дуусгах"
+  label_roadmap_overdue: "%{value} оройтсон"
+  label_roadmap_no_issues: Энэ хувилбарт асуудал байхгүй байна
+  label_search: Хайх
+  label_result_plural: Үр дүн
+  label_all_words: Бүх үгс
+  label_wiki: Вики
+  label_wiki_edit: Вики засвар
+  label_wiki_edit_plural: Вики засварууд
+  label_wiki_page: Вики хуудас
+  label_wiki_page_plural: Вики хуудас
+  label_index_by_title: Гарчгаар эрэмбэлэх
+  label_index_by_date: Огноогоор эрэмбэлэх
+  label_current_version: Одоогийн хувилбар
+  label_preview: Ямар харагдахыг шалгах
+  label_feed_plural: Feeds
+  label_changes_details: Бүх өөрчлөлтүүдийн дэлгэрэнгүй
+  label_issue_tracking: Асуудал хянах
+  label_spent_time: Зарцуулсан хугацаа
+  label_f_hour: "%{value} цаг"
+  label_f_hour_plural: "%{value} цаг"
+  label_time_tracking: Хугацааг хянах
+  label_change_plural: Өөрчлөлтүүд
+  label_statistics: Статистик
+  label_commits_per_month: Сард хийсэн коммитын тоо
+  label_commits_per_author: Зохиогч бүрийн хувьд коммитын тоо
+  label_view_diff: Ялгаануудыг харах
+  label_diff_inline: дотор нь
+  label_diff_side_by_side: зэрэгцүүлж
+  label_options: Тохиргоо
+  label_copy_workflow_from: Ажлын дарааллыг хуулах
+  label_permissions_report: Зөвшөөрлүүдийн таблиц
+  label_watched_issues: Ажиглагдаж байгаа асуудлууд
+  label_related_issues: Хамааралтай асуудлууд
+  label_applied_status: Олгосон төлөв
+  label_loading: Ачаалж байна...
+  label_relation_new: Шинэ хамаарал
+  label_relation_delete: Хамаарлыг устгах
+  label_relates_to: энгийн хамааралтай
+  label_duplicates: хос хамааралтай
+  label_duplicated_by: давхардуулсан эзэн
+  label_blocks: шаардах хамааралтай
+  label_blocked_by: блоколсон эзэн
+  label_precedes: урьдчилах хамааралтай
+  label_follows: дагаж
+  label_end_to_start: хойноос нь урагшаа
+  label_end_to_end: хойноос нь хойшоо
+  label_start_to_start: урдаас нь урагаа
+  label_start_to_end: урдаас нь хойшоо
+  label_stay_logged_in: Энэ комьютер дээр санах
+  label_disabled: идэвхгүй болсон
+  label_show_completed_versions: Гүйцэд хувилбаруудыг харуулах
+  label_me: би
+  label_board: Форум
+  label_board_new: Шинэ форум
+  label_board_plural: Форумууд
+  label_board_locked: Түгжээтэй
+  label_board_sticky: Sticky
+  label_topic_plural: Сэдвүүд
+  label_message_plural: Зурвасууд
+  label_message_last: Сүүлийн зурвас
+  label_message_new: Шинэ зурвас
+  label_message_posted: Зурвас нэмэгдлээ
+  label_reply_plural: Хариултууд
+  label_send_information: Дансны мэдээллийг хэрэглэгчид илгээх
+  label_year: Жил
+  label_month: Сар
+  label_week: Долоо хоног
+  label_date_from: Хэзээнээс
+  label_date_to: Хэдий хүртэл
+  label_language_based: Хэрэглэгчийн хэлнас шалтгаалан
+  label_sort_by: "%{value} талбараар нь эрэмбэлэх"
+  label_send_test_email: Турших мэйл илгээх
+  label_feeds_access_key: RSS хандах түлхүүр
+  label_missing_feeds_access_key: RSS хандах түлхүүр алга
+  label_feeds_access_key_created_on: "RSS хандалтын түлхүүр %{value}-ийн өмнө үүссэн"
+  label_module_plural: Модулууд
+  label_added_time_by: "%{author} %{age}-ийн өмнө нэмсэн"
+  label_updated_time_by: "%{author} %{age}-ийн өмнө өөрчилсөн"
+  label_updated_time: "%{value} -ийн өмнө өөрчлөгдсөн"
+  label_jump_to_a_project: Төсөл рүү очих...
+  label_file_plural: Файлууд
+  label_changeset_plural: Өөрчлөлтүүд
+  label_default_columns: Стандарт баганууд
+  label_no_change_option: (Өөрчлөлт байхгүй)
+  label_bulk_edit_selected_issues: Сонгогдсон асуудлуудыг бөөнөөр засварлах
+  label_theme: Системийн Дизайн
+  label_default: Стандарт
+  label_search_titles_only: Зөвхөн гарчиг хайх
+  label_user_mail_option_all: "Миний бүх төсөл дээрх бүх үзэгдлүүдийн хувьд"
+  label_user_mail_option_selected: "Сонгогдсон төслүүдийн хувьд бүх үзэгдэл дээр..."
+  label_user_mail_no_self_notified: "Миний өөрийн хийсэн өөрчлөлтүүдийн тухай надад мэдэгдэх хэрэггүй"
+  label_registration_activation_by_email: дансыг имэйлээр идэвхжүүлэх
+  label_registration_manual_activation: дансыг гараар идэвхжүүлэх
+  label_registration_automatic_activation: дансыг автоматаар идэвхжүүлэх
+  label_display_per_page: 'Нэг хуудсанд: %{value}'
+  label_age: Нас
+  label_change_properties: Тохиргоог өөрчлөх
+  label_general: Ерөнхий
+  label_more: Цааш нь
+  label_scm: SCM
+  label_plugins: Модулууд
+  label_ldap_authentication: LDAP нэвтрэх горим
+  label_downloads_abbr: D/L
+  label_optional_description: Дурын тайлбар
+  label_add_another_file: Дахин файл нэмэх
+  label_preferences: Тохиргоо
+  label_chronological_order: Цагаан толгойн үсгийн дарааллаар
+  label_reverse_chronological_order: Урвуу цагаан толгойн үсгийн дарааллаар
+  label_planning: Төлөвлөлт
+  label_incoming_emails: Ирсэн мэйлүүд
+  label_generate_key: Түлхүүр үүсгэх
+  label_issue_watchers: Ажиглагчид
+  label_example: Жишээ
+  label_display: Display
+  label_sort: Sort
+  label_ascending: Ascending
+  label_descending: Descending
+  label_date_from_to: From %{start} to %{end}
+  label_wiki_content_added: Wiki page added
+  label_wiki_content_updated: Wiki page updated
+  label_group: Group
+  label_group_plural: Groups
+  label_group_new: New group
+  label_time_entry_plural: Spent time
+  label_version_sharing_none: Not shared
+  label_version_sharing_descendants: With subprojects
+  label_version_sharing_hierarchy: With project hierarchy
+  label_version_sharing_tree: With project tree
+  label_version_sharing_system: With all projects
+  label_update_issue_done_ratios: Update issue done ratios
+  label_copy_source: Source
+  label_copy_target: Target
+  label_copy_same_as_target: Same as target
+  label_display_used_statuses_only: Only display statuses that are used by this tracker
+  label_api_access_key: API access key
+  label_missing_api_access_key: Missing an API access key
+  label_api_access_key_created_on: "API access key created %{value} ago"
+  
+  button_login: Нэвтрэх
+  button_submit: Илгээх
+  button_save: Хадгалах
+  button_check_all: Бүгдийг сонго
+  button_uncheck_all: Бүгдийг үл сонго
+  button_delete: Устгах
+  button_create: Үүсгэх
+  button_create_and_continue: Үүсгээд цааш үргэлжлүүлэх
+  button_test: Турших
+  button_edit: Засварлах
+  button_add: Нэмэх
+  button_change: Өөрчлөх
+  button_apply: Өөрчлөлтийг хадгалах
+  button_clear: Цэвэрлэх
+  button_lock: Түгжих
+  button_unlock: Түгжээг тайлах
+  button_download: Татах
+  button_list: Жагсаалт
+  button_view: Харах
+  button_move: Зөөх
+  button_move_and_follow: Зөө бас дага
+  button_back: Буцах
+  button_cancel: Болих
+  button_activate: Идэвхжүүлэх
+  button_sort: Эрэмбэлэх
+  button_log_time: Лог хийсэн хугацаа
+  button_rollback: Энэ хувилбар руу буцах
+  button_watch: Ажиглах
+  button_unwatch: Ажиглахаа болих
+  button_reply: Хариулах
+  button_archive: Архивлах
+  button_unarchive: Архивыг задлах
+  button_reset: Анхны утгууд
+  button_rename: Нэрийг нь солих
+  button_change_password: Нууц үгээ өөрчлөх
+  button_copy: Хуулах
+  button_copy_and_follow: Зөө бас дага
+  button_annotate: Тайлбар хавсаргах
+  button_update: Шинэчлэх
+  button_configure: Тохируулах
+  button_quote: Ишлэл
+  button_duplicate: Хуулбар
+  button_show: Үзэх
+  
+  status_active: идэвхтэй
+  status_registered: бүртгүүлсэн
+  status_locked: түгжээтэй
+  
+  version_status_open: нээлттэй
+  version_status_locked: түгжээтэй
+  version_status_closed: хаалттай
+
+  field_active: идэвхтэй
+  
+  text_select_mail_notifications: Ямар үед имэйлээр мэдэгдэл илгээхийг сонгоно уу.
+  text_regexp_info: eg. ^[A-Z0-9]+$
+  text_min_max_length_info: 0 гэвэл ямар ч хязгааргүй гэсэн үг
+  text_project_destroy_confirmation: Та энэ төсөл болоод бусад мэдээллийг нь үнэхээр устгамаар байна уу ?
+  text_subprojects_destroy_warning: "Уг төслийн дэд төслүүд : %{value} нь бас устгагдах болно."
+  text_workflow_edit: Ажлын дарааллыг өөрчлөхийн тулд хандалтын эрх болон асуудлын чиглэлийг сонгоно уу
+  text_are_you_sure: Та итгэлтэй байна уу ?
+  text_journal_changed: "%{label} %{old} байсан нь %{new} болов"
+  text_journal_set_to: "%{label} %{value} болгож өөрчиллөө"
+  text_journal_deleted: "%{label} устсан (%{old})"
+  text_journal_added: "%{label} %{value} нэмэгдсэн"
+  text_tip_issue_begin_day: энэ өдөр эхлэх ажил
+  text_tip_issue_end_day: энэ өдөр дуусах ажил
+  text_tip_issue_begin_end_day: энэ өдөр эхлээд мөн дуусч байгаа ажил
+  text_project_identifier_info: 'Зөвхөн жижиг үсгүүд болон (a-z), тоо and дундуур зураас ашиглаж болно.<br />Нэгэнт хадгалсан хойно, төслийн глобал нэрийг өөрлчөх боломжгүй.'
+  text_caracters_maximum: "дээд тал нь %{count} үсэг."
+  text_caracters_minimum: "Хамгийн багадаа ядаж %{count} тэмдэгт байх."
+  text_length_between: "Урт нь багадаа %{min}, ихдээ %{max} тэмдэгт."
+  text_tracker_no_workflow: Энэхүү асуудлын чиглэлд ямар ч ажлын дараалал тодорхойлогдоогүй байна
+  text_unallowed_characters: Хэрэглэж болохгүй тэмдэгтүүд
+  text_comma_separated: Таслалаар зааглан олон утга оруулж болно.
+  text_line_separated: Multiple values allowed (one line for each value).
+  text_issues_ref_in_commit_messages: Коммитийн зурвасуудад хамааруулсан болон байнгын асуудлууд
+  text_issue_added: "Асуудал %{id} - ийг хэрэглэгч %{author} мэдэгдсэн байна."
+  text_issue_updated: "Асуудал %{id} - ийг хэрэглэгч %{author} өөрчилсөн байна."
+  text_wiki_destroy_confirmation: Та энэ вики болон холбогдох бүх мэдээллийг үнэхээр устгамаар байна уу ?
+  text_issue_category_destroy_question: "Энэ ангилалд зарим асуудлууд (%{count})  орсон байна. Та яах вэ ?"
+  text_issue_category_destroy_assignments: Асуудлуудыг энэ ангиллаас авах
+  text_issue_category_reassign_to: Асуудлуудыг энэ ангилалд дахин оноох
+  text_user_mail_option: "Сонгогдоогүй төслүүдийн хувьд, та зөвхөн өөрийнхөө ажиглаж байгаа зүйлс юмуу танд хамаатай зүйлсийн талаар мэдэгдэл авах болно (Таны оруулсан асуудал, эсвэл танд оноосон гэх мэт)."
+  text_no_configuration_data: "Хандалтын эрхүүд, чиглэлүүд, асуудлын төлвүүд болон ажлын дарааллын тухай мэдээллийг хараахан оруулаагүй байна.\nТа стандарт өгөгдлүүдийг даруйхан оруулахыг зөвлөж байна, оруулсан хойно та засварлаж болно."
+  text_load_default_configuration: Стандарт өгөгдлийг ачаалах
+  text_status_changed_by_changeset: "%{value} өөрчлөлтөд хийгдсэн."
+  text_issues_destroy_confirmation: 'Та сонгогдсон асуудлуудыг үнэхээр устгамаар байна уу ?'
+  text_select_project_modules:  'Энэ төслийн хувьд идэвхжүүлэх модулуудаа сонгоно уу:'
+  text_default_administrator_account_changed: Стандарт администраторын бүртгэл өөрчлөгдлөө
+  text_file_repository_writable: Хавсралт файл хадгалах хавтас руу бичих эрхтэй
+  text_plugin_assets_writable: Плагин модулийн ассет хавтас руу бичих эрхтэй
+  text_rmagick_available: RMagick суулгагдсан (заавал биш)
+  text_destroy_time_entries_question: "Таны устгах гэж байгаа асуудлууд дээр нийт %{hours} цаг зарцуулсан юм байна, та яах вэ ?"
+  text_destroy_time_entries: Мэдэгдсэн цагуудыг устгах
+  text_assign_time_entries_to_project: Мэдэгдсэн асуудлуудыг төсөлд оноох
+  text_reassign_time_entries: 'Мэдэгдсэн асуудлуудыг энэ асуудалд дахин оноо:'
+  text_user_wrote: "%{value} бичихдээ:"
+  text_enumeration_destroy_question: "Энэ утгад %{count} обьект оноогдсон байна."
+  text_enumeration_category_reassign_to: 'Тэдгээрийг энэ утгад дахин оноо:'
+  text_email_delivery_not_configured: "Имэйлийн тохиргоог хараахан тохируулаагүй байна, тиймээс имэйл мэдэгдэл явуулах боломжгүй байна.\nSMTP сервэрээ config/configuration.yml файл дотор тохируулаад төслийн менежерээ дахиад эхлүүлээрэй."
+  text_repository_usernames_mapping: "Репозиторийн логд байгаа бүх хэрэглэгчийн нэрүүдэд харгалзсан Төслийн Менежер системд бүртгэлтэй хэрэглэгчдийг Сонгох юмуу шинэчилнэ үү.\nТөслийн менежер болон репозиторид байгаа ижилхэн нэр юмуу имэйлтэй хэрэглэгчид харилцан харгалзна."
+  text_diff_truncated: '... Файлын ялгаврын хэмжээ үзүүлэхэд дэндүү урт байгаа учраас төгсгөлөөс нь хасч үзүүлэв.'
+  text_custom_field_possible_values_info: 'One line for each value'
+  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
+  text_wiki_page_nullify_children: "Keep child pages as root pages"
+  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
+  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
+  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
+  
+  default_role_manager: Менежер
+  default_role_developer: Хөгжүүлэгч
+  default_role_reporter: Мэдэгдэгч
+  default_tracker_bug: Алдаа
+  default_tracker_feature: Онцлог
+  default_tracker_support: Тусламж
+  default_issue_status_new: Шинэ
+  default_issue_status_in_progress: Ахицтай
+  default_issue_status_assigned: Оноогдсон
+  default_issue_status_resolved: Шийдвэрлэгдсэн
+  default_issue_status_feedback: Feedback
+  default_issue_status_closed: Хаагдсан
+  default_issue_status_rejected: Хүлээж аваагүй
+  default_doc_category_user: Хэрэглэгчийн бичиг баримт
+  default_doc_category_tech: Техникийн бичиг баримт
+  default_priority_low: Бага
+  default_priority_normal: Хэвийн
+  default_priority_high: Өндөр
+  default_priority_urgent: Нэн яаралтай
+  default_priority_immediate: Нэн даруй
+  default_activity_design: Дизайн
+  default_activity_development: Хөгжүүлэлт
+  
+  enumeration_issue_priorities: Асуудлын зэрэглэлүүд
+  enumeration_doc_categories: Бичиг баримтын ангиллууд
+  enumeration_activities: Үйл ажиллагаанууд (хугацааг хянах)
+  enumeration_system_activity: Системийн үйл ажиллагаа
+
+  permission_manage_subtasks: Manage subtasks
+  label_profile: Profile
+  field_parent_issue: Parent task
+  error_unable_delete_issue_status: Unable to delete issue status
+  label_subtask_plural: Subtasks
+  label_project_copy_notifications: Send email notifications during the project copy
+  error_can_not_delete_custom_field: Unable to delete custom field
+  error_unable_to_connect: Unable to connect (%{value})
+  error_can_not_remove_role: This role is in use and can not be deleted.
+  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
+  field_principal: Principal
+  label_my_page_block: My page block
+  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
+  text_zoom_out: Zoom out
+  text_zoom_in: Zoom in
+  notice_unable_delete_time_entry: Unable to delete time log entry.
+  label_overall_spent_time: Overall spent time
+  field_time_entries: Log time
+  project_module_gantt: Gantt
+  project_module_calendar: Calendar
+  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
+  text_are_you_sure_with_children: Delete issue and all child issues?
+  field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
+  setting_commit_logtime_activity_id: Activity for logged time
+  text_time_logged_by_changeset: Applied in changeset %{value}.
+  setting_commit_logtime_enabled: Enable time logging
+  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
+  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Коммит хийх үед харуулах текстүүдийн энкодинг
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/nl.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/nl.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -5,25 +5,28 @@
       # Use the strftime parameters for formats.
       # When no format has been given, it uses default.
       # You can provide other formats here if you like!
-      default: "%Y-%m-%d"
-      short: "%b %d"
-      long: "%B %d, %Y"
+      default: "%d-%m-%Y"
+      short: "%e %b"
+      long: "%d %B, %Y"
       
-    day_names: [Zondag, Maandag, Dinsdag, Woensdag, Donderdag, Vrijdag, Zaterdag]
-    abbr_day_names: [Zo, Ma, Di, Woe, Do, Vr, Zat]
+    day_names: [zondag, maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag]
+    abbr_day_names: [zo, ma, di, wo, do, vr, za]
       
     # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, Januari, Februari, Maart, April, Mei, Juni, Juli, Augustus, September, Oktober, November, December]
-    abbr_month_names: [~, Jan, Feb, Mar, Apr, Mei, Jun, Jul, Aug, Sep, Okt, Nov, Dec]
+    month_names: [~, januari, februari, maart, april, mei, juni, juli, augustus, september, oktober, november, december]
+    abbr_month_names: [~, jan, feb, mar, apr, mei, jun, jul, aug, sep, okt, nov, dec]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
       default: "%a, %d %b %Y %H:%M:%S %z"
       time: "%H:%M"
-      short: "%d %b %H:%M"
-      long: "%B %d, %Y %H:%M"
+      short: "%e %b %H:%M"
+      long: "%d %B, %Y %H:%M"
     am: "am"
     pm: "pm"
       
@@ -32,7 +35,7 @@
       half_a_minute: "halve minuut"
       less_than_x_seconds:
         one:   "minder dan een seconde"
-        other: "mindera dan %{count} seconden"
+        other: "minder dan %{count} seconden"
       x_seconds:
         one:   "1 seconde"
         other: "%{count} seconden"
@@ -56,13 +59,13 @@
         other: "%{count} maanden"
       about_x_years:
         one:   "ongeveer 1 jaar"
-        other: "ongeveer %{count} jaren"
+        other: "ongeveer %{count} jaar"
       over_x_years:
-        one:   "over 1 jaar"
-        other: "over %{count} jaren"
+        one:   "meer dan 1 jaar"
+        other: "meer dan %{count} jaar"
       almost_x_years:
-        one:   "almost 1 year"
-        other: "almost %{count} years"
+        one:   "bijna 1 jaar"
+        other: "bijna %{count} jaar"
 
   number:
     format:
@@ -94,8 +97,8 @@
     errors:
       template:
         header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
+          one:    "Door een fout kon dit %{model} niet worden opgeslagen"
+          other:  "Door %{count} fouten kon dit %{model} niet worden opgeslagen"
       messages:
         inclusion: "staat niet in de lijst"
         exclusion: "is gereserveerd"
@@ -143,7 +146,7 @@
   button_edit: Bewerk
   button_list: Lijst
   button_lock: Sluit
-  button_log_time: Log tijd
+  button_log_time: Registreer tijd
   button_login: Inloggen
   button_move: Verplaatsen
   button_quote: Citaat
@@ -211,7 +214,7 @@
   field_default_value: Standaardwaarde
   field_delay: Vertraging
   field_description: Beschrijving
-  field_done_ratio: % Gereed
+  field_done_ratio: "% Gereed"
   field_downloads: Downloads
   field_due_date: Verwachte datum gereed
   field_effective_date: Datum
@@ -280,7 +283,7 @@
   general_csv_separator: ';'
   general_first_day_of_week: '7'
   general_lang_name: 'Nederlands'
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_text_No: 'Nee'
   general_text_Yes: 'Ja'
   general_text_no: 'nee'
@@ -514,9 +517,9 @@
     one:   1 project
     other: "%{count} projects"
   label_public_projects: Publieke projecten
-  label_query: Eigen zoekvraag
-  label_query_new: Nieuwe zoekvraag
-  label_query_plural: Eigen zoekvragen
+  label_query: Eigen zoekopdracht
+  label_query_new: Nieuwe zoekopdracht
+  label_query_plural: Eigen zoekopdrachten
   label_read: Lees...
   label_register: Registreer
   label_registered_on: Geregistreerd op
@@ -582,7 +585,7 @@
   label_used_by: Gebruikt door
   label_user: Gebruiker
   label_user_activity: "%{value}'s activiteit"
-  label_user_mail_no_self_notified: "Ik wil niet op de hoogte gehouden worden van wijzigingen die ik zelf maak."
+  label_user_mail_no_self_notified: Ik wil niet op de hoogte gehouden worden van mijn eigen wijzigingen
   label_user_mail_option_all: "Bij elk gebeurtenis in al mijn projecten..."
   label_user_mail_option_selected: "Enkel bij elke gebeurtenis op het geselecteerde project..."
   label_user_new: Nieuwe gebruiker
@@ -700,7 +703,6 @@
   setting_autologin: Automatisch inloggen
   setting_bcc_recipients: Blind carbon copy ontvangers (bcc)
   setting_commit_fix_keywords: Gefixeerde trefwoorden
-  setting_commit_logs_encoding: Encodering van commit berichten
   setting_commit_ref_keywords: Refererende trefwoorden
   setting_cross_project_issue_relations: Sta crossproject issuerelaties toe
   setting_date_format: Datumformaat
@@ -719,7 +721,7 @@
   setting_mail_from: Afzender e-mail adres
   setting_mail_handler_api_enabled: Schakel WS in voor inkomende mail.
   setting_mail_handler_api_key: API sleutel
-  setting_per_page_options: Objects per pagina-opties
+  setting_per_page_options: Aantal objecten per pagina (opties)
   setting_plain_text_mail: platte tekst (geen HTML)
   setting_protocol: Protocol
   setting_repositories_encodings: Repositories coderingen
@@ -743,7 +745,7 @@
   text_destroy_time_entries: Verwijder gerapporteerde uren
   text_destroy_time_entries_question: "%{hours} uren werden gerapporteerd op de issue(s) die u wilde verwijderen. Wat wil u doen?"
   text_diff_truncated: '... Deze diff werd afgekort omdat het de maximale weer te geven karakters overschreed.'
-  text_email_delivery_not_configured: "E-mailbezorging is niet geconfigureerd. Notificaties zijn uitgeschakeld.\nConfigureer uw SMTP server in config/configuration.yml en herstart de applicatie om dit te activeren."
+  text_email_delivery_not_configured: "E-mailbezorging is niet geconfigureerd. Mededelingen zijn uitgeschakeld.\nConfigureer uw SMTP server in config/configuration.yml en herstart de applicatie om dit te activeren."
   text_enumeration_category_reassign_to: 'Wijs de volgende waarde toe:'
   text_enumeration_destroy_question: "%{count} objecten zijn toegewezen aan deze waarde."
   text_file_repository_writable: Bestandsrepository beschrijfbaar
@@ -774,7 +776,7 @@
   text_tip_issue_end_day: issue die op deze dag eindigt
   text_tracker_no_workflow: Geen workflow gedefinieerd voor deze tracker
   text_unallowed_characters: Niet toegestane tekens
-  text_user_mail_option: "Bij niet-geselecteerde projecten zult u enkel notificaties ontvangen voor issues die u monitort of waar u bij betrokken bent (als auteur of toegewezen persoon)."
+  text_user_mail_option: "Bij niet-geselecteerde projecten zult u enkel mededelingen ontvangen voor issues die u monitort of waar u bij betrokken bent (als auteur of toegewezen persoon)."
   text_user_wrote: "%{value} schreef:"
   text_wiki_destroy_confirmation: Weet u zeker dat u deze wiki en zijn inhoud wenst te verwijderen?
   text_workflow_edit: Selecteer een rol en een tracker om de workflow te wijzigen
@@ -796,7 +798,7 @@
   label_date_from_to: Van %{start} tot %{end}
   label_greater_or_equal: ">="
   label_less_or_equal: <=
-  text_wiki_page_destroy_question: Deze pagina heeft %{descendants} subpagina's en onderliggende pagina's?. Wil wil je ermee doen?
+  text_wiki_page_destroy_question: Deze pagina heeft %{descendants} subpagina's en onderliggende pagina's?. Wat wilt u hiermee doen?
   text_wiki_page_reassign_children: Alle subpagina's toewijzen aan deze hoofdpagina
   text_wiki_page_nullify_children: Behoud subpagina's als hoofdpagina's
   text_wiki_page_destroy_children: Verwijder alle subpagina's en onderliggende pagina's
@@ -805,9 +807,9 @@
   mail_subject_wiki_content_updated: "'%{id}' wiki pagina is bijgewerkt"
   label_wiki_content_added: Wiki pagina toegevoegd
   mail_subject_wiki_content_added: "'%{id}' wiki pagina is toegevoegd"
-  mail_body_wiki_content_added: The '%{id}' wiki pagina is toegevoegd door %{author}.
+  mail_body_wiki_content_added: De '%{id}' wiki pagina is toegevoegd door %{author}.
   label_wiki_content_updated: Wiki pagina bijgewerkt
-  mail_body_wiki_content_updated: The '%{id}' wiki pagina is bijgewerkt door %{author}.
+  mail_body_wiki_content_updated: De '%{id}' wiki pagina is bijgewerkt door %{author}.
   permission_add_project: Maak project
   setting_new_project_user_role_id: Rol van gebruiker die een project maakt
   label_view_all_revisions: Bekijk alle revisies
@@ -896,30 +898,64 @@
   text_zoom_in: Zoom in
   notice_unable_delete_time_entry: Verwijderen niet mogelijk van tijd log invoer.
   label_overall_spent_time: Totaal bestede tijd
-  field_time_entries: Log tijd
+  field_time_entries: Registreer tijd
   project_module_gantt: Gantt
   project_module_calendar: Kalender
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
+  button_edit_associated_wikipage: "Bewerk bijbehorende wiki pagina: %{page_title}"
+  text_are_you_sure_with_children: Verwijder issue en alle onderliggende issues?
+  field_text: Tekst veld
+  label_user_mail_option_only_owner: Alleen voor dingen waarvan ik de auteur ben
+  setting_default_notification_option: Standaard instelling voor mededelingen
+  label_user_mail_option_only_my_events: Alleen voor dingen die ik volg of bij betrokken ben
+  label_user_mail_option_only_assigned: Alleen voor dingen die aan mij zijn toegewezen
+  label_user_mail_option_none: Bij geen enkele gebeurtenis
   field_member_of_group: Assignee's group
   field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
+  notice_not_authorized_archived_project: Het project dat u wilt bezoeken is gearchiveerd.
+  label_principal_search: "Zoek naar gebruiker of groep:"
+  label_user_search: "Zoek naar gebruiker:"
+  field_visible: Zichtbaar
   setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
+  setting_commit_logtime_activity_id: Standaard activiteit voor tijdregistratie
+  text_time_logged_by_changeset: Toegepast in changeset %{value}.
+  setting_commit_logtime_enabled: Activeer tijdregistratie
+  notice_gantt_chart_truncated: De gantt chart is ingekort omdat het meer objecten bevat dan kan worden weergegeven, (%{max})
+  setting_gantt_items_limit: Max. aantal objecten op gantt chart
+  field_warn_on_leaving_unsaved: Waarschuw me wanneer ik een pagina verlaat waarvan de tekst niet opgeslagen is
+  text_warn_on_leaving_unsaved: De huidige pagina bevat tekst die niet is opgeslagen en dit zal verloren gaan als u deze pagina nu verlaat.
+  label_my_queries: Mijn aangepaste zoekopdrachten
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Commentaar toegevoegd aan een nieuwsitem
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Encodering van commit berichten
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/no.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/no.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -13,7 +13,10 @@
     abbr_day_names: [søn, man, tir, ons, tor, fre, lør]
     month_names: [~, januar, februar, mars, april, mai, juni, juli, august, september, oktober, november, desember]
     abbr_month_names: [~, jan, feb, mar, apr, mai, jun, jul, aug, sep, okt, nov, des]
-    order: [:day, :month, :year]
+    order:
+      - :day
+      - :month
+      - :year
   time:
     formats:
       default: "%A, %e. %B %Y, %H:%M"
@@ -124,7 +127,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: Kontoen er oppdatert.
@@ -232,7 +235,7 @@
   field_attr_mail: E-post-attributt
   field_onthefly: On-the-fly brukeropprettelse
   field_start_date: Start
-  field_done_ratio: % Ferdig
+  field_done_ratio: "% Ferdig"
   field_auth_source: Autentifikasjonsmodus
   field_hide_mail: Skjul min e-post-adresse
   field_comments: Kommentarer
@@ -720,7 +723,6 @@
   text_email_delivery_not_configured: "Levering av e-post er ikke satt opp, og varsler er skrudd av.\nStill inn din SMTP-tjener i config/configuration.yml og start programmet på nytt for å skru det på."
   field_parent_title: Foreldreside
   label_issue_watchers: Overvåkere
-  setting_commit_logs_encoding: Tegnkoding for innsendingsmeldinger
   button_quote: Sitat
   setting_sequential_project_identifiers: Generer sekvensielle prosjekt-IDer
   notice_unable_delete_version: Kan ikke slette versjonen
@@ -928,3 +930,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Tegnkoding for innsendingsmeldinger
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/pl.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/pl.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -45,7 +45,10 @@
     
     month_names: [~, Styczeń, Luty, Marzec, Kwiecień, Maj, Czerwiec, Lipiec, Sierpień, Wrzesień, Październik, Listopad, Grudzień]
     abbr_month_names: [~, sty, lut, mar, kwi, maj, cze, lip, sie, wrz, paź, lis, gru]
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -228,7 +231,7 @@
   field_default_value: Domyślny
   field_delay: Opóźnienie
   field_description: Opis
-  field_done_ratio: % Wykonane
+  field_done_ratio: "% Wykonane"
   field_downloads: Pobrań
   field_due_date: Data oddania
   field_effective_date: Data
@@ -294,9 +297,9 @@
   field_version: Wersja
   field_vf_personnel: Personel
   field_vf_watcher: Obserwator
-  general_csv_decimal_separator: '.'
+  general_csv_decimal_separator: ','
   general_csv_encoding: UTF-8
-  general_csv_separator: ','
+  general_csv_separator: ';'
   general_first_day_of_week: '1'
   general_lang_name: 'Polski'
   general_pdf_encoding: UTF-8
@@ -731,7 +734,6 @@
   setting_autologin: Auto logowanie
   setting_bcc_recipients: Odbiorcy kopii tajnej (kt/bcc)
   setting_commit_fix_keywords: Słowa zmieniające status
-  setting_commit_logs_encoding: Kodowanie komentarzy zatwierdzeń
   setting_commit_ref_keywords: Słowa tworzące powiązania
   setting_cross_project_issue_relations: Zezwól na powiązania zagadnień między projektami
   setting_date_format: Format daty
@@ -865,7 +867,7 @@
   button_show: Pokaż
   error_can_not_archive_project: Ten projekt nie może zostać zarchiwizowany
   error_can_not_reopen_issue_on_closed_version: Zagadnienie przydzielone do zakończonej wersji nie może zostać ponownie otwarte
-  error_issue_done_ratios_not_updated: % wykonania zagadnienia nie został uaktualniony.
+  error_issue_done_ratios_not_updated: "% wykonania zagadnienia nie został uaktualniony."
   error_workflow_copy_source: Proszę wybrać źródłowy typ zagadnienia lub rolę
   error_workflow_copy_target: Proszę wybrać docelowe typ(y) zagadnień i rolę(e)
   field_sharing: Współdzielenie
@@ -896,7 +898,7 @@
   setting_default_projects_modules: Domyślnie włączone moduły dla nowo tworzonych projektów
   setting_gravatar_default: Domyślny obraz Gravatar
   setting_issue_done_ratio: Obliczaj postęp realizacji zagadnień za pomocą
-  setting_issue_done_ratio_issue_field: % Wykonania zagadnienia
+  setting_issue_done_ratio_issue_field: "% Wykonania zagadnienia"
   setting_issue_done_ratio_issue_status: Statusu zagadnienia
   setting_mail_handler_body_delimiters: Przycinaj e-maile po jednej z tych linii
   setting_rest_api_enabled: Uaktywnij usługę sieciową REST
@@ -958,3 +960,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kodowanie komentarzy zatwierdzeń
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/pt-BR.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/pt-BR.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -12,7 +12,10 @@
     abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb]
     month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro]
     abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez]
-    order: [:day,:month,:year]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -155,7 +158,7 @@
   general_csv_separator: ';'
   general_csv_decimal_separator: ','
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
 
   notice_account_updated: Conta atualizada com sucesso.
@@ -265,7 +268,7 @@
   field_attr_mail: Atributo para e-mail
   field_onthefly: Criar usuários dinamicamente ("on-the-fly")
   field_start_date: Início
-  field_done_ratio: % Terminado
+  field_done_ratio: "% Terminado"
   field_auth_source: Modo de autenticação
   field_hide_mail: Ocultar meu e-mail
   field_comments: Comentário
@@ -314,8 +317,7 @@
   setting_cross_project_issue_relations: Permitir relacionar tarefas entre projetos
   setting_issue_list_default_columns: Colunas padrão visíveis na lista de tarefas
   setting_repositories_encodings: Codificação dos repositórios
-  setting_commit_logs_encoding: Codificação das mensagens de commit
-  setting_emails_footer: Rodapé dos e-mails
+  setting_emails_footer: Rodapé do e-mail
   setting_protocol: Protocolo
   setting_per_page_options: Número de itens exibidos por página
   setting_user_format: Formato de exibição de nome de usuário
@@ -354,6 +356,9 @@
   label_issues_by: "Tarefas por %{value}"
   label_issue_added: Tarefa adicionada
   label_issue_updated: Tarefa atualizada
+  label_issue_note_added: Nota adicionada
+  label_issue_status_updated: Situação atualizada
+  label_issue_priority_updated: Prioridade atualizada
   label_document: Documento
   label_document_new: Novo documento
   label_document_plural: Documentos
@@ -558,7 +563,7 @@
   label_spent_time: Tempo gasto
   label_f_hour: "%{value} hora"
   label_f_hour_plural: "%{value} horas"
-  label_time_tracking: Controle de horas
+  label_time_tracking: Registro de horas
   label_change_plural: Alterações
   label_statistics: Estatísticas
   label_commits_per_month: Commits por mês
@@ -755,7 +760,7 @@
 
   enumeration_issue_priorities: Prioridade das tarefas
   enumeration_doc_categories: Categorias de documento
-  enumeration_activities: Atividades (time tracking)
+  enumeration_activities: Atividades (registro de horas)
   notice_unable_delete_version: Não foi possível excluir a versão
   label_renamed: renomeado
   label_copied: copiado
@@ -944,20 +949,51 @@
   setting_default_notification_option: Opção padrão de notificação
   label_user_mail_option_only_my_events: Somente para as coisas que eu esteja observando ou esteja envolvido
   label_user_mail_option_only_assigned: Somente para as coisas que estejam atribuídas a mim
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  label_user_mail_option_none: Sem eventos
+  field_member_of_group: Grupo do responsável
+  field_assigned_to_role: Papel do responsável
+  notice_not_authorized_archived_project: O projeto que você está tentando acessar foi arquivado.
+  label_principal_search: "Pesquisar por usuários ou grupos:"
+  label_user_search: "Pesquisar por usuário:"
+  field_visible: Visível
+  setting_emails_header: Cabeçalho do e-mail
+  setting_commit_logtime_activity_id: Atividade para registrar horas
+  text_time_logged_by_changeset: Aplicado no changeset %{value}.
+  setting_commit_logtime_enabled: Habilitar registro de horas
+  notice_gantt_chart_truncated: O gráfico foi cortado por exceder o tamanho máximo de linhas que podem ser exibidas (%{max})
+  setting_gantt_items_limit: Número máximo de itens exibidos no gráfico gatt
+  field_warn_on_leaving_unsaved: Alertar-me ao sarir de uma página sem salvar o texto
+  text_warn_on_leaving_unsaved: A página atual contem texto que não foi salvo e será perdido se você sair desta página.
+  label_my_queries: Minhas consultas personalizadas
+  text_journal_changed_no_detail: "%{label} atualizado(a)"
+  label_news_comment_added: Notícia recebeu um comentário
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Codificação das mensagens de commit
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/pt.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/pt.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,6 @@
 # Portuguese localization for Ruby on Rails
 # by Ricardo Otero <oterosantos@gmail.com>
+# by Alberto Ferreira <toraxic@gmail.com>
 pt:
   support:
     array:
@@ -17,7 +18,10 @@
     abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb]
     month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro]
     abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez]
-    order: [:day, :month, :year]
+    order:
+      - :day
+      - :month
+      - :year
     
   time:
     formats:        
@@ -141,7 +145,7 @@
   general_csv_separator: ';'
   general_csv_decimal_separator: ','
   general_csv_encoding: ISO-8859-15
-  general_pdf_encoding: ISO-8859-15
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: A conta foi actualizada com sucesso.
@@ -228,7 +232,7 @@
   field_homepage: Página
   field_is_public: Público
   field_parent: Sub-projecto de
-  field_is_in_roadmap: Tarefas mostradas no roadmap
+  field_is_in_roadmap: Tarefas mostradas no mapa de planificação
   field_login: Nome de utilizador
   field_mail_notification: Notificações por e-mail
   field_admin: Administrador
@@ -248,9 +252,9 @@
   field_attr_firstname: Atributo nome próprio
   field_attr_lastname: Atributo último nome
   field_attr_mail: Atributo e-mail
-  field_onthefly: Criação de utilizadores na hora
+  field_onthefly: Criação imediata de utilizadores
   field_start_date: Início
-  field_done_ratio: % Completo
+  field_done_ratio: "% Completo"
   field_auth_source: Modo de autenticação
   field_hide_mail: Esconder endereço de e-mail
   field_comments: Comentário
@@ -264,7 +268,7 @@
   field_is_filter: Usado como filtro
   field_issue_to: Tarefa relacionada
   field_delay: Atraso
-  field_assignable: As tarefas podem ser associados a esta função
+  field_assignable: As tarefas podem ser associadas a esta função
   field_redirect_existing_links: Redireccionar ligações existentes
   field_estimated_hours: Tempo estimado
   field_column_names: Colunas
@@ -299,7 +303,6 @@
   setting_cross_project_issue_relations: Permitir relações entre tarefas de projectos diferentes
   setting_issue_list_default_columns: Colunas na lista de tarefas por omissão
   setting_repositories_encodings: Encodings dos repositórios
-  setting_commit_logs_encoding: Encoding das mensagens de commit
   setting_emails_footer: Rodapé do e-mails
   setting_protocol: Protocolo
   setting_per_page_options: Opções de objectos por página
@@ -523,7 +526,7 @@
   label_sort_higher: Mover para cima
   label_sort_lower: Mover para baixo
   label_sort_lowest: Mover para o fim
-  label_roadmap: Roadmap
+  label_roadmap: Planificação
   label_roadmap_due_in: "Termina em %{value}"
   label_roadmap_overdue: "Atrasado %{value}"
   label_roadmap_no_issues: Sem tarefas para esta versão
@@ -923,25 +926,59 @@
   project_module_calendar: Calendário
   button_edit_associated_wikipage: "Editar página Wiki associada: %{page_title}"
   text_are_you_sure_with_children: Apagar tarefa e todas as sub-tarefas?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_text: Campo de texto
+  label_user_mail_option_only_owner: Apenas para tarefas das quais sou proprietário
+  setting_default_notification_option: Opção predefinida de notificação
+  label_user_mail_option_only_my_events: Apenas para tarefas que observo ou em que estou envolvido
+  label_user_mail_option_only_assigned: Apenas para tarefas que me foram atribuídas
+  label_user_mail_option_none: Sem eventos
+  field_member_of_group: Grupo do detentor de atribuição
+  field_assigned_to_role: Papel do detentor de atribuição
+  notice_not_authorized_archived_project: O projecto a que tentou aceder foi arquivado.
+  label_principal_search: "Procurar utilizador ou grupo:"
+  label_user_search: "Procurar utilizador:"
+  field_visible: Visível
+  setting_emails_header: Cabeçalho dos e-mails
+  setting_commit_logtime_activity_id: Actividade para tempo registado
+  text_time_logged_by_changeset: Aplicado no conjunto de alterações %{value}.
+  setting_commit_logtime_enabled: Activar registo de tempo
+  notice_gantt_chart_truncated: O gráfico foi truncado porque excede o número máximo de itens visível (%{máx.})
+  setting_gantt_items_limit: Número máximo de itens exibidos no gráfico Gantt
   field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Encoding das mensagens de commit
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/ro.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/ro.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -14,7 +14,10 @@
     month_names: [~, Ianuarie, Februarie, Martie, Aprilie, Mai, Iunie, Iulie, August, Septembrie, Octombrie, Noiembrie, Decembrie]
     abbr_month_names: [~, Ian, Feb, Mar, Apr, Mai, Iun, Iul, Aug, Sep, Oct, Noi, Dec]
     # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -291,7 +294,6 @@
   setting_cross_project_issue_relations: Permite legături de tichete între proiecte
   setting_issue_list_default_columns: Coloane implicite afișate în lista de tichete
   setting_repositories_encodings: Codare pentru depozit
-  setting_commit_logs_encoding: Codare pentru mesaje
   setting_emails_footer: Subsol email
   setting_protocol: Protocol
   setting_per_page_options: Număr de obiecte pe pagină
@@ -934,3 +936,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Codare pentru mesaje
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/ru.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/ru.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -28,7 +28,10 @@
     abbr_month_names: [~, янв., февр., марта, апр., мая, июня, июля, авг., сент., окт., нояб., дек.]
     standalone_abbr_month_names: [~, янв., февр., март, апр., май, июнь, июль, авг., сент., окт., нояб., дек.]
 
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -261,7 +264,7 @@
   default_issue_status_closed: Закрыта
   default_issue_status_feedback: Обратная связь
   default_issue_status_new: Новая
-  default_issue_status_rejected: Отказ
+  default_issue_status_rejected: Отклонена
   default_issue_status_resolved: Решена
   default_priority_high: Высокий
   default_priority_immediate: Немедленный
@@ -272,7 +275,7 @@
   default_role_manager: Менеджер
   default_role_reporter: Генератор отчетов
   default_tracker_bug: Ошибка
-  default_tracker_feature: Изменение
+  default_tracker_feature: Улучшение
   default_tracker_support: Поддержка
 
   enumeration_activities: Действия (учет времени)
@@ -606,7 +609,7 @@
   label_optional_description: Описание (опционально)
   label_options: Опции
   label_overall_activity: Сводная активность
-  label_overview: Просмотр
+  label_overview: Обзор
   label_password_lost: Восстановление пароля
   label_permissions_report: Отчет о правах доступа
   label_permissions: Права доступа
@@ -863,7 +866,6 @@
   setting_bcc_recipients: Использовать скрытые списки (BCC)
   setting_cache_formatted_text: Кешировать форматированный текст
   setting_commit_fix_keywords: Назначение ключевых слов
-  setting_commit_logs_encoding: Кодировка комментариев в хранилище
   setting_commit_ref_keywords: Ключевые слова для поиска
   setting_cross_project_issue_relations: Разрешить пересечение задач по проектам
   setting_date_format: Формат даты
@@ -1045,12 +1047,46 @@
   field_visible: Видимый
   setting_emails_header: Заголовок письма
 
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  setting_commit_logtime_activity_id: Активность для учета времени
+  text_time_logged_by_changeset: Учтено в редакции %{value}.
+  setting_commit_logtime_enabled: Включить учет времени
+  notice_gantt_chart_truncated: Диаграмма будет усечена, поскольку превышено максимальное кол-во элементов, которые могут отображаться (%{max})
+  setting_gantt_items_limit: Максимальное кол-во элементов отображаемых на диаграмме Ганта
+  field_warn_on_leaving_unsaved: Предупреждать при закратии страницы с несохраненным текстом
+  text_warn_on_leaving_unsaved: Текущая страница содержит несохраненный текст, который будет потерян, если вы покинете эту страницу.
+  label_my_queries: Мои сохраненные запросы
+  text_journal_changed_no_detail: "%{label} обновлено"
+  label_news_comment_added: Добавлен комментарий к новости
+  button_expand_all: Развернуть все
+  button_collapse_all: Свернуть все
+  label_additional_workflow_transitions_for_assignee: Дополнительные переходы, когда пользователь является исполнителем
+  label_additional_workflow_transitions_for_author: Дополнительные переходы, когда пользователь является автором
+  label_bulk_edit_selected_time_entries: Массовое изменение выбранных записей затраченного времени времени 
+  text_time_entries_destroy_confirmation: Вы уверены что хотите удалить выбраные записи затраченного времени?
+  label_role_anonymous: Аноним
+  label_role_non_member: Не участник
+  label_issue_note_added: Примечание добавлено
+  label_issue_status_updated: Статус обновлен
+  label_issue_priority_updated: Приоритет обновлен
+  label_issues_visibility_own: Задачи созданные или назначенные пользователю
+  field_issues_visibility: Видимость задач
+  label_issues_visibility_all: Все задачи
+  permission_set_own_issues_private: Устанавливать видимость (общая/частная) для собственных задач
+  field_is_private: Частная
+  permission_set_issues_private: Устанавливать видимость (общая/частная) для задач
+  label_issues_visibility_public: Только общие задачи
+  text_issues_destroy_descendants_confirmation: Так же будет удалено %{count} задачи.
+  field_commit_logs_encoding: Кодировка комментариев в хранилище
+  field_scm_path_encoding: Кодировка пути
+  text_scm_path_encoding_note: "По умолчанию: UTF-8"
+  field_path_to_repository: Путь к репозиторию
+  field_root_directory: Корневую директорию
+  field_cvs_module: Модуль
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Локальный и bare репозиторий (например, /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Локальный репозиторий (например, /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/sk.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/sk.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -16,7 +16,10 @@
     month_names: [~, Január, Február, Marec, Apríl, Máj, Jún, Júl, August, September, Október, November, December]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, Máj, Jún, Júl, Aug, Sep, Okt, Nov, Dec]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -236,7 +239,7 @@
   field_attr_mail: Email (atribut)
   field_onthefly: Automatické vytváranie užívateľov
   field_start_date: Začiatok
-  field_done_ratio: % hotovo
+  field_done_ratio: "% hotovo"
   field_auth_source: Autentifikačný mód
   field_hide_mail: Nezobrazovať môj email
   field_comments: Komentár
@@ -727,7 +730,6 @@
   text_email_delivery_not_configured: "Doručenie emailov nieje nastavené, notifikácie sú vypnuté.\nNastavte váš SMTP server v config/configuration.yml a reštartnite aplikáciu pre aktiváciu funkcie."
   field_parent_title: Nadradená stránka
   label_issue_watchers: Pozorovatelia
-  setting_commit_logs_encoding: Kódovanie prenášaných správ
   button_quote: Citácia
   setting_sequential_project_identifiers: Generovať sekvenčné identifikátory projektov
   notice_unable_delete_version: Verzia nemôže byť zmazaná
@@ -936,3 +938,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kódovanie prenášaných správ
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/sl.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/sl.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -16,7 +16,10 @@
     month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -132,7 +135,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: UTF-8
-  general_pdf_encoding: UFT-8
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: Račun je bil uspešno posodobljen.
@@ -241,7 +244,7 @@
   field_attr_mail: Oznaka za e-naslov
   field_onthefly: Sprotna izdelava uporabnikov
   field_start_date: Začetek
-  field_done_ratio: % Narejeno
+  field_done_ratio: "% Narejeno"
   field_auth_source: Način overovljanja
   field_hide_mail: Skrij moj e-naslov
   field_comments: Komentar
@@ -291,7 +294,6 @@
   setting_cross_project_issue_relations: Dovoli povezave zahtevkov med različnimi projekti
   setting_issue_list_default_columns: Privzeti stolpci prikazani na seznamu zahtevkov
   setting_repositories_encodings: Kodiranje shrambe
-  setting_commit_logs_encoding: Kodiranje sporočil ob predaji
   setting_emails_footer: Noga e-sporočil
   setting_protocol: Protokol
   setting_per_page_options: Število elementov na stran
@@ -937,3 +939,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kodiranje sporočil ob predaji
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/sr-YU.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/sr-YU.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,943 +1,979 @@
-# Serbian translations for Redmine
-# by Vladimir Medarović (vlada@medarovic.com)
-sr-YU:
-  direction: ltr
-  date:
-    formats:
-      # Use the strftime parameters for formats.
-      # When no format has been given, it uses default.
-      # You can provide other formats here if you like!
-      default: "%d.%m.%Y."
-      short: "%e %b"
-      long: "%B %e, %Y"
-      
-    day_names: [nedelja, ponedeljak, utorak, sreda, četvrtak, petak, subota]
-    abbr_day_names: [ned, pon, uto, sre, čet, pet, sub]
-      
-    # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, januar, februar, mart, april, maj, jun, jul, avgust, septembar, oktobar, novembar, decembar]
-    abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, avg, sep, okt, nov, dec]
-    # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
-
-  time:
-    formats:
-      default: "%d.%m.%Y. u %H:%M"
-      time: "%H:%M"
-      short: "%d. %b u %H:%M"
-      long: "%d. %B %Y u %H:%M"
-    am: "am"
-    pm: "pm"
-
-  datetime:
-    distance_in_words:
-      half_a_minute: "pola minuta"
-      less_than_x_seconds:
-        one:   "manje od jedne sekunde"
-        other: "manje od %{count} sek."
-      x_seconds:
-        one:   "jedna sekunda"
-        other: "%{count} sek."
-      less_than_x_minutes:
-        one:   "manje od minuta"
-        other: "manje od %{count} min."
-      x_minutes:
-        one:   "jedan minut"
-        other: "%{count} min."
-      about_x_hours:
-        one:   "približno jedan sat"
-        other: "približno %{count} sati"
-      x_days:
-        one:   "jedan dan"
-        other: "%{count} dana"
-      about_x_months:
-        one:   "približno jedan mesec"
-        other: "približno %{count} meseci"
-      x_months:
-        one:   "jedan mesec"
-        other: "%{count} meseci"
-      about_x_years:
-        one:   "približno godinu dana"
-        other: "približno %{count} god."
-      over_x_years:
-        one:   "preko godinu dana"
-        other: "preko %{count} god."
-      almost_x_years:
-        one:   "skoro godinu dana"
-        other: "skoro %{count} god."
-
-  number:
-    format:
-      separator: ","
-      delimiter: ""
-      precision: 3
-    human:
-      format:
-        delimiter: ""
-        precision: 1
-      storage_units:
-        format: "%n %u"
-        units:
-          byte:
-            one: "Byte"
-            other: "Bytes"
-          kb: "KB"
-          mb: "MB"
-          gb: "GB"
-          tb: "TB"
-
-
-# Used in array.to_sentence.
-  support:
-    array:
-      sentence_connector: "i"
-      skip_last_comma: false
-      
-  activerecord:
-    errors:
-      template:
-        header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
-      messages:
-        inclusion: "nije uključen u spisak"
-        exclusion: "je rezervisan"
-        invalid: "je neispravan"
-        confirmation: "potvrda ne odgovara"
-        accepted: "mora biti prihvaćen"
-        empty: "ne može biti prazno"
-        blank: "ne može biti prazno"
-        too_long: "je predugačka (maksimum znakova je %{count})"
-        too_short: "je prekratka (minimum znakova je %{count})"
-        wrong_length: "je pogrešne dužine (broj znakova mora biti %{count})"
-        taken: "je već u upotrebi"
-        not_a_number: "nije broj"
-        not_a_date: "nije ispravan datum"
-        greater_than: "mora biti veći od %{count}"
-        greater_than_or_equal_to: "mora biti veći ili jednak %{count}"
-        equal_to: "mora biti jednak %{count}"
-        less_than: "mora biti manji od %{count}"
-        less_than_or_equal_to: "mora biti manji ili jednak %{count}"
-        odd: "mora biti paran"
-        even: "mora biti neparan"
-        greater_than_start_date: "mora biti veći od početnog datuma"
-        not_same_project: "ne pripada istom projektu"
-        circular_dependency: "Ova veza će stvoriti kružnu referencu"
-        cant_link_an_issue_with_a_descendant: "Problem ne može biti povezan sa jednim od svojih podzadataka"
-
-  actionview_instancetag_blank_option: Molim odaberite
-  
-  general_text_No: 'Ne'
-  general_text_Yes: 'Da'
-  general_text_no: 'ne'
-  general_text_yes: 'da'
-  general_lang_name: 'Srpski'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
-  general_csv_encoding: UTF-8
-  general_pdf_encoding: UTF-8
-  general_first_day_of_week: '1'
-  
-  notice_account_updated: Nalog je uspešno ažuriran.
-  notice_account_invalid_creditentials: Neispravno korisničko ime ili lozinka.
-  notice_account_password_updated: Lozinka je uspešno ažurirana.
-  notice_account_wrong_password: Pogrešna lozinka
-  notice_account_register_done: Korisnički nalog je uspešno kreiran. Kliknite na link koji ste dobili u e-poruci za aktivaciju.
-  notice_account_unknown_email: Nepoznat korisnik.
-  notice_can_t_change_password: Ovaj korisnički nalog za potvrdu identiteta koristi spoljni izvor. Nemoguće je promeniti lozinku.
-  notice_account_lost_email_sent: Poslata vam je e-poruka sa uputstvom za izbor nove lozinke
-  notice_account_activated: Vaš korisnički nalog je aktiviran. Sada se možete prijaviti.
-  notice_successful_create: Uspešno kreiranje.
-  notice_successful_update: Uspešno ažuriranje.
-  notice_successful_delete: Uspešno brisanje.
-  notice_successful_connection: Uspešno povezivanje.
-  notice_file_not_found: Strana kojoj želite pristupiti ne postoji ili je uklonjena.
-  notice_locking_conflict: Podatak je ažuriran od strane drugog korisnika.
-  notice_not_authorized: Niste ovlašćeni za pristup ovoj strani.
-  notice_email_sent: "E-poruka je poslata na %{value}"
-  notice_email_error: "Dogodila se greška prilikom slanja e-poruke (%{value})"
-  notice_feeds_access_key_reseted: Vaš RSS pristupni ključ je poništen.
-  notice_api_access_key_reseted: Vaš API pristupni ključ je poništen.
-  notice_failed_to_save_issues: "Neuspešno snimanje %{count} problema od %{total} odabranih: %{ids}."
-  notice_failed_to_save_members: "Neuspešno snimanje člana(ova): %{errors}."
-  notice_no_issue_selected: "Ni jedan problem nije odabran! Molimo, odaberite problem koji želite da menjate."
-  notice_account_pending: "Vaš nalog je kreiran i čeka na odobrenje administratora."
-  notice_default_data_loaded: Podrazumevano konfigurisanje je uspešno učitano.
-  notice_unable_delete_version: Verziju je nemoguće izbrisati.
-  notice_unable_delete_time_entry: Stavku evidencije vremena je nemoguće izbrisati.
-  notice_issue_done_ratios_updated: Odnos rešenih problema je ažuriran.
-  
-  error_can_t_load_default_data: "Podrazumevano konfigurisanje je nemoguće učitati: %{value}"
-  error_scm_not_found: "Stavka ili ispravka nisu pronađene u spremištu."
-  error_scm_command_failed: "Greška se javila prilikom pokušaja pristupa spremištu: %{value}"
-  error_scm_annotate: "Stavka ne postoji ili ne može biti označena."
-  error_issue_not_found_in_project: 'Problem nije pronađen ili ne pripada ovom projektu.'
-  error_no_tracker_in_project: 'Ni jedno praćenje nije povezano sa ovim projektom. Molimo proverite podešavanja projekta.'
-  error_no_default_issue_status: 'Podrazumevani status problema nije definisan. Molimo proverite vaše konfigurisanje (idite na "Administracija -> Statusi problema").'
-  error_can_not_delete_custom_field: Nemoguće je izbrisati prilagođeno polje
-  error_can_not_delete_tracker: "Ovo praćenje sadrži probleme i ne može biti obrisano."
-  error_can_not_remove_role: "Ova uloga je u upotrebi i ne može biti obrisana."
-  error_can_not_reopen_issue_on_closed_version: 'Problem dodeljen zatvorenoj verziji ne može biti ponovo otvoren'
-  error_can_not_archive_project: Ovaj projekat se ne može arhivirati
-  error_issue_done_ratios_not_updated: "Odnos rešenih problema nije ažuriran."
-  error_workflow_copy_source: 'Molimo odaberite izvorno praćenje ili ulogu'
-  error_workflow_copy_target: 'Molimo odaberite odredišno praćenje i ulogu'
-  error_unable_delete_issue_status: 'Status problema je nemoguće obrisati'
-  error_unable_to_connect: "Povezivanje sa (%{value}) je nemoguće"  
-  warning_attachments_not_saved: "%{count} datoteka ne može biti snimljena."
-  
-  mail_subject_lost_password: "Vaša %{value} lozinka"
-  mail_body_lost_password: 'Za promenu vaše lozinke, kliknite na sledeći link:'
-  mail_subject_register: "Aktivacija vašeg %{value} naloga"
-  mail_body_register: 'Za aktivaciju vašeg naloga, kliknite na sledeći link:'
-  mail_body_account_information_external: "Vaš nalog %{value} možete koristiti za prijavu."
-  mail_body_account_information: Informacije o vašem nalogu
-  mail_subject_account_activation_request: "Zahtev za aktivaciju naloga %{value}"
-  mail_body_account_activation_request: "Novi korisnik (%{value}) je registrovan. Nalog čeka na vaše odobrenje:"
-  mail_subject_reminder: "%{count} problema dospeva narednih %{days} dana"
-  mail_body_reminder: "%{count} problema dodeljenih vama dospeva u narednih %{days} dana:"
-  mail_subject_wiki_content_added: "Wiki stranica '%{id}' je dodata"
-  mail_body_wiki_content_added: "%{author} je dodao wiki stranicu '%{id}'."
-  mail_subject_wiki_content_updated: "Wiki stranica '%{id}' je ažurirana"
-  mail_body_wiki_content_updated: "%{author} je ažurirao wiki stranicu '%{id}'."
-  
-  gui_validation_error: jedna greška
-  gui_validation_error_plural: "%{count} grešaka"
-  
-  field_name: Naziv
-  field_description: Opis
-  field_summary: Rezime
-  field_is_required: Obavezno
-  field_firstname: Ime
-  field_lastname: Prezime
-  field_mail: E-adresa
-  field_filename: Datoteka
-  field_filesize: Veličina
-  field_downloads: Preuzimanja
-  field_author: Autor
-  field_created_on: Kreirano
-  field_updated_on: Ažurirano
-  field_field_format: Format
-  field_is_for_all: Za sve projekte
-  field_possible_values: Moguće vrednosti
-  field_regexp: Regularan izraz
-  field_min_length: Minimalna dužina
-  field_max_length: Maksimalna dužina
-  field_value: Vrednost
-  field_category: Kategorija
-  field_title: Naslov
-  field_project: Projekat
-  field_issue: Problem
-  field_status: Status
-  field_notes: Beleške
-  field_is_closed: Zatvoren problem
-  field_is_default: Podrazumevana vrednost
-  field_tracker: Praćenje
-  field_subject: Predmet
-  field_due_date: Krajnji rok
-  field_assigned_to: Dodeljeno
-  field_priority: Prioritet
-  field_fixed_version: Odredišna verzija
-  field_user: Korisnik
-  field_principal: Glavni
-  field_role: Uloga
-  field_homepage: Početna stranica
-  field_is_public: Javno objavljivanje
-  field_parent: Potprojekat od
-  field_is_in_roadmap: Problemi prikazani u planu rada
-  field_login: Korisničko ime
-  field_mail_notification: Obaveštenja putem e-pošte
-  field_admin: Administrator
-  field_last_login_on: Poslednje povezivanje
-  field_language: Jezik
-  field_effective_date: Datum
-  field_password: Lozinka
-  field_new_password: Nova lozinka
-  field_password_confirmation: Potvrda lozinke
-  field_version: Verzija
-  field_type: Tip
-  field_host: Glavni računar
-  field_port: Port
-  field_account: Korisnički nalog
-  field_base_dn: Bazni DN
-  field_attr_login: Atribut prijavljivanja
-  field_attr_firstname: Atribut imena
-  field_attr_lastname: Atribut prezimena
-  field_attr_mail: Atribut e-adrese
-  field_onthefly: Kreiranje korisnika u toku rada
-  field_start_date: Početak
-  field_done_ratio: % urađeno
-  field_auth_source: Režim potvrde identiteta
-  field_hide_mail: Sakrij moju e-adresu
-  field_comments: Komentar
-  field_url: URL
-  field_start_page: Početna stranica
-  field_subproject: Potprojekat
-  field_hours: sati
-  field_activity: Aktivnost
-  field_spent_on: Datum
-  field_identifier: Identifikator
-  field_is_filter: Upotrebi kao filter
-  field_issue_to: Srodni problemi
-  field_delay: Kašnjenje
-  field_assignable: Problem može biti dodeljen ovoj ulozi
-  field_redirect_existing_links: Preusmeri postojeće veze
-  field_estimated_hours: Proteklo vreme
-  field_column_names: Kolone
-  field_time_zone: Vremenska zona
-  field_searchable: Može da se pretražuje
-  field_default_value: Podrazumevana vrednost
-  field_comments_sorting: Prikaži komentare
-  field_parent_title: Matična stranica
-  field_editable: Izmenljivo
-  field_watcher: Posmatrač
-  field_identity_url: OpenID URL
-  field_content: Sadržaj
-  field_group_by: Grupisanje rezultata po
-  field_sharing: Deljenje
-  field_parent_issue: Matični zadatak
-  
-  setting_app_title: Naslov aplikacije
-  setting_app_subtitle: Podnaslov aplikacije
-  setting_welcome_text: Tekst dobrodošlice
-  setting_default_language: Podrazumevani jezik
-  setting_login_required: Obavezna potvrda identiteta
-  setting_self_registration: Samoregistracija
-  setting_attachment_max_size: Maks. veličina priložene datoteke
-  setting_issues_export_limit: Ograničenje izvoza „problema“
-  setting_mail_from: E-adresa pošiljaoca
-  setting_bcc_recipients: Primaoci „Bcc“ kopije
-  setting_plain_text_mail: Poruka sa čistim tekstom (bez HTML-a)
-  setting_host_name: Putanja i naziv glavnog računara
-  setting_text_formatting: Oblikovanje teksta
-  setting_wiki_compression: Kompresija Wiki istorije
-  setting_feeds_limit: Ograničenje sadržaja izvora vesti
-  setting_default_projects_public: Podrazumeva se javno prikazivanje novih projekata
-  setting_autofetch_changesets: Izvršavanje automatskog preuzimanja
-  setting_sys_api_enabled: Omogućavanje WS za upravljanje spremištem
-  setting_commit_ref_keywords: Referenciranje ključnih reči
-  setting_commit_fix_keywords: Popravljanje ključnih reči
-  setting_autologin: Automatska prijava
-  setting_date_format: Format datuma
-  setting_time_format: Format vremena
-  setting_cross_project_issue_relations: Dozvoli povezivanje problema iz unakrsnih projekata
-  setting_issue_list_default_columns: Podrazumevane kolone prikazane na spisku problema
-  setting_repositories_encodings: Kodiranje spremišta
-  setting_commit_logs_encoding: Kodiranje izvršnih poruka
-  setting_emails_footer: Podnožje stranice e-poruke
-  setting_protocol: Protokol
-  setting_per_page_options: Opcije prikaza objekata po stranici
-  setting_user_format: Format prikaza korisnika
-  setting_activity_days_default: Broj dana prikazanih na projektnoj aktivnosti
-  setting_display_subprojects_issues: Prikazuj probleme iz potprojekata na glavnom projektu, ukoliko nije drugačije navedeno
-  setting_enabled_scm: Omogućavanje SCM
-  setting_mail_handler_body_delimiters: "Skraćivanje e-poruke nakon jedne od ovih linija"
-  setting_mail_handler_api_enabled: Omogućavanje WS dolazne e-poruke
-  setting_mail_handler_api_key: API ključ
-  setting_sequential_project_identifiers: Generisanje sekvencijalnog imena projekta
-  setting_gravatar_enabled: Koristi Gravatar korisničke ikone
-  setting_gravatar_default: Podrazumevana Gravatar slika
-  setting_diff_max_lines_displayed: Maks. broj prikazanih različitih linija
-  setting_file_max_size_displayed: Maks. veličina tekst. datoteka prikazanih umetnuto
-  setting_repository_log_display_limit: Maks. broj revizija prikazanih u datoteci za evidenciju
-  setting_openid: Dozvoli OpenID prijavu i registraciju
-  setting_password_min_length: Minimalna dužina lozinke
-  setting_new_project_user_role_id: Kreatoru projekta (koji nije administrator) dodeljuje je uloga
-  setting_default_projects_modules: Podrazumevano omogućeni moduli za nove projekte
-  setting_issue_done_ratio: Izračunaj odnos rešenih problema
-  setting_issue_done_ratio_issue_field: koristeći polje problema
-  setting_issue_done_ratio_issue_status: koristeći status problema
-  setting_start_of_week: Prvi dan u sedmici
-  setting_rest_api_enabled: Omogući REST web usluge
-  setting_cache_formatted_text: Keširanje obrađenog teksta
-  
-  permission_add_project: Kreiranje projekta
-  permission_add_subprojects: Kreiranje potpojekta
-  permission_edit_project: Izmena projekata
-  permission_select_project_modules: Odabiranje modula projekta
-  permission_manage_members: Upravljanje članovima
-  permission_manage_project_activities: Upravljanje projektnim aktivnostima
-  permission_manage_versions: Upravljanje verzijama
-  permission_manage_categories: Upravljanje kategorijama problema
-  permission_view_issues: Pregled problema
-  permission_add_issues: Dodavanje problema
-  permission_edit_issues: Izmena problema
-  permission_manage_issue_relations: Upravljanje vezama između problema
-  permission_add_issue_notes: Dodavanje beleški
-  permission_edit_issue_notes: Izmena beleški
-  permission_edit_own_issue_notes: Izmena sopstvenih beleški
-  permission_move_issues: Pomeranje problema
-  permission_delete_issues: Brisanje problema
-  permission_manage_public_queries: Upravljanje javnim upitima
-  permission_save_queries: Snimanje upita
-  permission_view_gantt: Pregledanje Gantovog dijagrama
-  permission_view_calendar: Pregledanje kalendara
-  permission_view_issue_watchers: Pregledanje spiska posmatrača
-  permission_add_issue_watchers: Dodavanje posmatrača
-  permission_delete_issue_watchers: Brisanje posmatrača
-  permission_log_time: Beleženje utrošenog vremena
-  permission_view_time_entries: Pregledanje utrošenog vremena
-  permission_edit_time_entries: Izmena utrošenog vremena
-  permission_edit_own_time_entries: Izmena sopstvenog utrošenog vremena
-  permission_manage_news: Upravljanje vestima
-  permission_comment_news: Komentarisanje vesti
-  permission_manage_documents: Upravljanje dokumentima
-  permission_view_documents: Pregledanje dokumenata
-  permission_manage_files: Upravljanje datotekama
-  permission_view_files: Pregledanje datoteka
-  permission_manage_wiki: Upravljanje wiki stranicama
-  permission_rename_wiki_pages: Promena imena wiki stranicama
-  permission_delete_wiki_pages: Brisanje wiki stranica
-  permission_view_wiki_pages: Pregledanje wiki stranica
-  permission_view_wiki_edits: Pregledanje wiki istorije
-  permission_edit_wiki_pages: Izmena wiki stranica
-  permission_delete_wiki_pages_attachments: Brisanje priloženih datoteka
-  permission_protect_wiki_pages: Zaštita wiki stranica
-  permission_manage_repository: Upravljanje spremištem
-  permission_browse_repository: Pregledanje spremišta
-  permission_view_changesets: Pregledanje skupa promena
-  permission_commit_access: Potvrda pristupa
-  permission_manage_boards: Upravljanje forumima
-  permission_view_messages: Pregledanje poruka
-  permission_add_messages: Slanje poruka
-  permission_edit_messages: Izmena poruka
-  permission_edit_own_messages: Izmena sopstvenih poruka
-  permission_delete_messages: Brisanje poruka
-  permission_delete_own_messages: Brisanje sopstvenih poruka
-  permission_export_wiki_pages: Izvoz wiki stranica
-  permission_manage_subtasks: Upravljanje podzadacima
-  
-  project_module_issue_tracking: Praćenje problema
-  project_module_time_tracking: Praćenje vremena
-  project_module_news: Vesti
-  project_module_documents: Dokumenti
-  project_module_files: Datoteke
-  project_module_wiki: Wiki
-  project_module_repository: Spremište
-  project_module_boards: Forumi
-  
-  label_user: Korisnik
-  label_user_plural: Korisnici
-  label_user_new: Novi korisnik
-  label_user_anonymous: Anoniman
-  label_project: Projekat
-  label_project_new: Novi projekat
-  label_project_plural: Projekti
-  label_x_projects:
-    zero:  nema projekata
-    one:   jedan projekat
-    other: "%{count} projekata"
-  label_project_all: Svi projekti
-  label_project_latest: Poslednji projekti
-  label_issue: Problem
-  label_issue_new: Novi problem
-  label_issue_plural: Problemi
-  label_issue_view_all: Prikaz svih problema
-  label_issues_by: "Problemi (%{value})"
-  label_issue_added: Problem je dodat
-  label_issue_updated: Problem je ažuriran
-  label_document: Dokument
-  label_document_new: Novi dokument
-  label_document_plural: Dokumenti
-  label_document_added: Dokument je dodat
-  label_role: Uloga
-  label_role_plural: Uloge
-  label_role_new: Nova uloga
-  label_role_and_permissions: Uloge i dozvole
-  label_member: Član
-  label_member_new: Novi član
-  label_member_plural: Članovi
-  label_tracker: Praćenje
-  label_tracker_plural: Praćenja
-  label_tracker_new: Novo praćenje
-  label_workflow: Tok posla
-  label_issue_status: Status problema
-  label_issue_status_plural: Statusi problema
-  label_issue_status_new: Novi status
-  label_issue_category: Kategorija problema
-  label_issue_category_plural: Kategorije problema
-  label_issue_category_new: Nova kategorija
-  label_custom_field: Prilagođeno polje
-  label_custom_field_plural: Prilagođena polja
-  label_custom_field_new: Novo prilagođeno polje
-  label_enumerations: Nabrojiva lista
-  label_enumeration_new: Nova vrednost
-  label_information: Informacija
-  label_information_plural: Informacije
-  label_please_login: Molimo, prijavite se
-  label_register: Registracija
-  label_login_with_open_id_option: ili prijava sa OpenID
-  label_password_lost: Izgubljena lozinka
-  label_home: Početak
-  label_home_heading: Početak
-  label_my_page: Moja stranica
-  label_my_account: Moj nalog
-  label_my_projects: Moji projekti
-  label_my_page_block: My page block
-  label_administration: Administracija
-  label_login: Prijava
-  label_logout: Odjava
-  label_help: Pomoć
-  label_reported_issues: Prijavljeni problemi
-  label_assigned_to_me_issues: Problemi dodeljeni meni
-  label_last_login: Poslednje povezivanje
-  label_registered_on: Registrovan
-  label_activity: Aktivnost
-  label_overall_activity: Celokupna aktivnost
-  label_user_activity: "Aktivnost korisnika %{value}"
-  label_new: Novo
-  label_logged_as: Prijavljeni ste kao
-  label_environment: Okruženje
-  label_authentication: Potvrda identiteta
-  label_auth_source: Režim potvrde identiteta
-  label_auth_source_new: Novi režim potvrde identiteta
-  label_auth_source_plural: Režimi potvrde identiteta
-  label_subproject_plural: Potprojekti
-  label_subproject_new: Novi potprojekat
-  label_and_its_subprojects: "%{value} i njegovi potprojekti"
-  label_min_max_length: Min. - Maks. dužina
-  label_list: Spisak
-  label_date: Datum
-  label_integer: Ceo broj
-  label_float: Sa pokretnim zarezom
-  label_boolean: Logički operator
-  label_string: Tekst
-  label_text: Dugi tekst
-  label_attribute: Osobina
-  label_attribute_plural: Osobine
-  label_download: "%{count} preuzimanje"
-  label_download_plural: "%{count} preuzimanja"
-  label_no_data: Nema podataka za prikazivanje
-  label_change_status: Promena statusa
-  label_history: Istorija
-  label_attachment: Datoteka
-  label_attachment_new: Nova datoteka
-  label_attachment_delete: Brisanje datoteke
-  label_attachment_plural: Datoteke
-  label_file_added: Datoteka je dodata
-  label_report: Izveštaj
-  label_report_plural: Izveštaji
-  label_news: Vesti
-  label_news_new: Dodavanje vesti
-  label_news_plural: Vesti
-  label_news_latest: Poslednje vesti
-  label_news_view_all: Prikaz svih vesti
-  label_news_added: Vesti su dodate
-  label_settings: Podešavanja
-  label_overview: Pregled
-  label_version: Verzija
-  label_version_new: Nova verzija
-  label_version_plural: Verzije
-  label_close_versions: Zatvori završene verzije
-  label_confirmation: Potvrda
-  label_export_to: 'Takođe dostupno i u varijanti:'
-  label_read: Čitanje...
-  label_public_projects: Javni projekti
-  label_open_issues: otvoren
-  label_open_issues_plural: otvorenih
-  label_closed_issues: zatvoren
-  label_closed_issues_plural: zatvorenih
-  label_x_open_issues_abbr_on_total:
-    zero:  0 otvorenih / %{total}
-    one:   1 otvoren / %{total}
-    other: "%{count} otvorenih / %{total}"
-  label_x_open_issues_abbr:
-    zero:  0 otvorenih
-    one:   1 otvoren
-    other: "%{count} otvorenih"
-  label_x_closed_issues_abbr:
-    zero:  0 zatvorenih
-    one:   1 zatvoren
-    other: "%{count} zatvorenih"
-  label_total: Ukupno
-  label_permissions: Dozvole
-  label_current_status: Trenutni status
-  label_new_statuses_allowed: Novi statusi dozvoljeni
-  label_all: svi
-  label_none: nijedan
-  label_nobody: nikome
-  label_next: Sledeće
-  label_previous: Prethodno
-  label_used_by: Koristio
-  label_details: Detalji
-  label_add_note: Dodaj belešku
-  label_per_page: Po strani
-  label_calendar: Kalendar
-  label_months_from: meseci od
-  label_gantt: Gantov dijagram
-  label_internal: Unutrašnji
-  label_last_changes: "poslednjih %{count} promena"
-  label_change_view_all: Prikaži sve promene
-  label_personalize_page: Personalizuj ovu stranu
-  label_comment: Komentar
-  label_comment_plural: Komentari
-  label_x_comments:
-    zero: bez komentara
-    one: jedan komentar
-    other: "%{count} komentara"
-  label_comment_add: Dodaj komentar
-  label_comment_added: Komentar dodat
-  label_comment_delete: Obriši komentare
-  label_query: Prilagođen upit
-  label_query_plural: Prilagođeni upiti
-  label_query_new: Novi upit
-  label_filter_add: Dodavanje filtera
-  label_filter_plural: Filteri
-  label_equals: je
-  label_not_equals: nije
-  label_in_less_than: manje od
-  label_in_more_than: više od
-  label_greater_or_equal: '>='
-  label_less_or_equal: '<='
-  label_in: u
-  label_today: danas
-  label_all_time: sve vreme
-  label_yesterday: juče
-  label_this_week: ove sedmice
-  label_last_week: poslednje sedmice
-  label_last_n_days: "poslednjih %{count} dana"
-  label_this_month: ovog meseca
-  label_last_month: poslednjeg meseca
-  label_this_year: ove godine
-  label_date_range: Vremenski period
-  label_less_than_ago: pre manje od nekoliko dana
-  label_more_than_ago: pre više od nekoliko dana
-  label_ago: pre nekoliko dana
-  label_contains: sadrži
-  label_not_contains: ne sadrži
-  label_day_plural: dana
-  label_repository: Spremište
-  label_repository_plural: Spremišta
-  label_browse: Pregledanje
-  label_modification: "%{count} promena"
-  label_modification_plural: "%{count} promena"
-  label_branch: Grana
-  label_tag: Oznaka
-  label_revision: Revizija
-  label_revision_plural: Revizije
-  label_revision_id: "Revizija %{value}"
-  label_associated_revisions: Pridružene revizije
-  label_added: dodato
-  label_modified: promenjeno
-  label_copied: kopirano
-  label_renamed: preimenovano
-  label_deleted: izbrisano
-  label_latest_revision: Poslednja revizija
-  label_latest_revision_plural: Poslednje revizije
-  label_view_revisions: Pregled revizija
-  label_view_all_revisions: Pregled svih revizija
-  label_max_size: Maksimalna veličina
-  label_sort_highest: Premeštanje na vrh
-  label_sort_higher: Premeštanje na gore
-  label_sort_lower: Premeštanje na dole
-  label_sort_lowest: Premeštanje na dno
-  label_roadmap: Plan rada
-  label_roadmap_due_in: "Dospeva %{value}"
-  label_roadmap_overdue: "%{value} najkasnije"
-  label_roadmap_no_issues: Nema problema za ovu verziju
-  label_search: Pretraga
-  label_result_plural: Rezultati
-  label_all_words: Sve reči
-  label_wiki: Wiki
-  label_wiki_edit: Wiki izmena
-  label_wiki_edit_plural: Wiki izmene
-  label_wiki_page: Wiki stranica
-  label_wiki_page_plural: Wiki stranice
-  label_index_by_title: Indeksiranje po naslovu
-  label_index_by_date: Indeksiranje po datumu
-  label_current_version: Trenutna verzija
-  label_preview: Pregled
-  label_feed_plural: Izvori vesti
-  label_changes_details: Detalji svih promena
-  label_issue_tracking: Praćenje problema
-  label_spent_time: Utrošeno vreme
-  label_overall_spent_time: Celokupno utrošeno vreme
-  label_f_hour: "%{value} sat"
-  label_f_hour_plural: "%{value} sati"
-  label_time_tracking: Praćenje vremena
-  label_change_plural: Promene
-  label_statistics: Statistika
-  label_commits_per_month: Izvršenja mesečno
-  label_commits_per_author: Izvršenja po autoru
-  label_view_diff: Pogledaj razlike
-  label_diff_inline: unutra
-  label_diff_side_by_side: uporedo
-  label_options: Opcije
-  label_copy_workflow_from: Kopiranje toka posla od
-  label_permissions_report: Izveštaj o dozvolama
-  label_watched_issues: Posmatrani problemi
-  label_related_issues: Srodni problemi
-  label_applied_status: Primenjeni statusi
-  label_loading: Učitavanje...
-  label_relation_new: Nova relacija
-  label_relation_delete: Brisanje relacije
-  label_relates_to: srodnih sa
-  label_duplicates: dupliranih
-  label_duplicated_by: dupliranih od
-  label_blocks: odbijenih
-  label_blocked_by: odbijenih od
-  label_precedes: prethodi
-  label_follows: praćenih
-  label_end_to_start: od kraja do početka
-  label_end_to_end: od kraja do kraja
-  label_start_to_start: od početka do početka
-  label_start_to_end: od početka do kraja
-  label_stay_logged_in: Ostanite prijavljeni
-  label_disabled: onemogućeno
-  label_show_completed_versions: Prikazivanje završene verzije
-  label_me: meni
-  label_board: Forum
-  label_board_new: Novi forum
-  label_board_plural: Forumi
-  label_board_locked: Zaključana
-  label_board_sticky: Lepljiva
-  label_topic_plural: Teme
-  label_message_plural: Poruke
-  label_message_last: Poslednja poruka
-  label_message_new: Nova poruka
-  label_message_posted: Poruka je dodata
-  label_reply_plural: Odgovori
-  label_send_information: Pošalji korisniku detalje naloga
-  label_year: Godina
-  label_month: Mesec
-  label_week: Sedmica
-  label_date_from: Šalje
-  label_date_to: Prima
-  label_language_based: Bazirano na jeziku korisnika
-  label_sort_by: "Sortirano po %{value}"
-  label_send_test_email: Slanje probne e-poruke
-  label_feeds_access_key: RSS pristupni ključ
-  label_missing_feeds_access_key: RSS pristupni ključ nedostaje
-  label_feeds_access_key_created_on: "RSS pristupni ključ je napravljen pre %{value}"
-  label_module_plural: Moduli
-  label_added_time_by: "Dodao %{author} pre %{age}"
-  label_updated_time_by: "Ažurirao %{author} pre %{age}"
-  label_updated_time: "Ažurirano pre %{value}"
-  label_jump_to_a_project: Skok na projekat...
-  label_file_plural: Datoteke
-  label_changeset_plural: Skupovi promena
-  label_default_columns: Podrazumevane kolone
-  label_no_change_option: (Bez promena)
-  label_bulk_edit_selected_issues: Grupna izmena odabranih problema
-  label_theme: Tema
-  label_default: Podrazumevano
-  label_search_titles_only: Pretražuj samo naslove
-  label_user_mail_option_all: "Za bilo koji događaj na svim mojim projektima"
-  label_user_mail_option_selected: "Za bilo koji događaj na samo odabranim projektima..."
-  label_user_mail_no_self_notified: "Ne želim biti obaveštavan za promene koje sam pravim"
-  label_registration_activation_by_email: aktivacija naloga putem e-poruke
-  label_registration_manual_activation: ručna aktivacija naloga
-  label_registration_automatic_activation: automatska aktivacija naloga
-  label_display_per_page: "Broj stavki po stranici: %{value}"
-  label_age: Starost
-  label_change_properties: Promeni svojstva
-  label_general: Opšti
-  label_more: Više
-  label_scm: SCM
-  label_plugins: Dodatne komponente
-  label_ldap_authentication: LDAP potvrda identiteta
-  label_downloads_abbr: D/L
-  label_optional_description: Opciono opis
-  label_add_another_file: Dodaj još jednu datoteku
-  label_preferences: Podešavanja
-  label_chronological_order: po hronološkom redosledu
-  label_reverse_chronological_order: po obrnutom hronološkom redosledu
-  label_planning: Planiranje
-  label_incoming_emails: Dolazne e-poruke
-  label_generate_key: Generisanje ključa
-  label_issue_watchers: Posmatrači
-  label_example: Primer
-  label_display: Prikaz
-  label_sort: Sortiranje
-  label_ascending: Rastući niz
-  label_descending: Opadajući niz
-  label_date_from_to: Od %{start} do %{end}
-  label_wiki_content_added: Wiki stranica je dodata
-  label_wiki_content_updated: Wiki stranica je ažurirana
-  label_group: Grupa
-  label_group_plural: Grupe
-  label_group_new: Nova grupa
-  label_time_entry_plural: Utrošeno vreme
-  label_version_sharing_none: Nije deljeno
-  label_version_sharing_descendants: Sa potprojektima
-  label_version_sharing_hierarchy: Sa hijerarhijom projekta
-  label_version_sharing_tree: Sa stablom projekta
-  label_version_sharing_system: Sa svim projektima
-  label_update_issue_done_ratios: Ažuriraj odnos rešenih problema
-  label_copy_source: Izvor
-  label_copy_target: Odredište
-  label_copy_same_as_target: Isto kao odredište
-  label_display_used_statuses_only: Prikazuj statuse korišćene samo od strane ovog praćenja
-  label_api_access_key: API pristupni ključ
-  label_missing_api_access_key: Nedostaje API pristupni ključ
-  label_api_access_key_created_on: "API pristupni ključ je kreiran pre %{value}"
-  label_profile: Profil
-  label_subtask_plural: Podzadatak
-  label_project_copy_notifications: Pošalji e-poruku sa obaveštenjem prilikom kopiranja projekta 
-  
-  button_login: Prijava
-  button_submit: Pošalji
-  button_save: Snimi
-  button_check_all: Uključi sve
-  button_uncheck_all: Isključi sve
-  button_delete: Izbriši
-  button_create: Kreiraj
-  button_create_and_continue: Kreiraj i nastavi
-  button_test: Test
-  button_edit: Izmeni
-  button_add: Dodaj
-  button_change: Promeni
-  button_apply: Primeni
-  button_clear: Obriši
-  button_lock: Zaključaj
-  button_unlock: Otključaj
-  button_download: Preuzmi
-  button_list: Spisak
-  button_view: Prikaži
-  button_move: Pomeri
-  button_move_and_follow: Pomeri i prati
-  button_back: Nazad
-  button_cancel: Poništi
-  button_activate: Aktiviraj
-  button_sort: Sortiraj
-  button_log_time: Evidentiraj vreme
-  button_rollback: Povratak na ovu verziju
-  button_watch: Prati
-  button_unwatch: Ne prati više
-  button_reply: Odgovori
-  button_archive: Arhiviraj
-  button_unarchive: Vrati iz arhive
-  button_reset: Poništi
-  button_rename: Preimenuj
-  button_change_password: Promeni lozinku
-  button_copy: Kopiraj
-  button_copy_and_follow: Kopiraj i prati
-  button_annotate: Pribeleži
-  button_update: Ažuriraj
-  button_configure: Podesi
-  button_quote: Pod navodnicima
-  button_duplicate: Dupliraj
-  button_show: Prikaži
-  
-  status_active: aktivni
-  status_registered: registrovani
-  status_locked: zaključani
-  
-  version_status_open: otvoren
-  version_status_locked: zaključan
-  version_status_closed: zatvoren
-
-  field_active: Aktivan
-  
-  text_select_mail_notifications: Odaberi akcije za koje će obaveštenje biti poslato putem e-pošte.
-  text_regexp_info: npr. ^[A-Z0-9]+$
-  text_min_max_length_info: 0 znači bez ograničenja
-  text_project_destroy_confirmation: Jeste li sigurni da želite da izbrišete ovaj projekat i sve pripadajuće podatke?
-  text_subprojects_destroy_warning: "Potprojekti: %{value} će takođe biti izbrisan."
-  text_workflow_edit: Odaberite ulogu i praćenje za izmenu toka posla
-  text_are_you_sure: Jeste li sigurni?
-  text_journal_changed: "%{label} promenjen od %{old} u %{new}"
-  text_journal_set_to: "%{label} postavljen u %{value}"
-  text_journal_deleted: "%{label} izbrisano (%{old})"
-  text_journal_added: "%{label} %{value} dodato"
-  text_tip_issue_begin_day: zadatak počinje ovog dana
-  text_tip_issue_end_day: zadatak se završava ovog dana
-  text_tip_issue_begin_end_day: zadatak počinje i završava ovog dana
-  text_project_identifier_info: 'Dozvoljena su samo mala slova (a-š), brojevi i crtice.<br />Jednom snimljen identifikator više se ne može promeniti.'
-  text_caracters_maximum: "Najviše %{count} znak(ova)."
-  text_caracters_minimum: "Broj znakova mora biti najmanje %{count}."
-  text_length_between: "Broj znakova mora biti između %{min} i %{max}."
-  text_tracker_no_workflow: Ovo praćenje nema definisan tok posla
-  text_unallowed_characters: Nedozvoljeni znakovi
-  text_comma_separated: Dozvoljene su višestruke vrednosti (odvojene zarezom).
-  text_line_separated: Dozvoljene su višestruke vrednosti (jedan red za svaku vrednost).
-  text_issues_ref_in_commit_messages: Referenciranje i popravljanje problema u izvršnim porukama
-  text_issue_added: "%{author} je prijavio problem %{id}."
-  text_issue_updated: "%{author} je ažurirao problem %{id}."
-  text_wiki_destroy_confirmation: Jeste li sigurni da želite da obrišete wiki i sav sadržaj?
-  text_issue_category_destroy_question: "Nekoliko problema (%{count}) je dodeljeno ovoj kategoriji. Šta želite da uradite?"
-  text_issue_category_destroy_assignments: Ukloni dodeljene kategorije
-  text_issue_category_reassign_to: Dodeli ponovo probleme ovoj kategoriji
-  text_user_mail_option: "Za neizabrane projekte, dobićete samo obaveštenje o stvarima koje pratite ili ste uključeni (npr. problemi čiji ste vi autor ili zastupnik)."
-  text_no_configuration_data: "Uloge, praćenja, statusi problema i toka posla još uvek nisu podešeni.\nPreporučljivo je da učitate podrazumevano konfigurisanje. Izmena je moguća nakon prvog učitavanja."
-  text_load_default_configuration: Učitaj podrazumevano konfigurisanje
-  text_status_changed_by_changeset: "Primenjeno u skupu sa promenama %{value}."
-  text_issues_destroy_confirmation: 'Jeste li sigurni da želite da izbrišete odabrane probleme?'
-  text_select_project_modules: 'Odaberite module koje želite omogućiti za ovaj projekat:'
-  text_default_administrator_account_changed: Podrazumevani administratorski nalog je promenjen
-  text_file_repository_writable: Fascikla priloženih datoteka je upisiva
-  text_plugin_assets_writable: Fascikla elemenata dodatnih komponenti je upisiva
-  text_rmagick_available: RMagick je dostupan (opciono)
-  text_destroy_time_entries_question: "%{hours} sati je prijavljeno za ovaj problem koji želite izbrisati. Šta želite da uradite?"
-  text_destroy_time_entries: Izbriši prijavljene sate
-  text_assign_time_entries_to_project: Dodeli prijavljene sate projektu
-  text_reassign_time_entries: 'Dodeli ponovo prijavljene sate ovom problemu:'
-  text_user_wrote: "%{value} je napisao:"
-  text_enumeration_destroy_question: "%{count} objekat(a) je dodeljeno ovoj vrednosti."
-  text_enumeration_category_reassign_to: 'Dodeli ih ponovo ovoj vrednosti:'
-  text_email_delivery_not_configured: "Isporuka e-poruka nije konfigurisana i obaveštenja su onemogućena.\nPodesite vaš SMTP server u config/configuration.yml i pokrenite ponovo aplikaciju za njihovo omogućavanje."
-  text_repository_usernames_mapping: "Odaberite ili ažurirajte Redmine korisnike mapiranjem svakog korisničkog imena pronađenog u evidenciji spremišta.\nKorisnici sa istim Redmine imenom i imenom spremišta ili e-adresom su automatski mapirani."
-  text_diff_truncated: '... Ova razlika je isečena jer je dostignuta maksimalna veličina prikaza.'
-  text_custom_field_possible_values_info: 'Jedan red za svaku vrednost'
-  text_wiki_page_destroy_question: "Ova stranica ima %{descendants} podređenih stranica i podstranica. Šta želite da uradite?"
-  text_wiki_page_nullify_children: "Zadrži podređene stranice kao korene stranice"
-  text_wiki_page_destroy_children: "Izbriši podređene stranice i sve njihove podstranice"
-  text_wiki_page_reassign_children: "Dodeli ponovo podređene stranice ovoj matičnoj stranici"
-  text_own_membership_delete_confirmation: "Nakon uklanjanja pojedinih ili svih vaših dozvola nećete više moći da uređujete ovaj projekat.\nŽelite li da nastavite?"
-  text_zoom_in: Uvećaj
-  text_zoom_out: Umanji
-  
-  default_role_manager: Menadžer
-  default_role_developer: Programer
-  default_role_reporter: Izveštač
-  default_tracker_bug: Greška
-  default_tracker_feature: Funkcionalnost
-  default_tracker_support: Podrška
-  default_issue_status_new: Novo
-  default_issue_status_in_progress: U toku
-  default_issue_status_resolved: Rešeno
-  default_issue_status_feedback: Povratna informacija
-  default_issue_status_closed: Zatvoreno
-  default_issue_status_rejected: Odbijeno
-  default_doc_category_user: Korisnička dokumentacija
-  default_doc_category_tech: Tehnička dokumentacija
-  default_priority_low: Nizak
-  default_priority_normal: Normalan
-  default_priority_high: Visok
-  default_priority_urgent: Hitno
-  default_priority_immediate: Neposredno
-  default_activity_design: Dizajn
-  default_activity_development: Razvoj
-  
-  enumeration_issue_priorities: Prioriteti problema
-  enumeration_doc_categories: Kategorije dokumenta
-  enumeration_activities: Aktivnosti (praćenje vremena)
-  enumeration_system_activity: Sistemska aktivnost
-  
-  field_time_entries: Vreme evidencije
-  project_module_gantt: Gantov dijagram
-  project_module_calendar: Kalendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+# Serbian translations for Redmine
+# by Vladimir Medarović (vlada@medarovic.com)
+sr-YU:
+  direction: ltr
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%d.%m.%Y."
+      short: "%e %b"
+      long: "%B %e, %Y"
+      
+    day_names: [nedelja, ponedeljak, utorak, sreda, četvrtak, petak, subota]
+    abbr_day_names: [ned, pon, uto, sre, čet, pet, sub]
+      
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, januar, februar, mart, april, maj, jun, jul, avgust, septembar, oktobar, novembar, decembar]
+    abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, avg, sep, okt, nov, dec]
+    # Used in date_select and datime_select.
+    order:
+      - :day
+      - :month
+      - :year
+
+  time:
+    formats:
+      default: "%d.%m.%Y. u %H:%M"
+      time: "%H:%M"
+      short: "%d. %b u %H:%M"
+      long: "%d. %B %Y u %H:%M"
+    am: "am"
+    pm: "pm"
+
+  datetime:
+    distance_in_words:
+      half_a_minute: "pola minuta"
+      less_than_x_seconds:
+        one:   "manje od jedne sekunde"
+        other: "manje od %{count} sek."
+      x_seconds:
+        one:   "jedna sekunda"
+        other: "%{count} sek."
+      less_than_x_minutes:
+        one:   "manje od minuta"
+        other: "manje od %{count} min."
+      x_minutes:
+        one:   "jedan minut"
+        other: "%{count} min."
+      about_x_hours:
+        one:   "približno jedan sat"
+        other: "približno %{count} sati"
+      x_days:
+        one:   "jedan dan"
+        other: "%{count} dana"
+      about_x_months:
+        one:   "približno jedan mesec"
+        other: "približno %{count} meseci"
+      x_months:
+        one:   "jedan mesec"
+        other: "%{count} meseci"
+      about_x_years:
+        one:   "približno godinu dana"
+        other: "približno %{count} god."
+      over_x_years:
+        one:   "preko godinu dana"
+        other: "preko %{count} god."
+      almost_x_years:
+        one:   "skoro godinu dana"
+        other: "skoro %{count} god."
+
+  number:
+    format:
+      separator: ","
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Byte"
+            other: "Bytes"
+          kb: "KB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "i"
+      skip_last_comma: false
+      
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "1 error prohibited this %{model} from being saved"
+          other:  "%{count} errors prohibited this %{model} from being saved"
+      messages:
+        inclusion: "nije uključen u spisak"
+        exclusion: "je rezervisan"
+        invalid: "je neispravan"
+        confirmation: "potvrda ne odgovara"
+        accepted: "mora biti prihvaćen"
+        empty: "ne može biti prazno"
+        blank: "ne može biti prazno"
+        too_long: "je predugačka (maksimum znakova je %{count})"
+        too_short: "je prekratka (minimum znakova je %{count})"
+        wrong_length: "je pogrešne dužine (broj znakova mora biti %{count})"
+        taken: "je već u upotrebi"
+        not_a_number: "nije broj"
+        not_a_date: "nije ispravan datum"
+        greater_than: "mora biti veći od %{count}"
+        greater_than_or_equal_to: "mora biti veći ili jednak %{count}"
+        equal_to: "mora biti jednak %{count}"
+        less_than: "mora biti manji od %{count}"
+        less_than_or_equal_to: "mora biti manji ili jednak %{count}"
+        odd: "mora biti paran"
+        even: "mora biti neparan"
+        greater_than_start_date: "mora biti veći od početnog datuma"
+        not_same_project: "ne pripada istom projektu"
+        circular_dependency: "Ova veza će stvoriti kružnu referencu"
+        cant_link_an_issue_with_a_descendant: "Problem ne može biti povezan sa jednim od svojih podzadataka"
+
+  actionview_instancetag_blank_option: Molim odaberite
+  
+  general_text_No: 'Ne'
+  general_text_Yes: 'Da'
+  general_text_no: 'ne'
+  general_text_yes: 'da'
+  general_lang_name: 'Srpski'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '1'
+  
+  notice_account_updated: Nalog je uspešno ažuriran.
+  notice_account_invalid_creditentials: Neispravno korisničko ime ili lozinka.
+  notice_account_password_updated: Lozinka je uspešno ažurirana.
+  notice_account_wrong_password: Pogrešna lozinka
+  notice_account_register_done: Korisnički nalog je uspešno kreiran. Kliknite na link koji ste dobili u e-poruci za aktivaciju.
+  notice_account_unknown_email: Nepoznat korisnik.
+  notice_can_t_change_password: Ovaj korisnički nalog za potvrdu identiteta koristi spoljni izvor. Nemoguće je promeniti lozinku.
+  notice_account_lost_email_sent: Poslata vam je e-poruka sa uputstvom za izbor nove lozinke
+  notice_account_activated: Vaš korisnički nalog je aktiviran. Sada se možete prijaviti.
+  notice_successful_create: Uspešno kreiranje.
+  notice_successful_update: Uspešno ažuriranje.
+  notice_successful_delete: Uspešno brisanje.
+  notice_successful_connection: Uspešno povezivanje.
+  notice_file_not_found: Strana kojoj želite pristupiti ne postoji ili je uklonjena.
+  notice_locking_conflict: Podatak je ažuriran od strane drugog korisnika.
+  notice_not_authorized: Niste ovlašćeni za pristup ovoj strani.
+  notice_email_sent: "E-poruka je poslata na %{value}"
+  notice_email_error: "Dogodila se greška prilikom slanja e-poruke (%{value})"
+  notice_feeds_access_key_reseted: Vaš RSS pristupni ključ je poništen.
+  notice_api_access_key_reseted: Vaš API pristupni ključ je poništen.
+  notice_failed_to_save_issues: "Neuspešno snimanje %{count} problema od %{total} odabranih: %{ids}."
+  notice_failed_to_save_members: "Neuspešno snimanje člana(ova): %{errors}."
+  notice_no_issue_selected: "Ni jedan problem nije odabran! Molimo, odaberite problem koji želite da menjate."
+  notice_account_pending: "Vaš nalog je kreiran i čeka na odobrenje administratora."
+  notice_default_data_loaded: Podrazumevano konfigurisanje je uspešno učitano.
+  notice_unable_delete_version: Verziju je nemoguće izbrisati.
+  notice_unable_delete_time_entry: Stavku evidencije vremena je nemoguće izbrisati.
+  notice_issue_done_ratios_updated: Odnos rešenih problema je ažuriran.
+  
+  error_can_t_load_default_data: "Podrazumevano konfigurisanje je nemoguće učitati: %{value}"
+  error_scm_not_found: "Stavka ili ispravka nisu pronađene u spremištu."
+  error_scm_command_failed: "Greška se javila prilikom pokušaja pristupa spremištu: %{value}"
+  error_scm_annotate: "Stavka ne postoji ili ne može biti označena."
+  error_issue_not_found_in_project: 'Problem nije pronađen ili ne pripada ovom projektu.'
+  error_no_tracker_in_project: 'Ni jedno praćenje nije povezano sa ovim projektom. Molimo proverite podešavanja projekta.'
+  error_no_default_issue_status: 'Podrazumevani status problema nije definisan. Molimo proverite vaše konfigurisanje (idite na "Administracija -> Statusi problema").'
+  error_can_not_delete_custom_field: Nemoguće je izbrisati prilagođeno polje
+  error_can_not_delete_tracker: "Ovo praćenje sadrži probleme i ne može biti obrisano."
+  error_can_not_remove_role: "Ova uloga je u upotrebi i ne može biti obrisana."
+  error_can_not_reopen_issue_on_closed_version: 'Problem dodeljen zatvorenoj verziji ne može biti ponovo otvoren'
+  error_can_not_archive_project: Ovaj projekat se ne može arhivirati
+  error_issue_done_ratios_not_updated: "Odnos rešenih problema nije ažuriran."
+  error_workflow_copy_source: 'Molimo odaberite izvorno praćenje ili ulogu'
+  error_workflow_copy_target: 'Molimo odaberite odredišno praćenje i ulogu'
+  error_unable_delete_issue_status: 'Status problema je nemoguće obrisati'
+  error_unable_to_connect: "Povezivanje sa (%{value}) je nemoguće"  
+  warning_attachments_not_saved: "%{count} datoteka ne može biti snimljena."
+  
+  mail_subject_lost_password: "Vaša %{value} lozinka"
+  mail_body_lost_password: 'Za promenu vaše lozinke, kliknite na sledeći link:'
+  mail_subject_register: "Aktivacija vašeg %{value} naloga"
+  mail_body_register: 'Za aktivaciju vašeg naloga, kliknite na sledeći link:'
+  mail_body_account_information_external: "Vaš nalog %{value} možete koristiti za prijavu."
+  mail_body_account_information: Informacije o vašem nalogu
+  mail_subject_account_activation_request: "Zahtev za aktivaciju naloga %{value}"
+  mail_body_account_activation_request: "Novi korisnik (%{value}) je registrovan. Nalog čeka na vaše odobrenje:"
+  mail_subject_reminder: "%{count} problema dospeva narednih %{days} dana"
+  mail_body_reminder: "%{count} problema dodeljenih vama dospeva u narednih %{days} dana:"
+  mail_subject_wiki_content_added: "Wiki stranica '%{id}' je dodata"
+  mail_body_wiki_content_added: "%{author} je dodao wiki stranicu '%{id}'."
+  mail_subject_wiki_content_updated: "Wiki stranica '%{id}' je ažurirana"
+  mail_body_wiki_content_updated: "%{author} je ažurirao wiki stranicu '%{id}'."
+  
+  gui_validation_error: jedna greška
+  gui_validation_error_plural: "%{count} grešaka"
+  
+  field_name: Naziv
+  field_description: Opis
+  field_summary: Rezime
+  field_is_required: Obavezno
+  field_firstname: Ime
+  field_lastname: Prezime
+  field_mail: E-adresa
+  field_filename: Datoteka
+  field_filesize: Veličina
+  field_downloads: Preuzimanja
+  field_author: Autor
+  field_created_on: Kreirano
+  field_updated_on: Ažurirano
+  field_field_format: Format
+  field_is_for_all: Za sve projekte
+  field_possible_values: Moguće vrednosti
+  field_regexp: Regularan izraz
+  field_min_length: Minimalna dužina
+  field_max_length: Maksimalna dužina
+  field_value: Vrednost
+  field_category: Kategorija
+  field_title: Naslov
+  field_project: Projekat
+  field_issue: Problem
+  field_status: Status
+  field_notes: Beleške
+  field_is_closed: Zatvoren problem
+  field_is_default: Podrazumevana vrednost
+  field_tracker: Praćenje
+  field_subject: Predmet
+  field_due_date: Krajnji rok
+  field_assigned_to: Dodeljeno
+  field_priority: Prioritet
+  field_fixed_version: Odredišna verzija
+  field_user: Korisnik
+  field_principal: Glavni
+  field_role: Uloga
+  field_homepage: Početna stranica
+  field_is_public: Javno objavljivanje
+  field_parent: Potprojekat od
+  field_is_in_roadmap: Problemi prikazani u planu rada
+  field_login: Korisničko ime
+  field_mail_notification: Obaveštenja putem e-pošte
+  field_admin: Administrator
+  field_last_login_on: Poslednje povezivanje
+  field_language: Jezik
+  field_effective_date: Datum
+  field_password: Lozinka
+  field_new_password: Nova lozinka
+  field_password_confirmation: Potvrda lozinke
+  field_version: Verzija
+  field_type: Tip
+  field_host: Glavni računar
+  field_port: Port
+  field_account: Korisnički nalog
+  field_base_dn: Bazni DN
+  field_attr_login: Atribut prijavljivanja
+  field_attr_firstname: Atribut imena
+  field_attr_lastname: Atribut prezimena
+  field_attr_mail: Atribut e-adrese
+  field_onthefly: Kreiranje korisnika u toku rada
+  field_start_date: Početak
+  field_done_ratio: "% urađeno"
+  field_auth_source: Režim potvrde identiteta
+  field_hide_mail: Sakrij moju e-adresu
+  field_comments: Komentar
+  field_url: URL
+  field_start_page: Početna stranica
+  field_subproject: Potprojekat
+  field_hours: sati
+  field_activity: Aktivnost
+  field_spent_on: Datum
+  field_identifier: Identifikator
+  field_is_filter: Upotrebi kao filter
+  field_issue_to: Srodni problemi
+  field_delay: Kašnjenje
+  field_assignable: Problem može biti dodeljen ovoj ulozi
+  field_redirect_existing_links: Preusmeri postojeće veze
+  field_estimated_hours: Proteklo vreme
+  field_column_names: Kolone
+  field_time_zone: Vremenska zona
+  field_searchable: Može da se pretražuje
+  field_default_value: Podrazumevana vrednost
+  field_comments_sorting: Prikaži komentare
+  field_parent_title: Matična stranica
+  field_editable: Izmenljivo
+  field_watcher: Posmatrač
+  field_identity_url: OpenID URL
+  field_content: Sadržaj
+  field_group_by: Grupisanje rezultata po
+  field_sharing: Deljenje
+  field_parent_issue: Matični zadatak
+  
+  setting_app_title: Naslov aplikacije
+  setting_app_subtitle: Podnaslov aplikacije
+  setting_welcome_text: Tekst dobrodošlice
+  setting_default_language: Podrazumevani jezik
+  setting_login_required: Obavezna potvrda identiteta
+  setting_self_registration: Samoregistracija
+  setting_attachment_max_size: Maks. veličina priložene datoteke
+  setting_issues_export_limit: Ograničenje izvoza „problema“
+  setting_mail_from: E-adresa pošiljaoca
+  setting_bcc_recipients: Primaoci „Bcc“ kopije
+  setting_plain_text_mail: Poruka sa čistim tekstom (bez HTML-a)
+  setting_host_name: Putanja i naziv glavnog računara
+  setting_text_formatting: Oblikovanje teksta
+  setting_wiki_compression: Kompresija Wiki istorije
+  setting_feeds_limit: Ograničenje sadržaja izvora vesti
+  setting_default_projects_public: Podrazumeva se javno prikazivanje novih projekata
+  setting_autofetch_changesets: Izvršavanje automatskog preuzimanja
+  setting_sys_api_enabled: Omogućavanje WS za upravljanje spremištem
+  setting_commit_ref_keywords: Referenciranje ključnih reči
+  setting_commit_fix_keywords: Popravljanje ključnih reči
+  setting_autologin: Automatska prijava
+  setting_date_format: Format datuma
+  setting_time_format: Format vremena
+  setting_cross_project_issue_relations: Dozvoli povezivanje problema iz unakrsnih projekata
+  setting_issue_list_default_columns: Podrazumevane kolone prikazane na spisku problema
+  setting_repositories_encodings: Kodiranje spremišta
+  setting_emails_footer: Podnožje stranice e-poruke
+  setting_protocol: Protokol
+  setting_per_page_options: Opcije prikaza objekata po stranici
+  setting_user_format: Format prikaza korisnika
+  setting_activity_days_default: Broj dana prikazanih na projektnoj aktivnosti
+  setting_display_subprojects_issues: Prikazuj probleme iz potprojekata na glavnom projektu, ukoliko nije drugačije navedeno
+  setting_enabled_scm: Omogućavanje SCM
+  setting_mail_handler_body_delimiters: "Skraćivanje e-poruke nakon jedne od ovih linija"
+  setting_mail_handler_api_enabled: Omogućavanje WS dolazne e-poruke
+  setting_mail_handler_api_key: API ključ
+  setting_sequential_project_identifiers: Generisanje sekvencijalnog imena projekta
+  setting_gravatar_enabled: Koristi Gravatar korisničke ikone
+  setting_gravatar_default: Podrazumevana Gravatar slika
+  setting_diff_max_lines_displayed: Maks. broj prikazanih različitih linija
+  setting_file_max_size_displayed: Maks. veličina tekst. datoteka prikazanih umetnuto
+  setting_repository_log_display_limit: Maks. broj revizija prikazanih u datoteci za evidenciju
+  setting_openid: Dozvoli OpenID prijavu i registraciju
+  setting_password_min_length: Minimalna dužina lozinke
+  setting_new_project_user_role_id: Kreatoru projekta (koji nije administrator) dodeljuje je uloga
+  setting_default_projects_modules: Podrazumevano omogućeni moduli za nove projekte
+  setting_issue_done_ratio: Izračunaj odnos rešenih problema
+  setting_issue_done_ratio_issue_field: koristeći polje problema
+  setting_issue_done_ratio_issue_status: koristeći status problema
+  setting_start_of_week: Prvi dan u sedmici
+  setting_rest_api_enabled: Omogući REST web usluge
+  setting_cache_formatted_text: Keširanje obrađenog teksta
+  
+  permission_add_project: Kreiranje projekta
+  permission_add_subprojects: Kreiranje potpojekta
+  permission_edit_project: Izmena projekata
+  permission_select_project_modules: Odabiranje modula projekta
+  permission_manage_members: Upravljanje članovima
+  permission_manage_project_activities: Upravljanje projektnim aktivnostima
+  permission_manage_versions: Upravljanje verzijama
+  permission_manage_categories: Upravljanje kategorijama problema
+  permission_view_issues: Pregled problema
+  permission_add_issues: Dodavanje problema
+  permission_edit_issues: Izmena problema
+  permission_manage_issue_relations: Upravljanje vezama između problema
+  permission_add_issue_notes: Dodavanje beleški
+  permission_edit_issue_notes: Izmena beleški
+  permission_edit_own_issue_notes: Izmena sopstvenih beleški
+  permission_move_issues: Pomeranje problema
+  permission_delete_issues: Brisanje problema
+  permission_manage_public_queries: Upravljanje javnim upitima
+  permission_save_queries: Snimanje upita
+  permission_view_gantt: Pregledanje Gantovog dijagrama
+  permission_view_calendar: Pregledanje kalendara
+  permission_view_issue_watchers: Pregledanje spiska posmatrača
+  permission_add_issue_watchers: Dodavanje posmatrača
+  permission_delete_issue_watchers: Brisanje posmatrača
+  permission_log_time: Beleženje utrošenog vremena
+  permission_view_time_entries: Pregledanje utrošenog vremena
+  permission_edit_time_entries: Izmena utrošenog vremena
+  permission_edit_own_time_entries: Izmena sopstvenog utrošenog vremena
+  permission_manage_news: Upravljanje vestima
+  permission_comment_news: Komentarisanje vesti
+  permission_manage_documents: Upravljanje dokumentima
+  permission_view_documents: Pregledanje dokumenata
+  permission_manage_files: Upravljanje datotekama
+  permission_view_files: Pregledanje datoteka
+  permission_manage_wiki: Upravljanje wiki stranicama
+  permission_rename_wiki_pages: Promena imena wiki stranicama
+  permission_delete_wiki_pages: Brisanje wiki stranica
+  permission_view_wiki_pages: Pregledanje wiki stranica
+  permission_view_wiki_edits: Pregledanje wiki istorije
+  permission_edit_wiki_pages: Izmena wiki stranica
+  permission_delete_wiki_pages_attachments: Brisanje priloženih datoteka
+  permission_protect_wiki_pages: Zaštita wiki stranica
+  permission_manage_repository: Upravljanje spremištem
+  permission_browse_repository: Pregledanje spremišta
+  permission_view_changesets: Pregledanje skupa promena
+  permission_commit_access: Potvrda pristupa
+  permission_manage_boards: Upravljanje forumima
+  permission_view_messages: Pregledanje poruka
+  permission_add_messages: Slanje poruka
+  permission_edit_messages: Izmena poruka
+  permission_edit_own_messages: Izmena sopstvenih poruka
+  permission_delete_messages: Brisanje poruka
+  permission_delete_own_messages: Brisanje sopstvenih poruka
+  permission_export_wiki_pages: Izvoz wiki stranica
+  permission_manage_subtasks: Upravljanje podzadacima
+  
+  project_module_issue_tracking: Praćenje problema
+  project_module_time_tracking: Praćenje vremena
+  project_module_news: Vesti
+  project_module_documents: Dokumenti
+  project_module_files: Datoteke
+  project_module_wiki: Wiki
+  project_module_repository: Spremište
+  project_module_boards: Forumi
+  
+  label_user: Korisnik
+  label_user_plural: Korisnici
+  label_user_new: Novi korisnik
+  label_user_anonymous: Anoniman
+  label_project: Projekat
+  label_project_new: Novi projekat
+  label_project_plural: Projekti
+  label_x_projects:
+    zero:  nema projekata
+    one:   jedan projekat
+    other: "%{count} projekata"
+  label_project_all: Svi projekti
+  label_project_latest: Poslednji projekti
+  label_issue: Problem
+  label_issue_new: Novi problem
+  label_issue_plural: Problemi
+  label_issue_view_all: Prikaz svih problema
+  label_issues_by: "Problemi (%{value})"
+  label_issue_added: Problem je dodat
+  label_issue_updated: Problem je ažuriran
+  label_document: Dokument
+  label_document_new: Novi dokument
+  label_document_plural: Dokumenti
+  label_document_added: Dokument je dodat
+  label_role: Uloga
+  label_role_plural: Uloge
+  label_role_new: Nova uloga
+  label_role_and_permissions: Uloge i dozvole
+  label_member: Član
+  label_member_new: Novi član
+  label_member_plural: Članovi
+  label_tracker: Praćenje
+  label_tracker_plural: Praćenja
+  label_tracker_new: Novo praćenje
+  label_workflow: Tok posla
+  label_issue_status: Status problema
+  label_issue_status_plural: Statusi problema
+  label_issue_status_new: Novi status
+  label_issue_category: Kategorija problema
+  label_issue_category_plural: Kategorije problema
+  label_issue_category_new: Nova kategorija
+  label_custom_field: Prilagođeno polje
+  label_custom_field_plural: Prilagođena polja
+  label_custom_field_new: Novo prilagođeno polje
+  label_enumerations: Nabrojiva lista
+  label_enumeration_new: Nova vrednost
+  label_information: Informacija
+  label_information_plural: Informacije
+  label_please_login: Molimo, prijavite se
+  label_register: Registracija
+  label_login_with_open_id_option: ili prijava sa OpenID
+  label_password_lost: Izgubljena lozinka
+  label_home: Početak
+  label_home_heading: Početak
+  label_my_page: Moja stranica
+  label_my_account: Moj nalog
+  label_my_projects: Moji projekti
+  label_my_page_block: My page block
+  label_administration: Administracija
+  label_login: Prijava
+  label_logout: Odjava
+  label_help: Pomoć
+  label_reported_issues: Prijavljeni problemi
+  label_assigned_to_me_issues: Problemi dodeljeni meni
+  label_last_login: Poslednje povezivanje
+  label_registered_on: Registrovan
+  label_activity: Aktivnost
+  label_overall_activity: Celokupna aktivnost
+  label_user_activity: "Aktivnost korisnika %{value}"
+  label_new: Novo
+  label_logged_as: Prijavljeni ste kao
+  label_environment: Okruženje
+  label_authentication: Potvrda identiteta
+  label_auth_source: Režim potvrde identiteta
+  label_auth_source_new: Novi režim potvrde identiteta
+  label_auth_source_plural: Režimi potvrde identiteta
+  label_subproject_plural: Potprojekti
+  label_subproject_new: Novi potprojekat
+  label_and_its_subprojects: "%{value} i njegovi potprojekti"
+  label_min_max_length: Min. - Maks. dužina
+  label_list: Spisak
+  label_date: Datum
+  label_integer: Ceo broj
+  label_float: Sa pokretnim zarezom
+  label_boolean: Logički operator
+  label_string: Tekst
+  label_text: Dugi tekst
+  label_attribute: Osobina
+  label_attribute_plural: Osobine
+  label_download: "%{count} preuzimanje"
+  label_download_plural: "%{count} preuzimanja"
+  label_no_data: Nema podataka za prikazivanje
+  label_change_status: Promena statusa
+  label_history: Istorija
+  label_attachment: Datoteka
+  label_attachment_new: Nova datoteka
+  label_attachment_delete: Brisanje datoteke
+  label_attachment_plural: Datoteke
+  label_file_added: Datoteka je dodata
+  label_report: Izveštaj
+  label_report_plural: Izveštaji
+  label_news: Vesti
+  label_news_new: Dodavanje vesti
+  label_news_plural: Vesti
+  label_news_latest: Poslednje vesti
+  label_news_view_all: Prikaz svih vesti
+  label_news_added: Vesti su dodate
+  label_settings: Podešavanja
+  label_overview: Pregled
+  label_version: Verzija
+  label_version_new: Nova verzija
+  label_version_plural: Verzije
+  label_close_versions: Zatvori završene verzije
+  label_confirmation: Potvrda
+  label_export_to: 'Takođe dostupno i u varijanti:'
+  label_read: Čitanje...
+  label_public_projects: Javni projekti
+  label_open_issues: otvoren
+  label_open_issues_plural: otvorenih
+  label_closed_issues: zatvoren
+  label_closed_issues_plural: zatvorenih
+  label_x_open_issues_abbr_on_total:
+    zero:  0 otvorenih / %{total}
+    one:   1 otvoren / %{total}
+    other: "%{count} otvorenih / %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 otvorenih
+    one:   1 otvoren
+    other: "%{count} otvorenih"
+  label_x_closed_issues_abbr:
+    zero:  0 zatvorenih
+    one:   1 zatvoren
+    other: "%{count} zatvorenih"
+  label_total: Ukupno
+  label_permissions: Dozvole
+  label_current_status: Trenutni status
+  label_new_statuses_allowed: Novi statusi dozvoljeni
+  label_all: svi
+  label_none: nijedan
+  label_nobody: nikome
+  label_next: Sledeće
+  label_previous: Prethodno
+  label_used_by: Koristio
+  label_details: Detalji
+  label_add_note: Dodaj belešku
+  label_per_page: Po strani
+  label_calendar: Kalendar
+  label_months_from: meseci od
+  label_gantt: Gantov dijagram
+  label_internal: Unutrašnji
+  label_last_changes: "poslednjih %{count} promena"
+  label_change_view_all: Prikaži sve promene
+  label_personalize_page: Personalizuj ovu stranu
+  label_comment: Komentar
+  label_comment_plural: Komentari
+  label_x_comments:
+    zero: bez komentara
+    one: jedan komentar
+    other: "%{count} komentara"
+  label_comment_add: Dodaj komentar
+  label_comment_added: Komentar dodat
+  label_comment_delete: Obriši komentare
+  label_query: Prilagođen upit
+  label_query_plural: Prilagođeni upiti
+  label_query_new: Novi upit
+  label_filter_add: Dodavanje filtera
+  label_filter_plural: Filteri
+  label_equals: je
+  label_not_equals: nije
+  label_in_less_than: manje od
+  label_in_more_than: više od
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: u
+  label_today: danas
+  label_all_time: sve vreme
+  label_yesterday: juče
+  label_this_week: ove sedmice
+  label_last_week: poslednje sedmice
+  label_last_n_days: "poslednjih %{count} dana"
+  label_this_month: ovog meseca
+  label_last_month: poslednjeg meseca
+  label_this_year: ove godine
+  label_date_range: Vremenski period
+  label_less_than_ago: pre manje od nekoliko dana
+  label_more_than_ago: pre više od nekoliko dana
+  label_ago: pre nekoliko dana
+  label_contains: sadrži
+  label_not_contains: ne sadrži
+  label_day_plural: dana
+  label_repository: Spremište
+  label_repository_plural: Spremišta
+  label_browse: Pregledanje
+  label_modification: "%{count} promena"
+  label_modification_plural: "%{count} promena"
+  label_branch: Grana
+  label_tag: Oznaka
+  label_revision: Revizija
+  label_revision_plural: Revizije
+  label_revision_id: "Revizija %{value}"
+  label_associated_revisions: Pridružene revizije
+  label_added: dodato
+  label_modified: promenjeno
+  label_copied: kopirano
+  label_renamed: preimenovano
+  label_deleted: izbrisano
+  label_latest_revision: Poslednja revizija
+  label_latest_revision_plural: Poslednje revizije
+  label_view_revisions: Pregled revizija
+  label_view_all_revisions: Pregled svih revizija
+  label_max_size: Maksimalna veličina
+  label_sort_highest: Premeštanje na vrh
+  label_sort_higher: Premeštanje na gore
+  label_sort_lower: Premeštanje na dole
+  label_sort_lowest: Premeštanje na dno
+  label_roadmap: Plan rada
+  label_roadmap_due_in: "Dospeva %{value}"
+  label_roadmap_overdue: "%{value} najkasnije"
+  label_roadmap_no_issues: Nema problema za ovu verziju
+  label_search: Pretraga
+  label_result_plural: Rezultati
+  label_all_words: Sve reči
+  label_wiki: Wiki
+  label_wiki_edit: Wiki izmena
+  label_wiki_edit_plural: Wiki izmene
+  label_wiki_page: Wiki stranica
+  label_wiki_page_plural: Wiki stranice
+  label_index_by_title: Indeksiranje po naslovu
+  label_index_by_date: Indeksiranje po datumu
+  label_current_version: Trenutna verzija
+  label_preview: Pregled
+  label_feed_plural: Izvori vesti
+  label_changes_details: Detalji svih promena
+  label_issue_tracking: Praćenje problema
+  label_spent_time: Utrošeno vreme
+  label_overall_spent_time: Celokupno utrošeno vreme
+  label_f_hour: "%{value} sat"
+  label_f_hour_plural: "%{value} sati"
+  label_time_tracking: Praćenje vremena
+  label_change_plural: Promene
+  label_statistics: Statistika
+  label_commits_per_month: Izvršenja mesečno
+  label_commits_per_author: Izvršenja po autoru
+  label_view_diff: Pogledaj razlike
+  label_diff_inline: unutra
+  label_diff_side_by_side: uporedo
+  label_options: Opcije
+  label_copy_workflow_from: Kopiranje toka posla od
+  label_permissions_report: Izveštaj o dozvolama
+  label_watched_issues: Posmatrani problemi
+  label_related_issues: Srodni problemi
+  label_applied_status: Primenjeni statusi
+  label_loading: Učitavanje...
+  label_relation_new: Nova relacija
+  label_relation_delete: Brisanje relacije
+  label_relates_to: srodnih sa
+  label_duplicates: dupliranih
+  label_duplicated_by: dupliranih od
+  label_blocks: odbijenih
+  label_blocked_by: odbijenih od
+  label_precedes: prethodi
+  label_follows: praćenih
+  label_end_to_start: od kraja do početka
+  label_end_to_end: od kraja do kraja
+  label_start_to_start: od početka do početka
+  label_start_to_end: od početka do kraja
+  label_stay_logged_in: Ostanite prijavljeni
+  label_disabled: onemogućeno
+  label_show_completed_versions: Prikazivanje završene verzije
+  label_me: meni
+  label_board: Forum
+  label_board_new: Novi forum
+  label_board_plural: Forumi
+  label_board_locked: Zaključana
+  label_board_sticky: Lepljiva
+  label_topic_plural: Teme
+  label_message_plural: Poruke
+  label_message_last: Poslednja poruka
+  label_message_new: Nova poruka
+  label_message_posted: Poruka je dodata
+  label_reply_plural: Odgovori
+  label_send_information: Pošalji korisniku detalje naloga
+  label_year: Godina
+  label_month: Mesec
+  label_week: Sedmica
+  label_date_from: Šalje
+  label_date_to: Prima
+  label_language_based: Bazirano na jeziku korisnika
+  label_sort_by: "Sortirano po %{value}"
+  label_send_test_email: Slanje probne e-poruke
+  label_feeds_access_key: RSS pristupni ključ
+  label_missing_feeds_access_key: RSS pristupni ključ nedostaje
+  label_feeds_access_key_created_on: "RSS pristupni ključ je napravljen pre %{value}"
+  label_module_plural: Moduli
+  label_added_time_by: "Dodao %{author} pre %{age}"
+  label_updated_time_by: "Ažurirao %{author} pre %{age}"
+  label_updated_time: "Ažurirano pre %{value}"
+  label_jump_to_a_project: Skok na projekat...
+  label_file_plural: Datoteke
+  label_changeset_plural: Skupovi promena
+  label_default_columns: Podrazumevane kolone
+  label_no_change_option: (Bez promena)
+  label_bulk_edit_selected_issues: Grupna izmena odabranih problema
+  label_theme: Tema
+  label_default: Podrazumevano
+  label_search_titles_only: Pretražuj samo naslove
+  label_user_mail_option_all: "Za bilo koji događaj na svim mojim projektima"
+  label_user_mail_option_selected: "Za bilo koji događaj na samo odabranim projektima..."
+  label_user_mail_no_self_notified: "Ne želim biti obaveštavan za promene koje sam pravim"
+  label_registration_activation_by_email: aktivacija naloga putem e-poruke
+  label_registration_manual_activation: ručna aktivacija naloga
+  label_registration_automatic_activation: automatska aktivacija naloga
+  label_display_per_page: "Broj stavki po stranici: %{value}"
+  label_age: Starost
+  label_change_properties: Promeni svojstva
+  label_general: Opšti
+  label_more: Više
+  label_scm: SCM
+  label_plugins: Dodatne komponente
+  label_ldap_authentication: LDAP potvrda identiteta
+  label_downloads_abbr: D/L
+  label_optional_description: Opciono opis
+  label_add_another_file: Dodaj još jednu datoteku
+  label_preferences: Podešavanja
+  label_chronological_order: po hronološkom redosledu
+  label_reverse_chronological_order: po obrnutom hronološkom redosledu
+  label_planning: Planiranje
+  label_incoming_emails: Dolazne e-poruke
+  label_generate_key: Generisanje ključa
+  label_issue_watchers: Posmatrači
+  label_example: Primer
+  label_display: Prikaz
+  label_sort: Sortiranje
+  label_ascending: Rastući niz
+  label_descending: Opadajući niz
+  label_date_from_to: Od %{start} do %{end}
+  label_wiki_content_added: Wiki stranica je dodata
+  label_wiki_content_updated: Wiki stranica je ažurirana
+  label_group: Grupa
+  label_group_plural: Grupe
+  label_group_new: Nova grupa
+  label_time_entry_plural: Utrošeno vreme
+  label_version_sharing_none: Nije deljeno
+  label_version_sharing_descendants: Sa potprojektima
+  label_version_sharing_hierarchy: Sa hijerarhijom projekta
+  label_version_sharing_tree: Sa stablom projekta
+  label_version_sharing_system: Sa svim projektima
+  label_update_issue_done_ratios: Ažuriraj odnos rešenih problema
+  label_copy_source: Izvor
+  label_copy_target: Odredište
+  label_copy_same_as_target: Isto kao odredište
+  label_display_used_statuses_only: Prikazuj statuse korišćene samo od strane ovog praćenja
+  label_api_access_key: API pristupni ključ
+  label_missing_api_access_key: Nedostaje API pristupni ključ
+  label_api_access_key_created_on: "API pristupni ključ je kreiran pre %{value}"
+  label_profile: Profil
+  label_subtask_plural: Podzadatak
+  label_project_copy_notifications: Pošalji e-poruku sa obaveštenjem prilikom kopiranja projekta 
+  
+  button_login: Prijava
+  button_submit: Pošalji
+  button_save: Snimi
+  button_check_all: Uključi sve
+  button_uncheck_all: Isključi sve
+  button_delete: Izbriši
+  button_create: Kreiraj
+  button_create_and_continue: Kreiraj i nastavi
+  button_test: Test
+  button_edit: Izmeni
+  button_add: Dodaj
+  button_change: Promeni
+  button_apply: Primeni
+  button_clear: Obriši
+  button_lock: Zaključaj
+  button_unlock: Otključaj
+  button_download: Preuzmi
+  button_list: Spisak
+  button_view: Prikaži
+  button_move: Pomeri
+  button_move_and_follow: Pomeri i prati
+  button_back: Nazad
+  button_cancel: Poništi
+  button_activate: Aktiviraj
+  button_sort: Sortiraj
+  button_log_time: Evidentiraj vreme
+  button_rollback: Povratak na ovu verziju
+  button_watch: Prati
+  button_unwatch: Ne prati više
+  button_reply: Odgovori
+  button_archive: Arhiviraj
+  button_unarchive: Vrati iz arhive
+  button_reset: Poništi
+  button_rename: Preimenuj
+  button_change_password: Promeni lozinku
+  button_copy: Kopiraj
+  button_copy_and_follow: Kopiraj i prati
+  button_annotate: Pribeleži
+  button_update: Ažuriraj
+  button_configure: Podesi
+  button_quote: Pod navodnicima
+  button_duplicate: Dupliraj
+  button_show: Prikaži
+  
+  status_active: aktivni
+  status_registered: registrovani
+  status_locked: zaključani
+  
+  version_status_open: otvoren
+  version_status_locked: zaključan
+  version_status_closed: zatvoren
+
+  field_active: Aktivan
+  
+  text_select_mail_notifications: Odaberi akcije za koje će obaveštenje biti poslato putem e-pošte.
+  text_regexp_info: npr. ^[A-Z0-9]+$
+  text_min_max_length_info: 0 znači bez ograničenja
+  text_project_destroy_confirmation: Jeste li sigurni da želite da izbrišete ovaj projekat i sve pripadajuće podatke?
+  text_subprojects_destroy_warning: "Potprojekti: %{value} će takođe biti izbrisan."
+  text_workflow_edit: Odaberite ulogu i praćenje za izmenu toka posla
+  text_are_you_sure: Jeste li sigurni?
+  text_journal_changed: "%{label} promenjen od %{old} u %{new}"
+  text_journal_set_to: "%{label} postavljen u %{value}"
+  text_journal_deleted: "%{label} izbrisano (%{old})"
+  text_journal_added: "%{label} %{value} dodato"
+  text_tip_issue_begin_day: zadatak počinje ovog dana
+  text_tip_issue_end_day: zadatak se završava ovog dana
+  text_tip_issue_begin_end_day: zadatak počinje i završava ovog dana
+  text_project_identifier_info: 'Dozvoljena su samo mala slova (a-š), brojevi i crtice.<br />Jednom snimljen identifikator više se ne može promeniti.'
+  text_caracters_maximum: "Najviše %{count} znak(ova)."
+  text_caracters_minimum: "Broj znakova mora biti najmanje %{count}."
+  text_length_between: "Broj znakova mora biti između %{min} i %{max}."
+  text_tracker_no_workflow: Ovo praćenje nema definisan tok posla
+  text_unallowed_characters: Nedozvoljeni znakovi
+  text_comma_separated: Dozvoljene su višestruke vrednosti (odvojene zarezom).
+  text_line_separated: Dozvoljene su višestruke vrednosti (jedan red za svaku vrednost).
+  text_issues_ref_in_commit_messages: Referenciranje i popravljanje problema u izvršnim porukama
+  text_issue_added: "%{author} je prijavio problem %{id}."
+  text_issue_updated: "%{author} je ažurirao problem %{id}."
+  text_wiki_destroy_confirmation: Jeste li sigurni da želite da obrišete wiki i sav sadržaj?
+  text_issue_category_destroy_question: "Nekoliko problema (%{count}) je dodeljeno ovoj kategoriji. Šta želite da uradite?"
+  text_issue_category_destroy_assignments: Ukloni dodeljene kategorije
+  text_issue_category_reassign_to: Dodeli ponovo probleme ovoj kategoriji
+  text_user_mail_option: "Za neizabrane projekte, dobićete samo obaveštenje o stvarima koje pratite ili ste uključeni (npr. problemi čiji ste vi autor ili zastupnik)."
+  text_no_configuration_data: "Uloge, praćenja, statusi problema i toka posla još uvek nisu podešeni.\nPreporučljivo je da učitate podrazumevano konfigurisanje. Izmena je moguća nakon prvog učitavanja."
+  text_load_default_configuration: Učitaj podrazumevano konfigurisanje
+  text_status_changed_by_changeset: "Primenjeno u skupu sa promenama %{value}."
+  text_issues_destroy_confirmation: 'Jeste li sigurni da želite da izbrišete odabrane probleme?'
+  text_select_project_modules: 'Odaberite module koje želite omogućiti za ovaj projekat:'
+  text_default_administrator_account_changed: Podrazumevani administratorski nalog je promenjen
+  text_file_repository_writable: Fascikla priloženih datoteka je upisiva
+  text_plugin_assets_writable: Fascikla elemenata dodatnih komponenti je upisiva
+  text_rmagick_available: RMagick je dostupan (opciono)
+  text_destroy_time_entries_question: "%{hours} sati je prijavljeno za ovaj problem koji želite izbrisati. Šta želite da uradite?"
+  text_destroy_time_entries: Izbriši prijavljene sate
+  text_assign_time_entries_to_project: Dodeli prijavljene sate projektu
+  text_reassign_time_entries: 'Dodeli ponovo prijavljene sate ovom problemu:'
+  text_user_wrote: "%{value} je napisao:"
+  text_enumeration_destroy_question: "%{count} objekat(a) je dodeljeno ovoj vrednosti."
+  text_enumeration_category_reassign_to: 'Dodeli ih ponovo ovoj vrednosti:'
+  text_email_delivery_not_configured: "Isporuka e-poruka nije konfigurisana i obaveštenja su onemogućena.\nPodesite vaš SMTP server u config/configuration.yml i pokrenite ponovo aplikaciju za njihovo omogućavanje."
+  text_repository_usernames_mapping: "Odaberite ili ažurirajte Redmine korisnike mapiranjem svakog korisničkog imena pronađenog u evidenciji spremišta.\nKorisnici sa istim Redmine imenom i imenom spremišta ili e-adresom su automatski mapirani."
+  text_diff_truncated: '... Ova razlika je isečena jer je dostignuta maksimalna veličina prikaza.'
+  text_custom_field_possible_values_info: 'Jedan red za svaku vrednost'
+  text_wiki_page_destroy_question: "Ova stranica ima %{descendants} podređenih stranica i podstranica. Šta želite da uradite?"
+  text_wiki_page_nullify_children: "Zadrži podređene stranice kao korene stranice"
+  text_wiki_page_destroy_children: "Izbriši podređene stranice i sve njihove podstranice"
+  text_wiki_page_reassign_children: "Dodeli ponovo podređene stranice ovoj matičnoj stranici"
+  text_own_membership_delete_confirmation: "Nakon uklanjanja pojedinih ili svih vaših dozvola nećete više moći da uređujete ovaj projekat.\nŽelite li da nastavite?"
+  text_zoom_in: Uvećaj
+  text_zoom_out: Umanji
+  
+  default_role_manager: Menadžer
+  default_role_developer: Programer
+  default_role_reporter: Izveštač
+  default_tracker_bug: Greška
+  default_tracker_feature: Funkcionalnost
+  default_tracker_support: Podrška
+  default_issue_status_new: Novo
+  default_issue_status_in_progress: U toku
+  default_issue_status_resolved: Rešeno
+  default_issue_status_feedback: Povratna informacija
+  default_issue_status_closed: Zatvoreno
+  default_issue_status_rejected: Odbijeno
+  default_doc_category_user: Korisnička dokumentacija
+  default_doc_category_tech: Tehnička dokumentacija
+  default_priority_low: Nizak
+  default_priority_normal: Normalan
+  default_priority_high: Visok
+  default_priority_urgent: Hitno
+  default_priority_immediate: Neposredno
+  default_activity_design: Dizajn
+  default_activity_development: Razvoj
+  
+  enumeration_issue_priorities: Prioriteti problema
+  enumeration_doc_categories: Kategorije dokumenta
+  enumeration_activities: Aktivnosti (praćenje vremena)
+  enumeration_system_activity: Sistemska aktivnost
+  
+  field_time_entries: Vreme evidencije
+  project_module_gantt: Gantov dijagram
+  project_module_calendar: Kalendar
+  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
+  text_are_you_sure_with_children: Delete issue and all child issues?
+  field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
+  setting_commit_logtime_activity_id: Activity for logged time
+  text_time_logged_by_changeset: Applied in changeset %{value}.
+  setting_commit_logtime_enabled: Enable time logging
+  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
+  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Kodiranje izvršnih poruka
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/sr.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/sr.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -18,7 +18,10 @@
     month_names: [~, јануар, фебруар, март, април, мај, јун, јул, август, септембар, октобар, новембар, децембар]
     abbr_month_names: [~, јан, феб, мар, апр, мај, јун, јул, авг, сеп, окт, нов, дец]
     # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -266,7 +269,7 @@
   field_attr_mail: Атрибут е-адресе
   field_onthefly: Креирање корисника у току рада
   field_start_date: Почетак
-  field_done_ratio: % урађено
+  field_done_ratio: "% урађено"
   field_auth_source: Режим потврде идентитета
   field_hide_mail: Сакриј моју е-адресу
   field_comments: Коментар
@@ -323,7 +326,6 @@
   setting_cross_project_issue_relations: Дозволи повезивање проблема из унакрсних пројеката
   setting_issue_list_default_columns: Подразумеване колоне приказане на списку проблема
   setting_repositories_encodings: Кодирање спремишта
-  setting_commit_logs_encoding: Кодирање извршних порука
   setting_emails_footer: Подножје странице е-поруке
   setting_protocol: Протокол
   setting_per_page_options: Опције приказа објеката по страници
@@ -942,3 +944,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Кодирање извршних порука
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/sv.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/sv.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -130,7 +130,7 @@
         greater_than_start_date: "måste vara senare än startdatumet"
         not_same_project: "tillhör inte samma projekt"
         circular_dependency: "Denna relation skulle skapa ett cirkulärt beroende"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "Ett ärende kan inte länkas till ett av dess underärenden"
 
   direction: ltr
   date:
@@ -149,7 +149,10 @@
     month_names: [~, januari, februari, mars, april, maj, juni, juli, augusti, september, oktober, november, december]
     abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, aug, sep, okt, nov, dec]
     # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -176,7 +179,7 @@
   general_csv_separator: ','
   general_csv_decimal_separator: '.'
   general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '1'
   
   notice_account_updated: Kontot har uppdaterats
@@ -207,7 +210,7 @@
   notice_default_data_loaded: Standardkonfiguration inläst.
   notice_unable_delete_version: Denna version var inte möjlig att ta bort.
   notice_unable_delete_time_entry: Tidloggning kunde inte tas bort.
-  notice_issue_done_ratios_updated: % klart uppdaterade.
+  notice_issue_done_ratios_updated: "% klart uppdaterade."
   notice_gantt_chart_truncated: "Schemat förminskades eftersom det överskrider det maximala antalet aktiviteter som får visas (%{max})"
   
   error_can_t_load_default_data: "Standardkonfiguration gick inte att läsa in: %{value}"
@@ -310,7 +313,7 @@
   field_attr_mail: Mailattribut
   field_onthefly: Skapa användare on-the-fly
   field_start_date: Startdatum
-  field_done_ratio: % Klart
+  field_done_ratio: "% Klart"
   field_auth_source: Autentiseringsläge
   field_hide_mail: Dölj min mailadress
   field_comments: Kommentar
@@ -345,6 +348,9 @@
   field_assigned_to_role: "Tilldelad användares roll"
   field_text: Textfält
   field_visible: Synlig
+  field_warn_on_leaving_unsaved: Varna om jag lämnar en sida med osparad text
+  field_issues_visibility: Ärendesynlighet
+  field_is_private: Privat
   
   setting_app_title: Applikationsrubrik
   setting_app_subtitle: Applikationsunderrubrik
@@ -372,7 +378,6 @@
   setting_cross_project_issue_relations: Tillåt ärenderelationer mellan projekt
   setting_issue_list_default_columns: Standardkolumner i ärendelistan
   setting_repositories_encodings: Teckenuppsättningar för versionsarkiv
-  setting_commit_logs_encoding: Teckenuppsättning för commit-meddelanden
   setting_emails_header: Mail-header
   setting_emails_footer: Signatur
   setting_protocol: Protokoll
@@ -417,6 +422,8 @@
   permission_edit_issues: Ändra ärenden
   permission_view_issues: Visa ärenden
   permission_manage_issue_relations: Hantera ärenderelationer
+  permission_set_issues_private: Sätta ärenden publika eller privata
+  permission_set_own_issues_private: Sätta egna ärenden publika eller privata
   permission_add_issue_notes: Lägga till ärendenotering
   permission_edit_issue_notes: Ändra ärendenoteringar
   permission_edit_own_issue_notes: Ändra egna ärendenoteringar
@@ -492,6 +499,9 @@
   label_issues_by: "Ärenden %{value}"
   label_issue_added: Ärende tillagt
   label_issue_updated: Ärende uppdaterat
+  label_issue_note_added: Anteckning tillagd
+  label_issue_status_updated: Status uppdaterad
+  label_issue_priority_updated: Prioritet uppdaterad
   label_document: Dokument
   label_document_new: Nytt dokument
   label_document_plural: Dokument
@@ -500,6 +510,8 @@
   label_role_plural: Roller
   label_role_new: Ny roll
   label_role_and_permissions: Roller och behörigheter
+  label_role_anonymous: Anonym
+  label_role_non_member: Icke-medlem
   label_member: Medlem
   label_member_new: Ny medlem
   label_member_plural: Medlemmar
@@ -579,6 +591,7 @@
   label_news_latest: Senaste nyheterna
   label_news_view_all: Visa alla nyheter
   label_news_added: Nyhet tillagd
+  label_news_comment_added: Kommentar tillagd till en nyhet
   label_settings: Inställningar
   label_overview: Översikt
   label_version: Version
@@ -637,6 +650,7 @@
   label_query: Användardefinerad fråga
   label_query_plural: Användardefinerade frågor
   label_query_new: Ny fråga
+  label_my_queries: Mina egna frågor
   label_filter_add: Lägg till filter
   label_filter_plural: Filter
   label_equals: är
@@ -775,6 +789,7 @@
   label_default_columns: Standardkolumner
   label_no_change_option: (Ingen ändring)
   label_bulk_edit_selected_issues: Gemensam ändring av markerade ärenden
+  label_bulk_edit_selected_time_entries: Gruppredigera valda tidloggningar
   label_theme: Tema
   label_default: Standard
   label_search_titles_only: Sök endast i titlar
@@ -836,12 +851,19 @@
   label_project_copy_notifications: Skicka mailnotifieringar när projektet kopieras
   label_principal_search: "Sök efter användare eller grupp:"
   label_user_search: "Sök efter användare:"
+  label_additional_workflow_transitions_for_author: Ytterligare övergångar tillåtna när användaren är den som skapat ärendet
+  label_additional_workflow_transitions_for_assignee: Ytterligare övergångar tillåtna när användaren är den som tilldelats ärendet
+  label_issues_visibility_all: Alla ärenden
+  label_issues_visibility_public: Alla icke-privata ärenden
+  label_issues_visibility_own: Ärenden skapade av eller tilldelade till användaren
   
   button_login: Logga in
   button_submit: Skicka
   button_save: Spara
   button_check_all: Markera alla
   button_uncheck_all: Avmarkera alla
+  button_collapse_all: Kollapsa alla
+  button_expand_all: Expandera alla
   button_delete: Ta bort
   button_create: Skapa
   button_create_and_continue: Skapa och fortsätt
@@ -901,6 +923,7 @@
   text_are_you_sure: Är du säker ?
   text_are_you_sure_with_children: Ta bort ärende och alla underärenden?
   text_journal_changed: "%{label} ändrad från %{old} till %{new}"
+  text_journal_changed_no_detail: "%{label} uppdaterad"
   text_journal_set_to: "%{label} satt till %{value}"
   text_journal_deleted: "%{label} borttagen (%{old})"
   text_journal_added: "%{label} %{value} tillagd"
@@ -928,6 +951,8 @@
   text_status_changed_by_changeset: "Tilldelad i changeset %{value}."
   text_time_logged_by_changeset: "Tilldelad i changeset %{value}."
   text_issues_destroy_confirmation: 'Är du säker på att du vill radera markerade ärende(n) ?'
+  text_issues_destroy_descendants_confirmation: Detta kommer även ta bort %{count} underaktivitet(er).
+  text_time_entries_destroy_confirmation: Är du säker på att du vill ta bort valda tidloggningar?
   text_select_project_modules: 'Välj vilka moduler som ska vara aktiva för projektet:'
   text_default_administrator_account_changed: Standardadministratörens konto ändrat
   text_file_repository_writable: Arkivet för bifogade filer är skrivbart
@@ -951,6 +976,7 @@
   text_own_membership_delete_confirmation: "Några av, eller alla, dina behörigheter kommer att tas bort och du kanske inte längre kommer kunna göra ändringar i det här projektet.\nVill du verkligen fortsätta?"
   text_zoom_out: Zooma ut
   text_zoom_in: Zooma in
+  text_warn_on_leaving_unsaved: Nuvarande sida innehåller osparad text som kommer försvinna om du lämnar sidan.
   
   default_role_manager: Projektledare
   default_role_developer: Utvecklare
@@ -978,7 +1004,17 @@
   enumeration_doc_categories: Dokumentkategorier
   enumeration_activities: Aktiviteter (tidsuppföljning)
   enumeration_system_activity: Systemaktivitet
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  field_commit_logs_encoding: Teckenuppsättning för commit-meddelanden
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/th.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/th.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -16,7 +16,10 @@
     month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -238,7 +241,7 @@
   field_attr_mail: อีเมล์ attribute
   field_onthefly: สร้างผู้ใช้ทันที
   field_start_date: เริ่ม
-  field_done_ratio: % สำเร็จ
+  field_done_ratio: "% สำเร็จ"
   field_auth_source: วิธีการยืนยันตัวตน
   field_hide_mail: ซ่อนอีเมล์ของฉัน
   field_comments: ความเห็น
@@ -730,7 +733,6 @@
   text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   field_parent_title: Parent page
   label_issue_watchers: Watchers
-  setting_commit_logs_encoding: Commit messages encoding
   button_quote: Quote
   setting_sequential_project_identifiers: Generate sequential project identifiers
   notice_unable_delete_version: Unable to delete version
@@ -938,3 +940,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/tr.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/tr.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,6 @@
-# Turkish translations for Ruby on Rails 
+# Turkish translations for Ruby on Rails
 # by Ozgun Ataman (ozataman@gmail.com)
+# by Burak Yigit Kaya (ben@byk.im)
 
 tr:
   locale:
@@ -18,8 +19,11 @@
     abbr_day_names: [Pzr, Pzt, Sal, Çrş, Prş, Cum, Cts]
     month_names: [~, Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz, Ağustos, Eylül, Ekim, Kasım, Aralık]
     abbr_month_names: [~, Oca, Şub, Mar, Nis, May, Haz, Tem, Ağu, Eyl, Eki, Kas, Ara]
-    order: [ :day, :month, :year ]
-  
+    order:
+      - :day
+      - :month
+      - :year
+
   time:
     formats:
       default: "%a %d.%b.%y %H:%M"
@@ -30,7 +34,7 @@
 
     am: "öğleden önce"
     pm: "öğleden sonra"
-      
+
   datetime:
     distance_in_words:
       half_a_minute: 'yarım dakika'
@@ -49,27 +53,27 @@
         one: '1 dakika'
         other: '%{count} dakika'
       about_x_hours:
-        one: '1 saat civarında'
-        other: '%{count} saat civarında'
+        one: 'yaklaşık 1 saat'
+        other: 'yaklaşık %{count} saat'
       x_days:
         one: '1 gün'
         other: '%{count} gün'
       about_x_months:
-        one: '1 ay civarında'
-        other: '%{count} ay civarında'
+        one: 'yaklaşık 1 ay'
+        other: 'yaklaşık %{count} ay'
       x_months:
         one: '1 ay'
         other: '%{count} ay'
       about_x_years:
-        one: '1 yıl civarında'
-        other: '%{count} yıl civarında'
+        one: 'yaklaşık 1 yıl'
+        other: 'yaklaşık %{count} yıl'
       over_x_years:
         one: '1 yıldan fazla'
         other: '%{count} yıldan fazla'
       almost_x_years:
-        one:   "almost 1 year"
-        other: "almost %{count} years"
-      
+        one:   "neredeyse 1 Yıl"
+        other: "neredeyse %{count} yıl"
+
   number:
     format:
       precision: 2
@@ -101,7 +105,7 @@
         units:
           byte:
             one: "Byte"
-            other: "Bytes"
+            other: "Byte"
           kb: "KB"
           mb: "MB"
           gb: "GB"
@@ -111,7 +115,7 @@
     array:
       sentence_connector: "ve"
       skip_last_comma: true
-        
+
   activerecord:
     errors:
       template:
@@ -143,21 +147,21 @@
         greater_than_start_date: "başlangıç tarihinden büyük olmalı"
         not_same_project: "aynı projeye ait değil"
         circular_dependency: "Bu ilişki döngüsel bağımlılık meydana getirecektir"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "Bir iş, alt işlerinden birine bağlanamaz"
       models:
-  
+
   actionview_instancetag_blank_option: Lütfen Seçin
-  
+
   general_text_No: 'Hayır'
   general_text_Yes: 'Evet'
   general_text_no: 'hayır'
   general_text_yes: 'evet'
   general_lang_name: 'Türkçe'
   general_csv_separator: ','
-  general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
+  general_csv_encoding: ISO-8859-9
+  general_pdf_encoding: UTF-8
   general_first_day_of_week: '7'
-  
+
   notice_account_updated: Hesap başarıyla güncelleştirildi.
   notice_account_invalid_creditentials: Geçersiz kullanıcı ya da parola
   notice_account_password_updated: Parola başarıyla güncellendi.
@@ -178,30 +182,30 @@
   notice_email_error: "E-posta gönderilirken bir hata oluştu (%{value})"
   notice_feeds_access_key_reseted: RSS erişim anahtarınız sıfırlandı.
   notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
-  notice_no_issue_selected: "Seçili ileti yok! Lütfen, düzenlemek istediğiniz iletileri işaretleyin."
+  notice_no_issue_selected: "Seçili iş yok! Lütfen, düzenlemek istediğiniz işleri işaretleyin."
   notice_account_pending: "Hesabınız oluşturuldu ve yönetici onayı bekliyor."
   notice_default_data_loaded: Varasayılan konfigürasyon başarılıyla yüklendi.
-  
+
   error_can_t_load_default_data: "Varsayılan konfigürasyon yüklenemedi: %{value}"
-  error_scm_not_found: "Depoda, giriş ya da revizyon yok."
+  error_scm_not_found: "Depoda, giriş ya da değişiklik yok."
   error_scm_command_failed: "Depoya erişmeye çalışırken bir hata meydana geldi: %{value}"
   error_scm_annotate: "Giriş mevcut değil veya izah edilemedi."
-  error_issue_not_found_in_project: 'İleti bilgisi bulunamadı veya bu projeye ait değil'
-  
+  error_issue_not_found_in_project: 'İş bilgisi bulunamadı veya bu projeye ait değil'
+
   mail_subject_lost_password: "Parolanız %{value}"
   mail_body_lost_password: 'Parolanızı değiştirmek için, aşağıdaki bağlantıya tıklayın:'
-  mail_subject_register: "Your %{value} hesap aktivasyonu"
+  mail_subject_register: "%{value} hesap aktivasyonu"
   mail_body_register: 'Hesabınızı etkinleştirmek için, aşağıdaki bağlantıya tıklayın:'
   mail_body_account_information_external: "Hesabınızı %{value} giriş yapmak için kullanabilirsiniz."
   mail_body_account_information: Hesap bilgileriniz
   mail_subject_account_activation_request: "%{value} hesabı etkinleştirme isteği"
   mail_body_account_activation_request: "Yeni bir kullanıcı (%{value}) kaydedildi. Hesap onaylanmayı bekliyor:"
-  
+
   gui_validation_error: 1 hata
   gui_validation_error_plural: "%{count} hata"
-  
+
   field_name: İsim
-  field_description: Açıklama
+  field_description: Yorum
   field_summary: Özet
   field_is_required: Gerekli
   field_firstname: Ad
@@ -211,11 +215,11 @@
   field_filesize: Boyut
   field_downloads: İndirilenler
   field_author: Yazar
-  field_created_on: Oluşturuldu
-  field_updated_on: Güncellendi
+  field_created_on: Oluşturulma
+  field_updated_on: Güncellenme
   field_field_format: Biçim
   field_is_for_all: Tüm projeler için
-  field_possible_values: Mümkün değerler
+  field_possible_values: Kullanılabilir değerler
   field_regexp: Düzenli ifadeler
   field_min_length: En az uzunluk
   field_max_length: En çok uzunluk
@@ -223,23 +227,23 @@
   field_category: Kategori
   field_title: Başlık
   field_project: Proje
-  field_issue: İleti
+  field_issue: İş
   field_status: Durum
   field_notes: Notlar
-  field_is_closed: İleti kapatıldı
+  field_is_closed: İş kapatıldı
   field_is_default: Varsayılan Değer
-  field_tracker: Takipçi
+  field_tracker: İş tipi
   field_subject: Konu
   field_due_date: Bitiş Tarihi
   field_assigned_to: Atanan
   field_priority: Öncelik
-  field_fixed_version: Hedef Version
+  field_fixed_version: Hedef Sürüm
   field_user: Kullanıcı
   field_role: Rol
   field_homepage: Anasayfa
   field_is_public: Genel
   field_parent: 'Üst proje: '
-  field_is_in_roadmap: Yol haritasında gösterilen iletiler
+  field_is_in_roadmap: Yol haritasında gösterilen işler
   field_login: Giriş
   field_mail_notification: E-posta uyarıları
   field_admin: Yönetici
@@ -249,7 +253,7 @@
   field_password: Parola
   field_new_password: Yeni Parola
   field_password_confirmation: Onay
-  field_version: Versiyon
+  field_version: Sürüm
   field_type: Tip
   field_host: Host
   field_port: Port
@@ -260,38 +264,38 @@
   field_attr_lastname: Soyad Niteliği
   field_attr_mail: E-Posta Niteliği
   field_onthefly: Anında kullanıcı oluşturma
-  field_start_date: Başlangıç
-  field_done_ratio: % tamamlandı
+  field_start_date: Başlangıç Tarihi
+  field_done_ratio: Tamamlanma yüzdesi
   field_auth_source: Kimlik Denetim Modu
   field_hide_mail: E-posta adresimi gizle
-  field_comments: Açıklama
+  field_comments: Yorumlar
   field_url: URL
   field_start_page: Başlangıç Sayfası
   field_subproject: Alt Proje
-  field_hours: Saatler
-  field_activity: Faaliyet
+  field_hours: Saat
+  field_activity: Etkinlik
   field_spent_on: Tarih
   field_identifier: Tanımlayıcı
   field_is_filter: filtre olarak kullanılmış
-  field_issue_to: İlişkili ileti
+  field_issue_to: İlişkili iş
   field_delay: Gecikme
-  field_assignable: Bu role atanabilecek iletiler
-  field_redirect_existing_links: Mevcut bağlantıları tekrar yönlendir
+  field_assignable: Bu role atanabilecek işler
+  field_redirect_existing_links: Mevcut bağlantıları yönlendir
   field_estimated_hours: Kalan zaman
   field_column_names: Sütunlar
   field_time_zone: Saat dilimi
   field_searchable: Aranabilir
   field_default_value: Varsayılan değer
-  field_comments_sorting: Açıklamaları göster
-  
+  field_comments_sorting: Yorumları göster
+
   setting_app_title: Uygulama Bağlığı
   setting_app_subtitle: Uygulama alt başlığı
   setting_welcome_text: Hoşgeldin Mesajı
   setting_default_language: Varsayılan Dil
   setting_login_required: Kimlik denetimi gerekli mi
   setting_self_registration: Otomatik kayıt
-  setting_attachment_max_size: Maksimum Ek boyutu
-  setting_issues_export_limit: İletilerin dışa aktarılma sınırı
+  setting_attachment_max_size: Maksimum ek boyutu
+  setting_issues_export_limit: İşlerin dışa aktarılma sınırı
   setting_mail_from: Gönderici e-posta adresi
   setting_bcc_recipients: Alıcıları birbirinden gizle (bcc)
   setting_host_name: Host adı
@@ -306,17 +310,17 @@
   setting_autologin: Otomatik Giriş
   setting_date_format: Tarih Formati
   setting_time_format: Zaman Formatı
-  setting_cross_project_issue_relations: Çapraz-Proje ileti ilişkilendirmesine izin ver
-  setting_issue_list_default_columns: İleti listesinde gösterilen varsayılan sütunlar
+  setting_cross_project_issue_relations: Çapraz-Proje iş ilişkilendirmesine izin ver
+  setting_issue_list_default_columns: İş listesinde gösterilen varsayılan sütunlar
   setting_repositories_encodings: Depo dil kodlaması
   setting_emails_footer: E-posta dip not
   setting_protocol: Protokol
-  setting_per_page_options: Sayfa seçenekleri başına nesneler
-  setting_user_format: Kullanıcı gösterim formatı
-  setting_activity_days_default: Proje Faaliyetlerinde gösterilen gün sayısı
-  setting_display_subprojects_issues: Varsayılan olarak ana projenin ileti listesinde alt proje iletilerini göster
-  
-  project_module_issue_tracking: İleti Takibi
+  setting_per_page_options: Sayfada başına öğe sayısı
+  setting_user_format: Kullanıcı gösterim biçimi
+  setting_activity_days_default: Proje etkinliklerinde gösterilen gün sayısı
+  setting_display_subprojects_issues: Varsayılan olarak ana projenin iş listesinde alt proje işlerini göster
+
+  project_module_issue_tracking: İş Takibi
   project_module_time_tracking: Zaman Takibi
   project_module_news: Haberler
   project_module_documents: Belgeler
@@ -324,7 +328,7 @@
   project_module_wiki: Wiki
   project_module_repository: Depo
   project_module_boards: Tartışma Alanı
-  
+
   label_user: Kullanıcı
   label_user_plural: Kullanıcılar
   label_user_new: Yeni Kullanıcı
@@ -332,18 +336,18 @@
   label_project_new: Yeni proje
   label_project_plural: Projeler
   label_x_projects:
-    zero:  no projects
-    one:   1 project
-    other: "%{count} projects"
+    zero:  hiç proje yok
+    one:   1 proje
+    other: "%{count} proje"
   label_project_all: Tüm Projeler
   label_project_latest: En son projeler
-  label_issue: İleti
-  label_issue_new: Yeni İleti
-  label_issue_plural: İletiler
-  label_issue_view_all: Tüm iletileri izle
-  label_issues_by: "%{value} tarafından gönderilmiş iletiler"
-  label_issue_added: İleti eklendi
-  label_issue_updated: İleti güncellendi
+  label_issue: İş
+  label_issue_new: Yeni İş
+  label_issue_plural: İşler
+  label_issue_view_all: Tüm işleri izle
+  label_issues_by: "%{value} tarafından gönderilmiş işler"
+  label_issue_added: İş eklendi
+  label_issue_updated: İş güncellendi
   label_document: Belge
   label_document_new: Yeni belge
   label_document_plural: Belgeler
@@ -355,15 +359,15 @@
   label_member: Üye
   label_member_new: Yeni üye
   label_member_plural: Üyeler
-  label_tracker: Takipçi
-  label_tracker_plural: Takipçiler
-  label_tracker_new: Yeni takipçi
+  label_tracker: İş tipi
+  label_tracker_plural: İş tipleri
+  label_tracker_new: Yeni iş tipi
   label_workflow: İş akışı
-  label_issue_status: İleti durumu
-  label_issue_status_plural: İleti durumuları
+  label_issue_status: İş durumu
+  label_issue_status_plural: İş durumuları
   label_issue_status_new: Yeni durum
-  label_issue_category: İleti kategorisi
-  label_issue_category_plural: İleti kategorileri
+  label_issue_category: İş kategorisi
+  label_issue_category_plural: İş kategorileri
   label_issue_category_new: Yeni kategori
   label_custom_field: Özel alan
   label_custom_field_plural: Özel alanlar
@@ -374,22 +378,22 @@
   label_information_plural: Bilgi
   label_please_login: Lütfen giriş yapın
   label_register: Kayıt
-  label_password_lost: Parolamı unuttum?
+  label_password_lost: Parolamı unuttum
   label_home: Anasayfa
   label_home_heading: Anasayfa
   label_my_page: Kişisel Sayfam
   label_my_account: Hesabım
   label_my_projects: Projelerim
   label_administration: Yönetim
-  label_login: Gir
+  label_login: Giriş
   label_logout: Çıkış
   label_help: Yardım
-  label_reported_issues: Rapor edilmiş iletiler
-  label_assigned_to_me_issues: Bana atanmış iletiler
+  label_reported_issues: Rapor edilmiş işler
+  label_assigned_to_me_issues: Bana atanmış işler
   label_last_login: Son bağlantı
-  label_registered_on: Kayıtlı
-  label_activity: Faaliyet
-  label_overall_activity: Tüm aktiviteler
+  label_registered_on: Kayıt tarihi
+  label_activity: Etkinlik
+  label_overall_activity: Tüm etkinlikler
   label_new: Yeni
   label_logged_as: "Kullanıcı :"
   label_environment: Çevre
@@ -402,14 +406,14 @@
   label_list: Liste
   label_date: Tarih
   label_integer: Tam sayı
-  label_float: Noktalı sayı
-  label_boolean: Boolean
+  label_float: Ondalıklı sayı
+  label_boolean: "Evet/Hayır"
   label_string: Metin
   label_text: Uzun Metin
   label_attribute: Nitelik
   label_attribute_plural: Nitelikler
-  label_download: "%{count} indirilen"
-  label_download_plural: "%{count} indirilen"
+  label_download: "%{count} indirme"
+  label_download_plural: "%{count} indirme"
   label_no_data: Gösterilecek veri yok
   label_change_status: Değişim Durumu
   label_history: Geçmiş
@@ -428,29 +432,29 @@
   label_news_added: Haber eklendi
   label_settings: Ayarlar
   label_overview: Genel
-  label_version: Versiyon
-  label_version_new: Yeni versiyon
-  label_version_plural: Versiyonlar
+  label_version: Sürüm
+  label_version_new: Yeni sürüm
+  label_version_plural: Sürümler
   label_confirmation: Doğrulamama
-  label_export_to: 'Diğer uygun kaynaklar:'
-  label_read: Oku...
+  label_export_to: "Diğer uygun kaynaklar:"
+  label_read: "Oku..."
   label_public_projects: Genel Projeler
   label_open_issues: açık
   label_open_issues_plural: açık
   label_closed_issues: kapalı
   label_closed_issues_plural: kapalı
   label_x_open_issues_abbr_on_total:
-    zero:  0 open / %{total}
-    one:   1 open / %{total}
-    other: "%{count} open / %{total}"
+    zero:  tamamı kapalı, toplam %{total}
+    one:   1'i' açık, toplam %{total}
+    other: "%{count} açık, toplam %{total}"
   label_x_open_issues_abbr:
-    zero:  0 open
-    one:   1 open
-    other: "%{count} open"
+    zero:  hiç açık yok
+    one:   1 açık
+    other: "%{count} açık"
   label_x_closed_issues_abbr:
-    zero:  0 closed
-    one:   1 closed
-    other: "%{count} closed"
+    zero:  hiç kapalı yok
+    one:   1 kapalı
+    other: "%{count} kapalı"
   label_total: Toplam
   label_permissions: İzinler
   label_current_status: Mevcut Durum
@@ -461,25 +465,25 @@
   label_next: Sonraki
   label_previous: Önceki
   label_used_by: 'Kullanan: '
-  label_details: Detaylar
-  label_add_note: Bir not ekle
+  label_details: Ayrıntılar
+  label_add_note: Not ekle
   label_per_page: Sayfa başına
   label_calendar: Takvim
-  label_months_from: aylardan itibaren
-  label_gantt: Gantt
+  label_months_from: ay öncesinden itibaren
+  label_gantt: İş-Zaman Çizelgesi
   label_internal: Dahili
   label_last_changes: "Son %{count} değişiklik"
   label_change_view_all: Tüm Değişiklikleri gör
   label_personalize_page: Bu sayfayı kişiselleştir
-  label_comment: Açıklama
-  label_comment_plural: Açıklamalar
+  label_comment: Yorum
+  label_comment_plural: Yorumlar
   label_x_comments:
-    zero: no comments
-    one: 1 comment
-    other: "%{count} comments"
-  label_comment_add: Açıklama Ekle
-  label_comment_added: Açıklama Eklendi
-  label_comment_delete: Açıklamaları sil
+    zero: hiç yorum yok
+    one: 1 yorum
+    other: "%{count} yorum"
+  label_comment_add: Yorum Ekle
+  label_comment_added: Yorum Eklendi
+  label_comment_delete: Yorumları sil
   label_query: Özel Sorgu
   label_query_plural: Özel Sorgular
   label_query_new: Yeni Sorgu
@@ -508,27 +512,27 @@
   label_day_plural: Günler
   label_repository: Depo
   label_repository_plural: Depolar
-  label_browse: Tara
+  label_browse: Gözat
   label_modification: "%{count} değişim"
   label_modification_plural: "%{count} değişim"
-  label_revision: Revizyon
-  label_revision_plural: Revizyonlar
-  label_associated_revisions: Birleştirilmiş revizyonlar
+  label_revision: Değişiklik
+  label_revision_plural: Değişiklikler
+  label_associated_revisions: Birleştirilmiş değişiklikler
   label_added: eklendi
   label_modified: güncellendi
   label_deleted: silindi
-  label_latest_revision: En son revizyon
-  label_latest_revision_plural: En son revizyonlar
-  label_view_revisions: Revizyonları izle
+  label_latest_revision: En son değişiklik
+  label_latest_revision_plural: En son değişiklikler
+  label_view_revisions: Değişiklikleri izle
   label_max_size: En büyük boyut
   label_sort_highest: Üste taşı
   label_sort_higher: Yukarı taşı
   label_sort_lower: Aşağı taşı
   label_sort_lowest: Dibe taşı
   label_roadmap: Yol Haritası
-  label_roadmap_due_in: "Due in %{value}"
+  label_roadmap_due_in: "%{value} içinde bitmeli"
   label_roadmap_overdue: "%{value} geç"
-  label_roadmap_no_issues: Bu versiyon için ileti yok
+  label_roadmap_no_issues: Bu sürüm için iş yok
   label_search: Ara
   label_result_plural: Sonuçlar
   label_all_words: Tüm Kelimeler
@@ -539,11 +543,11 @@
   label_wiki_page_plural: Wiki sayfaları
   label_index_by_title: Başlığa göre diz
   label_index_by_date: Tarihe göre diz
-  label_current_version: Güncel versiyon
+  label_current_version: Güncel sürüm
   label_preview: Önizleme
   label_feed_plural: Beslemeler
   label_changes_details: Bütün değişikliklerin detayları
-  label_issue_tracking: İleti Takibi
+  label_issue_tracking: İş Takibi
   label_spent_time: Harcanan zaman
   label_f_hour: "%{value} saat"
   label_f_hour_plural: "%{value} saat"
@@ -558,9 +562,9 @@
   label_options: Tercihler
   label_copy_workflow_from: İşakışı kopyala
   label_permissions_report: İzin raporu
-  label_watched_issues: İzlenmiş iletiler
-  label_related_issues: İlişkili iletiler
-  label_applied_status: uygulanmış iletiler
+  label_watched_issues: İzlenmiş işler
+  label_related_issues: İlişkili işler
+  label_applied_status: uygulanmış işler
   label_loading: Yükleniyor...
   label_relation_new: Yeni ilişki
   label_relation_delete: İlişkiyi sil
@@ -576,7 +580,7 @@
   label_start_to_end: baştan sona
   label_stay_logged_in: Sürekli bağlı kal
   label_disabled: Devredışı
-  label_show_completed_versions: Tamamlanmış versiyonları göster
+  label_show_completed_versions: Tamamlanmış sürümleri göster
   label_me: Ben
   label_board: Tartışma Alanı
   label_board_new: Yeni alan
@@ -593,7 +597,7 @@
   label_week: Hafta
   label_date_from: Başlangıç
   label_date_to: Bitiş
-  label_language_based: Kullanıcı diline istinaden
+  label_language_based: Kullanıcı dili bazlı
   label_sort_by: "%{value} göre sırala"
   label_send_test_email: Test e-postası gönder
   label_feeds_access_key_created_on: "RSS erişim anahtarı %{value} önce oluşturuldu"
@@ -605,12 +609,12 @@
   label_changeset_plural: Değişiklik Listeleri
   label_default_columns: Varsayılan Sütunlar
   label_no_change_option: (Değişiklik yok)
-  label_bulk_edit_selected_issues: Seçili iletileri toplu düzenle
+  label_bulk_edit_selected_issues: Seçili işleri toplu olarak düzenle
   label_theme: Tema
   label_default: Varsayılan
   label_search_titles_only: Sadece başlıkları ara
   label_user_mail_option_all: "Tüm projelerimdeki herhangi bir olay için"
-  label_user_mail_option_selected: "Sadece seçili projelerdeki herhangi bir olay için..."
+  label_user_mail_option_selected: "Sadece seçili projelerdeki herhangi bir olay için"
   label_user_mail_no_self_notified: "Kendi yaptığım değişikliklerden haberdar olmak istemiyorum"
   label_registration_activation_by_email: e-posta ile hesap etkinleştirme
   label_registration_manual_activation: Elle hesap etkinleştirme
@@ -620,7 +624,7 @@
   label_change_properties: Özellikleri değiştir
   label_general: Genel
   label_more: Daha fazla
-  label_scm: KKY
+  label_scm: KY
   label_plugins: Eklentiler
   label_ldap_authentication: LDAP Denetimi
   label_downloads_abbr: D/L
@@ -630,7 +634,7 @@
   label_chronological_order: Tarih sırasına göre
   label_reverse_chronological_order: Ters tarih sırasına göre
   label_planning: Planlanıyor
-  
+
   button_login: Giriş
   button_submit: Gönder
   button_save: Kaydet
@@ -654,8 +658,8 @@
   button_cancel: İptal
   button_activate: Etkinleştir
   button_sort: Sırala
-  button_log_time: Günlük zamanı
-  button_rollback: Bu versiyone geri al
+  button_log_time: Zaman kaydı
+  button_rollback: Bu sürüme geri al
   button_watch: İzle
   button_unwatch: İzlemeyi iptal et
   button_reply: Cevapla
@@ -665,20 +669,20 @@
   button_rename: Yeniden adlandır
   button_change_password: Parolayı değiştir
   button_copy: Kopyala
-  button_annotate: Revizyon geçmişine göre göster
+  button_annotate: Değişiklik geçmişine göre göster
   button_update: Güncelle
   button_configure: Yapılandır
-  
+
   status_active: faal
   status_registered: kayıtlı
   status_locked: kilitli
-  
+
   text_select_mail_notifications: Gönderilecek e-posta uyarısına göre hareketi seçin.
-  text_regexp_info: eg. ^[A-Z0-9]+$
+  text_regexp_info: örn. ^[A-Z0-9]+$
   text_min_max_length_info: 0 sınırlama yok demektir
   text_project_destroy_confirmation: Bu projeyi ve bağlantılı verileri silmek istediğinizden emin misiniz?
   text_subprojects_destroy_warning: "Ayrıca %{value} alt proje silinecek."
-  text_workflow_edit: İşakışını düzenlemek için bir rol ve takipçi seçin
+  text_workflow_edit: İşakışını düzenlemek için bir rol ve iş tipi seçin
   text_are_you_sure: Emin misiniz ?
   text_tip_issue_begin_day: Bugün başlayan görevler
   text_tip_issue_end_day: Bugün sona eren görevler
@@ -687,41 +691,41 @@
   text_caracters_maximum: "En çok %{count} karakter."
   text_caracters_minimum: "En az %{count} karakter uzunluğunda olmalı."
   text_length_between: "%{min} ve %{max} karakterleri arasındaki uzunluk."
-  text_tracker_no_workflow: Bu takipçi için işakışı tanımlanmamış
+  text_tracker_no_workflow: Bu iş tipi için işakışı tanımlanmamış
   text_unallowed_characters: Yasaklı karakterler
-  text_comma_separated: Çoklu değer uygundur(Virgül ile ayrılmış).
-  text_issues_ref_in_commit_messages: Teslim mesajlarındaki iletileri çözme ve başvuruda bulunma
-  text_issue_added: "İleti %{id}, %{author} tarafından rapor edildi."
-  text_issue_updated: "İleti %{id}, %{author} tarafından güncellendi."
+  text_comma_separated: Çoklu değer girilebilir(Virgül ile ayrılmış).
+  text_issues_ref_in_commit_messages: Teslim mesajlarındaki işleri çözme ve başvuruda bulunma
+  text_issue_added: "İş %{id}, %{author} tarafından rapor edildi."
+  text_issue_updated: "İş %{id}, %{author} tarafından güncellendi."
   text_wiki_destroy_confirmation: bu wikiyi ve tüm içeriğini silmek istediğinizden emin misiniz?
-  text_issue_category_destroy_question: "Bazı iletiler (%{count}) bu kategoriye atandı. Ne yapmak istersiniz?"
+  text_issue_category_destroy_question: "Bazı işler (%{count}) bu kategoriye atandı. Ne yapmak istersiniz?"
   text_issue_category_destroy_assignments: Kategori atamalarını kaldır
-  text_issue_category_reassign_to: İletileri bu kategoriye tekrar ata
-  text_user_mail_option: "Seçili olmayan projeler için, sadece dahil olduğunuz ya da izlediğiniz öğeler hakkında uyarılar alacaksınız (örneğin,yazarı veya atandığınız iletiler)."
-  text_no_configuration_data: "Roller, takipçiler, ileti durumları ve işakışı henüz yapılandırılmadı.\nVarsayılan yapılandırılmanın yüklenmesi şiddetle tavsiye edilir. Bir kez yüklendiğinde yapılandırmayı değiştirebileceksiniz."
+  text_issue_category_reassign_to: İşleri bu kategoriye tekrar ata
+  text_user_mail_option: "Seçili olmayan projeler için, sadece dahil olduğunuz ya da izlediğiniz öğeler hakkında uyarılar alacaksınız (örneğin,yazarı veya atandığınız işler)."
+  text_no_configuration_data: "Roller, iş tipleri, iş durumları ve işakışı henüz yapılandırılmadı.\nVarsayılan yapılandırılmanın yüklenmesi şiddetle tavsiye edilir. Bir kez yüklendiğinde yapılandırmayı değiştirebileceksiniz."
   text_load_default_configuration: Varsayılan yapılandırmayı yükle
   text_status_changed_by_changeset: "Değişiklik listesi %{value} içinde uygulandı."
-  text_issues_destroy_confirmation: 'Seçili iletileri silmek istediğinizden emin misiniz ?'
+  text_issues_destroy_confirmation: 'Seçili işleri silmek istediğinizden emin misiniz ?'
   text_select_project_modules: 'Bu proje için etkinleştirmek istediğiniz modülleri seçin:'
   text_default_administrator_account_changed: Varsayılan yönetici hesabı değişti
   text_file_repository_writable: Dosya deposu yazılabilir
   text_rmagick_available: RMagick Kullanılabilir (isteğe bağlı)
-  text_destroy_time_entries_question: Silmek üzere olduğunuz iletiler üzerine %{hours} saat raporlandı.Ne yapmak istersiniz ?
-  text_destroy_time_entries: Raporlanmış saatleri sil
-  text_assign_time_entries_to_project: Raporlanmış saatleri projeye ata
-  text_reassign_time_entries: 'Raporlanmış saatleri bu iletiye tekrar ata:'
-  
+  text_destroy_time_entries_question: Silmek üzere olduğunuz işler üzerine %{hours} saat raporlandı.Ne yapmak istersiniz ?
+  text_destroy_time_entries: Raporlanmış süreleri sil
+  text_assign_time_entries_to_project: Raporlanmış süreleri projeye ata
+  text_reassign_time_entries: 'Raporlanmış süreleri bu işe tekrar ata:'
+
   default_role_manager: Yönetici
   default_role_developer: Geliştirici
   default_role_reporter: Raporlayıcı
   default_tracker_bug: Hata
-  default_tracker_feature: ÖZellik
+  default_tracker_feature: Özellik
   default_tracker_support: Destek
   default_issue_status_new: Yeni
-  default_issue_status_in_progress: In Progress
+  default_issue_status_in_progress: Yapılıyor
   default_issue_status_resolved: Çözüldü
   default_issue_status_feedback: Geribildirim
-  default_issue_status_closed: Kapatıldı
+  default_issue_status_closed: "Kapatıldı"
   default_issue_status_rejected: Reddedildi
   default_doc_category_user: Kullanıcı Dökümantasyonu
   default_doc_category_tech: Teknik Dökümantasyon
@@ -731,232 +735,264 @@
   default_priority_urgent: Acil
   default_priority_immediate: Derhal
   default_activity_design: Tasarım
-  default_activity_development: Geliştirim
-  
-  enumeration_issue_priorities: İleti önceliği
+  default_activity_development: Geliştirme
+
+  enumeration_issue_priorities: İş önceliği
   enumeration_doc_categories: Belge Kategorileri
   enumeration_activities: Faaliyetler (zaman takibi)
-  button_quote: Quote
-  setting_enabled_scm: Enabled SCM
-  label_incoming_emails: Incoming emails
-  label_generate_key: Generate a key
-  setting_sequential_project_identifiers: Generate sequential project identifiers
-  field_parent_title: Parent page
+  button_quote: Alıntı
+  setting_enabled_scm: KKY Açık
+  label_incoming_emails: "Gelen e-postalar"
+  label_generate_key: "Anahtar oluştur"
+  setting_sequential_project_identifiers: "Sıralı proje tanımlayıcıları oluştur"
+  field_parent_title: Üst sayfa
   text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
-  text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  label_issue_watchers: Watchers
-  mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
-  label_duplicated_by: duplicated by
-  text_enumeration_destroy_question: "%{count} objects are assigned to this value."
-  text_user_wrote: "%{value} wrote:"
-  setting_mail_handler_api_enabled: Enable WS for incoming emails
-  label_and_its_subprojects: "%{value} and its subprojects"
-  mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
-  setting_mail_handler_api_key: API key
-  setting_commit_logs_encoding: Commit messages encoding
+  text_enumeration_category_reassign_to: 'Hepsini şuna çevir:'
+  label_issue_watchers: Takipçiler
+  mail_body_reminder: "Size atanmış olan %{count} iş %{days} gün içerisinde bitirilmeli:"
+  label_duplicated_by: yineleyen
+  text_enumeration_destroy_question: "Bu nesneye %{count} değer bağlanmış."
+  text_user_wrote: "%{value} demiş ki:"
+  setting_mail_handler_api_enabled: Gelen e-postalar için WS'yi aç
+  label_and_its_subprojects: "%{value} ve alt projeleri"
+  mail_subject_reminder: "%{count} iş bir kaç güne bitecek"
+  setting_mail_handler_api_key: API anahtarı
+  setting_commit_logs_encoding: Gönderim mesajlarının kodlaması (UTF-8 vs.)
   general_csv_decimal_separator: '.'
-  notice_unable_delete_version: Unable to delete version
-  label_renamed: renamed
-  label_copied: copied
-  setting_plain_text_mail: plain text only (no HTML)
-  permission_view_files: View files
-  permission_edit_issues: Edit issues
-  permission_edit_own_time_entries: Edit own time logs
-  permission_manage_public_queries: Manage public queries
-  permission_add_issues: Add issues
-  permission_log_time: Log spent time
-  permission_view_changesets: View changesets
-  permission_view_time_entries: View spent time
-  permission_manage_versions: Manage versions
-  permission_manage_wiki: Manage wiki
-  permission_manage_categories: Manage issue categories
-  permission_protect_wiki_pages: Protect wiki pages
-  permission_comment_news: Comment news
-  permission_delete_messages: Delete messages
-  permission_select_project_modules: Select project modules
-  permission_manage_documents: Manage documents
-  permission_edit_wiki_pages: Edit wiki pages
-  permission_add_issue_watchers: Add watchers
-  permission_view_gantt: View gantt chart
-  permission_move_issues: Move issues
-  permission_manage_issue_relations: Manage issue relations
-  permission_delete_wiki_pages: Delete wiki pages
-  permission_manage_boards: Manage boards
-  permission_delete_wiki_pages_attachments: Delete attachments
-  permission_view_wiki_edits: View wiki history
-  permission_add_messages: Post messages
-  permission_view_messages: View messages
-  permission_manage_files: Manage files
-  permission_edit_issue_notes: Edit notes
-  permission_manage_news: Manage news
-  permission_view_calendar: View calendrier
-  permission_manage_members: Manage members
-  permission_edit_messages: Edit messages
-  permission_delete_issues: Delete issues
-  permission_view_issue_watchers: View watchers list
-  permission_manage_repository: Manage repository
-  permission_commit_access: Commit access
-  permission_browse_repository: Browse repository
-  permission_view_documents: View documents
-  permission_edit_project: Edit project
-  permission_add_issue_notes: Add notes
-  permission_save_queries: Save queries
-  permission_view_wiki_pages: View wiki
-  permission_rename_wiki_pages: Rename wiki pages
-  permission_edit_time_entries: Edit time logs
-  permission_edit_own_issue_notes: Edit own notes
-  setting_gravatar_enabled: Use Gravatar user icons
-  label_example: Example
+  notice_unable_delete_version: Sürüm silinemiyor
+  label_renamed: yeniden adlandırılmış
+  label_copied: kopyalanmış
+  setting_plain_text_mail: sadece düz metin (HTML yok)
+  permission_view_files: Dosyaları görme
+  permission_edit_issues: İşleri düzenleme
+  permission_edit_own_time_entries: Kendi zaman girişlerini düzenleme
+  permission_manage_public_queries: Herkese açık sorguları yönetme
+  permission_add_issues: İş ekleme
+  permission_log_time: Harcanan zamanı kaydetme
+  permission_view_changesets: Değişimleri görme(SVN, vs.)
+  permission_view_time_entries: Harcanan zamanı görme
+  permission_manage_versions: Sürümleri yönetme
+  permission_manage_wiki: Wiki'yi yönetme
+  permission_manage_categories: İş kategorilerini yönetme
+  permission_protect_wiki_pages: Wiki sayfalarını korumaya alma
+  permission_comment_news: Haberlere yorum yapma
+  permission_delete_messages: Mesaj silme
+  permission_select_project_modules: Proje modüllerini seçme
+  permission_manage_documents: Belgeleri yönetme
+  permission_edit_wiki_pages: Wiki sayfalarını düzenleme
+  permission_add_issue_watchers: Takipçi ekleme
+  permission_view_gantt: İş-Zaman çizelgesi görme
+  permission_move_issues: İşlerin yerini değiştirme
+  permission_manage_issue_relations: İşlerin biribiriyle bağlantılarını yönetme
+  permission_delete_wiki_pages: Wiki sayfalarını silme
+  permission_manage_boards: Panoları yönetme
+  permission_delete_wiki_pages_attachments: Ekleri silme
+  permission_view_wiki_edits: Wiki geçmişini görme
+  permission_add_messages: Mesaj gönderme
+  permission_view_messages: Mesajları görme
+  permission_manage_files: Dosyaları yönetme
+  permission_edit_issue_notes: Notları düzenleme
+  permission_manage_news: Haberleri yönetme
+  permission_view_calendar: Takvimleri görme
+  permission_manage_members: Üyeleri yönetme
+  permission_edit_messages: Mesajları düzenleme
+  permission_delete_issues: İşleri silme
+  permission_view_issue_watchers: Takipçi listesini görme
+  permission_manage_repository: Depo yönetimi
+  permission_commit_access: Gönderme erişimi
+  permission_browse_repository: Depoya gözatma
+  permission_view_documents: Belgeleri görme
+  permission_edit_project: Projeyi düzenleme
+  permission_add_issue_notes: Not ekleme
+  permission_save_queries: Sorgu kaydetme
+  permission_view_wiki_pages: Wiki görme
+  permission_rename_wiki_pages: Wiki sayfasının adını değiştirme
+  permission_edit_time_entries: Zaman kayıtlarını düzenleme
+  permission_edit_own_issue_notes: Kendi notlarını düzenleme
+  setting_gravatar_enabled: Kullanıcı resimleri için Gravatar kullan
+  label_example: Örnek
   text_repository_usernames_mapping: "Select ou update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
-  permission_edit_own_messages: Edit own messages
-  permission_delete_own_messages: Delete own messages
-  label_user_activity: "%{value}'s activity"
-  label_updated_time_by: "Updated by %{author} %{age} ago"
-  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-  setting_diff_max_lines_displayed: Max number of diff lines displayed
-  text_plugin_assets_writable: Plugin assets directory writable
-  warning_attachments_not_saved: "%{count} file(s) could not be saved."
-  button_create_and_continue: Create and continue
-  text_custom_field_possible_values_info: 'One line for each value'
-  label_display: Display
-  field_editable: Editable
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  field_watcher: Watcher
-  setting_openid: Allow OpenID login and registration
+  permission_edit_own_messages: Kendi mesajlarını düzenleme
+  permission_delete_own_messages: Kendi mesajlarını silme
+  label_user_activity: "%{value} kullanıcısının etkinlikleri"
+  label_updated_time_by: "%{author} tarafından %{age} önce güncellendi"
+  text_diff_truncated: '... Bu fark tam olarak gösterilemiyor çünkü gösterim için ayarlanmış üst sınırı aşıyor.'
+  setting_diff_max_lines_displayed: Gösterilebilecek maksimumu fark satırı
+  text_plugin_assets_writable: Eklenti yardımcı dosya dizini yazılabilir
+  warning_attachments_not_saved: "%{count} adet dosya kaydedilemedi."
+  button_create_and_continue: Oluştur ve devam et
+  text_custom_field_possible_values_info: 'Her değer için bir satır'
+  label_display: Göster
+  field_editable: Düzenlenebilir
+  setting_repository_log_display_limit: Dosya kaydında gösterilecek maksimum değişim sayısı
+  setting_file_max_size_displayed: Dahili olarak gösterilecek metin dosyaları için maksimum satır sayısı
+  field_watcher: Takipçi
+  setting_openid: Kayıt ve giriş için OpenID'ye izin ver
   field_identity_url: OpenID URL
-  label_login_with_open_id_option: or login with OpenID
-  field_content: Content
-  label_descending: Descending
-  label_sort: Sort
-  label_ascending: Ascending
-  label_date_from_to: From %{start} to %{end}
+  label_login_with_open_id_option: veya OpenID kullanın
+  field_content: İçerik
+  label_descending: Azalan
+  label_sort: Sırala
+  label_ascending: Artan
+  label_date_from_to: "%{start} - %{end} arası"
   label_greater_or_equal: ">="
   label_less_or_equal: <=
-  text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do?
-  text_wiki_page_reassign_children: Reassign child pages to this parent page
-  text_wiki_page_nullify_children: Keep child pages as root pages
-  text_wiki_page_destroy_children: Delete child pages and all their descendants
-  setting_password_min_length: Minimum password length
-  field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
-  label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
-  mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}.
-  label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}.
-  permission_add_project: Create project
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  label_view_all_revisions: View all revisions
-  label_tag: Tag
-  label_branch: Branch
-  error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
-  error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
-  label_group_plural: Groups
-  label_group: Group
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  text_journal_changed: "%{label} changed from %{old} to %{new}"
-  text_journal_set_to: "%{label} set to %{value}"
-  text_journal_deleted: "%{label} deleted (%{old})"
-  text_journal_added: "%{label} %{value} added"
-  field_active: Active
-  enumeration_system_activity: System Activity
-  permission_delete_issue_watchers: Delete watchers
-  version_status_closed: closed
-  version_status_locked: locked
-  version_status_open: open
-  error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
-  label_user_anonymous: Anonymous
-  button_move_and_follow: Move and follow
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_gravatar_default: Default Gravatar image
-  field_sharing: Sharing
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_system: With all projects
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_tree: With project tree
-  label_version_sharing_none: Not shared
-  error_can_not_archive_project: This project can not be archived
-  button_duplicate: Duplicate
-  button_copy_and_follow: Copy and follow
-  label_copy_source: Source
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_status: Use the issue status
-  error_issue_done_ratios_not_updated: Issue done ratios not updated.
-  error_workflow_copy_target: Please select target tracker(s) and role(s)
-  setting_issue_done_ratio_issue_field: Use the issue field
-  label_copy_same_as_target: Same as target
-  label_copy_target: Target
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  error_workflow_copy_source: Please select a source tracker or role
-  label_update_issue_done_ratios: Update issue done ratios
-  setting_start_of_week: Start calendars on
-  permission_view_issues: View Issues
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_revision_id: Revision %{value}
-  label_api_access_key: API access key
-  label_api_access_key_created_on: API access key created %{value} ago
-  label_feeds_access_key: RSS access key
-  notice_api_access_key_reseted: Your API access key was reset.
-  setting_rest_api_enabled: Enable REST web service
-  label_missing_api_access_key: Missing an API access key
-  label_missing_feeds_access_key: Missing a RSS access key
-  button_show: Show
-  text_line_separated: Multiple values allowed (one line for each value).
-  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
-  permission_add_subprojects: Create subprojects
-  label_subproject_new: New subproject
-  text_own_membership_delete_confirmation: |-
-    You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
-    Are you sure you want to continue?
-  label_close_versions: Close completed versions
-  label_board_sticky: Sticky
-  label_board_locked: Locked
-  permission_export_wiki_pages: Export wiki pages
-  setting_cache_formatted_text: Cache formatted text
-  permission_manage_project_activities: Manage project activities
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_profile: Profile
-  permission_manage_subtasks: Manage subtasks
-  field_parent_issue: Parent task
-  label_subtask_plural: Subtasks
-  label_project_copy_notifications: Send email notifications during the project copy
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_unable_to_connect: Unable to connect (%{value})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
-  field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
-  project_module_gantt: Gantt
-  project_module_calendar: Calendar
+  text_wiki_page_destroy_question: Bu sayfanın %{descendants} adet alt sayfası var. Ne yapmak istersiniz?
+  text_wiki_page_reassign_children: Alt sayfaları bu sayfanın altına bağla
+  text_wiki_page_nullify_children: Alt sayfaları ana sayfa olarak sakla
+  text_wiki_page_destroy_children: Alt sayfaları ve onların alt sayfalarını tamamen sil
+  setting_password_min_length: Minimum parola uzunluğu
+  field_group_by: Sonuçları grupla
+  mail_subject_wiki_content_updated: "'%{id}' wiki sayfası güncellendi"
+  label_wiki_content_added: Wiki sayfası eklendi
+  mail_subject_wiki_content_added: "'%{id}' wiki sayfası eklendi"
+  mail_body_wiki_content_added: "'%{id}' wiki sayfası, %{author} tarafından eklendi."
+  label_wiki_content_updated: Wiki sayfası güncellendi
+  mail_body_wiki_content_updated: "'%{id}' wiki sayfası, %{author} tarafından güncellendi."
+  permission_add_project: Proje oluştur
+  setting_new_project_user_role_id: Yönetici olmayan ancak proje yaratabilen kullanıcıya verilen rol
+  label_view_all_revisions: Tüm değişiklikleri gör
+  label_tag: Etiket
+  label_branch: Kol
+  error_no_tracker_in_project: Bu projeye bağlanmış bir iş tipi yok. Lütfen proje ayarlarını kontrol edin.
+  error_no_default_issue_status: Varsayılan iş durumu tanımlanmamış. Lütfen ayarlarınızı kontrol edin ("Yönetim -> İş durumları" sayfasına gidin).
+  label_group_plural: Gruplar
+  label_group: Grup
+  label_group_new: Yeni grup
+  label_time_entry_plural: Harcanan zaman
+  text_journal_changed: "%{label}: %{old} -> %{new}"
+  text_journal_set_to: "%{label} %{value} yapıldı"
+  text_journal_deleted: "%{label} silindi (%{old})"
+  text_journal_added: "%{label} %{value} eklendi"
+  field_active: Etkin
+  enumeration_system_activity: Sistem Etkinlikleri
+  permission_delete_issue_watchers: İzleyicileri sil
+  version_status_closed: kapalı
+  version_status_locked: kilitli
+  version_status_open: açık
+  error_can_not_reopen_issue_on_closed_version: Kapatılmış bir sürüme ait işler tekrar açılamaz
+  label_user_anonymous: Anonim
+  button_move_and_follow: Yerini değiştir ve takip et
+  setting_default_projects_modules: Yeni projeler için varsayılan modüller
+  setting_gravatar_default: Varsayılan Gravatar resmi
+  field_sharing: Paylaşım
+  label_version_sharing_hierarchy: Proje hiyerarşisi ile
+  label_version_sharing_system: Tüm projeler ile
+  label_version_sharing_descendants: Alt projeler ile
+  label_version_sharing_tree: Proje ağacı ile
+  label_version_sharing_none: Paylaşılmamış
+  error_can_not_archive_project: Bu proje arşivlenemez
+  button_duplicate: Yinele
+  button_copy_and_follow: Kopyala ve takip et
+  label_copy_source: Kaynak
+  setting_issue_done_ratio: İş tamamlanma oranını şununla hesapla
+  setting_issue_done_ratio_issue_status: İş durumunu kullan
+  error_issue_done_ratios_not_updated: İş tamamlanma oranları güncellenmedi.
+  error_workflow_copy_target: Lütfen hedef iş tipi ve rolleri seçin
+  setting_issue_done_ratio_issue_field: İşteki alanı kullan
+  label_copy_same_as_target: Hedef ile aynı
+  label_copy_target: Hedef
+  notice_issue_done_ratios_updated: İş tamamlanma oranları güncellendi.
+  error_workflow_copy_source: Lütfen kaynak iş tipi ve rolleri seçin
+  label_update_issue_done_ratios: İş tamamlanma oranlarını güncelle
+  setting_start_of_week: Takvimleri şundan başlat
+  permission_view_issues: İşleri Gör
+  label_display_used_statuses_only: Sadece bu iş tipi tarafından kullanılan durumları göster
+  label_revision_id: Değişiklik %{value}
+  label_api_access_key: API erişim anahtarı
+  label_api_access_key_created_on: API erişim anahtarı %{value} önce oluşturuldu
+  label_feeds_access_key: RSS erişim anahtarı
+  notice_api_access_key_reseted: API erişim anahtarınız sıfırlandı.
+  setting_rest_api_enabled: REST web servisini etkinleştir
+  label_missing_api_access_key: Bir API erişim anahtarı eksik
+  label_missing_feeds_access_key: Bir RSS erişim anahtarı eksik
+  button_show: Göster
+  text_line_separated: Çoklu değer girilebilir (her satıra bir değer).
+  setting_mail_handler_body_delimiters: Şu satırların birinden sonra e-postayı sonlandır
+  permission_add_subprojects: Alt proje yaratma
+  label_subproject_new: Yeni alt proje
+  text_own_membership_delete_confirmation: "Projeyi daha sonra düzenleyememenize sebep olacak bazı yetkilerinizi kaldırmak üzeresiniz.\nDevam etmek istediğinize emin misiniz?"
+  label_close_versions: Tamamlanmış sürümleri kapat
+  label_board_sticky: Yapışkan
+  label_board_locked: Kilitli
+  permission_export_wiki_pages: Wiki sayfalarını dışarı aktar
+  setting_cache_formatted_text: Biçimlendirilmiş metni önbelleğe al
+  permission_manage_project_activities: Proje etkinliklerini yönetme
+  error_unable_delete_issue_status: İş durumu silinemiyor
+  label_profile: Profil
+  permission_manage_subtasks: Alt işleri yönetme
+  field_parent_issue: Üst iş
+  label_subtask_plural: Alt işler
+  label_project_copy_notifications: Proje kopyalaması esnasında bilgilendirme e-postaları gönder
+  error_can_not_delete_custom_field: Özel alan silinemiyor
+  error_unable_to_connect: Bağlanılamıyor (%{value})
+  error_can_not_remove_role: Bu rol kullanımda olduğundan silinemez.
+  error_can_not_delete_tracker: Bu iş tipi içerisinde iş barındırdığından silinemiyor.
+  field_principal: Temel
+  label_my_page_block: Kişisel sayfa bloğum
+  notice_failed_to_save_members: "Üyeler kaydedilemiyor: %{errors}."
+  text_zoom_out: Uzaklaş
+  text_zoom_in: Yakınlaş
+  notice_unable_delete_time_entry: Zaman kayıt girdisi silinemiyor.
+  label_overall_spent_time: Toplam harcanan zaman
+  field_time_entries: Zaman Kayıtları
+  project_module_gantt: İş-Zaman Çizelgesi
+  project_module_calendar: Takvim
   button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
+  text_are_you_sure_with_children: İş, tüm alt işlerle birlikte silinsin mi?
+  field_text: Metin alanı
+  label_user_mail_option_only_owner: Sadece sahibi olduğum şeyler için
+  setting_default_notification_option: Varsayılan bildirim seçeneği
+  label_user_mail_option_only_my_events: Sadece takip ettiğim ya da içinde olduğum şeyler için
+  label_user_mail_option_only_assigned: Sadece bana atanan şeyler için
+  label_user_mail_option_none: Hiç bir şey için
+  field_member_of_group: Atananın grubu
+  field_assigned_to_role: Atananın rolü
+  notice_not_authorized_archived_project: Erişmeye çalıştığınız proje arşive kaldırılmış.
+  label_principal_search: "Kullanıcı ya da grup ara:"
+  label_user_search: "Kullanıcı ara:"
+  field_visible: Görünür
+  setting_emails_header: "E-Posta başlığı"
+  setting_commit_logtime_activity_id: Kaydedilen zaman için etkinlik
   text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
+  setting_commit_logtime_enabled: Zaman kaydını etkinleştir
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
+  setting_gantt_items_limit: İş-Zaman çizelgesinde gösterilecek en fazla öğe sayısı
+  field_warn_on_leaving_unsaved: Kaydedilmemiş metin bulunan bir sayfadan çıkarken beni uyar
+  text_warn_on_leaving_unsaved: Bu sayfada terkettiğiniz takdirde kaybolacak kaydedilmemiş metinler var.
+  label_my_queries: Özel sorgularım
+  text_journal_changed_no_detail: "%{label} güncellendi"
+  label_news_comment_added: Bir habere yorum eklendi
+  button_expand_all: Tümünü genişlet
+  button_collapse_all: Tümünü daralt
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Seçilen zaman kayıtlarını toplu olarak düzenle
+  text_time_entries_destroy_confirmation: Seçilen zaman kaydını/kayıtlarını silmek istediğinize emin misiniz?
+  label_role_anonymous: Anonim
+  label_role_non_member: Üye Değil
+  label_issue_note_added: Not eklendi
+  label_issue_status_updated: Durum güncellendi
+  label_issue_priority_updated: Öncelik güncellendi
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: İşlerin görünürlüğü
+  label_issues_visibility_all: Tüm işler
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Özel
+  permission_set_issues_private: İşleri özel ya da genel olarak işaretleme
+  label_issues_visibility_public: Özel olmayan tüm işler
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Yol kodlaması(encoding)
+  text_scm_path_encoding_note: "Varsayılan: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Ana dizin
+  field_cvs_module: Modül
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Komut
+  text_scm_command_version: Sürüm
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/uk.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/uk.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -16,7 +16,10 @@
     month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
     abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
     # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
 
   time:
     formats:
@@ -232,7 +235,7 @@
   field_attr_mail: Атрибут Email
   field_onthefly: Створення користувача на льоту
   field_start_date: Початок
-  field_done_ratio: % зроблено
+  field_done_ratio: "% зроблено"
   field_auth_source: Режим аутентифікації
   field_hide_mail: Приховувати мій email
   field_comments: Коментар
@@ -729,7 +732,6 @@
   text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   field_parent_title: Parent page
   label_issue_watchers: Watchers
-  setting_commit_logs_encoding: Commit messages encoding
   button_quote: Quote
   setting_sequential_project_identifiers: Generate sequential project identifiers
   notice_unable_delete_version: Unable to delete version
@@ -937,3 +939,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/vi.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/vi.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -158,7 +158,10 @@
     month_names: [~, "Tháng một", "Tháng hai", "Tháng ba", "Tháng tư", "Tháng năm", "Tháng sáu", "Tháng bảy", "Tháng tám", "Tháng chín", "Tháng mười", "Tháng mười một", "Tháng mười hai"]
     abbr_month_names: [~, "Tháng một", "Tháng hai", "Tháng ba", "Tháng tư", "Tháng năm", "Tháng sáu", "Tháng bảy", "Tháng tám", "Tháng chín", "Tháng mười", "Tháng mười một", "Tháng mười hai"]
     # Used in date_select and datime_select.
-    order: [ :day, :month, :year ]
+    order:
+      - :day
+      - :month
+      - :year
 
   time:
     formats:
@@ -344,7 +347,6 @@
   setting_cross_project_issue_relations: Cho phép quan hệ chéo giữa các dự án
   setting_issue_list_default_columns: Default columns displayed on the issue list
   setting_repositories_encodings: Repositories encodings
-  setting_commit_logs_encoding: Commit messages encoding
   setting_emails_footer: Chữ ký cuối thư
   setting_protocol: Giao thức
   setting_per_page_options: Objects per page options
@@ -992,3 +994,37 @@
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_commit_logs_encoding: Commit messages encoding
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/locales/zh-TW.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/zh-TW.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -20,7 +20,10 @@
     month_names: [~, 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月]
     abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
     # 使用於 date_select 與 datime_select.
-    order: [ :year, :month, :day ]
+    order:
+      - :year
+      - :month
+      - :day
   
   time:
     formats:
@@ -177,7 +180,7 @@
         greater_than_start_date: "必須在開始日期之後"
         not_same_project: "不屬於同一個專案"
         circular_dependency: "這個關聯會導致環狀相依"
-        cant_link_an_issue_with_a_descendant: "項目無法被連結至自己的子項目"
+        cant_link_an_issue_with_a_descendant: "項目無法被連結至自己的子任務"
 
       # You can define own errors for models or model attributes.
       # The values :model, :attribute and :value are always available for interpolation.
@@ -251,9 +254,9 @@
   notice_gantt_chart_truncated: "由於項目數量超過可顯示數量的最大值 (%{max}),故此甘特圖尾部已被截斷"
 
   error_can_t_load_default_data: "無法載入預設組態: %{value}"
-  error_scm_not_found: "在 SCM 儲存庫中找不到這個項目或版次。"
-  error_scm_command_failed: "嘗試存取 SCM 儲存庫時發生錯誤: %{value}"
-  error_scm_annotate: "SCM 儲存庫中無此項目或此項目無法被加註。"
+  error_scm_not_found: "在儲存機制中找不到這個項目或修訂版。"
+  error_scm_command_failed: "嘗試存取儲存機制時發生錯誤: %{value}"
+  error_scm_annotate: "項目不存在或項目無法被加上附註。"
   error_issue_not_found_in_project: '該項目不存在或不屬於此專案'
   error_no_tracker_in_project: '此專案尚未指定追蹤標籤。請檢查專案的設定資訊。'
   error_no_default_issue_status: '尚未定義項目狀態的預設值。請您前往「網站管理」->「項目狀態清單」頁面,檢查相關組態設定。'
@@ -353,7 +356,7 @@
   field_done_ratio: 完成百分比
   field_auth_source: 認證模式
   field_hide_mail: 隱藏我的電子郵件
-  field_comments: 註解
+  field_comments: 回應
   field_url: 網址
   field_start_page: 首頁
   field_subproject: 子專案
@@ -372,7 +375,7 @@
   field_time_zone: 時區
   field_searchable: 可用做搜尋條件
   field_default_value: 預設值
-  field_comments_sorting: 註解排序
+  field_comments_sorting: 回應排序
   field_parent_title: 父頁面
   field_editable: 可編輯
   field_watcher: 觀察者
@@ -380,11 +383,20 @@
   field_content: 內容
   field_group_by: 結果分組方式
   field_sharing: 共用
-  field_parent_issue: 父工作項目
+  field_parent_issue: 父任務
   field_member_of_group: "被指派者的群組"
   field_assigned_to_role: "被指派者的角色"
   field_text: 內容文字
   field_visible: 可被看見
+  field_warn_on_leaving_unsaved: "提醒我將要離開的頁面中尚有未儲存的資料"
+  field_issues_visibility: 項目可見度
+  field_is_private: 私人
+  field_commit_logs_encoding: 認可訊息編碼
+  field_scm_path_encoding: 路徑編碼
+  field_path_to_repository: 儲存機制路徑
+  field_root_directory: 根資料夾
+  field_cvsroot: CVSROOT
+  field_cvs_module: 模組
   
   setting_app_title: 標題
   setting_app_subtitle: 副標題
@@ -401,18 +413,17 @@
   setting_text_formatting: 文字格式
   setting_wiki_compression: 壓縮 Wiki 歷史文章
   setting_feeds_limit: RSS 新聞限制
-  setting_autofetch_changesets: 自動取得送交版次
+  setting_autofetch_changesets: 自動擷取認可
   setting_default_projects_public: 新建立之專案預設為「公開」
-  setting_sys_api_enabled: 啟用管理版本庫之網頁服務 (Web Service)
-  setting_commit_ref_keywords: 送交用於參照項目之關鍵字
-  setting_commit_fix_keywords: 送交用於修正項目之關鍵字
+  setting_sys_api_enabled: 啟用管理儲存機制的網頁服務 (Web Service)
+  setting_commit_ref_keywords: 認可用於參照項目之關鍵字
+  setting_commit_fix_keywords: 認可用於修正項目之關鍵字
   setting_autologin: 自動登入
   setting_date_format: 日期格式
   setting_time_format: 時間格式
   setting_cross_project_issue_relations: 允許關聯至其它專案的項目
   setting_issue_list_default_columns: 預設顯示於項目清單的欄位
   setting_repositories_encodings: 版本庫編碼
-  setting_commit_logs_encoding: 送交訊息編碼
   setting_emails_header: 電子郵件前頭說明
   setting_emails_footer: 電子郵件附帶說明
   setting_protocol: 協定
@@ -429,7 +440,7 @@
   setting_gravatar_default: 預設全球認證大頭像圖片
   setting_diff_max_lines_displayed: 差異顯示行數之最大值
   setting_file_max_size_displayed: 檔案內容顯示大小之最大值
-  setting_repository_log_display_limit: 版次顯示數目之最大值
+  setting_repository_log_display_limit: 修訂版顯示數目之最大值
   setting_openid: 允許使用 OpenID 登入與註冊
   setting_password_min_length: 密碼最小長度
   setting_new_project_user_role_id: 管理者以外之用戶建立新專案時,將被指派的角色
@@ -441,7 +452,7 @@
   setting_rest_api_enabled: 啟用 REST 網路服務技術(Web Service)
   setting_cache_formatted_text: 快取已格式化文字
   setting_default_notification_option: 預設通知選項
-  setting_commit_logtime_enabled: 啟用送交中的時間記錄
+  setting_commit_logtime_enabled: 啟用認可中的時間記錄
   setting_commit_logtime_activity_id: 時間記錄對應的活動
   setting_gantt_items_limit: 甘特圖中項目顯示數量的最大值
   
@@ -457,6 +468,8 @@
   permission_add_issues: 新增項目
   permission_edit_issues: 編輯項目
   permission_manage_issue_relations: 管理項目關聯
+  permission_set_issues_private: 設定項目為公開或私人
+  permission_set_own_issues_private: 設定自己的項目為公開或私人
   permission_add_issue_notes: 新增筆記
   permission_edit_issue_notes: 編輯筆記
   permission_edit_own_issue_notes: 編輯自己的筆記
@@ -474,7 +487,7 @@
   permission_edit_time_entries: 編輯工時紀錄
   permission_edit_own_time_entries: 編輯自己的工時記錄
   permission_manage_news: 管理新聞
-  permission_comment_news: 註解新聞
+  permission_comment_news: 回應新聞
   permission_manage_documents: 管理文件
   permission_view_documents: 檢視文件
   permission_manage_files: 管理檔案
@@ -487,10 +500,10 @@
   permission_edit_wiki_pages: 編輯 wiki 頁面
   permission_delete_wiki_pages_attachments: 刪除附件
   permission_protect_wiki_pages: 專案 wiki 頁面
-  permission_manage_repository: 管理版本庫
-  permission_browse_repository: 瀏覽版本庫
+  permission_manage_repository: 管理儲存機制
+  permission_browse_repository: 瀏覽儲存機制
   permission_view_changesets: 檢視變更集
-  permission_commit_access: 存取送交之變更
+  permission_commit_access: 存取認可
   permission_manage_boards: 管理討論版
   permission_view_messages: 檢視訊息
   permission_add_messages: 新增訊息
@@ -499,7 +512,7 @@
   permission_delete_messages: 刪除訊息
   permission_delete_own_messages: 刪除自己的訊息
   permission_export_wiki_pages: 匯出 wiki 頁面
-  permission_manage_subtasks: 管理子工作項目
+  permission_manage_subtasks: 管理子任務
   
   project_module_issue_tracking: 項目追蹤
   project_module_time_tracking: 工時追蹤
@@ -532,6 +545,9 @@
   label_issues_by: "項目按 %{value} 分組顯示"
   label_issue_added: 項目已新增
   label_issue_updated: 項目已更新
+  label_issue_note_added: 筆記已新增
+  label_issue_status_updated: 狀態已更新
+  label_issue_priority_updated: 優先權已更新
   label_document: 文件
   label_document_new: 建立新文件
   label_document_plural: 文件
@@ -540,6 +556,8 @@
   label_role_plural: 角色
   label_role_new: 建立新角色
   label_role_and_permissions: 角色與權限
+  label_role_anonymous: 匿名者
+  label_role_non_member: 非會員
   label_member: 成員
   label_member_new: 建立新成員
   label_member_plural: 成員
@@ -619,6 +637,7 @@
   label_news_latest: 最近新聞
   label_news_view_all: 檢視全部的新聞
   label_news_added: 新聞已新增
+  label_news_comment_added: 回應已加入新聞
   label_settings: 設定
   label_overview: 概觀
   label_version: 版本
@@ -665,18 +684,19 @@
   label_last_changes: "最近 %{count} 個變更"
   label_change_view_all: 檢視全部的變更
   label_personalize_page: 自訂版面
-  label_comment: 註解
-  label_comment_plural: 註解
+  label_comment: 回應
+  label_comment_plural: 回應
   label_x_comments:
-    zero: 無註解
-    one: 1 個註解
-    other: "%{count} 個註解"
-  label_comment_add: 加入新註解
-  label_comment_added: 新註解已加入
-  label_comment_delete: 刪除註解
+    zero: 無回應
+    one: 1 個回應
+    other: "%{count} 個回應"
+  label_comment_add: 加入新回應
+  label_comment_added: 新回應已加入
+  label_comment_delete: 刪除回應
   label_query: 自訂查詢
   label_query_plural: 自訂查詢
   label_query_new: 建立新查詢
+  label_my_queries: 我的自訂查詢
   label_filter_add: 加入新篩選條件
   label_filter_plural: 篩選條件
   label_equals: 等於
@@ -702,26 +722,26 @@
   label_contains: 包含
   label_not_contains: 不包含
   label_day_plural: 天
-  label_repository: 版本控管
-  label_repository_plural: 版本控管
+  label_repository: 儲存機制
+  label_repository_plural: 儲存機制清單
   label_browse: 瀏覽
   label_modification: "%{count} 變更"
   label_modification_plural: "%{count} 變更"
   label_branch: 分支
   label_tag: 標籤 
-  label_revision: 版次
-  label_revision_plural: 版次清單
-  label_revision_id: "版次 %{value}"
-  label_associated_revisions: 相關版次
+  label_revision: 修訂版
+  label_revision_plural: 修訂版清單
+  label_revision_id: "修訂版 %{value}"
+  label_associated_revisions: 關聯的修訂版
   label_added: 已新增
   label_modified: 已修改
   label_copied: 已複製
   label_renamed: 已重新命名
   label_deleted: 已刪除
-  label_latest_revision: 最新版次
-  label_latest_revision_plural: 最近版次清單
-  label_view_revisions: 檢視版次清單
-  label_view_all_revisions: 檢視全部的版次清單
+  label_latest_revision: 最新的修訂版
+  label_latest_revision_plural: 最新的修訂版清單
+  label_view_revisions: 檢視修訂版清單
+  label_view_all_revisions: 檢視所有的的修訂版清單
   label_max_size: 最大長度
   label_sort_highest: 移動至開頭
   label_sort_higher: 往上移動
@@ -753,8 +773,8 @@
   label_time_tracking: 工時追蹤
   label_change_plural: 變更
   label_statistics: 統計資訊
-  label_commits_per_month: 依月份統計送交次數
-  label_commits_per_author: 依作者統計送交次數
+  label_commits_per_month: 依月份統計認可
+  label_commits_per_author: 依作者統計認可
   label_view_diff: 檢視差異
   label_diff_inline: 直列
   label_diff_side_by_side: 並排
@@ -814,7 +834,8 @@
   label_changeset_plural: 變更集清單
   label_default_columns: 預設欄位清單
   label_no_change_option: (維持不變)
-  label_bulk_edit_selected_issues: 編輯選定的項目
+  label_bulk_edit_selected_issues: 大量編輯選取的項目
+  label_bulk_edit_selected_time_entries: 大量編輯選取的工時項目
   label_theme: 畫面主題
   label_default: 預設
   label_search_titles_only: 僅搜尋標題
@@ -872,16 +893,24 @@
   label_missing_api_access_key: 找不到 API 存取金鑰
   label_api_access_key_created_on: "API 存取金鑰建立於 %{value} 之前"
   label_profile: 配置概況
-  label_subtask_plural: 子工作項目
+  label_subtask_plural: 子任務
   label_project_copy_notifications: 在複製專案的過程中,傳送通知郵件
   label_principal_search: "搜尋用戶或群組:"
   label_user_search: "搜尋用戶:"
+  label_additional_workflow_transitions_for_author: 用戶為作者時額外允許的流程轉換
+  label_additional_workflow_transitions_for_assignee: 用戶為被指定者時額外允許的流程轉換
+  label_issues_visibility_all: 所有項目
+  label_issues_visibility_public: 所有非私人項目
+  label_issues_visibility_own: 使用者所建立的或被指派的項目
+  label_git_report_last_commit: 報告最後認可的文件和目錄
 
   button_login: 登入
   button_submit: 送出
   button_save: 儲存
   button_check_all: 全選
   button_uncheck_all: 全不選
+  button_collapse_all: 全部摺疊
+  button_expand_all: 全部展開
   button_delete: 刪除
   button_create: 建立
   button_create_and_continue: 繼續建立
@@ -941,6 +970,7 @@
   text_are_you_sure: 確定執行?
   text_are_you_sure_with_children: "確定刪除此工作項目及其子項目?"
   text_journal_changed: "%{label} 從 %{old} 變更為 %{new}"
+  text_journal_changed_no_detail: "%{label} 已更新"
   text_journal_set_to: "%{label} 設定為 %{value}"
   text_journal_deleted: "%{label} 已刪除 (%{old})"
   text_journal_added: "%{label} %{value} 已新增"
@@ -955,7 +985,7 @@
   text_unallowed_characters: 不允許的字元
   text_comma_separated: 可輸入多個值(須以逗號分隔)。
   text_line_separated: 可輸入多個值(須以換行符號分隔,即每列只能輸入一個值)。
-  text_issues_ref_in_commit_messages: 送交訊息中參照(或修正)項目之關鍵字
+  text_issues_ref_in_commit_messages: 認可訊息中參照(或修正)項目之關鍵字
   text_issue_added: "項目 %{id} 已被 %{author} 通報。"
   text_issue_updated: "項目 %{id} 已被 %{author} 更新。"
   text_wiki_destroy_confirmation: 您確定要刪除這個 wiki 和其中的所有內容?
@@ -968,6 +998,8 @@
   text_status_changed_by_changeset: "已套用至變更集 %{value}."
   text_time_logged_by_changeset: "紀錄於變更集 %{value}."
   text_issues_destroy_confirmation: '確定刪除已選擇的項目?'
+  text_issues_destroy_descendants_confirmation: "這麼做將會一併刪除 %{count} 子任務。"
+  text_time_entries_destroy_confirmation: 您確定要刪除所選擇的工時紀錄?
   text_select_project_modules: '選擇此專案可使用之模組:'
   text_default_administrator_account_changed: 已變更預設管理員帳號內容
   text_file_repository_writable: 可寫入附加檔案目錄
@@ -981,7 +1013,7 @@
   text_enumeration_destroy_question: "目前有 %{count} 個物件使用此列舉值。"
   text_enumeration_category_reassign_to: '重新設定其列舉值為:'
   text_email_delivery_not_configured: "您尚未設定電子郵件傳送方式,因此提醒選項已被停用。\n請在 config/configuration.yml 中設定 SMTP 之後,重新啟動 Redmine,以啟用電子郵件提醒選項。"
-  text_repository_usernames_mapping: "選擇或更新 Redmine 使用者與版本庫使用者之對應關係。\n版本庫中之使用者帳號或電子郵件信箱,與 Redmine 設定相同者,將自動產生對應關係。"
+  text_repository_usernames_mapping: "選擇或更新 Redmine 使用者與儲存機制紀錄使用者之對應關係。\n儲存機制中之使用者帳號或電子郵件信箱,與 Redmine 設定相同者,將自動產生對應關係。"
   text_diff_truncated: '... 這份差異已被截短以符合顯示行數之最大值'
   text_custom_field_possible_values_info: '一列輸入一個值'
   text_wiki_page_destroy_question: "此頁面包含 %{descendants} 個子頁面及延伸頁面。 請選擇您想要的動作?"
@@ -991,7 +1023,15 @@
   text_own_membership_delete_confirmation: "您在專案中,所擁有的部分或全部權限即將被移除,在這之後可能無法再次編輯此專案。\n您確定要繼續執行這個動作?"
   text_zoom_in: 放大
   text_zoom_out: 縮小
-  
+  text_warn_on_leaving_unsaved: "若您離開這個頁面,此頁面所包含的未儲存資料將會遺失。"
+  text_scm_path_encoding_note: "預設: UTF-8"
+  text_git_repository_note: "純(Bare)儲存機制與本機儲存機制 (e.g. /gitrepo, c:\gitrepo)"
+  text_mercurial_repository_note: "本機儲存機制 (e.g. /hgrepo, c:\hgrepo)"
+  text_scm_command: 命令
+  text_scm_command_version: 版本
+  text_scm_config: 您可以在 config/configuration.yml 中設定 SCM 命令。請在編輯該檔案之後重新啟動 Redmine 應用程式。
+  text_scm_command_not_available: SCM 命令無法使用。請檢查管理面板中的設定。
+
   default_role_manager: 管理人員
   default_role_developer: 開發人員
   default_role_reporter: 報告人員
@@ -1018,7 +1058,3 @@
   enumeration_doc_categories: 文件分類
   enumeration_activities: 活動 (時間追蹤)
   enumeration_system_activity: 系統活動
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/zh.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/locales/zh.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -1,29 +1,38 @@
 # Chinese (China) translations for Ruby on Rails 
 # by tsechingho (http://github.com/tsechingho)
-
 zh:
+  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
   direction: ltr
   date:
     formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
       default: "%Y-%m-%d"
       short: "%b%d日"
       long: "%Y年%b%d日"
+      
     day_names: [星期天, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六]
     abbr_day_names: [日, 一, 二, 三, 四, 五, 六]
+
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
     month_names: [~, 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月]
     abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
-    order: [ :year, :month, :day ]
-  
+    # Used in date_select and datime_select.
+    order:
+      - :year
+      - :month
+      - :day
+
   time:
     formats:
       default: "%Y年%b%d日 %A %H:%M:%S"
       time: "%H:%M"
-      time: "%H:%M"
       short: "%b%d日 %H:%M"
       long: "%Y年%b%d日 %H:%M"
     am: "上午"
     pm: "下午"
-  
+
   datetime:
     distance_in_words:
       half_a_minute: "半分钟"
@@ -60,32 +69,13 @@
       almost_x_years:
         one:   "将近 1 年"
         other: "将近 %{count} 年"
-    prompts:
-      year:   "年"
-      month:  "月"
-      day:    "日"
-      hour:   "时"
-      minute: "分"
-      second: "秒"
-  
+
   number:
+    # Default format for numbers
     format:
-      separator: "."
-      delimiter: ","
+      separator: "." 
+      delimiter: ""
       precision: 3
-    currency:
-      format:
-        format: "%n %u"
-        unit: "元"
-        separator: "."
-        delimiter: ","
-        precision: 2
-    percentage:
-      format:
-        delimiter: ""
-    precision:
-      format:
-        delimiter: ""
     human:
       format:
         delimiter: ""
@@ -96,24 +86,24 @@
           byte:
             one: "Byte"
             other: "Bytes"
-          kb: "KB"
+          kb: "kB"
           mb: "MB"
           gb: "GB"
           tb: "TB"
-  
+
+        
+# Used in array.to_sentence.
   support:
     array:
-      words_connector: ", "
-      two_words_connector: " 和 "
-      last_word_connector: ", 和 "
-  
+      sentence_connector: "和"
+      skip_last_comma: false
+      
   activerecord:
     errors:
       template:
-        header: 
-          one: "有 1 个错误发生导致「%{model}」无法被保存。"
-          other: "有 %{count} 个错误发生导致「%{model}」无法被保存。"
-        body: "如下字段出现错误:"
+        header:
+          one:    "由于发生了一个错误 %{model} 无法保存"
+          other:  "%{count} 个错误使得 %{model} 无法保存"
       messages:
         inclusion: "不包含于列表中"
         exclusion: "是保留关键字"
@@ -127,6 +117,7 @@
         wrong_length: "长度非法(必须为 %{count} 个字符)"
         taken: "已经被使用"
         not_a_number: "不是数字"
+        not_a_date: "不是合法日期"
         greater_than: "必须大于 %{count}"
         greater_than_or_equal_to: "必须大于或等于 %{count}"
         equal_to: "必须等于 %{count}"
@@ -137,7 +128,7 @@
         greater_than_start_date: "必须在起始日期之后"
         not_same_project: "不属于同一个项目"
         circular_dependency: "此关联将导致循环依赖"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务"
 
   actionview_instancetag_blank_option: 请选择
   
@@ -168,17 +159,21 @@
   notice_file_not_found: 您访问的页面不存在或已被删除。
   notice_locking_conflict: 数据已被另一位用户更新
   notice_not_authorized: 对不起,您无权访问此页面。
-  notice_email_sent: "邮件已成功发送到 %{value}"
+  notice_not_authorized_archived_project: 要访问的项目已经归档。
+  notice_email_sent: "邮件已发送至 %{value}"
   notice_email_error: "发送邮件时发生错误 (%{value})"
   notice_feeds_access_key_reseted: 您的RSS存取键已被重置。
   notice_api_access_key_reseted: 您的API访问键已被重置。
   notice_failed_to_save_issues: "%{count} 个问题保存失败(共选择 %{total} 个问题):%{ids}."
+  notice_failed_to_save_members: "成员保存失败: %{errors}."
   notice_no_issue_selected: "未选择任何问题!请选择您要编辑的问题。"
   notice_account_pending: "您的帐号已被成功创建,正在等待管理员的审核。"
   notice_default_data_loaded: 成功载入默认设置。
   notice_unable_delete_version: 无法删除版本
+  notice_unable_delete_time_entry: 无法删除工时
   notice_issue_done_ratios_updated: 问题完成度已更新。
-
+  notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})"
+  
   error_can_t_load_default_data: "无法载入默认设置:%{value}"
   error_scm_not_found: "版本库中不存在该条目和(或)其修订版本。"
   error_scm_command_failed: "访问版本库时发生错误:%{value}"
@@ -186,13 +181,17 @@
   error_issue_not_found_in_project: '问题不存在或不属于此项目'
   error_no_tracker_in_project: 该项目未设定跟踪标签,请检查项目配置。
   error_no_default_issue_status: 未设置默认的问题状态。请检查系统设置("管理" -> "问题状态")。
+  error_can_not_delete_custom_field: 无法删除自定义属性
+  error_can_not_delete_tracker: "该跟踪标签已包含问题,无法删除"
+  error_can_not_remove_role: "该角色正在使用中,无法删除"
   error_can_not_reopen_issue_on_closed_version: 该问题被关联到一个已经关闭的版本,因此无法重新打开。
   error_can_not_archive_project: 该项目无法被存档
   error_issue_done_ratios_not_updated: 问题完成度未能被更新。
   error_workflow_copy_source: 请选择一个源跟踪标签或者角色
   error_workflow_copy_target: 请选择目标跟踪标签和角色
-
-  warning_attachments_not_saved: "%{count} 个文件保存失败。"
+  error_unable_delete_issue_status: '无法删除问题状态'
+  error_unable_to_connect: "无法连接 (%{value})"
+  warning_attachments_not_saved: "%{count} 个文件保存失败"
   
   mail_subject_lost_password: "您的 %{value} 密码"
   mail_body_lost_password: '请点击以下链接来修改您的密码:'
@@ -206,9 +205,9 @@
   mail_body_reminder: "指派给您的 %{count} 个问题需要在 %{days} 天内完成:"
   mail_subject_wiki_content_added: "'%{id}' wiki页面已添加"
   mail_body_wiki_content_added: "'%{id}' wiki页面已由 %{author} 添加。"
-  mail_subject_wiki_content_updated: "'%{id}' wiki页面已更新"
+  mail_subject_wiki_content_updated: "'%{id}' wiki页面已更新。"
   mail_body_wiki_content_updated: "'%{id}' wiki页面已由 %{author} 更新。"
-
+  
   gui_validation_error: 1 个错误
   gui_validation_error_plural: "%{count} 个错误"
   
@@ -247,11 +246,12 @@
   field_priority: 优先级
   field_fixed_version: 目标版本
   field_user: 用户
+  field_principal: 用户/用户组
   field_role: 角色
   field_homepage: 主页
   field_is_public: 公开
   field_parent: 上级项目
-  field_is_in_roadmap: 在路线图中显示问题
+  field_is_in_roadmap: 在路线图中显示
   field_login: 登录名
   field_mail_notification: 邮件通知
   field_admin: 管理员
@@ -272,8 +272,8 @@
   field_attr_lastname: 姓氏属性
   field_attr_mail: 邮件属性
   field_onthefly: 即时用户生成
-  field_start_date: 开始
-  field_done_ratio: 完成度
+  field_start_date: 开始日期
+  field_done_ratio: % 完成
   field_auth_source: 认证模式
   field_hide_mail: 隐藏我的邮件地址
   field_comments: 注释
@@ -291,6 +291,7 @@
   field_redirect_existing_links: 重定向到现有链接
   field_estimated_hours: 预期时间
   field_column_names: 列
+  field_time_entries: 工时
   field_time_zone: 时区
   field_searchable: 可用作搜索条件
   field_default_value: 默认值
@@ -302,7 +303,12 @@
   field_content: 内容
   field_group_by: 根据此条件分组
   field_sharing: 共享
-
+  field_parent_issue: 父任务
+  field_member_of_group: 用户组的成员
+  field_assigned_to_role: 角色的成员
+  field_text: 文本字段
+  field_visible: 可见的
+  
   setting_app_title: 应用程序标题
   setting_app_subtitle: 应用程序子标题
   setting_welcome_text: 欢迎文字
@@ -310,7 +316,7 @@
   setting_login_required: 要求认证
   setting_self_registration: 允许自注册
   setting_attachment_max_size: 附件大小限制
-  setting_issues_export_limit: 问题输出条目的限制
+  setting_issues_export_limit: 问题导出条目的限制
   setting_mail_from: 邮件发件人地址
   setting_bcc_recipients: 使用密件抄送 (bcc)
   setting_plain_text_mail: 纯文本(无HTML)
@@ -329,7 +335,7 @@
   setting_cross_project_issue_relations: 允许不同项目之间的问题关联
   setting_issue_list_default_columns: 问题列表中显示的默认列
   setting_repositories_encodings: 版本库编码
-  setting_commit_logs_encoding: 提交注释的编码
+  setting_emails_header: 邮件头
   setting_emails_footer: 邮件签名
   setting_protocol: 协议
   setting_per_page_options: 每页显示条目个数的设置
@@ -355,12 +361,18 @@
   setting_issue_done_ratio_issue_status: 使用问题状态
   setting_start_of_week: 日历开始于
   setting_rest_api_enabled: 启用REST web service
-
+  setting_cache_formatted_text: 缓存格式化文字
+  setting_default_notification_option: 默认提醒选项
+  setting_commit_logtime_enabled: 激活时间日志
+  setting_commit_logtime_activity_id: 记录的活动
+  setting_gantt_items_limit: 在甘特图上显示的最大记录数
+  
   permission_add_project: 新建项目
   permission_add_subprojects: 新建子项目
   permission_edit_project: 编辑项目
   permission_select_project_modules: 选择项目模块
   permission_manage_members: 管理成员
+  permission_manage_project_activities: 管理项目活动
   permission_manage_versions: 管理版本
   permission_manage_categories: 管理问题类别
   permission_view_issues: 查看问题
@@ -408,7 +420,9 @@
   permission_edit_own_messages: 编辑自己的帖子
   permission_delete_messages: 删除帖子
   permission_delete_own_messages: 删除自己的帖子
-
+  permission_export_wiki_pages: 导出 wiki 页面
+  permission_manage_subtasks: 管理子任务
+  
   project_module_issue_tracking: 问题跟踪
   project_module_time_tracking: 时间跟踪
   project_module_news: 新闻
@@ -417,6 +431,8 @@
   project_module_wiki: Wiki
   project_module_repository: 版本库
   project_module_boards: 讨论区
+  project_module_calendar: 日历
+  project_module_gantt: 甘特图
   
   label_user: 用户
   label_user_plural: 用户
@@ -475,6 +491,7 @@
   label_my_page: 我的工作台
   label_my_account: 我的帐号
   label_my_projects: 我的项目
+  label_my_page_block: 我的工作台模块
   label_administration: 管理
   label_login: 登录
   label_logout: 退出
@@ -484,7 +501,7 @@
   label_last_login: 最后登录
   label_registered_on: 注册于
   label_activity: 活动
-  label_overall_activity: 全部活动
+  label_overall_activity: 活动概览
   label_user_activity: "%{value} 的活动"
   label_new: 新建
   label_logged_as: 登录为
@@ -547,18 +564,18 @@
     one:   1 打开
     other: "%{count} 打开"
   label_x_closed_issues_abbr:
-    zero:  0 关闭
-    one:   1 关闭
-    other: "%{count} 关闭"
+    zero:  0 已关闭
+    one:   1 已关闭
+    other: "%{count} 已关闭"
   label_total: 合计
   label_permissions: 权限
   label_current_status: 当前状态
-  label_new_statuses_allowed: 可变更的新状态
+  label_new_statuses_allowed: 允许的新状态
   label_all: 全部
   label_none: 无
   label_nobody: 无人
-  label_next: 下一个
-  label_previous: 上一个
+  label_next: 下一页
+  label_previous: 上一页
   label_used_by: 使用中
   label_details: 详情
   label_add_note: 添加说明
@@ -652,6 +669,7 @@
   label_changes_details: 所有变更的详情
   label_issue_tracking: 问题跟踪
   label_spent_time: 耗时
+  label_overall_spent_time: 总体耗时
   label_f_hour: "%{value} 小时"
   label_f_hour_plural: "%{value} 小时"
   label_time_tracking: 时间跟踪
@@ -689,6 +707,8 @@
   label_board: 讨论区
   label_board_new: 新建讨论区
   label_board_plural: 讨论区
+  label_board_locked: 锁定
+  label_board_sticky: 置顶
   label_topic_plural: 主题
   label_message_plural: 帖子
   label_message_last: 最新的帖子
@@ -722,12 +742,16 @@
   label_search_titles_only: 仅在标题中搜索
   label_user_mail_option_all: "收取我的项目的所有通知"
   label_user_mail_option_selected: "收取选中项目的所有通知..."
+  label_user_mail_option_none: "不收取任何通知"
+  label_user_mail_option_only_my_events: "只收取我跟踪或参与的项目的通知"
+  label_user_mail_option_only_assigned: "只收取分配给我的"
+  label_user_mail_option_only_owner: 只收取由我创建的
   label_user_mail_no_self_notified: "不要发送对我自己提交的修改的通知"
   label_registration_activation_by_email: 通过邮件认证激活帐号
   label_registration_manual_activation: 手动激活帐号
   label_registration_automatic_activation: 自动激活帐号
   label_display_per_page: "每页显示:%{value}"
-  label_age: 年龄
+  label_age: 提交时间
   label_change_properties: 修改属性
   label_general: 一般
   label_more: 更多
@@ -769,6 +793,11 @@
   label_api_access_key: API访问键
   label_missing_api_access_key: 缺少API访问键
   label_api_access_key_created_on: API访问键是在 %{value} 之前建立的
+  label_profile: 简介
+  label_subtask_plural: 子任务
+  label_project_copy_notifications: 复制项目时发送邮件通知
+  label_principal_search: "搜索用户或组:"
+  label_user_search: "搜索用户:"
   
   button_login: 登录
   button_submit: 提交
@@ -780,6 +809,7 @@
   button_create_and_continue: 创建并继续
   button_test: 测试
   button_edit: 编辑
+  button_edit_associated_wikipage: "编辑相关wiki页面: %{page_title}"
   button_add: 新增
   button_change: 修改
   button_apply: 应用
@@ -817,13 +847,13 @@
   status_active: 活动的
   status_registered: 已注册
   status_locked: 已锁定
-
+  
   version_status_open: 打开
   version_status_locked: 锁定
   version_status_closed: 关闭
 
   field_active: 活动
-
+  
   text_select_mail_notifications: 选择需要发送邮件通知的动作
   text_regexp_info: 例如:^[A-Z0-9]+$
   text_min_max_length_info: 0 表示没有限制
@@ -831,6 +861,7 @@
   text_subprojects_destroy_warning: "以下子项目也将被同时删除:%{value}"
   text_workflow_edit: 选择角色和跟踪标签来编辑工作流程
   text_are_you_sure: 您确定?
+  text_are_you_sure_with_children: "删除问题及子任务?"
   text_journal_changed: "%{label} 从 %{old} 变更为 %{new}"
   text_journal_set_to: "%{label} 被设置为 %{value}"
   text_journal_deleted: "%{label} 已删除 (%{old})"
@@ -857,6 +888,7 @@
   text_no_configuration_data: "角色、跟踪标签、问题状态和工作流程还没有设置。\n强烈建议您先载入默认设置,然后在此基础上进行修改。"
   text_load_default_configuration: 载入默认设置
   text_status_changed_by_changeset: "已应用到变更列表 %{value}."
+  text_time_logged_by_changeset: "已应用到修订版本 %{value}."
   text_issues_destroy_confirmation: '您确定要删除选中的问题吗?'
   text_select_project_modules: '请选择此项目可以使用的模块:'
   text_default_administrator_account_changed: 默认的管理员帐号已改变
@@ -868,18 +900,20 @@
   text_assign_time_entries_to_project: 将已上报的工作量提交到项目中
   text_reassign_time_entries: '将已上报的工作量指定到此问题:'
   text_user_wrote: "%{value} 写到:"
+  text_enumeration_destroy_question: "%{count} 个对象被关联到了这个枚举值。"
   text_enumeration_category_reassign_to: '将它们关联到新的枚举值:'
-  text_enumeration_destroy_question: "%{count} 个对象被关联到了这个枚举值。"
   text_email_delivery_not_configured: "邮件参数尚未配置,因此邮件通知功能已被禁用。\n请在config/configuration.yml中配置您的SMTP服务器信息并重新启动以使其生效。"
   text_repository_usernames_mapping: "选择或更新与版本库中的用户名对应的Redmine用户。\n版本库中与Redmine中的同名用户将被自动对应。"
   text_diff_truncated: '... 差别内容超过了可显示的最大行数并已被截断'
   text_custom_field_possible_values_info: '每项数值一行'
   text_wiki_page_destroy_question: 此页面有 %{descendants} 个子页面和下级页面。您想进行那种操作?
-  text_wiki_page_reassign_children: 将子页面的上级页面设置为
   text_wiki_page_nullify_children: 将子页面保留为根页面
   text_wiki_page_destroy_children: 删除子页面及其所有下级页面
+  text_wiki_page_reassign_children: 将子页面的上级页面设置为
   text_own_membership_delete_confirmation: 你正在删除你现有的某些或全部权限,如果这样做了你可能将会再也无法编辑该项目了。你确定要继续吗?
-
+  text_zoom_in: Zoom in
+  text_zoom_out: Zoom out
+  
   default_role_manager: 管理人员
   default_role_developer: 开发人员
   default_role_reporter: 报告人员
@@ -906,52 +940,43 @@
   enumeration_doc_categories: 文档类别
   enumeration_activities: 活动(时间跟踪)
   enumeration_system_activity: 系统活动
-  label_board_sticky: 置顶
-  label_board_locked: 锁定
-  permission_export_wiki_pages: 导出 wiki 页面
-  setting_cache_formatted_text: 缓存格式化文本
-  permission_manage_project_activities: 管理项目活动
-  error_unable_delete_issue_status: 无法删除问题状态
-  label_profile: 简介
-  permission_manage_subtasks: 管理子任务
-  field_parent_issue: 父任务
-  label_subtask_plural: 子任务
-  label_project_copy_notifications: 复制项目时发送邮件通知
-  error_can_not_delete_custom_field: 不能删除自定义属性
-  error_unable_to_connect: 不能连接到 (%{value})
-  error_can_not_remove_role: 该角色正在使用中, 不能删除.
-  error_can_not_delete_tracker: 该跟踪标签包含问题, 不能删除.
-  field_principal: 用户/用户组
-  label_my_page_block: 我的工作台模块
-  notice_failed_to_save_members: "成员保存失败:%{errors}。"
-  text_zoom_out: 缩小
-  text_zoom_in: 放大
-  notice_unable_delete_time_entry: 无法删除工时记录。
-  label_overall_spent_time: 所有项目耗用工时
-  field_time_entries: Log time
-  project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+
   field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
   text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
   label_my_queries: My custom queries
   text_journal_changed_no_detail: "%{label} updated"
+  label_news_comment_added: Comment added to a news
+  button_expand_all: Expand all
+  button_collapse_all: Collapse all
+  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
+  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
+  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
+  label_role_anonymous: Anonymous
+  label_role_non_member: Non member
+  label_issue_note_added: Note added
+  label_issue_status_updated: Status updated
+  label_issue_priority_updated: Priority updated
+  label_issues_visibility_own: Issues created by or assigned to the user
+  field_issues_visibility: Issues visibility
+  label_issues_visibility_all: All issues
+  permission_set_own_issues_private: Set own issues public or private
+  field_is_private: Private
+  permission_set_issues_private: Set issues public or private
+  label_issues_visibility_public: All non private issues
+  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+
+  field_commit_logs_encoding: 提交注释的编码
+  field_scm_path_encoding: Path encoding
+  text_scm_path_encoding_note: "Default: UTF-8"
+  field_path_to_repository: Path to repository
+  field_root_directory: Root directory
+  field_cvs_module: Module
+  field_cvsroot: CVSROOT
+  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
+  text_scm_command: Command
+  text_scm_command_version: Version
+  label_git_report_last_commit: Report last commit for files and directories
+  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
+  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
--- a/config/routes.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/config/routes.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -14,13 +14,21 @@
   map.connect 'roles/workflow/:id/:role_id/:tracker_id', :controller => 'roles', :action => 'workflow'
   map.connect 'help/:ctrl/:page', :controller => 'help'
 
-  map.connect 'projects/:project_id/time_entries/report', :controller => 'time_entry_reports', :action => 'report'
   map.with_options :controller => 'time_entry_reports', :action => 'report',:conditions => {:method => :get} do |time_report|
+    time_report.connect 'projects/:project_id/issues/:issue_id/time_entries/report'
+    time_report.connect 'projects/:project_id/issues/:issue_id/time_entries/report.:format'
+    time_report.connect 'projects/:project_id/time_entries/report'
+    time_report.connect 'projects/:project_id/time_entries/report.:format'
     time_report.connect 'time_entries/report'
     time_report.connect 'time_entries/report.:format'
-    time_report.connect 'projects/:project_id/time_entries/report.:format'
   end
 
+  map.bulk_edit_time_entry 'time_entries/bulk_edit',
+                   :controller => 'timelog', :action => 'bulk_edit', :conditions => { :method => :get }
+  map.bulk_update_time_entry 'time_entries/bulk_edit',
+                   :controller => 'timelog', :action => 'bulk_update', :conditions => { :method => :post }
+  map.time_entries_context_menu '/time_entries/context_menu',
+                   :controller => 'context_menus', :action => 'time_entries'
   # TODO: wasteful since this is also nested under issues, projects, and projects/issues
   map.resources :time_entries, :controller => 'timelog'
   
@@ -80,10 +88,16 @@
   map.quoted_issue '/issues/:id/quoted', :controller => 'journals', :action => 'new', :id => /\d+/, :conditions => { :method => :post }
   map.connect '/issues/:id/destroy', :controller => 'issues', :action => 'destroy', :conditions => { :method => :post } # legacy
 
-  map.resource :gantt, :path_prefix => '/issues', :controller => 'gantts', :only => [:show, :update]
-  map.resource :gantt, :path_prefix => '/projects/:project_id/issues', :controller => 'gantts', :only => [:show, :update]
-  map.resource :calendar, :path_prefix => '/issues', :controller => 'calendars', :only => [:show, :update]
-  map.resource :calendar, :path_prefix => '/projects/:project_id/issues', :controller => 'calendars', :only => [:show, :update]
+  map.with_options :controller => 'gantts', :action => 'show' do |gantts_routes|
+    gantts_routes.connect '/projects/:project_id/issues/gantt'
+    gantts_routes.connect '/projects/:project_id/issues/gantt.:format'
+    gantts_routes.connect '/issues/gantt.:format'
+  end
+  
+  map.with_options :controller => 'calendars', :action => 'show' do |calendars_routes|
+    calendars_routes.connect '/projects/:project_id/issues/calendar'
+    calendars_routes.connect '/issues/calendar'
+  end
 
   map.with_options :controller => 'reports', :conditions => {:method => :get} do |reports|
     reports.connect 'projects/:id/issues/report', :action => 'issue_report'
@@ -215,6 +229,7 @@
   map.resources :groups
   
   #left old routes at the bottom for backwards compat
+  map.connect 'projects/:project_id/queries/:action', :controller => 'queries'
   map.connect 'projects/:project_id/issues/:action', :controller => 'issues'
   map.connect 'projects/:project_id/documents/:action', :controller => 'documents'
   map.connect 'projects/:project_id/boards/:action/:id', :controller => 'boards'
--- a/db/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/db/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 27
-/svn/!svn/ver/4981/trunk/db
+V 41
+/svn/!svn/ver/5878/branches/1.2-stable/db
 END
--- a/db/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/db/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/db
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/db
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-01T10:14:47.182368Z
-4981
+2011-05-12T17:29:18.150936Z
+5762
 tmaruyama
 has-props
 
--- a/db/migrate/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/db/migrate/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,1121 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 35
-/svn/!svn/ver/4981/trunk/db/migrate
+V 49
+/svn/!svn/ver/5878/branches/1.2-stable/db/migrate
 END
-20101107130441_add_custom_fields_visible.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4383/trunk/db/migrate/20101107130441_add_custom_fields_visible.rb
-END
-077_remove_issue_statuses_html_color.rb
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/881/trunk/db/migrate/077_remove_issue_statuses_html_color.rb
-END
-053_add_changes_branch.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/559/trunk/db/migrate/053_add_changes_branch.rb
-END
-20091017214519_add_missing_indexes_to_custom_values.rb
-K 25
-svn:wc:ra_dav:version-url
-V 90
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214519_add_missing_indexes_to_custom_values.rb
-END
-101_populate_changesets_user_id.rb
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/2006/trunk/db/migrate/101_populate_changesets_user_id.rb
-END
-033_add_timelog_permissions.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/674/trunk/db/migrate/033_add_timelog_permissions.rb
-END
-078_add_custom_fields_position.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/1623/trunk/db/migrate/078_add_custom_fields_position.rb
-END
-006_calendar_and_activity.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/674/trunk/db/migrate/006_calendar_and_activity.rb
-END
-029_create_wiki_contents.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/479/trunk/db/migrate/029_create_wiki_contents.rb
-END
-028_create_wiki_pages.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/323/trunk/db/migrate/028_create_wiki_pages.rb
-END
-20090704172355_create_groups_users.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/2869/trunk/db/migrate/20090704172355_create_groups_users.rb
-END
-20101114115359_change_projects_identifier_limit.rb
-K 25
-svn:wc:ra_dav:version-url
-V 86
-/svn/!svn/ver/4402/trunk/db/migrate/20101114115359_change_projects_identifier_limit.rb
-END
-080_add_users_type.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/919/trunk/db/migrate/080_add_users_type.rb
-END
-20091017214440_add_missing_indexes_to_wiki_contents.rb
-K 25
-svn:wc:ra_dav:version-url
-V 90
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214440_add_missing_indexes_to_wiki_contents.rb
-END
-018_set_doc_and_files_notifications.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/674/trunk/db/migrate/018_set_doc_and_files_notifications.rb
-END
-20100129193402_change_users_mail_notification_to_string.rb
-K 25
-svn:wc:ra_dav:version-url
-V 94
-/svn/!svn/ver/4413/trunk/db/migrate/20100129193402_change_users_mail_notification_to_string.rb
-END
-008_create_user_preferences.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/67/trunk/db/migrate/008_create_user_preferences.rb
-END
-025_add_search_permission.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/674/trunk/db/migrate/025_add_search_permission.rb
-END
-023_add_tracker_is_in_roadmap.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/228/trunk/db/migrate/023_add_tracker_is_in_roadmap.rb
-END
-20091220183727_add_index_to_settings_name.rb
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/3206/trunk/db/migrate/20091220183727_add_index_to_settings_name.rb
-END
-20091017214236_add_missing_indexes_to_time_entries.rb
-K 25
-svn:wc:ra_dav:version-url
-V 89
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214236_add_missing_indexes_to_time_entries.rb
-END
-035_create_changes.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/377/trunk/db/migrate/035_create_changes.rb
-END
-102_add_custom_fields_editable.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/2276/trunk/db/migrate/102_add_custom_fields_editable.rb
-END
-20091017213332_add_missing_indexes_to_documents.rb
-K 25
-svn:wc:ra_dav:version-url
-V 86
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213332_add_missing_indexes_to_documents.rb
-END
-096_add_commit_access_permission.rb
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/1814/trunk/db/migrate/096_add_commit_access_permission.rb
-END
-20090401221305_update_enumerations_to_sti.rb
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/2777/trunk/db/migrate/20090401221305_update_enumerations_to_sti.rb
-END
-091_change_changesets_revision_to_string.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/1236/trunk/db/migrate/091_change_changesets_revision_to_string.rb
-END
-024_add_roadmap_permission.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/674/trunk/db/migrate/024_add_roadmap_permission.rb
-END
-20091017214720_add_missing_indexes_to_wiki_redirects.rb
-K 25
-svn:wc:ra_dav:version-url
-V 91
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214720_add_missing_indexes_to_wiki_redirects.rb
-END
-072_add_enumerations_position.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/1623/trunk/db/migrate/072_add_enumerations_position.rb
-END
-034_create_changesets.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/479/trunk/db/migrate/034_create_changesets.rb
-END
-20090614091200_fix_messages_sticky_null.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/2787/trunk/db/migrate/20090614091200_fix_messages_sticky_null.rb
-END
-108_add_identity_url_to_users.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/2440/trunk/db/migrate/108_add_identity_url_to_users.rb
-END
-20091220184736_add_indexes_to_issue_status.rb
-K 25
-svn:wc:ra_dav:version-url
-V 81
-/svn/!svn/ver/3206/trunk/db/migrate/20091220184736_add_indexes_to_issue_status.rb
-END
-20100819172912_enable_calendar_and_gantt_modules_where_appropriate.rb
-K 25
-svn:wc:ra_dav:version-url
-V 105
-/svn/!svn/ver/4013/trunk/db/migrate/20100819172912_enable_calendar_and_gantt_modules_where_appropriate.rb
-END
-044_set_language_length_to_five.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/518/trunk/db/migrate/044_set_language_length_to_five.rb
-END
-20091227112908_change_wiki_contents_text_limit.rb
-K 25
-svn:wc:ra_dav:version-url
-V 85
-/svn/!svn/ver/3254/trunk/db/migrate/20091227112908_change_wiki_contents_text_limit.rb
-END
-090_change_versions_name_limit.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/1220/trunk/db/migrate/090_change_versions_name_limit.rb
-END
-20090503121510_drop_members_role_id.rb
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2726/trunk/db/migrate/20090503121510_drop_members_role_id.rb
-END
-021_add_tracker_position.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/864/trunk/db/migrate/021_add_tracker_position.rb
-END
-012_add_comments_permissions.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/674/trunk/db/migrate/012_add_comments_permissions.rb
-END
-20110223180953_salt_user_passwords.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/4936/trunk/db/migrate/20110223180953_salt_user_passwords.rb
-END
-038_add_custom_field_is_filter.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/447/trunk/db/migrate/038_add_custom_field_is_filter.rb
-END
-20100221100219_add_index_on_changesets_scmid.rb
-K 25
-svn:wc:ra_dav:version-url
-V 83
-/svn/!svn/ver/3471/trunk/db/migrate/20100221100219_add_index_on_changesets_scmid.rb
-END
-046_create_messages.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/529/trunk/db/migrate/046_create_messages.rb
-END
-20091225164732_remove_enumerations_opt.rb
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/3240/trunk/db/migrate/20091225164732_remove_enumerations_opt.rb
-END
-20110220160626_add_workflows_assignee_and_author.rb
-K 25
-svn:wc:ra_dav:version-url
-V 87
-/svn/!svn/ver/4895/trunk/db/migrate/20110220160626_add_workflows_assignee_and_author.rb
-END
-030_add_projects_feeds_permissions.rb
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/674/trunk/db/migrate/030_add_projects_feeds_permissions.rb
-END
-045_create_boards.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/864/trunk/db/migrate/045_create_boards.rb
-END
-20110228000000_add_repositories_log_encoding.rb
-K 25
-svn:wc:ra_dav:version-url
-V 83
-/svn/!svn/ver/4980/trunk/db/migrate/20110228000000_add_repositories_log_encoding.rb
-END
-076_allow_null_position.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/1140/trunk/db/migrate/076_allow_null_position.rb
-END
-20091017213835_add_missing_indexes_to_user_preferences.rb
-K 25
-svn:wc:ra_dav:version-url
-V 93
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213835_add_missing_indexes_to_user_preferences.rb
-END
-20091220183509_add_lft_and_rgt_indexes_to_projects.rb
-K 25
-svn:wc:ra_dav:version-url
-V 89
-/svn/!svn/ver/3206/trunk/db/migrate/20091220183509_add_lft_and_rgt_indexes_to_projects.rb
-END
-20091017212644_add_missing_indexes_to_messages.rb
-K 25
-svn:wc:ra_dav:version-url
-V 85
-/svn/!svn/ver/2928/trunk/db/migrate/20091017212644_add_missing_indexes_to_messages.rb
-END
-20100705164950_change_changes_path_length_limit.rb
-K 25
-svn:wc:ra_dav:version-url
-V 86
-/svn/!svn/ver/3860/trunk/db/migrate/20100705164950_change_changes_path_length_limit.rb
-END
-20091017213910_add_missing_indexes_to_issues.rb
-K 25
-svn:wc:ra_dav:version-url
-V 83
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213910_add_missing_indexes_to_issues.rb
-END
-20091017214406_add_missing_indexes_to_attachments.rb
-K 25
-svn:wc:ra_dav:version-url
-V 88
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214406_add_missing_indexes_to_attachments.rb
-END
-081_create_projects_trackers.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/920/trunk/db/migrate/081_create_projects_trackers.rb
-END
-20091017214308_add_missing_indexes_to_news.rb
-K 25
-svn:wc:ra_dav:version-url
-V 81
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214308_add_missing_indexes_to_news.rb
-END
-20090403001910_add_project_to_enumerations.rb
-K 25
-svn:wc:ra_dav:version-url
-V 81
-/svn/!svn/ver/2947/trunk/db/migrate/20090403001910_add_project_to_enumerations.rb
-END
-107_add_open_id_authentication_tables.rb
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/2439/trunk/db/migrate/107_add_open_id_authentication_tables.rb
-END
-075_add_members_mail_notification.rb
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/855/trunk/db/migrate/075_add_members_mail_notification.rb
-END
-047_add_boards_permissions.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/674/trunk/db/migrate/047_add_boards_permissions.rb
-END
-037_add_project_identifier.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/397/trunk/db/migrate/037_add_project_identifier.rb
-END
-073_add_enumerations_is_default.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/803/trunk/db/migrate/073_add_enumerations_is_default.rb
-END
-20100313171051_add_index_on_issues_nested_set.rb
-K 25
-svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/3578/trunk/db/migrate/20100313171051_add_index_on_issues_nested_set.rb
-END
-071_add_queries_column_names.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/782/trunk/db/migrate/071_add_queries_column_names.rb
-END
-20091123212029_add_default_done_ratio_to_issue_status.rb
-K 25
-svn:wc:ra_dav:version-url
-V 92
-/svn/!svn/ver/3151/trunk/db/migrate/20091123212029_add_default_done_ratio_to_issue_status.rb
-END
-020_add_role_position.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/864/trunk/db/migrate/020_add_role_position.rb
-END
-20091010093521_fix_users_custom_values.rb
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/2905/trunk/db/migrate/20091010093521_fix_users_custom_values.rb
-END
-001_setup.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/1764/trunk/db/migrate/001_setup.rb
-END
-016_add_repositories_permissions.rb
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/674/trunk/db/migrate/016_add_repositories_permissions.rb
-END
-20100129193813_update_mail_notification_values.rb
-K 25
-svn:wc:ra_dav:version-url
-V 85
-/svn/!svn/ver/4413/trunk/db/migrate/20100129193813_update_mail_notification_values.rb
-END
-20091017214611_add_missing_indexes_to_journals.rb
-K 25
-svn:wc:ra_dav:version-url
-V 85
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214611_add_missing_indexes_to_journals.rb
-END
-041_rename_comment_to_comments.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/482/trunk/db/migrate/041_rename_comment_to_comments.rb
-END
-20091017214107_add_missing_indexes_to_custom_fields.rb
-K 25
-svn:wc:ra_dav:version-url
-V 90
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214107_add_missing_indexes_to_custom_fields.rb
-END
-089_add_attachments_description.rb
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/1180/trunk/db/migrate/089_add_attachments_description.rb
-END
-067_create_wiki_redirects.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/720/trunk/db/migrate/067_create_wiki_redirects.rb
-END
-20091017214750_add_missing_indexes_to_custom_fields_trackers.rb
-K 25
-svn:wc:ra_dav:version-url
-V 99
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214750_add_missing_indexes_to_custom_fields_trackers.rb
-END
-103_set_custom_fields_editable.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/2279/trunk/db/migrate/103_set_custom_fields_editable.rb
-END
-20110226120132_change_auth_sources_account_password_limit.rb
-K 25
-svn:wc:ra_dav:version-url
-V 96
-/svn/!svn/ver/4950/trunk/db/migrate/20110226120132_change_auth_sources_account_password_limit.rb
-END
-094_change_projects_homepage_limit.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/1457/trunk/db/migrate/094_change_projects_homepage_limit.rb
-END
-093_add_wiki_pages_protected.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/1415/trunk/db/migrate/093_add_wiki_pages_protected.rb
-END
-039_create_watchers.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/454/trunk/db/migrate/039_create_watchers.rb
-END
-083_add_messages_sticky.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/926/trunk/db/migrate/083_add_messages_sticky.rb
-END
-060_change_changesets_committer_limit.rb
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/1222/trunk/db/migrate/060_change_changesets_committer_limit.rb
-END
-069_add_issues_estimated_hours.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/731/trunk/db/migrate/069_add_issues_estimated_hours.rb
-END
-027_create_wikis.rb
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/323/trunk/db/migrate/027_create_wikis.rb
-END
-20101104182107_add_unique_index_on_members.rb
-K 25
-svn:wc:ra_dav:version-url
-V 81
-/svn/!svn/ver/4610/trunk/db/migrate/20101104182107_add_unique_index_on_members.rb
-END
-20100313132032_add_issues_nested_sets_columns.rb
-K 25
-svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/3573/trunk/db/migrate/20100313132032_add_issues_nested_sets_columns.rb
-END
-061_add_roles_builtin.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/674/trunk/db/migrate/061_add_roles_builtin.rb
-END
-026_add_repository_login_and_password.rb
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/319/trunk/db/migrate/026_add_repository_login_and_password.rb
-END
-022_serialize_possibles_values.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/223/trunk/db/migrate/022_serialize_possibles_values.rb
-END
-106_remove_projects_projects_count.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/2305/trunk/db/migrate/106_remove_projects_projects_count.rb
-END
-20090318181151_extend_settings_name.rb
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2599/trunk/db/migrate/20090318181151_extend_settings_name.rb
-END
-079_add_user_preferences_time_zone.rb
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/917/trunk/db/migrate/079_add_user_preferences_time_zone.rb
-END
-099_add_delete_wiki_pages_attachments_permission.rb
-K 25
-svn:wc:ra_dav:version-url
-V 87
-/svn/!svn/ver/1938/trunk/db/migrate/099_add_delete_wiki_pages_attachments_permission.rb
-END
-098_set_topic_authors_as_watchers.rb
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/2415/trunk/db/migrate/098_set_topic_authors_as_watchers.rb
-END
-059_add_roles_assignable.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/649/trunk/db/migrate/059_add_roles_assignable.rb
-END
-013_create_queries.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/95/trunk/db/migrate/013_create_queries.rb
-END
-049_add_wiki_destroy_page_permission.rb
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/674/trunk/db/migrate/049_add_wiki_destroy_page_permission.rb
-END
-040_create_changesets_issues.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/473/trunk/db/migrate/040_create_changesets_issues.rb
-END
-048_allow_null_version_effective_date.rb
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/1140/trunk/db/migrate/048_allow_null_version_effective_date.rb
-END
-085_add_role_tracker_old_status_index_to_workflows.rb
-K 25
-svn:wc:ra_dav:version-url
-V 89
-/svn/!svn/ver/1069/trunk/db/migrate/085_add_role_tracker_old_status_index_to_workflows.rb
-END
-20091017213257_add_missing_indexes_to_auth_sources.rb
-K 25
-svn:wc:ra_dav:version-url
-V 89
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213257_add_missing_indexes_to_auth_sources.rb
-END
-070_change_attachments_content_type_limit.rb
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/1222/trunk/db/migrate/070_change_attachments_content_type_limit.rb
-END
-092_change_changes_from_revision_to_string.rb
-K 25
-svn:wc:ra_dav:version-url
-V 81
-/svn/!svn/ver/1236/trunk/db/migrate/092_change_changes_from_revision_to_string.rb
-END
-20110223180944_add_users_salt.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4936/trunk/db/migrate/20110223180944_add_users_salt.rb
-END
-20090214190337_add_watchers_user_id_type_index.rb
-K 25
-svn:wc:ra_dav:version-url
-V 85
-/svn/!svn/ver/2466/trunk/db/migrate/20090214190337_add_watchers_user_id_type_index.rb
-END
-20091017212457_add_missing_indexes_to_custom_fields_projects.rb
-K 25
-svn:wc:ra_dav:version-url
-V 99
-/svn/!svn/ver/2928/trunk/db/migrate/20091017212457_add_missing_indexes_to_custom_fields_projects.rb
-END
-054_add_changesets_scmid.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/559/trunk/db/migrate/054_add_changesets_scmid.rb
-END
-097_add_view_wiki_edits_permission.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/1896/trunk/db/migrate/097_add_view_wiki_edits_permission.rb
-END
-065_add_settings_updated_on.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/685/trunk/db/migrate/065_add_settings_updated_on.rb
-END
-20091017213716_add_missing_indexes_to_member_roles.rb
-K 25
-svn:wc:ra_dav:version-url
-V 89
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213716_add_missing_indexes_to_member_roles.rb
-END
-20091108092559_add_versions_status.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/3259/trunk/db/migrate/20091108092559_add_versions_status.rb
-END
-20091017213228_add_missing_indexes_to_watchers.rb
-K 25
-svn:wc:ra_dav:version-url
-V 85
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213228_add_missing_indexes_to_watchers.rb
-END
-20110228000100_copy_repositories_log_encoding.rb
-K 25
-svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/4981/trunk/db/migrate/20110228000100_copy_repositories_log_encoding.rb
-END
-063_add_roles_permissions.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/674/trunk/db/migrate/063_add_roles_permissions.rb
-END
-20090704172350_populate_users_type.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/2869/trunk/db/migrate/20090704172350_populate_users_type.rb
-END
-20090503121505_populate_member_roles.rb
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/2729/trunk/db/migrate/20090503121505_populate_member_roles.rb
-END
-052_add_changes_revision.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/559/trunk/db/migrate/052_add_changes_revision.rb
-END
-050_add_wiki_attachments_permissions.rb
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/674/trunk/db/migrate/050_add_wiki_attachments_permissions.rb
-END
-062_insert_builtin_roles.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/674/trunk/db/migrate/062_insert_builtin_roles.rb
-END
-104_add_projects_lft_and_rgt.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/2304/trunk/db/migrate/104_add_projects_lft_and_rgt.rb
-END
-074_add_auth_sources_tls.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/845/trunk/db/migrate/074_add_auth_sources_tls.rb
-END
-20091114105931_add_view_issues_permission.rb
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/3039/trunk/db/migrate/20091114105931_add_view_issues_permission.rb
-END
-20091017214336_add_missing_indexes_to_users.rb
-K 25
-svn:wc:ra_dav:version-url
-V 82
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214336_add_missing_indexes_to_users.rb
-END
-082_add_messages_locked.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/926/trunk/db/migrate/082_add_messages_locked.rb
-END
-20091017213113_add_missing_indexes_to_enumerations.rb
-K 25
-svn:wc:ra_dav:version-url
-V 89
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213113_add_missing_indexes_to_enumerations.rb
-END
-20091017213444_add_missing_indexes_to_tokens.rb
-K 25
-svn:wc:ra_dav:version-url
-V 83
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213444_add_missing_indexes_to_tokens.rb
-END
-20090503121501_create_member_roles.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/2726/trunk/db/migrate/20090503121501_create_member_roles.rb
-END
-057_add_versions_wiki_page_title.rb
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/564/trunk/db/migrate/057_add_versions_wiki_page_title.rb
-END
-20090323224724_add_type_to_enumerations.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/2777/trunk/db/migrate/20090323224724_add_type_to_enumerations.rb
-END
-004_export_pdf.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/674/trunk/db/migrate/004_export_pdf.rb
-END
-031_add_repository_root_url.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/344/trunk/db/migrate/031_add_repository_root_url.rb
-END
-20091205124427_add_versions_sharing.rb
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/3123/trunk/db/migrate/20091205124427_add_versions_sharing.rb
-END
-20091017214644_add_missing_indexes_to_issue_relations.rb
-K 25
-svn:wc:ra_dav:version-url
-V 92
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214644_add_missing_indexes_to_issue_relations.rb
-END
-036_add_changeset_commit_date.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/383/trunk/db/migrate/036_add_changeset_commit_date.rb
-END
-051_add_project_status.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/549/trunk/db/migrate/051_add_project_status.rb
-END
-105_build_projects_tree.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/2304/trunk/db/migrate/105_build_projects_tree.rb
-END
-20091017214015_add_missing_indexes_to_members.rb
-K 25
-svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214015_add_missing_indexes_to_members.rb
-END
-20090401231134_add_active_field_to_enumerations.rb
-K 25
-svn:wc:ra_dav:version-url
-V 86
-/svn/!svn/ver/2946/trunk/db/migrate/20090401231134_add_active_field_to_enumerations.rb
-END
-084_change_auth_sources_account_limit.rb
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/1222/trunk/db/migrate/084_change_auth_sources_account_limit.rb
-END
-20090704172358_add_member_roles_inherited_from.rb
-K 25
-svn:wc:ra_dav:version-url
-V 85
-/svn/!svn/ver/2869/trunk/db/migrate/20090704172358_add_member_roles_inherited_from.rb
-END
-019_add_issue_status_position.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/864/trunk/db/migrate/019_add_issue_status_position.rb
-END
-20091017212227_add_missing_indexes_to_workflows.rb
-K 25
-svn:wc:ra_dav:version-url
-V 86
-/svn/!svn/ver/2928/trunk/db/migrate/20091017212227_add_missing_indexes_to_workflows.rb
-END
-20101114115114_change_projects_name_limit.rb
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/4402/trunk/db/migrate/20101114115114_change_projects_name_limit.rb
-END
-20090406161854_add_parent_id_to_enumerations.rb
-K 25
-svn:wc:ra_dav:version-url
-V 83
-/svn/!svn/ver/2947/trunk/db/migrate/20090406161854_add_parent_id_to_enumerations.rb
-END
-20091017212938_add_missing_indexes_to_repositories.rb
-K 25
-svn:wc:ra_dav:version-url
-V 89
-/svn/!svn/ver/2928/trunk/db/migrate/20091017212938_add_missing_indexes_to_repositories.rb
-END
-005_issue_start_date.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/67/trunk/db/migrate/005_issue_start_date.rb
-END
-009_add_hide_mail_pref.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/67/trunk/db/migrate/009_add_hide_mail_pref.rb
-END
-056_add_repositories_changes_permission.rb
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/674/trunk/db/migrate/056_add_repositories_changes_permission.rb
-END
-20110224000000_add_repositories_path_encoding.rb
-K 25
-svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/4940/trunk/db/migrate/20110224000000_add_repositories_path_encoding.rb
-END
-032_create_time_entries.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/479/trunk/db/migrate/032_create_time_entries.rb
-END
-20110226120112_change_repositories_password_limit.rb
-K 25
-svn:wc:ra_dav:version-url
-V 88
-/svn/!svn/ver/4950/trunk/db/migrate/20110226120112_change_repositories_password_limit.rb
-END
-068_create_enabled_modules.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/725/trunk/db/migrate/068_create_enabled_modules.rb
-END
-20091017214136_add_missing_indexes_to_queries.rb
-K 25
-svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214136_add_missing_indexes_to_queries.rb
-END
-20091017213151_add_missing_indexes_to_wiki_pages.rb
-K 25
-svn:wc:ra_dav:version-url
-V 87
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213151_add_missing_indexes_to_wiki_pages.rb
-END
-066_add_custom_value_customized_index.rb
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/702/trunk/db/migrate/066_add_custom_value_customized_index.rb
-END
-007_create_journals.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/674/trunk/db/migrate/007_create_journals.rb
-END
-088_add_custom_fields_default_value.rb
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1091/trunk/db/migrate/088_add_custom_fields_default_value.rb
-END
-003_issue_add_note.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/674/trunk/db/migrate/003_issue_add_note.rb
-END
-20091017213027_add_missing_indexes_to_comments.rb
-K 25
-svn:wc:ra_dav:version-url
-V 85
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213027_add_missing_indexes_to_comments.rb
-END
-20091017213536_add_missing_indexes_to_changesets.rb
-K 25
-svn:wc:ra_dav:version-url
-V 87
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213536_add_missing_indexes_to_changesets.rb
-END
-086_add_custom_fields_searchable.rb
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/994/trunk/db/migrate/086_add_custom_fields_searchable.rb
-END
-042_create_issue_relations.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/506/trunk/db/migrate/042_create_issue_relations.rb
-END
-011_add_news_comments_count.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/81/trunk/db/migrate/011_add_news_comments_count.rb
-END
-20090312172426_add_queries_sort_criteria.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/2572/trunk/db/migrate/20090312172426_add_queries_sort_criteria.rb
-END
-20091017213642_add_missing_indexes_to_issue_categories.rb
-K 25
-svn:wc:ra_dav:version-url
-V 93
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213642_add_missing_indexes_to_issue_categories.rb
-END
-100_add_changesets_user_id.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/2006/trunk/db/migrate/100_add_changesets_user_id.rb
-END
-010_create_comments.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/479/trunk/db/migrate/010_create_comments.rb
-END
-064_drop_permissions.rb
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/674/trunk/db/migrate/064_drop_permissions.rb
-END
-20090312194159_add_projects_trackers_unique_index.rb
-K 25
-svn:wc:ra_dav:version-url
-V 88
-/svn/!svn/ver/2580/trunk/db/migrate/20090312194159_add_projects_trackers_unique_index.rb
-END
-043_add_relations_permissions.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/674/trunk/db/migrate/043_add_relations_permissions.rb
-END
-055_add_repositories_type.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/559/trunk/db/migrate/055_add_repositories_type.rb
-END
-20091025163651_add_activity_indexes.rb
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2981/trunk/db/migrate/20091025163651_add_activity_indexes.rb
-END
-058_add_issue_categories_assigned_to_id.rb
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/577/trunk/db/migrate/058_add_issue_categories_assigned_to_id.rb
-END
-002_issue_move.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/674/trunk/db/migrate/002_issue_move.rb
-END
-015_create_repositories.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/106/trunk/db/migrate/015_create_repositories.rb
-END
-20090425161243_add_queries_group_by.rb
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2696/trunk/db/migrate/20090425161243_add_queries_group_by.rb
-END
-014_add_queries_permissions.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/674/trunk/db/migrate/014_add_queries_permissions.rb
-END
-087_change_projects_description_to_text.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/1189/trunk/db/migrate/087_change_projects_description_to_text.rb
-END
-20091017213757_add_missing_indexes_to_boards.rb
-K 25
-svn:wc:ra_dav:version-url
-V 83
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213757_add_missing_indexes_to_boards.rb
-END
-017_create_settings.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/167/trunk/db/migrate/017_create_settings.rb
-END
-20110227125750_change_journal_details_values_to_text.rb
-K 25
-svn:wc:ra_dav:version-url
-V 91
-/svn/!svn/ver/4954/trunk/db/migrate/20110227125750_change_journal_details_values_to_text.rb
-END
-095_add_wiki_pages_parent_id.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/1698/trunk/db/migrate/095_add_wiki_pages_parent_id.rb
-END
--- a/db/migrate/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/db/migrate/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/db/migrate
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/db/migrate
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-01T10:14:47.182368Z
-4981
+2011-05-12T17:29:18.150936Z
+5762
 tmaruyama
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 21dc29619a0cfd0f3aa12d77cc5cb132
 2010-11-07T14:17:35.749175Z
 4383
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e1234fbaef167ddc0013ffe1d3bc67b9
 2007-11-04T11:40:17.595469Z
 881
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 0b2c38434ec4b25c41f50963a46a3bc6
 2007-06-12T20:12:05.590809Z
 559
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 dba48c03009eb5bcbd2f686a37c42147
 2009-10-17T22:23:29.892475Z
 2928
@@ -162,13 +162,47 @@
 
 208
 
+20110408103312_add_roles_issues_visibility.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+a2bd4929e0871bc3fd00ca4a5aa321cc
+2011-04-11T17:53:15.908614Z
+5416
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+253
+
 101_populate_changesets_user_id.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b17611805f3b447ec0f0b703ea8b6d10
 2008-11-10T18:59:06.897210Z
 2006
@@ -202,7 +236,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 23ebbc94eb59590d0f0b200b4b38289b
 2007-08-29T16:52:35.680643Z
 674
@@ -236,7 +270,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ffabca1301a0ade41918ec9d6618fda0
 2008-07-04T17:58:14.743502Z
 1623
@@ -270,7 +304,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e6ff0ff9c004d9688e79b550991ec109
 2007-08-29T16:52:35.680643Z
 674
@@ -304,7 +338,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 39c994e2469a6dfb97fa50cf595439e8
 2007-04-25T15:06:20.062636Z
 479
@@ -338,7 +372,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 828df977f9e16943bc74595c65774c62
 2007-03-10T15:09:49.115269Z
 323
@@ -372,7 +406,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 eea8e3f0a1fe28e8c686af190259a3d6
 2009-09-12T08:36:46.650954Z
 2869
@@ -406,7 +440,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 be338f41292d95bb7ba3caa125999de0
 2010-11-14T12:33:14.198318Z
 4402
@@ -440,7 +474,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 06c8b504bcdd08c2f5dcf14a0b927420
 2007-11-20T15:40:16.305800Z
 919
@@ -474,7 +508,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 283fb200008f4dae98e0b3d46f0b97aa
 2009-10-17T22:23:29.892475Z
 2928
@@ -508,7 +542,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 da329a16de705c673418c18119f788d8
 2007-08-29T16:52:35.680643Z
 674
@@ -542,7 +576,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 627e34913535f16f767133cbdc5b57f0
 2010-11-20T09:55:06.580420Z
 4413
@@ -576,7 +610,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 5bb1427a275abe1f2ec4b6b03a087cd8
 2006-12-03T19:55:45.161980Z
 62
@@ -604,13 +638,47 @@
 
 281
 
+023_add_tracker_is_in_roadmap.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+f4c10807bb47b69af35e9402966089f1
+2007-02-04T09:18:40.598564Z
+228
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+230
+
 025_add_search_permission.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 42937036f9c414f7d9b028f629b1ce20
 2007-08-29T16:52:35.680643Z
 674
@@ -638,47 +706,13 @@
 
 412
 
-023_add_tracker_is_in_roadmap.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-f4c10807bb47b69af35e9402966089f1
-2007-02-04T09:18:40.598564Z
-228
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-230
-
 20091220183727_add_index_to_settings_name.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 c5d86ec3cda95998a3fb590c6f492b6b
 2009-12-20T19:13:22.787652Z
 3206
@@ -712,7 +746,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b2f88560d10a9676bdb65e18f9a13d65
 2009-10-17T22:23:29.892475Z
 2928
@@ -746,7 +780,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 a269e98b11a4d0d865c82328d7af5663
 2007-03-25T12:12:15.060977Z
 377
@@ -780,7 +814,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 69a42a62536b1f435ce1080ceccb4c75
 2009-01-17T11:18:04.652409Z
 2276
@@ -814,7 +848,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 84bec26b6eaebc64c437c5a3b4784a94
 2009-10-17T22:23:29.892475Z
 2928
@@ -848,7 +882,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 53ee6af48c18534db0ffdd4fa5c5df7f
 2008-09-13T16:31:11.005265Z
 1814
@@ -876,39 +910,39 @@
 
 321
 
-20090401221305_update_enumerations_to_sti.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-d343c3ba8f04d1cc71f20c9860d5907b
-2009-05-30T23:30:36.923541Z
-2777
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-329
+024_add_roadmap_permission.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+f1b96e04888c0a48bf29dd0556ba8027
+2007-08-29T16:52:35.680643Z
+674
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+445
 
 091_change_changesets_revision_to_string.rb
 file
@@ -916,7 +950,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 611baff063a1d909ba581aa98018cae7
 2008-03-12T20:28:49.748698Z
 1236
@@ -944,39 +978,39 @@
 
 245
 
-024_add_roadmap_permission.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-f1b96e04888c0a48bf29dd0556ba8027
-2007-08-29T16:52:35.680643Z
-674
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-445
+20090401221305_update_enumerations_to_sti.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+d343c3ba8f04d1cc71f20c9860d5907b
+2009-05-30T23:30:36.923541Z
+2777
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+329
 
 20091017214720_add_missing_indexes_to_wiki_redirects.rb
 file
@@ -984,7 +1018,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 72e8d36a80b63657037f175b368f2e2c
 2009-10-17T22:23:29.892475Z
 2928
@@ -1018,7 +1052,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 891f793e4f2ab50f57b8488c764ceff1
 2008-07-04T17:58:14.743502Z
 1623
@@ -1052,7 +1086,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 82595f307b6fe5053151a681b737f063
 2007-04-25T15:06:20.062636Z
 479
@@ -1086,7 +1120,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 c460bb38faa03667fc34a3b131ec40df
 2009-06-14T09:19:20.900273Z
 2787
@@ -1120,7 +1154,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b175e6c85c5faf4b5d2f092f65338b10
 2009-02-11T19:06:55.627694Z
 2440
@@ -1154,7 +1188,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 7aa35de55587b897fea800e8044039a8
 2009-12-20T19:13:22.787652Z
 3206
@@ -1188,7 +1222,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e4eff12465b879f063cac04a709438b9
 2010-08-22T18:42:00.112555Z
 4013
@@ -1222,7 +1256,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 0492f13cf6f16f90603fdd82c388bace
 2007-05-08T09:26:57.307537Z
 518
@@ -1256,7 +1290,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 9a69054334fcbc6b72eb8b5ae9957129
 2009-12-27T11:57:13.519273Z
 3254
@@ -1290,7 +1324,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b17259dfa6f46844e0f86b110577fbc6
 2008-03-09T15:36:47.697904Z
 1220
@@ -1324,7 +1358,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e00a737604d0be6b94c92236e4f378eb
 2009-05-10T10:54:31.775505Z
 2726
@@ -1358,7 +1392,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 2fb7c5a95c8ed07756c3fbb917c98230
 2007-10-22T21:07:13.432482Z
 864
@@ -1392,7 +1426,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 1702102b56ee973066c86d659252a366
 2007-08-29T16:52:35.680643Z
 674
@@ -1426,7 +1460,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 f72892b525076a1ffaf1f2548822d560
 2011-02-23T17:27:31.762248Z
 4936
@@ -1460,7 +1494,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 0c630c7ad4fbe9ccbb897363a422efa6
 2007-04-17T10:53:20.697217Z
 447
@@ -1494,7 +1528,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6e9fdd6731ba51e864563938c05ed9da
 2010-02-21T14:40:00.085842Z
 3471
@@ -1528,7 +1562,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 8e58d8ec43e40266d62fd64b4b6a9a09
 2007-05-13T17:09:56.765659Z
 529
@@ -1562,7 +1596,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6350cf7f18c7d61d54bf2bfa55e108d3
 2009-12-25T17:13:58.090736Z
 3240
@@ -1596,7 +1630,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 8e7a8d0f81e207e3d673703de33fdb69
 2011-02-20T15:38:07.840581Z
 4895
@@ -1630,7 +1664,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3216f04b6b84aaa6d29bc0f3e5d8c462
 2007-08-29T16:52:35.680643Z
 674
@@ -1664,7 +1698,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 fb852fdf1ab4266ab05a36ff105b7ceb
 2007-10-22T21:07:13.432482Z
 864
@@ -1698,7 +1732,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 dbe736040dcb44e3db78219ecfdb3d62
 2011-03-01T09:47:06.578325Z
 4980
@@ -1732,7 +1766,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 9f0c1dd813015fc37cd47062fe15ef91
 2008-02-12T21:11:16.312726Z
 1140
@@ -1766,7 +1800,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e08dfbd6aca488a1513bfe7c59e2da90
 2009-10-17T22:23:29.892475Z
 2928
@@ -1800,7 +1834,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 767d76b65ff41dd9860747d14bb24ee1
 2009-12-20T19:13:22.787652Z
 3206
@@ -1834,7 +1868,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 93159e216a0265b8f239566bfb91fd8e
 2009-10-17T22:23:29.892475Z
 2928
@@ -1868,7 +1902,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 5fa98acba6010a7450722133bfb66962
 2010-07-24T00:19:32.307471Z
 3860
@@ -1902,7 +1936,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 eeff80bd1cee52d49f1eb78fab035adf
 2009-10-17T22:23:29.892475Z
 2928
@@ -1936,7 +1970,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 09b6720db5ea81c8e22aff9dd89fc0bd
 2009-10-17T22:23:29.892475Z
 2928
@@ -1970,7 +2004,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b392b3c84d6d7b8bba99011778f5b54e
 2007-11-20T20:29:03.757553Z
 920
@@ -2004,7 +2038,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 2ae2d679057fe2db7b7a8bdabc2cbf6d
 2009-10-17T22:23:29.892475Z
 2928
@@ -2032,73 +2066,39 @@
 
 170
 
-20090403001910_add_project_to_enumerations.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-01a97aa31f8b9917a84790f23e0e90d1
-2009-10-21T22:34:34.183882Z
-2947
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-318
-
-107_add_open_id_authentication_tables.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-af4786659f25d96a43468cdc4bcfae44
-2009-02-11T19:06:50.454280Z
-2439
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-601
+20110412065600_add_issues_is_private.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+45b9c6859dfc448518b532c7e062e808
+2011-04-15T13:23:13.506236Z
+5466
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+218
 
 075_add_members_mail_notification.rb
 file
@@ -2106,7 +2106,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 82e35d32f60c71db17de62592693c737
 2007-10-20T12:47:05.860183Z
 855
@@ -2134,13 +2134,81 @@
 
 242
 
+20090403001910_add_project_to_enumerations.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+01a97aa31f8b9917a84790f23e0e90d1
+2009-10-21T22:34:34.183882Z
+2947
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+318
+
+107_add_open_id_authentication_tables.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+af4786659f25d96a43468cdc4bcfae44
+2009-02-11T19:06:50.454280Z
+2439
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+601
+
 047_add_boards_permissions.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3ac5fb29973ffa0ca94ac90387c73b78
 2007-08-29T16:52:35.680643Z
 674
@@ -2168,47 +2236,13 @@
 
 895
 
-037_add_project_identifier.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-e61809aaf1ac8a2a290c4574ed598ff0
-2007-04-02T06:29:09.277122Z
-397
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-202
-
 073_add_enumerations_is_default.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 db7f5c6597e13933c96cb58cbbd1f0bd
 2007-10-05T17:44:15.414646Z
 803
@@ -2236,13 +2270,47 @@
 
 236
 
+037_add_project_identifier.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+e61809aaf1ac8a2a290c4574ed598ff0
+2007-04-02T06:29:09.277122Z
+397
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+202
+
 20100313171051_add_index_on_issues_nested_set.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 243f136f05a508fff7ca52423f65c959
 2010-03-13T17:17:10.453825Z
 3578
@@ -2276,7 +2344,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e5f0fe89be9a00fe1f8b246bde88fca1
 2007-10-01T08:44:17.920088Z
 782
@@ -2310,7 +2378,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 bb79c723b9d9fdabe49ed18ebb8a6caf
 2009-12-11T18:48:34.197724Z
 3151
@@ -2344,7 +2412,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b8b7c422c3d666340afaec3a52c5d6a4
 2007-10-22T21:07:13.432482Z
 864
@@ -2372,13 +2440,115 @@
 
 275
 
+20100129193813_update_mail_notification_values.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+d2251c92048ec4169e2c220f1510d803
+2010-11-20T09:55:06.580420Z
+4413
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+241
+
+016_add_repositories_permissions.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+e770aa6387bb4737804d5024e743cd25
+2007-08-29T16:52:35.680643Z
+674
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1658
+
+001_setup.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+b740a77ff87e6390f7ad86eaf0710040
+2008-08-25T16:35:20.899166Z
+1764
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+18072
+
 20091010093521_fix_users_custom_values.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 55350d451c622488f9358f7bbe12d4de
 2009-10-10T10:16:00.250819Z
 2905
@@ -2406,115 +2576,13 @@
 
 276
 
-001_setup.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-b740a77ff87e6390f7ad86eaf0710040
-2008-08-25T16:35:20.899166Z
-1764
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-18072
-
-016_add_repositories_permissions.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-e770aa6387bb4737804d5024e743cd25
-2007-08-29T16:52:35.680643Z
-674
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1658
-
-20100129193813_update_mail_notification_values.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-d2251c92048ec4169e2c220f1510d803
-2010-11-20T09:55:06.580420Z
-4413
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-241
-
 20091017214611_add_missing_indexes_to_journals.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 4cedb1faff3054d9be6250b589882b50
 2009-10-17T22:23:29.892475Z
 2928
@@ -2542,13 +2610,47 @@
 
 263
 
+20091017214107_add_missing_indexes_to_custom_fields.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+0e1e45e51997617f8672e6d0d5ed8e51
+2009-10-17T22:23:29.892475Z
+2928
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+211
+
 041_rename_comment_to_comments.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 4901b560613f6a0ae3e5df5bcf2dd11c
 2007-04-25T16:48:01.299251Z
 482
@@ -2576,14 +2678,14 @@
 
 896
 
-20091017214107_add_missing_indexes_to_custom_fields.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-0e1e45e51997617f8672e6d0d5ed8e51
+20091017214750_add_missing_indexes_to_custom_fields_trackers.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+871a600c06a6965f52c63177a82fbe15
 2009-10-17T22:23:29.892475Z
 2928
 edavis10
@@ -2608,7 +2710,41 @@
 
 
 
-211
+275
+
+067_create_wiki_redirects.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+31acec69fd7efa0c26dec61f860b0c85
+2007-09-09T17:05:38.846724Z
+720
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+441
 
 089_add_attachments_description.rb
 file
@@ -2616,7 +2752,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f60a0c1f633a6ff65fb2734173b57fe4
 2008-02-29T19:46:58.834023Z
 1180
@@ -2644,81 +2780,13 @@
 
 201
 
-067_create_wiki_redirects.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-31acec69fd7efa0c26dec61f860b0c85
-2007-09-09T17:05:38.846724Z
-720
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-441
-
-20091017214750_add_missing_indexes_to_custom_fields_trackers.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-871a600c06a6965f52c63177a82fbe15
-2009-10-17T22:23:29.892475Z
-2928
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-275
-
 103_set_custom_fields_editable.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 320b459ced6ed78d09a3743ad60b3200
 2009-01-18T10:54:08.545108Z
 2279
@@ -2752,7 +2820,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 fccbbb0aadf883abb7a337961c2199e4
 2011-02-26T13:09:25.657748Z
 4950
@@ -2786,7 +2854,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 cf04e90903f0d068e4503cb465026ef7
 2008-05-25T13:37:29.456358Z
 1457
@@ -2814,13 +2882,47 @@
 
 264
 
+039_create_watchers.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+07bf6636d0acf3ec84b38648bbe2c07a
+2007-04-21T12:09:07.794422Z
+454
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+337
+
 093_add_wiki_pages_protected.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 5be8fe0eee7c90901f9ba49030412f40
 2008-05-04T15:05:38.117137Z
 1415
@@ -2848,16 +2950,16 @@
 
 227
 
-039_create_watchers.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-07bf6636d0acf3ec84b38648bbe2c07a
-2007-04-21T12:09:07.794422Z
-454
+060_change_changesets_committer_limit.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+0abbef63f1f391688df012906a94877b
+2008-03-09T18:25:37.323226Z
+1222
 jplang
 
 
@@ -2880,7 +2982,7 @@
 
 
 
-337
+241
 
 083_add_messages_sticky.rb
 file
@@ -2888,7 +2990,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 be494b64b18017ebe3ccdff9a34abdbd
 2007-11-24T12:25:07.449637Z
 926
@@ -2916,47 +3018,13 @@
 
 193
 
-060_change_changesets_committer_limit.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-0abbef63f1f391688df012906a94877b
-2008-03-09T18:25:37.323226Z
-1222
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-241
-
 069_add_issues_estimated_hours.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 a574e8a4f8f80a464ca2b8bcbd43287f
 2007-09-15T14:54:15.583528Z
 731
@@ -2990,7 +3058,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 cd7530e8030bf9e675ca5922c2494d83
 2007-03-10T15:09:49.115269Z
 323
@@ -3024,7 +3092,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 7a04693ea608e342b463c73c461b2da0
 2011-01-01T23:08:49.766359Z
 4610
@@ -3058,7 +3126,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d1a11dec6b93af060f84f9b2a1e36421
 2010-03-13T14:56:49.379682Z
 3573
@@ -3092,7 +3160,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f1661157bd19c5fd4f7a4244745571bf
 2007-08-29T16:52:35.680643Z
 674
@@ -3126,7 +3194,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 8381c8e67d31387ec86e821025f5ae8b
 2007-03-09T18:03:31.183366Z
 319
@@ -3160,7 +3228,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f8359b001e33e9508d158589c81f7bee
 2007-02-03T12:57:33.179243Z
 223
@@ -3194,7 +3262,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 63b0f6e295adf5f1d1eee803e4cc6287
 2009-01-24T11:48:38.049684Z
 2305
@@ -3228,7 +3296,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 668305a363cf6997eb9f2259d00cc26d
 2009-03-19T00:01:24.358528Z
 2599
@@ -3262,7 +3330,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 c8a6c8715446f22f6a3f4e2040dd873d
 2007-11-19T22:28:43.818228Z
 917
@@ -3296,7 +3364,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 7f2d97409681d462705d00de37e78476
 2008-10-18T10:07:49.851665Z
 1938
@@ -3324,13 +3392,47 @@
 
 339
 
+059_add_roles_assignable.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+aa67262417630fc088eb57df8d2dd9d3
+2007-08-16T17:47:41.639068Z
+649
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+199
+
 098_set_topic_authors_as_watchers.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d885a13afc268875b79c4cbf9524f3e8
 2009-02-08T17:24:39.400993Z
 2415
@@ -3358,47 +3460,13 @@
 
 749
 
-059_add_roles_assignable.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-aa67262417630fc088eb57df8d2dd9d3
-2007-08-16T17:47:41.639068Z
-649
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-199
-
 013_create_queries.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 528b6095ca0376cecdd966ddd0b345c4
 2006-12-16T13:37:32.633739Z
 95
@@ -3432,7 +3500,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 2d559ef99ec458f472f5c22c0a8bf5f4
 2007-08-29T16:52:35.680643Z
 674
@@ -3460,13 +3528,47 @@
 
 418
 
+048_allow_null_version_effective_date.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+a7d8c7f023a76a8dbb0d0950797c08f8
+2008-02-12T21:11:16.312726Z
+1140
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+225
+
 040_create_changesets_issues.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 dc28d8674409819b866f6d878b33d288
 2007-04-24T13:57:27.960164Z
 473
@@ -3494,47 +3596,13 @@
 
 418
 
-048_allow_null_version_effective_date.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-a7d8c7f023a76a8dbb0d0950797c08f8
-2008-02-12T21:11:16.312726Z
-1140
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-225
-
 085_add_role_tracker_old_status_index_to_workflows.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ba997a6179b5ab0f421b149c54725357
 2008-01-15T20:40:59.035860Z
 1069
@@ -3568,7 +3636,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e256cf4a148fd48c409ea6983d569e7d
 2009-10-17T22:23:29.892475Z
 2928
@@ -3602,7 +3670,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 02bfb0be1b161bd757a75f69bfe79bc7
 2008-03-09T18:25:37.323226Z
 1222
@@ -3630,13 +3698,47 @@
 
 252
 
+20110223180944_add_users_salt.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+6dd75e3da92087226c787a4edc76032e
+2011-02-23T17:27:31.762248Z
+4936
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+176
+
 092_change_changes_from_revision_to_string.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f77d77e81db6f6ac5bb3844255f8ab33
 2008-03-12T20:28:49.748698Z
 1236
@@ -3664,47 +3766,13 @@
 
 218
 
-20110223180944_add_users_salt.rb
-file
-
-
-
-
-2011-03-03T11:40:18.000000Z
-6dd75e3da92087226c787a4edc76032e
-2011-02-23T17:27:31.762248Z
-4936
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-176
-
 20090214190337_add_watchers_user_id_type_index.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 5d4b3c5646cc6c136e706ac5d7e0b377
 2009-02-14T19:06:44.812480Z
 2466
@@ -3732,13 +3800,47 @@
 
 252
 
+054_add_changesets_scmid.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+b61285ac64245c1571e536a8c7e05a94
+2007-06-12T20:12:05.590809Z
+559
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+180
+
 20091017212457_add_missing_indexes_to_custom_fields_projects.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 90bb42121a57db140491ecb2a0763d00
 2009-10-17T22:23:29.892475Z
 2928
@@ -3766,39 +3868,73 @@
 
 275
 
-054_add_changesets_scmid.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-b61285ac64245c1571e536a8c7e05a94
-2007-06-12T20:12:05.590809Z
-559
+20091017213716_add_missing_indexes_to_member_roles.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+4bfd0623186217eee4346313f148ea7a
+2009-10-17T22:23:29.892475Z
+2928
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+272
+
+065_add_settings_updated_on.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+708c039fe82ad86e9930122cac4757b1
+2007-08-31T17:45:32.784580Z
+685
 jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-180
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+248
 
 097_add_view_wiki_edits_permission.rb
 file
@@ -3806,7 +3942,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e00f8e7739afbb2d07a21decd1422a0a
 2008-09-21T20:38:36.877257Z
 1896
@@ -3834,81 +3970,13 @@
 
 298
 
-065_add_settings_updated_on.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-708c039fe82ad86e9930122cac4757b1
-2007-08-31T17:45:32.784580Z
-685
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-248
-
-20091017213716_add_missing_indexes_to_member_roles.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-4bfd0623186217eee4346313f148ea7a
-2009-10-17T22:23:29.892475Z
-2928
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-272
-
 20091108092559_add_versions_status.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 71d997c1a32c4ba3dd4b31a34885fc7a
 2009-12-29T14:53:29.047095Z
 3259
@@ -3942,7 +4010,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e8d897645c7176e7fd23f1578b882b5f
 2009-10-17T22:23:29.892475Z
 2928
@@ -3976,7 +4044,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 22941cc81d233c2602be827d70670c10
 2011-03-01T10:14:47.182368Z
 4981
@@ -4010,7 +4078,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 9ddb69b602d6d3ee5da01f8a9e9f78db
 2007-08-29T16:52:35.680643Z
 674
@@ -4044,7 +4112,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 055f00efdb87ff8934c36d5eb99b741f
 2009-09-12T08:36:46.650954Z
 2869
@@ -4072,13 +4140,47 @@
 
 155
 
+052_add_changes_revision.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+3af07746c4eab3a1716744971ac26ffc
+2007-06-12T20:12:05.590809Z
+559
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+180
+
 20090503121505_populate_member_roles.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 27279bf98b3155975ce59a359d0a29aa
 2009-05-10T11:18:09.335765Z
 2729
@@ -4106,81 +4208,13 @@
 
 276
 
-052_add_changes_revision.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-3af07746c4eab3a1716744971ac26ffc
-2007-06-12T20:12:05.590809Z
-559
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-180
-
-050_add_wiki_attachments_permissions.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-67d6e1898c150c8df560cb2ce8a2f2d7
-2007-08-29T16:52:35.680643Z
-674
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-718
-
 062_insert_builtin_roles.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 596f1acbdbc340c39d19f19f7b4cb6c6
 2007-08-29T16:52:35.680643Z
 674
@@ -4208,13 +4242,81 @@
 
 403
 
+050_add_wiki_attachments_permissions.rb
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+67d6e1898c150c8df560cb2ce8a2f2d7
+2007-08-29T16:52:35.680643Z
+674
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+718
+
+20110511000000_add_repositories_extra_info.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+9a19740d9c35a12356f7dedfb588af43
+2011-05-12T17:29:18.150936Z
+5762
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+198
+
 104_add_projects_lft_and_rgt.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 46effb13ff7d1a62b7b8c93afc7da9c8
 2009-01-24T11:31:15.122844Z
 2304
@@ -4248,7 +4350,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e7e163729c56cd9807450574d2beeda8
 2007-10-16T19:19:10.481742Z
 845
@@ -4282,7 +4384,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 886411cb32a18ec492acc798194210af
 2009-11-14T12:08:47.175978Z
 3039
@@ -4316,7 +4418,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 4ed0fffe6158eeda69a021c362f61157
 2007-11-24T12:25:07.449637Z
 926
@@ -4350,7 +4452,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 22e6afc0519b7befbae2c4a4433c20f5
 2009-10-17T22:23:29.892475Z
 2928
@@ -4384,7 +4486,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 8251942eb30b7c709ac6e3dc1ab5eedb
 2009-10-17T22:23:29.892475Z
 2928
@@ -4418,7 +4520,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 4c220f0316e1b04fa8350f0309698f24
 2009-10-17T22:23:29.892475Z
 2928
@@ -4452,7 +4554,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 16792ab92fda3a70516d55a011c01fce
 2009-05-10T10:54:31.775505Z
 2726
@@ -4486,7 +4588,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6a4944f1162c00f2405200fb38773886
 2007-06-14T18:26:27.748707Z
 564
@@ -4520,7 +4622,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 0c0cee6df5f26eb3378c9b22a1162a5a
 2009-05-30T23:30:36.923541Z
 2777
@@ -4554,7 +4656,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6e59569f25a79a0a75797fa4ebb60936
 2007-08-29T16:52:35.680643Z
 674
@@ -4588,7 +4690,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 00a100c0ca092df63e8542fc6d0bc78c
 2007-03-18T15:48:05.787958Z
 344
@@ -4622,7 +4724,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ee71a22f869c9dbee6f322ad25f45934
 2009-12-06T10:28:20.099964Z
 3123
@@ -4656,7 +4758,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 21d40b6390e67409bad1d4525c26accb
 2009-10-17T22:23:29.892475Z
 2928
@@ -4690,7 +4792,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 1b013e3bbb624874d78eaf3332ccb3d5
 2007-03-26T16:41:54.592250Z
 383
@@ -4724,7 +4826,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e658f4ed3c99264bf4c036b87b8cf39f
 2007-05-27T17:42:04.537618Z
 549
@@ -4758,7 +4860,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 4d0267b0a9d4cb2ec782d10247a4c33f
 2009-01-24T11:31:15.122844Z
 2304
@@ -4792,7 +4894,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 eef7b68156646d86ea515aed9aa525ed
 2009-10-17T22:23:29.892475Z
 2928
@@ -4826,7 +4928,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 1567606924d88ae66474e848de86577a
 2009-10-21T22:34:28.905707Z
 2946
@@ -4860,7 +4962,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ccfd197b34214a0d74d952aa65dcd5a6
 2008-03-09T18:25:37.323226Z
 1222
@@ -4894,7 +4996,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f5ae107f30300b547d535ddc5b1b999c
 2009-09-12T08:36:46.650954Z
 2869
@@ -4928,7 +5030,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 9cef93921160d49f5d3aa4968ecc4eb1
 2007-10-22T21:07:13.432482Z
 864
@@ -4962,7 +5064,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6c70abafef3dc834c722ed7135d6a7df
 2009-10-17T22:23:29.892475Z
 2928
@@ -4996,7 +5098,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 0000368c453072e56da62defbc80441e
 2010-11-14T12:33:14.198318Z
 4402
@@ -5030,7 +5132,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 cf095d9afbc6429b8d759eb737a0781f
 2009-10-21T22:34:34.183882Z
 2947
@@ -5064,7 +5166,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 9aa91971db6c6f14ddd1ae768085b0a8
 2009-10-17T22:23:29.892475Z
 2928
@@ -5098,7 +5200,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3e5f2220de578b306ce323997c495db6
 2006-11-12T18:50:30.642587Z
 44
@@ -5132,7 +5234,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 0fb07bc55cf61720437b40e4ae244e05
 2006-12-03T20:51:17.306207Z
 63
@@ -5166,7 +5268,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 417051f45603460a17909e4a5029c779
 2007-08-29T16:52:35.680643Z
 674
@@ -5200,7 +5302,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 7cd80bdf7897357500a46e87ed82b84b
 2011-02-24T05:58:37.876075Z
 4940
@@ -5234,7 +5336,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 a62243f0bc2f1b1b11a47da172d011a5
 2007-04-25T15:06:20.062636Z
 479
@@ -5268,7 +5370,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 e809364786bdcce227961318e7428700
 2011-02-26T13:09:25.657748Z
 4950
@@ -5296,13 +5398,47 @@
 
 276
 
+20110401192910_add_index_to_users_type.rb
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+d7c5fa22340bcd1fd37b58d1eb09adfc
+2011-04-01T19:32:07.711451Z
+5288
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+158
+
 068_create_enabled_modules.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 96962340557b9a1f70a215d88b07c2c1
 2007-09-14T11:34:08.234701Z
 725
@@ -5336,7 +5472,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 8ad3f0193d5e3b8d52293bbf2828c2d2
 2009-10-17T22:23:29.892475Z
 2928
@@ -5370,7 +5506,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 fd6ccbccc44ceccab8de7c3c48696ecc
 2009-10-17T22:23:29.892475Z
 2928
@@ -5404,7 +5540,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 1798d606a43c6a29029535c28b49beff
 2007-09-04T22:07:44.613701Z
 702
@@ -5438,7 +5574,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d714e81a7a9c29b60e405233765cbd33
 2007-08-29T16:52:35.680643Z
 674
@@ -5472,7 +5608,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 a27ef00d6ec6b3f4dc63ad004181c10e
 2008-01-20T23:38:55.025648Z
 1091
@@ -5506,7 +5642,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 497529b269185b1833b959c98db3c1d1
 2007-08-29T16:52:35.680643Z
 674
@@ -5540,7 +5676,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d39d0037e4f06dfb7db18d9082608832
 2009-10-17T22:23:29.892475Z
 2928
@@ -5574,7 +5710,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 79d11b147c1061901a888d89c3e5029b
 2009-10-17T22:23:29.892475Z
 2928
@@ -5608,7 +5744,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 1cbe32e981634898d5b0f80b2c63798b
 2007-12-14T18:54:55.323993Z
 994
@@ -5642,7 +5778,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 717687210dcbeeebff8337561a427e70
 2007-05-05T13:22:27.245135Z
 506
@@ -5676,7 +5812,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 05c7ea8c5dc45498164a324f7db2887a
 2006-12-10T18:35:48.564790Z
 81
@@ -5710,7 +5846,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ce38342dea044adf8b277f6483f1a742
 2009-03-12T18:06:54.054174Z
 2572
@@ -5744,7 +5880,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 dbeea4ad5a501200711cb4195856597e
 2009-10-17T22:23:29.892475Z
 2928
@@ -5778,7 +5914,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 4c1203f40e8e7b568ddce15af4f3ad9b
 2008-11-10T18:59:06.897210Z
 2006
@@ -5812,7 +5948,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 c62ac2ca3e59bb91e5bb4e206abdaed1
 2007-04-25T15:06:20.062636Z
 479
@@ -5846,7 +5982,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3bb4b5f081354ea7d943f0b7c6f07284
 2007-08-29T16:52:35.680643Z
 674
@@ -5880,7 +6016,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3460b737f353524921cfd9ac4199fc44
 2009-03-12T19:49:39.983871Z
 2580
@@ -5914,7 +6050,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 560e67e7b88186a0e21a2f614b6d83c7
 2007-08-29T16:52:35.680643Z
 674
@@ -5948,7 +6084,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 c22348c101d1a03b2d808cb89b3175a5
 2007-06-12T20:12:05.590809Z
 559
@@ -5982,7 +6118,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 87d90f2ce2101811b7aaf0031a74e0c1
 2009-10-25T16:56:46.187627Z
 2981
@@ -6016,7 +6152,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 84fe06ac7cefc2eebba29ac872241d88
 2007-06-29T17:21:37.739022Z
 577
@@ -6050,7 +6186,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d7a9aad3796f37d70ac2ab4af9c80656
 2007-08-29T16:52:35.680643Z
 674
@@ -6084,7 +6220,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 defb118deb2deb23648d50da5cf71047
 2006-12-24T13:38:45.881735Z
 106
@@ -6118,7 +6254,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 89cbe3b06f14ba6d9a5cda47f4239f60
 2009-04-26T13:09:14.221938Z
 2696
@@ -6152,7 +6288,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f2e06da76555942fd3017134d618bbac
 2007-08-29T16:52:35.680643Z
 674
@@ -6186,7 +6322,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 5ff56d564f2da50c289c1dfd90053a4b
 2008-03-05T09:16:19.220849Z
 1189
@@ -6220,7 +6356,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 0ae6a6924263cf5317b539c81b952f03
 2009-10-17T22:23:29.892475Z
 2928
@@ -6254,7 +6390,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 121548a48360a22daa537af42ee8902b
 2007-01-21T11:50:22.864544Z
 167
@@ -6288,7 +6424,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 768603dc014def8d2fc0a0bb8d81ef79
 2011-02-27T13:34:41.060565Z
 4954
@@ -6322,7 +6458,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e50cfa8ef5216f0f7d266dac1e38c9da
 2008-07-26T11:46:24.917066Z
 1698
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20110401192910_add_index_to_users_type.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,9 @@
+class AddIndexToUsersType < ActiveRecord::Migration
+  def self.up
+    add_index :users, :type
+  end
+
+  def self.down
+    remove_index :users, :type
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20110408103312_add_roles_issues_visibility.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,9 @@
+class AddRolesIssuesVisibility < ActiveRecord::Migration
+  def self.up
+    add_column :roles, :issues_visibility, :string, :limit => 30, :default => 'default', :null => false
+  end
+
+  def self.down
+    remove_column :roles, :issues_visibility
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20110412065600_add_issues_is_private.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,9 @@
+class AddIssuesIsPrivate < ActiveRecord::Migration
+  def self.up
+    add_column :issues, :is_private, :boolean, :default => false, :null => false
+  end
+
+  def self.down
+    remove_column :issues, :is_private
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20110511000000_add_repositories_extra_info.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,9 @@
+class AddRepositoriesExtraInfo < ActiveRecord::Migration
+  def self.up
+    add_column :repositories, :extra_info, :text
+  end
+
+  def self.down
+    remove_column :repositories, :extra_info
+  end
+end
--- a/doc/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/doc/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,47 +1,23 @@
 K 25
 svn:wc:ra_dav:version-url
-V 28
-/svn/!svn/ver/4784/trunk/doc
+V 42
+/svn/!svn/ver/5967/branches/1.2-stable/doc
 END
 UPGRADING
 K 25
 svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/4752/trunk/doc/UPGRADING
-END
-RUNNING_TESTS
-K 25
-svn:wc:ra_dav:version-url
-V 42
-/svn/!svn/ver/3438/trunk/doc/RUNNING_TESTS
-END
-README_FOR_APP
-K 25
-svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/1732/trunk/doc/README_FOR_APP
+V 52
+/svn/!svn/ver/5967/branches/1.2-stable/doc/UPGRADING
 END
 INSTALL
 K 25
 svn:wc:ra_dav:version-url
-V 36
-/svn/!svn/ver/4752/trunk/doc/INSTALL
+V 50
+/svn/!svn/ver/5967/branches/1.2-stable/doc/INSTALL
 END
 CHANGELOG
 K 25
 svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/4784/trunk/doc/CHANGELOG
+V 52
+/svn/!svn/ver/5967/branches/1.2-stable/doc/CHANGELOG
 END
-COPYING
-K 25
-svn:wc:ra_dav:version-url
-V 35
-/svn/!svn/ver/883/trunk/doc/COPYING
-END
-git.rdoc
-K 25
-svn:wc:ra_dav:version-url
-V 37
-/svn/!svn/ver/4273/trunk/doc/git.rdoc
-END
--- a/doc/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/doc/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/doc
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/doc
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-30T14:37:23.564601Z
-4784
+2011-05-30T16:40:52.269746Z
+5967
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-c87e4b9ee82c334658b1c76106dfd469
-2011-01-23T10:22:00.456857Z
-4752
+2011-06-06T13:20:52.000000Z
+62141e99676ae9e0fc6a9afcc9f72128
+2011-05-30T16:40:52.269746Z
+5967
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-1949
+1941
 
 RUNNING_TESTS
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 cc987c3ab1bf29e6ebe5313bef953b5b
 2010-02-16T16:40:50.914879Z
 3438
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ba2ffee528eae310e20bf761619bc85f
 2008-08-11T20:49:52.309238Z
 1732
@@ -134,10 +134,10 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-daf24adc36bb93a3d0e1c5a7e4b14fc5
-2011-01-23T10:22:00.456857Z
-4752
+2011-06-06T13:20:52.000000Z
+fc379757634a83944c89421ef3bbc763
+2011-05-30T16:40:52.269746Z
+5967
 jplang
 has-props
 
@@ -160,7 +160,7 @@
 
 
 
-3003
+3009
 
 CHANGELOG
 file
@@ -168,10 +168,10 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-a6dd03cb1256e4bf125b81d353206416
-2011-01-30T14:37:23.564601Z
-4784
+2011-06-06T13:20:52.000000Z
+b9957a947aae3aff38216b32c540e2cf
+2011-05-30T16:40:52.269746Z
+5967
 jplang
 has-props
 
@@ -194,7 +194,7 @@
 
 
 
-85714
+95811
 
 COPYING
 file
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 751419260aa954499f7abaabaa882bbe
 2007-11-04T13:19:42.552822Z
 883
@@ -230,37 +230,3 @@
 
 17987
 
-git.rdoc
-file
-
-
-
-
-2011-03-03T11:05:14.000000Z
-cc77650493d11d18eabb058fbdf7ac24
-2010-10-22T17:18:11.628381Z
-4273
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2248
-
--- a/doc/.svn/text-base/CHANGELOG.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/doc/.svn/text-base/CHANGELOG.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -4,6 +4,161 @@
 Copyright (C) 2006-2011  Jean-Philippe Lang
 http://www.redmine.org/
 
+== 2011-05-30 v1.2.0
+
+* Defect #61: Broken character encoding in pdf export
+* Defect #1965: Redmine is not Tab Safe
+* Defect #2274: Filesystem Repository path encoding of non UTF-8 characters
+* Defect #2664: Mercurial: Repository path encoding of non UTF-8 characters
+* Defect #3421: Mercurial reads files from working dir instead of changesets
+* Defect #3462: CVS: Repository path encoding of non UTF-8 characters
+* Defect #3715: Login page should not show projects link and search box if authentication is required
+* Defect #3724: Mercurial repositories display revision ID instead of changeset ID
+* Defect #3761: Most recent CVS revisions are missing in "revisions" view
+* Defect #4270: CVS Repository view in Project doesn't show Author, Revision, Comment
+* Defect #5138: Don't use Ajax for pagination
+* Defect #5152: Cannot use certain characters for user and role names.
+* Defect #5251: Git: Repository path encoding of non UTF-8 characters
+* Defect #5373: Translation missing when adding invalid watchers
+* Defect #5817: Shared versions not shown in subproject's gantt chart
+* Defect #6013: git tab,browsing, very slow -- even after first time
+* Defect #6148: Quoting, newlines, and nightmares...
+* Defect #6256: Redmine considers non ASCII and UTF-16 text files as binary in SCM
+* Defect #6476: Subproject's issues are not shown in the subproject's gantt
+* Defect #6496: Remove i18n 0.3.x/0.4.x hack for Rails 2.3.5
+* Defect #6562: Context-menu deletion of issues deletes all subtasks too without explicit prompt
+* Defect #6604: Issues targeted at parent project versions' are not shown on gantt chart
+* Defect #6706: Resolving issues with the commit message produces the wrong comment with CVS
+* Defect #6901: Copy/Move an issue does not give any history of who actually did the action.
+* Defect #6905: Specific heading-content breaks CSS
+* Defect #7000: Project filter not applied on versions in Gantt chart
+* Defect #7097: Starting day of week cannot be set to Saturday
+* Defect #7114: New gantt doesn't display some projects
+* Defect #7146: Git adapter lost commits before 7 days from database latest changeset
+* Defect #7218: Date range error on issue query
+* Defect #7257: "Issues by" version links bad criterias
+* Defect #7279: CSS class ".icon-home" is not used.
+* Defect #7320: circular dependency >2 issues
+* Defect #7352: Filters not working in Gantt charts
+* Defect #7367: Receiving pop3 email should not output debug messages
+* Defect #7373: Error with PDF output and ruby 1.9.2
+* Defect #7379: Remove extraneous hidden_field on wiki history
+* Defect #7516: Redmine does not work with RubyGems 1.5.0
+* Defect #7518: Mercurial diff can be wrong if the previous changeset isn't the parent
+* Defect #7581: Not including a spent time value on the main issue update screen causes silent data loss
+* Defect #7582: hiding form pages from search engines
+* Defect #7597: Subversion and Mercurial log have the possibility to miss encoding
+* Defect #7604: ActionView::TemplateError (undefined method `name' for nil:NilClass)
+* Defect #7605: Using custom queries always redirects to "Issues" tab
+* Defect #7615: CVS diffs do not handle new files properly
+* Defect #7618: SCM diffs do not handle one line new files properly
+* Defect #7639: Some date fields do not have requested format.
+* Defect #7657: Wrong commit range in git log command on Windows
+* Defect #7818: Wiki pages don't use the local timezone to display the "Updated ? hours ago" mouseover
+* Defect #7821: Git "previous" and "next" revisions are incorrect
+* Defect #7827: CVS: Age column on repository view is off by timezone delta
+* Defect #7843: Add a relation between issues = explicit login window ! (basic authentication popup is prompted on AJAX request)
+* Defect #8011: {{toc}} does not display headlines with inline code markup
+* Defect #8029: List of users for adding to a group may be empty if 100 first users have been added
+* Defect #8064: Text custom fields do not wrap on the issue list
+* Defect #8071: Watching a subtask from the context menu updates main issue watch link
+* Defect #8072: Two untranslatable default role names
+* Defect #8075: Some "notifiable" names are not i18n-enabled
+* Defect #8081: GIT: Commits missing when user has the "decorate" git option enabled
+* Defect #8088: Colorful indentation of subprojects must be on right in RTL locales
+* Defect #8239: notes field is not propagated during issue copy
+* Defect #8356: GET /time_entries.xml ignores limit/offset parameters
+* Defect #8432: Private issues information shows up on Activity page for unauthorized users
+* Feature #746: Versioned issue descriptions
+* Feature #1067: Differentiate public/private saved queries in the sidebar
+* Feature #1236: Make destination folder for attachment uploads configurable
+* Feature #1735: Per project repository log encoding setting
+* Feature #1763: Autologin-cookie should be configurable
+* Feature #1981: display mercurial tags
+* Feature #2074: Sending email notifications when comments are added in the news section
+* Feature #2096: Custom fields referencing system tables (users and versions)
+* Feature #2732: Allow additional workflow transitions for author and assignee
+* Feature #2910: Warning on leaving edited issue/wiki page without saving
+* Feature #3396: Git: use --encoding=UTF-8 in "git log"
+* Feature #4273: SCM command availability automatic check in administration panel
+* Feature #4477: Use mime types in downloading from repository
+* Feature #5518: Graceful fallback for "missing translation" needed
+* Feature #5520: Text format buttons and preview link missing when editing comment
+* Feature #5831: Parent Task to Issue Bulk Edit
+* Feature #6887: Upgrade to Rails 2.3.11
+* Feature #7139: Highlight changes inside diff lines
+* Feature #7236: Collapse All for Groups
+* Feature #7246: Handle "named branch" for mercurial
+* Feature #7296: Ability for admin to delete users
+* Feature #7318: Add user agent to Redmine Mailhandler
+* Feature #7408: Add an application configuration file
+* Feature #7409: Cross project Redmine links
+* Feature #7410: Add salt to user passwords
+* Feature #7411: Option to cipher LDAP ans SCM passwords stored in the database
+* Feature #7412: Add an issue visibility level to each role
+* Feature #7414: Private issues
+* Feature #7517: Configurable path of executable for scm adapters
+* Feature #7640: Add "mystery man" gravatar to options
+* Feature #7858: RubyGems 1.6 support
+* Feature #7893: Group filter on the users list
+* Feature #7899: Box for editing comments should open with the formatting toolbar
+* Feature #7921: issues by pulldown should have 'status' option
+* Feature #7996: Bulk edit and context menu for time entries
+* Feature #8006: Right click context menu for Related Issues
+* Feature #8209: I18n YAML files not parsable with psych yaml library
+* Feature #8345: Link to user profile from account page
+* Feature #8365: Git: per project setting to report last commit or not in repository tree
+* Patch #5148: metaKey not handled in issues selection
+* Patch #5629: Wrap text fields properly in PDF
+* Patch #7418: Redmine Persian Translation
+* Patch #8295: Wrap title fields properly in PDF
+* Patch #8310: fixes automatic line break problem with TCPDF
+* Patch #8312: Switch to TCPDF from FPDF for PDF export
+
+== 2011-04-29 v1.1.3
+
+* Defect #5773: Email reminders are sent to locked users
+* Defect #6590: Wrong file list link in email notification on new file upload
+* Defect #7589: Wiki page with backslash in title can not be found
+* Defect #7785: Mailhandler keywords are not removed when updating issues
+* Defect #7794: Internal server error on formatting an issue as a PDF in Japanese
+* Defect #7838: Gantt- Issues does not show up in green when start and end date are the same
+* Defect #7846: Headers (h1, etc.) containing backslash followed by a digit are not displayed correctly
+* Defect #7875: CSV export separators in polish locale (pl.yml)
+* Defect #7890: Internal server error when referencing an issue without project in commit message
+* Defect #7904: Subprojects not properly deleted when deleting a parent project
+* Defect #7939: Simultaneous Wiki Updates Cause Internal Error
+* Defect #7951: Atom links broken on wiki index
+* Defect #7954: IE 9 can not select issues, does not display context menu
+* Defect #7985: Trying to do a bulk edit results in "Internal Error"
+* Defect #8003: Error raised by reposman.rb under Windows server 2003
+* Defect #8012: Wrong selection of modules when adding new project after validation error
+* Defect #8038: Associated Revisions OL/LI items are not styled properly in issue view
+* Defect #8067: CSV exporting in Italian locale
+* Defect #8235: bulk edit issues and copy issues error in es, gl and ca locales
+* Defect #8244: selected modules are not activated when copying a project
+* Patch #7278: Update Simplified Chinese translation to 1.1
+* Patch #7390: Fixes in Czech localization
+* Patch #7963: Reminder email: Link for show all issues does not sort
+
+== 2011-03-07 v1.1.2
+
+* Defect #3132: Bulk editing menu non-functional in Opera browser
+* Defect #6090: Most binary files become corrupted when downloading from CVS repository browser when Redmine is running on a Windows server
+* Defect #7280: Issues subjects wrap in Gantt
+* Defect #7288: Non ASCII filename downloaded from repo is broken on Internet Explorer.
+* Defect #7317: Gantt tab gives internal error due to nil avatar icon
+* Defect #7497: Aptana Studio .project file added to version 1.1.1-stable
+* Defect #7611: Workflow summary shows X icon for workflow with exactly 1 status transition
+* Defect #7625: Syntax highlighting unavailable from board new topic or topic edit preview
+* Defect #7630: Spent time in commits not recognized
+* Defect #7656: MySQL SQL Syntax Error when filtering issues by Assignee's Group
+* Defect #7718: Minutes logged in commit message are converted to hours
+* Defect #7763: Email notification are sent to watchers even if 'No events' setting is chosen
+* Feature #7608: Add "retro" gravatars
+* Patch #7598: Extensible MailHandler
+* Patch #7795: Internal server error at journals#index with custom fields
+
 == 2011-01-30 v1.1.1
 
 * Defect #4899: Redmine fails to list files for darcs repository
--- a/doc/.svn/text-base/INSTALL.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/doc/.svn/text-base/INSTALL.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,7 +1,7 @@
 == Redmine installation
 
 Redmine - project management software
-Copyright (C) 2006-2010  Jean-Philippe Lang
+Copyright (C) 2006-2011  Jean-Philippe Lang
 http://www.redmine.org/
 
 
@@ -9,21 +9,21 @@
 
 * Ruby 1.8.6 or 1.8.7
 
-* RubyGems 1.3.1
+* RubyGems 1.3.7
 
-* Ruby on Rails 2.3.5 (official downloadable Redmine releases are packaged with
+* Ruby on Rails 2.3.11 (official downloadable Redmine releases are packaged with
   the appropriate Rails version)
 
-* Rack 1.0.1 gem
+* Rack 1.1.0 gem
 
 * Rake 0.8.3 gem
 
 * I18n 0.4.2 gem
 
 * A database:
-  * MySQL (tested with MySQL 5)
-  * PostgreSQL (tested with PostgreSQL 8.1)
-  * SQLite (tested with SQLite 3)
+  * MySQL (tested with MySQL 5.1)
+  * PostgreSQL (tested with PostgreSQL 8.4)
+  * SQLite3 (tested with SQLite 3.6)
 
 Optional:
 * SCM binaries (e.g. svn), for repository browsing (must be available in PATH)
--- a/doc/.svn/text-base/UPGRADING.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/doc/.svn/text-base/UPGRADING.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,7 +1,7 @@
 == Redmine upgrade
 
 Redmine - project management software
-Copyright (C) 2006-2010  Jean-Philippe Lang
+Copyright (C) 2006-2011  Jean-Philippe Lang
 http://www.redmine.org/
 
 
@@ -30,7 +30,7 @@
 
 6. Migrate your database
 
-   If you are upgrading to Rails 2.3.5 as part of this migration, you
+   If you are upgrading to Rails 2.3.11 as part of this migration, you
    need to upgrade the plugin migrations before running the plugin migrations
    using:
      rake db:migrate:upgrade_plugin_migrations RAILS_ENV="production"
@@ -56,7 +56,7 @@
 
 == Notes
 
-* Rails 2.3.5 is required for versions 0.9.x and 1.0.x.
+* Rails 2.3.11 is required for versions 1.2.x.
 
 == References
 
--- a/doc/.svn/text-base/git.rdoc.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-= Contributing to Redmine with git and github
-
-(This is a beta document. If you can improve it, fork it and send a patch/pull request.)
-
-The official repository is at http://github.com/edavis10/redmine
-
-Official branches:
-
-* master - is automatically mirrored to svn trunk. DO NOT COMMIT OR MERGE INTO THIS BRANCH
-* [0.6, 0.7, 0.8, 0.9, 1.0,...]-stable - is automatically mirrored to svn release branches. DO NOT COMMIT OR MERGE INTO THIS BRANCH
-* integration-to-svn-trunk - this branch is a git-only branch that will track master (trunk). Any code in here will be eventually merged into master but it may be rebased as any time (git-svn needs to rebase to commit to svn)
-* integration-to-svn-stable-1.0 - this branch is a git-only branch that will track the 1.0-stable branch in svn.  Any code in here will be eventually merged into master and 1.0-stable but it may be rebased as any time (git-svn needs to rebase to commit to svn)
-
-I (edavis10) might have some other branches on the repository for work in progress.
-
-== Branch naming standards
-
-Redmine has two kinds of development:
-
-* bug fixes
-* new feature development
-
-Both bug fixes and new feature development should be done in a branch named after the issue number on Redmine.org.  So if you are fixing Issue #6244 your branch should be named:
-
-* 6244
-* 6244-sort-people-by-display-name (optional description)
-* issue/6244 (optional "issue" prefix)
-* issue/6244-sort-people-by-display-name (optional prefix and description)
-
-That way when the branch is merged into the Redmine core, the correct issue can be updated.
-
-Longer term feature development might require multiple branches.  Just your best judgment and try to keep the issue id in the name.
-
-If you don't have an issue for your patch, create an issue on redmine.org and say it's a placeholder issue for your work. Better yet, add a brief overview of what you are working on to the issue and you might get some help with it.
-
-== Coding Standards
-
-Follow the coding standards on the Redmine wiki: http://www.redmine.org/wiki/redmine/Coding_Standards#Commits.  Make sure you commit logs conform to the standards, otherwise someone else will have to rewrite them for you and you might lose attribution during the conversion to svn.
-
-
--- a/doc/CHANGELOG	Thu Mar 03 15:08:45 2011 +0000
+++ b/doc/CHANGELOG	Mon Jun 06 14:41:04 2011 +0100
@@ -4,6 +4,161 @@
 Copyright (C) 2006-2011  Jean-Philippe Lang
 http://www.redmine.org/
 
+== 2011-05-30 v1.2.0
+
+* Defect #61: Broken character encoding in pdf export
+* Defect #1965: Redmine is not Tab Safe
+* Defect #2274: Filesystem Repository path encoding of non UTF-8 characters
+* Defect #2664: Mercurial: Repository path encoding of non UTF-8 characters
+* Defect #3421: Mercurial reads files from working dir instead of changesets
+* Defect #3462: CVS: Repository path encoding of non UTF-8 characters
+* Defect #3715: Login page should not show projects link and search box if authentication is required
+* Defect #3724: Mercurial repositories display revision ID instead of changeset ID
+* Defect #3761: Most recent CVS revisions are missing in "revisions" view
+* Defect #4270: CVS Repository view in Project doesn't show Author, Revision, Comment
+* Defect #5138: Don't use Ajax for pagination
+* Defect #5152: Cannot use certain characters for user and role names.
+* Defect #5251: Git: Repository path encoding of non UTF-8 characters
+* Defect #5373: Translation missing when adding invalid watchers
+* Defect #5817: Shared versions not shown in subproject's gantt chart
+* Defect #6013: git tab,browsing, very slow -- even after first time
+* Defect #6148: Quoting, newlines, and nightmares...
+* Defect #6256: Redmine considers non ASCII and UTF-16 text files as binary in SCM
+* Defect #6476: Subproject's issues are not shown in the subproject's gantt
+* Defect #6496: Remove i18n 0.3.x/0.4.x hack for Rails 2.3.5
+* Defect #6562: Context-menu deletion of issues deletes all subtasks too without explicit prompt
+* Defect #6604: Issues targeted at parent project versions' are not shown on gantt chart
+* Defect #6706: Resolving issues with the commit message produces the wrong comment with CVS
+* Defect #6901: Copy/Move an issue does not give any history of who actually did the action.
+* Defect #6905: Specific heading-content breaks CSS
+* Defect #7000: Project filter not applied on versions in Gantt chart
+* Defect #7097: Starting day of week cannot be set to Saturday
+* Defect #7114: New gantt doesn't display some projects
+* Defect #7146: Git adapter lost commits before 7 days from database latest changeset
+* Defect #7218: Date range error on issue query
+* Defect #7257: "Issues by" version links bad criterias
+* Defect #7279: CSS class ".icon-home" is not used.
+* Defect #7320: circular dependency >2 issues
+* Defect #7352: Filters not working in Gantt charts
+* Defect #7367: Receiving pop3 email should not output debug messages
+* Defect #7373: Error with PDF output and ruby 1.9.2
+* Defect #7379: Remove extraneous hidden_field on wiki history
+* Defect #7516: Redmine does not work with RubyGems 1.5.0
+* Defect #7518: Mercurial diff can be wrong if the previous changeset isn't the parent
+* Defect #7581: Not including a spent time value on the main issue update screen causes silent data loss
+* Defect #7582: hiding form pages from search engines
+* Defect #7597: Subversion and Mercurial log have the possibility to miss encoding
+* Defect #7604: ActionView::TemplateError (undefined method `name' for nil:NilClass)
+* Defect #7605: Using custom queries always redirects to "Issues" tab
+* Defect #7615: CVS diffs do not handle new files properly
+* Defect #7618: SCM diffs do not handle one line new files properly
+* Defect #7639: Some date fields do not have requested format.
+* Defect #7657: Wrong commit range in git log command on Windows
+* Defect #7818: Wiki pages don't use the local timezone to display the "Updated ? hours ago" mouseover
+* Defect #7821: Git "previous" and "next" revisions are incorrect
+* Defect #7827: CVS: Age column on repository view is off by timezone delta
+* Defect #7843: Add a relation between issues = explicit login window ! (basic authentication popup is prompted on AJAX request)
+* Defect #8011: {{toc}} does not display headlines with inline code markup
+* Defect #8029: List of users for adding to a group may be empty if 100 first users have been added
+* Defect #8064: Text custom fields do not wrap on the issue list
+* Defect #8071: Watching a subtask from the context menu updates main issue watch link
+* Defect #8072: Two untranslatable default role names
+* Defect #8075: Some "notifiable" names are not i18n-enabled
+* Defect #8081: GIT: Commits missing when user has the "decorate" git option enabled
+* Defect #8088: Colorful indentation of subprojects must be on right in RTL locales
+* Defect #8239: notes field is not propagated during issue copy
+* Defect #8356: GET /time_entries.xml ignores limit/offset parameters
+* Defect #8432: Private issues information shows up on Activity page for unauthorized users
+* Feature #746: Versioned issue descriptions
+* Feature #1067: Differentiate public/private saved queries in the sidebar
+* Feature #1236: Make destination folder for attachment uploads configurable
+* Feature #1735: Per project repository log encoding setting
+* Feature #1763: Autologin-cookie should be configurable
+* Feature #1981: display mercurial tags
+* Feature #2074: Sending email notifications when comments are added in the news section
+* Feature #2096: Custom fields referencing system tables (users and versions)
+* Feature #2732: Allow additional workflow transitions for author and assignee
+* Feature #2910: Warning on leaving edited issue/wiki page without saving
+* Feature #3396: Git: use --encoding=UTF-8 in "git log"
+* Feature #4273: SCM command availability automatic check in administration panel
+* Feature #4477: Use mime types in downloading from repository
+* Feature #5518: Graceful fallback for "missing translation" needed
+* Feature #5520: Text format buttons and preview link missing when editing comment
+* Feature #5831: Parent Task to Issue Bulk Edit
+* Feature #6887: Upgrade to Rails 2.3.11
+* Feature #7139: Highlight changes inside diff lines
+* Feature #7236: Collapse All for Groups
+* Feature #7246: Handle "named branch" for mercurial
+* Feature #7296: Ability for admin to delete users
+* Feature #7318: Add user agent to Redmine Mailhandler
+* Feature #7408: Add an application configuration file
+* Feature #7409: Cross project Redmine links
+* Feature #7410: Add salt to user passwords
+* Feature #7411: Option to cipher LDAP ans SCM passwords stored in the database
+* Feature #7412: Add an issue visibility level to each role
+* Feature #7414: Private issues
+* Feature #7517: Configurable path of executable for scm adapters
+* Feature #7640: Add "mystery man" gravatar to options
+* Feature #7858: RubyGems 1.6 support
+* Feature #7893: Group filter on the users list
+* Feature #7899: Box for editing comments should open with the formatting toolbar
+* Feature #7921: issues by pulldown should have 'status' option
+* Feature #7996: Bulk edit and context menu for time entries
+* Feature #8006: Right click context menu for Related Issues
+* Feature #8209: I18n YAML files not parsable with psych yaml library
+* Feature #8345: Link to user profile from account page
+* Feature #8365: Git: per project setting to report last commit or not in repository tree
+* Patch #5148: metaKey not handled in issues selection
+* Patch #5629: Wrap text fields properly in PDF
+* Patch #7418: Redmine Persian Translation
+* Patch #8295: Wrap title fields properly in PDF
+* Patch #8310: fixes automatic line break problem with TCPDF
+* Patch #8312: Switch to TCPDF from FPDF for PDF export
+
+== 2011-04-29 v1.1.3
+
+* Defect #5773: Email reminders are sent to locked users
+* Defect #6590: Wrong file list link in email notification on new file upload
+* Defect #7589: Wiki page with backslash in title can not be found
+* Defect #7785: Mailhandler keywords are not removed when updating issues
+* Defect #7794: Internal server error on formatting an issue as a PDF in Japanese
+* Defect #7838: Gantt- Issues does not show up in green when start and end date are the same
+* Defect #7846: Headers (h1, etc.) containing backslash followed by a digit are not displayed correctly
+* Defect #7875: CSV export separators in polish locale (pl.yml)
+* Defect #7890: Internal server error when referencing an issue without project in commit message
+* Defect #7904: Subprojects not properly deleted when deleting a parent project
+* Defect #7939: Simultaneous Wiki Updates Cause Internal Error
+* Defect #7951: Atom links broken on wiki index
+* Defect #7954: IE 9 can not select issues, does not display context menu
+* Defect #7985: Trying to do a bulk edit results in "Internal Error"
+* Defect #8003: Error raised by reposman.rb under Windows server 2003
+* Defect #8012: Wrong selection of modules when adding new project after validation error
+* Defect #8038: Associated Revisions OL/LI items are not styled properly in issue view
+* Defect #8067: CSV exporting in Italian locale
+* Defect #8235: bulk edit issues and copy issues error in es, gl and ca locales
+* Defect #8244: selected modules are not activated when copying a project
+* Patch #7278: Update Simplified Chinese translation to 1.1
+* Patch #7390: Fixes in Czech localization
+* Patch #7963: Reminder email: Link for show all issues does not sort
+
+== 2011-03-07 v1.1.2
+
+* Defect #3132: Bulk editing menu non-functional in Opera browser
+* Defect #6090: Most binary files become corrupted when downloading from CVS repository browser when Redmine is running on a Windows server
+* Defect #7280: Issues subjects wrap in Gantt
+* Defect #7288: Non ASCII filename downloaded from repo is broken on Internet Explorer.
+* Defect #7317: Gantt tab gives internal error due to nil avatar icon
+* Defect #7497: Aptana Studio .project file added to version 1.1.1-stable
+* Defect #7611: Workflow summary shows X icon for workflow with exactly 1 status transition
+* Defect #7625: Syntax highlighting unavailable from board new topic or topic edit preview
+* Defect #7630: Spent time in commits not recognized
+* Defect #7656: MySQL SQL Syntax Error when filtering issues by Assignee's Group
+* Defect #7718: Minutes logged in commit message are converted to hours
+* Defect #7763: Email notification are sent to watchers even if 'No events' setting is chosen
+* Feature #7608: Add "retro" gravatars
+* Patch #7598: Extensible MailHandler
+* Patch #7795: Internal server error at journals#index with custom fields
+
 == 2011-01-30 v1.1.1
 
 * Defect #4899: Redmine fails to list files for darcs repository
--- a/doc/INSTALL	Thu Mar 03 15:08:45 2011 +0000
+++ b/doc/INSTALL	Mon Jun 06 14:41:04 2011 +0100
@@ -1,7 +1,7 @@
 == Redmine installation
 
 Redmine - project management software
-Copyright (C) 2006-2010  Jean-Philippe Lang
+Copyright (C) 2006-2011  Jean-Philippe Lang
 http://www.redmine.org/
 
 
@@ -9,21 +9,21 @@
 
 * Ruby 1.8.6 or 1.8.7
 
-* RubyGems 1.3.1
+* RubyGems 1.3.7
 
-* Ruby on Rails 2.3.5 (official downloadable Redmine releases are packaged with
+* Ruby on Rails 2.3.11 (official downloadable Redmine releases are packaged with
   the appropriate Rails version)
 
-* Rack 1.0.1 gem
+* Rack 1.1.0 gem
 
 * Rake 0.8.3 gem
 
 * I18n 0.4.2 gem
 
 * A database:
-  * MySQL (tested with MySQL 5)
-  * PostgreSQL (tested with PostgreSQL 8.1)
-  * SQLite (tested with SQLite 3)
+  * MySQL (tested with MySQL 5.1)
+  * PostgreSQL (tested with PostgreSQL 8.4)
+  * SQLite3 (tested with SQLite 3.6)
 
 Optional:
 * SCM binaries (e.g. svn), for repository browsing (must be available in PATH)
--- a/doc/UPGRADING	Thu Mar 03 15:08:45 2011 +0000
+++ b/doc/UPGRADING	Mon Jun 06 14:41:04 2011 +0100
@@ -1,7 +1,7 @@
 == Redmine upgrade
 
 Redmine - project management software
-Copyright (C) 2006-2010  Jean-Philippe Lang
+Copyright (C) 2006-2011  Jean-Philippe Lang
 http://www.redmine.org/
 
 
@@ -30,7 +30,7 @@
 
 6. Migrate your database
 
-   If you are upgrading to Rails 2.3.5 as part of this migration, you
+   If you are upgrading to Rails 2.3.11 as part of this migration, you
    need to upgrade the plugin migrations before running the plugin migrations
    using:
      rake db:migrate:upgrade_plugin_migrations RAILS_ENV="production"
@@ -56,7 +56,7 @@
 
 == Notes
 
-* Rails 2.3.5 is required for versions 0.9.x and 1.0.x.
+* Rails 2.3.11 is required for versions 1.2.x.
 
 == References
 
--- a/doc/git.rdoc	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-= Contributing to Redmine with git and github
-
-(This is a beta document. If you can improve it, fork it and send a patch/pull request.)
-
-The official repository is at http://github.com/edavis10/redmine
-
-Official branches:
-
-* master - is automatically mirrored to svn trunk. DO NOT COMMIT OR MERGE INTO THIS BRANCH
-* [0.6, 0.7, 0.8, 0.9, 1.0,...]-stable - is automatically mirrored to svn release branches. DO NOT COMMIT OR MERGE INTO THIS BRANCH
-* integration-to-svn-trunk - this branch is a git-only branch that will track master (trunk). Any code in here will be eventually merged into master but it may be rebased as any time (git-svn needs to rebase to commit to svn)
-* integration-to-svn-stable-1.0 - this branch is a git-only branch that will track the 1.0-stable branch in svn.  Any code in here will be eventually merged into master and 1.0-stable but it may be rebased as any time (git-svn needs to rebase to commit to svn)
-
-I (edavis10) might have some other branches on the repository for work in progress.
-
-== Branch naming standards
-
-Redmine has two kinds of development:
-
-* bug fixes
-* new feature development
-
-Both bug fixes and new feature development should be done in a branch named after the issue number on Redmine.org.  So if you are fixing Issue #6244 your branch should be named:
-
-* 6244
-* 6244-sort-people-by-display-name (optional description)
-* issue/6244 (optional "issue" prefix)
-* issue/6244-sort-people-by-display-name (optional prefix and description)
-
-That way when the branch is merged into the Redmine core, the correct issue can be updated.
-
-Longer term feature development might require multiple branches.  Just your best judgment and try to keep the issue id in the name.
-
-If you don't have an issue for your patch, create an issue on redmine.org and say it's a placeholder issue for your work. Better yet, add a brief overview of what you are working on to the issue and you might get some help with it.
-
-== Coding Standards
-
-Follow the coding standards on the Redmine wiki: http://www.redmine.org/wiki/redmine/Coding_Standards#Commits.  Make sure you commit logs conform to the standards, otherwise someone else will have to rewrite them for you and you might lose attribution during the conversion to svn.
-
-
--- a/extra/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 30
-/svn/!svn/ver/4936/trunk/extra
+V 44
+/svn/!svn/ver/5878/branches/1.2-stable/extra
 END
--- a/extra/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-23T17:27:31.762248Z
-4936
-jplang
+2011-05-17T13:32:08.404109Z
+5825
+tmaruyama
 
 
 
--- a/extra/mail_handler/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/4725/trunk/extra/mail_handler
-END
-rdm-mailhandler.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4725/trunk/extra/mail_handler/rdm-mailhandler.rb
-END
--- a/extra/mail_handler/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/mail_handler/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/mail_handler
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/mail_handler
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:15:00.000000Z
 f3a0f406bd2e6d3caacb7e7c22079df0
 2011-01-15T14:48:33.715032Z
 4725
--- a/extra/sample_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -44,7 +44,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 cb8636f8b6659a091f3e1f018a64a2f5
 2009-07-02T18:40:06.298867Z
 2798
@@ -78,7 +78,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 4d87ae4412bda3ec3b4c9a8bc17fafb6
 2009-02-26T16:37:48.671184Z
 2530
--- a/extra/sample_plugin/app/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/app/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app
 http://redmine.rubyforge.org/svn
 
 
--- a/extra/sample_plugin/app/controllers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/app/controllers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/controllers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/controllers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:15:00.000000Z
 9e3b32d475f8b06df8d45b28a2732d76
 2009-02-21T11:04:50.579477Z
 2493
--- a/extra/sample_plugin/app/models/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/app/models/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/models
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/models
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:15:00.000000Z
 5161ccc668c61730638ef23bec50232f
 2008-07-27T19:18:35.954247Z
 1704
--- a/extra/sample_plugin/app/views/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/app/views/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/views
 http://redmine.rubyforge.org/svn
 
 
--- a/extra/sample_plugin/app/views/example/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/app/views/example/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/example
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/views/example
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:15:00.000000Z
 674cc3fb92754e41d7e7d5fb7ed0eda7
 2007-09-23T18:50:53.732551Z
 753
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:15:00.000000Z
 cf9e02439886339b70ee199313902c96
 2007-09-23T18:50:53.732551Z
 753
--- a/extra/sample_plugin/app/views/my/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/app/views/my/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/my
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/views/my
 http://redmine.rubyforge.org/svn
 
 
--- a/extra/sample_plugin/app/views/my/blocks/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/app/views/my/blocks/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/my/blocks
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/views/my/blocks
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:15:00.000000Z
 e2d729cf488b7b7411cffb259c10559a
 2009-02-26T16:36:56.835799Z
 2529
--- a/extra/sample_plugin/app/views/settings/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/app/views/settings/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/settings
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/views/settings
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:15:00.000000Z
 065925dde040b66230ae06437114c77f
 2009-07-02T18:40:06.298867Z
 2798
--- a/extra/sample_plugin/assets/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/assets/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/assets
 http://redmine.rubyforge.org/svn
 
 
--- a/extra/sample_plugin/assets/images/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/assets/images/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets/images
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/assets/images
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:15:00.000000Z
 81bcc262c08473fa7cb05cc78176652f
 2007-09-23T18:50:53.732551Z
 753
--- a/extra/sample_plugin/assets/stylesheets/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/assets/stylesheets/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets/stylesheets
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/assets/stylesheets
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:15:00.000000Z
 ced97da84497db69b30e6e17a55c3fb9
 2007-09-23T18:50:53.732551Z
 753
--- a/extra/sample_plugin/config/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/config/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/config
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/config
 http://redmine.rubyforge.org/svn
 
 
--- a/extra/sample_plugin/config/locales/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/config/locales/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/config/locales
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/config/locales
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:15:00.000000Z
 c1dc7060239e61ce13e8840b305000c5
 2009-02-08T16:13:02.919112Z
 2413
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:15:00.000000Z
 989492284a42bf9777e2bd0d39b40254
 2009-02-08T16:13:02.919112Z
 2413
--- a/extra/sample_plugin/db/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/db/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/db
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/db
 http://redmine.rubyforge.org/svn
 
 
--- a/extra/sample_plugin/db/migrate/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/sample_plugin/db/migrate/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/db/migrate
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/db/migrate
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:15:00.000000Z
 2316ab57f3d60b7f04b4bdfdebf6fd8e
 2008-07-27T19:10:56.352148Z
 1703
--- a/extra/soundsoftware/reposman-soundsoftware.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/soundsoftware/reposman-soundsoftware.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -7,7 +7,7 @@
 # == Usage
 #
 #    reposman [OPTIONS...] -s [DIR] -r [HOST]
-#     
+#
 #  Examples:
 #    reposman --svn-dir=/var/svn --redmine-host=redmine.example.net --scm subversion
 #    reposman -s /var/git -r redmine.example.net -u http://svn.example.net --scm git
@@ -57,7 +57,7 @@
 #   -q, --quiet               no log
 #
 # == References
-# 
+#
 # You can find more information on the redmine's wiki : http://www.redmine.org/wiki/redmine/HowTos
 
 
@@ -210,7 +210,7 @@
 log("retrieved #{projects.size} projects", :level => 1)
 
 def set_owner_and_rights(project, repos_path, &block)
-  if RUBY_PLATFORM =~ /mswin/
+  if mswin?
     yield if block_given?
   else
     uid, gid = Etc.getpwnam($svn_owner).uid, ($use_groupid ? Etc.getgrnam(project.identifier).gid : Etc.getgrnam($svn_group).gid)
@@ -230,9 +230,9 @@
 def owner_name(file)
   mswin? ?
     $svn_owner :
-    Etc.getpwuid( File.stat(file).uid ).name  
+    Etc.getpwuid( File.stat(file).uid ).name
 end
-  
+
 def mswin?
   (RUBY_PLATFORM =~ /(:?mswin|mingw)/) || (RUBY_PLATFORM == 'java' && (ENV['OS'] || ENV['os']) =~ /windows/i)
 end
@@ -251,7 +251,6 @@
   repos_path = File.join($repos_base, project.identifier).gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR)
 
   create_repos = false
-
   # Logic required for SoundSoftware.ac.uk repositories:
   #
   # * If the project has a repository path declared already,
@@ -342,9 +341,7 @@
     rescue => e
       log("\trepository #{repos_path} not registered in Redmine: #{e.message}");
     end
-
     log("\trepository #{repos_path} created");
   end
+end
 
-end
-  
--- a/extra/svn/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/svn/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,29 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 34
-/svn/!svn/ver/4936/trunk/extra/svn
+V 48
+/svn/!svn/ver/5878/branches/1.2-stable/extra/svn
 END
-reposman.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4288/trunk/extra/svn/reposman.rb
-END
-svnserve.wrapper
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/402/trunk/extra/svn/svnserve.wrapper
-END
-Redmine.pm
-K 25
-svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/4936/trunk/extra/svn/Redmine.pm
-END
-create_views.sql
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/396/trunk/extra/svn/create_views.sql
-END
--- a/extra/svn/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/svn/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/extra/svn
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/svn
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-23T17:27:31.762248Z
-4936
-jplang
+2011-05-17T13:32:08.404109Z
+5825
+tmaruyama
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:12.000000Z
-a0d169b0fc20459335e531e4f3921ede
-2010-10-24T21:00:05.611798Z
-4288
-jplang
+2011-06-06T13:18:33.000000Z
+b9371e264b5907bf884bf17deba8c835
+2011-05-17T13:32:08.404109Z
+5825
+tmaruyama
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-10545
+10512
 
 svnserve.wrapper
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f41d78e45e03554626edf5e4e6663d80
 2007-04-02T19:01:31.084001Z
 402
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 c3d331d6024a3d0f0c250fda387ce052
 2011-02-23T17:27:31.762248Z
 4936
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 96fdfe0a7a4913dbbfc1b871d7abab02
 2007-04-01T19:43:59.029417Z
 396
--- a/extra/svn/.svn/text-base/reposman.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/svn/.svn/text-base/reposman.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -7,7 +7,7 @@
 # == Usage
 #
 #    reposman [OPTIONS...] -s [DIR] -r [HOST]
-#     
+#
 #  Examples:
 #    reposman --svn-dir=/var/svn --redmine-host=redmine.example.net --scm subversion
 #    reposman -s /var/git -r redmine.example.net -u http://svn.example.net --scm git
@@ -57,7 +57,7 @@
 #   -q, --quiet               no log
 #
 # == References
-# 
+#
 # You can find more information on the redmine's wiki : http://www.redmine.org/wiki/redmine/HowTos
 
 
@@ -205,7 +205,7 @@
 log("retrieved #{projects.size} projects", :level => 1)
 
 def set_owner_and_rights(project, repos_path, &block)
-  if RUBY_PLATFORM =~ /mswin/
+  if mswin?
     yield if block_given?
   else
     uid, gid = Etc.getpwnam($svn_owner).uid, ($use_groupid ? Etc.getgrnam(project.identifier).gid : Etc.getgrnam($svn_group).gid)
@@ -225,9 +225,9 @@
 def owner_name(file)
   mswin? ?
     $svn_owner :
-    Etc.getpwuid( File.stat(file).uid ).name  
+    Etc.getpwuid( File.stat(file).uid ).name
 end
-  
+
 def mswin?
   (RUBY_PLATFORM =~ /(:?mswin|mingw)/) || (RUBY_PLATFORM == 'java' && (ENV['OS'] || ENV['os']) =~ /windows/i)
 end
@@ -246,7 +246,6 @@
   repos_path = File.join($repos_base, project.identifier).gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR)
 
   if File.directory?(repos_path)
-
     # we must verify that repository has the good owner and the good
     # rights before leaving
     other_read = other_read_right?(repos_path)
@@ -304,9 +303,6 @@
         log("\trepository #{repos_path} not registered in Redmine: #{e.message}");
       end
     end
-
     log("\trepository #{repos_path} created");
   end
-
 end
-  
\ No newline at end of file
--- a/extra/svn/reposman.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/extra/svn/reposman.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -7,7 +7,7 @@
 # == Usage
 #
 #    reposman [OPTIONS...] -s [DIR] -r [HOST]
-#     
+#
 #  Examples:
 #    reposman --svn-dir=/var/svn --redmine-host=redmine.example.net --scm subversion
 #    reposman -s /var/git -r redmine.example.net -u http://svn.example.net --scm git
@@ -59,7 +59,7 @@
 #   -q, --quiet               no log
 #
 # == References
-# 
+#
 # You can find more information on the redmine's wiki : http://www.redmine.org/wiki/redmine/HowTos
 
 
@@ -215,7 +215,7 @@
 log("retrieved #{projects.size} projects", :level => 1)
 
 def set_owner_and_rights(project, repos_path, &block)
-  if RUBY_PLATFORM =~ /mswin/
+  if mswin?
     yield if block_given?
   else
     uid, gid = Etc.getpwnam($svn_owner).uid, ($use_groupid ? Etc.getgrnam(project.identifier).gid : Etc.getgrnam($svn_group).gid)
@@ -235,9 +235,9 @@
 def owner_name(file)
   mswin? ?
     $svn_owner :
-    Etc.getpwuid( File.stat(file).uid ).name  
+    Etc.getpwuid( File.stat(file).uid ).name
 end
-  
+
 def mswin?
   (RUBY_PLATFORM =~ /(:?mswin|mingw)/) || (RUBY_PLATFORM == 'java' && (ENV['OS'] || ENV['os']) =~ /windows/i)
 end
@@ -256,7 +256,6 @@
   repos_path = File.join($repos_base, project.identifier).gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR)
 
   if File.directory?(repos_path)
-
     # we must verify that repository has the good owner and the good
     # rights before leaving
     other_read = other_read_right?(repos_path)
@@ -314,9 +313,7 @@
         log("\trepository #{repos_path} not registered in Redmine: #{e.message}");
       end
     end
-
     log("\trepository #{repos_path} created");
   end
+end
 
-end
-  
--- a/files/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/files/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/files
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/files
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 ae0415159f2c4dba3fc1a559d4c0f9f5
 2006-06-28T18:11:03.549769Z
 4
--- a/lib/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,41 +1,17 @@
-K 25
-svn:wc:ra_dav:version-url
-V 28
-/svn/!svn/ver/4993/trunk/lib
-END
-faster_csv.rb
 K 25
 svn:wc:ra_dav:version-url
 V 42
-/svn/!svn/ver/3007/trunk/lib/faster_csv.rb
+/svn/!svn/ver/5943/branches/1.2-stable/lib
 END
 redmine.rb
 K 25
 svn:wc:ra_dav:version-url
-V 39
-/svn/!svn/ver/4954/trunk/lib/redmine.rb
-END
-tabular_form_builder.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3804/trunk/lib/tabular_form_builder.rb
+V 53
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine.rb
 END
 redcloth3.rb
 K 25
 svn:wc:ra_dav:version-url
-V 41
-/svn/!svn/ver/4468/trunk/lib/redcloth3.rb
+V 55
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redcloth3.rb
 END
-ar_condition.rb
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/1227/trunk/lib/ar_condition.rb
-END
-diff.rb
-K 25
-svn:wc:ra_dav:version-url
-V 36
-/svn/!svn/ver/2840/trunk/lib/diff.rb
-END
--- a/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-03T05:51:46.224821Z
-4993
+2011-05-28T03:34:47.536780Z
+5943
 tmaruyama
 
 
@@ -38,7 +38,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 1657561b457dadfa5d004a393bdd1a2e
 2009-11-04T13:22:26.440808Z
 3007
@@ -78,10 +78,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-931d36182ff7c72cf9e133581a6e1822
-2011-02-27T13:34:41.060565Z
-4954
+2011-06-06T13:20:53.000000Z
+0db4c288bb61c89e63cd92b6218a718a
+2011-04-15T13:30:25.989544Z
+5468
 jplang
 has-props
 
@@ -104,7 +104,7 @@
 
 
 
-12850
+13364
 
 tabular_form_builder.rb
 file
@@ -112,7 +112,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 9d8fb5ede85fd780f018b74b36a83034
 2010-06-20T19:03:09.888571Z
 3804
@@ -149,10 +149,10 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-d76edcf3565b73d5e63e37d3e1c72512
-2010-12-05T10:09:18.457497Z
-4468
+2011-06-06T13:20:53.000000Z
+ed903f4f804480cf72cd46a16cb64b92
+2011-03-14T20:35:36.619571Z
+5133
 jplang
 has-props
 
@@ -175,7 +175,7 @@
 
 
 
-38680
+38769
 
 ar_condition.rb
 file
@@ -183,7 +183,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 55e7cfa4fcb3619e9939d29336ecdf02
 2008-03-11T19:33:38.611682Z
 1227
@@ -217,7 +217,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 1ecc6c4c4ae6aa3e75600673b4b78add
 2009-08-15T22:41:40.505056Z
 2840
--- a/lib/.svn/text-base/redcloth3.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/.svn/text-base/redcloth3.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -296,11 +296,11 @@
         rip_offtags text
         no_textile text
         escape_html_tags text
+        # need to do this before #hard_break and #blocks
+        block_textile_quotes text unless @lite_mode
         hard_break text 
         unless @lite_mode
             refs text
-            # need to do this before text is split by #blocks
-            block_textile_quotes text
             blocks text
         end
         inline text
@@ -707,11 +707,13 @@
             atts = pba( atts )
 
             # pass to prefix handler
+            replacement = nil
             if respond_to? "textile_#{ tag }", true
-                text.gsub!( $&, method( "textile_#{ tag }" ).call( tag, atts, cite, content ) )
+              replacement = method( "textile_#{ tag }" ).call( tag, atts, cite, content )
             elsif respond_to? "textile_#{ tagpre }_", true
-                text.gsub!( $&, method( "textile_#{ tagpre }_" ).call( tagpre, num, atts, cite, content ) )
+              replacement = method( "textile_#{ tagpre }_" ).call( tagpre, num, atts, cite, content )  
             end
+            text.gsub!( $& ) { replacement } if replacement
         end
     end
     
--- a/lib/.svn/text-base/redmine.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/.svn/text-base/redmine.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -41,6 +41,8 @@
   fields.register Redmine::CustomFieldFormat.new('list', :label => :label_list, :order => 5)
   fields.register Redmine::CustomFieldFormat.new('date', :label => :label_date, :order => 6)
   fields.register Redmine::CustomFieldFormat.new('bool', :label => :label_boolean, :order => 7)
+  fields.register Redmine::CustomFieldFormat.new('user', :label => :label_user, :only => %w(Issue TimeEntry Version Project), :edit_as => 'list', :order => 8)
+  fields.register Redmine::CustomFieldFormat.new('version', :label => :label_version, :only => %w(Issue TimeEntry Version Project), :edit_as => 'list', :order => 9)
 end
 
 # Permissions
@@ -69,6 +71,8 @@
     map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new]}
     map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]}
     map.permission :manage_subtasks, {}
+    map.permission :set_issues_private, {}
+    map.permission :set_own_issues_private, {}, :require => :loggedin
     map.permission :add_issue_notes, {:issues => [:edit, :update], :journals => [:new]}
     map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin
     map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin
@@ -84,10 +88,10 @@
   end
   
   map.project_module :time_tracking do |map|
-    map.permission :log_time, {:timelog => [:new, :create, :edit, :update]}, :require => :loggedin
+    map.permission :log_time, {:timelog => [:new, :create, :edit, :update, :bulk_edit, :bulk_update]}, :require => :loggedin
     map.permission :view_time_entries, :timelog => [:index, :show], :time_entry_reports => [:report]
-    map.permission :edit_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :member
-    map.permission :edit_own_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :loggedin
+    map.permission :edit_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy, :bulk_edit, :bulk_update]}, :require => :member
+    map.permission :edit_own_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy,:bulk_edit, :bulk_update]}, :require => :loggedin
     map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member
   end
   
--- a/lib/SVG/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/SVG/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/SVG
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/SVG
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 393a5ca445f6965873eca0259a17f833
 2007-03-25T17:11:46.804742Z
 380
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 072cf60873854a186c6eba9b74dbe389
 2007-03-25T17:11:46.804742Z
 380
--- a/lib/SVG/Graph/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/SVG/Graph/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/SVG/Graph
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/SVG/Graph
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 0a49ed37717b08c6bccdc843a03a333d
 2009-03-30T19:58:17.407192Z
 2642
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 55ff835de5a0fb0fd2d6a236b1c5c436
 2009-03-30T19:58:17.407192Z
 2642
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 a39e9963eaae7bb913b6d8d2dfe0506f
 2009-03-30T19:58:17.407192Z
 2642
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 184772c0f1732eadf12b0e8bc9e172f7
 2009-03-30T19:58:17.407192Z
 2642
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 fad5865539cbd7ba3433fd6d47b9d3f2
 2009-11-07T10:40:54.677820Z
 3017
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 cc9051d7617dfe6dd6cc47fe83fd6ec4
 2009-03-30T19:58:17.407192Z
 2642
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 f092a4b0f16876381bc9283058eeb48c
 2007-03-25T17:11:46.804742Z
 380
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 73dbcb4a1cba46b4e46a81881d24ff1a
 2009-03-30T19:58:17.407192Z
 2642
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 d8e95d0e507a02a74a5ac3435560d3bd
 2007-03-25T17:11:46.804742Z
 380
--- a/lib/generators/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/generators/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/generators
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators
 http://redmine.rubyforge.org/svn
 
 
--- a/lib/generators/redmine_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/generators/redmine_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators/redmine_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 334056a407de9091bb8774ba986c53f9
 2009-06-10T03:39:02.884087Z
 2785
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 be5d60ef31ac822cd5650ab976dcc543
 2009-06-10T03:39:02.884087Z
 2785
--- a/lib/generators/redmine_plugin/templates/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/generators/redmine_plugin/templates/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin/templates
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators/redmine_plugin/templates
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 2d39c559d341be440cb60911ef125dd9
 2008-09-05T10:31:06.632668Z
 1786
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 d97a21936cfb77543031f7d9a5d5131a
 2008-10-25T04:37:31.779636Z
 1949
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 d14592489e5b7d34b33d2487f4770b7d
 2008-10-25T04:37:31.779636Z
 1949
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ab791ada26df5c9c1a13b771e988a36f
 2009-06-10T03:39:02.884087Z
 2785
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 39cb16a49db6c72cdd7a63447d5b188f
 2010-06-17T19:02:13.409991Z
 3771
--- a/lib/generators/redmine_plugin_controller/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/generators/redmine_plugin_controller/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_controller
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators/redmine_plugin_controller
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 60c1792566a450d246dd66ff274ae06c
 2008-09-05T10:31:06.632668Z
 1786
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 23b15404071adb39cb140a6113057f15
 2010-02-28T12:15:47.320153Z
 3514
--- a/lib/generators/redmine_plugin_controller/templates/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/generators/redmine_plugin_controller/templates/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_controller/templates
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators/redmine_plugin_controller/templates
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 0ae9d2e8e624fef815f60164d47b6464
 2008-09-05T10:31:06.632668Z
 1786
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 e8491aac2379dbba3d3ddadc30f6db07
 2008-10-25T09:35:51.426668Z
 1951
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 2fdd792e6b6825b4f1802ba4767e0435
 2008-10-25T09:35:51.426668Z
 1951
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 22e765f47aacc324789509219797d087
 2010-06-17T19:02:07.893033Z
 3770
--- a/lib/generators/redmine_plugin_model/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/generators/redmine_plugin_model/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_model
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators/redmine_plugin_model
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ca5ffbd9dfb099b2f38ca21c030ffea0
 2008-09-05T10:31:06.632668Z
 1786
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ba0c0092c69cca4c21b1b26027f7472b
 2010-02-28T12:15:47.320153Z
 3514
--- a/lib/generators/redmine_plugin_model/templates/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/generators/redmine_plugin_model/templates/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_model/templates
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators/redmine_plugin_model/templates
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ce0817700ec27f10f7d07f998bff6991
 2008-10-25T09:35:51.426668Z
 1951
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 a4081d31f6d22e7655b4f6e9fb894a03
 2009-10-17T21:08:33.644420Z
 2926
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 115e77dae670747c95b5ff22c01d4174
 2008-09-05T10:31:06.632668Z
 1786
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 3a783571ccc96a2f639329700dda677b
 2010-06-17T19:02:07.893033Z
 3770
--- a/lib/plugins/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/plugins/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/plugins
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/plugins
 http://redmine.rubyforge.org/svn
 
 
--- a/lib/redcloth3.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redcloth3.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -296,11 +296,11 @@
         rip_offtags text
         no_textile text
         escape_html_tags text
+        # need to do this before #hard_break and #blocks
+        block_textile_quotes text unless @lite_mode
         hard_break text 
         unless @lite_mode
             refs text
-            # need to do this before text is split by #blocks
-            block_textile_quotes text
             blocks text
         end
         inline text
@@ -707,11 +707,13 @@
             atts = pba( atts )
 
             # pass to prefix handler
+            replacement = nil
             if respond_to? "textile_#{ tag }", true
-                text.gsub!( $&, method( "textile_#{ tag }" ).call( tag, atts, cite, content ) )
+              replacement = method( "textile_#{ tag }" ).call( tag, atts, cite, content )
             elsif respond_to? "textile_#{ tagpre }_", true
-                text.gsub!( $&, method( "textile_#{ tagpre }_" ).call( tagpre, num, atts, cite, content ) )
+              replacement = method( "textile_#{ tagpre }_" ).call( tagpre, num, atts, cite, content )  
             end
+            text.gsub!( $& ) { replacement } if replacement
         end
     end
     
--- a/lib/redmine.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -41,6 +41,8 @@
   fields.register Redmine::CustomFieldFormat.new('list', :label => :label_list, :order => 5)
   fields.register Redmine::CustomFieldFormat.new('date', :label => :label_date, :order => 6)
   fields.register Redmine::CustomFieldFormat.new('bool', :label => :label_boolean, :order => 7)
+  fields.register Redmine::CustomFieldFormat.new('user', :label => :label_user, :only => %w(Issue TimeEntry Version Project), :edit_as => 'list', :order => 8)
+  fields.register Redmine::CustomFieldFormat.new('version', :label => :label_version, :only => %w(Issue TimeEntry Version Project), :edit_as => 'list', :order => 9)
 end
 
 # Permissions
@@ -69,6 +71,8 @@
     map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new]}
     map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]}
     map.permission :manage_subtasks, {}
+    map.permission :set_issues_private, {}
+    map.permission :set_own_issues_private, {}, :require => :loggedin
     map.permission :add_issue_notes, {:issues => [:edit, :update], :journals => [:new]}
     map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin
     map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin
@@ -84,10 +88,10 @@
   end
   
   map.project_module :time_tracking do |map|
-    map.permission :log_time, {:timelog => [:new, :create, :edit, :update]}, :require => :loggedin
+    map.permission :log_time, {:timelog => [:new, :create, :edit, :update, :bulk_edit, :bulk_update]}, :require => :loggedin
     map.permission :view_time_entries, :timelog => [:index, :show], :time_entry_reports => [:report]
-    map.permission :edit_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :member
-    map.permission :edit_own_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :loggedin
+    map.permission :edit_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy, :bulk_edit, :bulk_update]}, :require => :member
+    map.permission :edit_own_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy,:bulk_edit, :bulk_update]}, :require => :loggedin
     map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member
   end
   
--- a/lib/redmine/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,161 +1,41 @@
 K 25
 svn:wc:ra_dav:version-url
-V 36
-/svn/!svn/ver/4993/trunk/lib/redmine
+V 50
+/svn/!svn/ver/5879/branches/1.2-stable/lib/redmine
 END
-i18n.rb
+codeset_util.rb
 K 25
 svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4894/trunk/lib/redmine/i18n.rb
+V 66
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/codeset_util.rb
 END
-pop3.rb
+version.rb
 K 25
 svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4737/trunk/lib/redmine/pop3.rb
-END
-safe_attributes.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4491/trunk/lib/redmine/safe_attributes.rb
-END
-platform.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/1753/trunk/lib/redmine/platform.rb
+V 61
+/svn/!svn/ver/5879/branches/1.2-stable/lib/redmine/version.rb
 END
 custom_field_format.rb
 K 25
 svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/3675/trunk/lib/redmine/custom_field_format.rb
-END
-themes.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4559/trunk/lib/redmine/themes.rb
-END
-version.rb
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/4784/trunk/lib/redmine/version.rb
-END
-imap.rb
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/2220/trunk/lib/redmine/imap.rb
+V 73
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/custom_field_format.rb
 END
 mime_type.rb
 K 25
 svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/3258/trunk/lib/redmine/mime_type.rb
-END
-info.rb
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/2776/trunk/lib/redmine/info.rb
-END
-access_keys.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/1081/trunk/lib/redmine/access_keys.rb
-END
-activity.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/1702/trunk/lib/redmine/activity.rb
-END
-wiki_formatting.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3446/trunk/lib/redmine/wiki_formatting.rb
-END
-menu_manager.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4406/trunk/lib/redmine/menu_manager.rb
-END
-plugin.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4293/trunk/lib/redmine/plugin.rb
-END
-utils.rb
-K 25
-svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/2234/trunk/lib/redmine/utils.rb
-END
-hook.rb
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4406/trunk/lib/redmine/hook.rb
-END
-access_control.rb
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/1907/trunk/lib/redmine/access_control.rb
-END
-search.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/3444/trunk/lib/redmine/search.rb
-END
-configuration.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4949/trunk/lib/redmine/configuration.rb
-END
-core_ext.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/1361/trunk/lib/redmine/core_ext.rb
-END
-ciphering.rb
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4950/trunk/lib/redmine/ciphering.rb
-END
-about.rb
-K 25
-svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/2766/trunk/lib/redmine/about.rb
-END
-syntax_highlighting.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/3619/trunk/lib/redmine/syntax_highlighting.rb
+V 63
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/mime_type.rb
 END
 unified_diff.rb
 K 25
 svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4929/trunk/lib/redmine/unified_diff.rb
+V 66
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/unified_diff.rb
 END
 notifiable.rb
 K 25
 svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4222/trunk/lib/redmine/notifiable.rb
+V 64
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/notifiable.rb
 END
--- a/lib/redmine/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-03T05:51:46.224821Z
-4993
-tmaruyama
+2011-05-22T09:20:14.586112Z
+5879
+jplang
 
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 85ff863202dfbf2a6e9447a3bcf7cc06
 2011-01-22T12:09:07.652831Z
 4737
@@ -63,13 +63,47 @@
 
 2461
 
+codeset_util.rb
+file
+
+
+
+
+2011-06-06T13:20:53.000000Z
+49dc0eec18109d69f897a5e3e1e7a44b
+2011-04-16T06:43:49.720334Z
+5474
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+744
+
 themes.rb
 file
 
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 23fd3a13b8bcd6b3e2547e913d5fae18
 2010-12-22T21:41:08.746858Z
 4559
@@ -103,7 +137,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 caeedebd5c05aede1d232510d03ad136
 2008-12-31T14:56:30.439880Z
 2220
@@ -140,7 +174,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ddadcd03b97455adae2451a2140afbf6
 2009-05-30T23:00:22.602473Z
 2776
@@ -174,7 +208,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 41c2852d003d94cb23c231f06be62d12
 2008-01-20T13:07:19.003764Z
 1081
@@ -211,7 +245,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 d04b071ce8f05b44ca6993c56fea9b1f
 2009-01-04T17:09:25.896068Z
 2234
@@ -245,7 +279,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 e7e4c44515553e36bffa6e8f8960080b
 2008-09-25T18:51:03.022592Z
 1907
@@ -279,7 +313,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 6f968bcc4f81562e9cbddb02ebc62601
 2010-02-17T20:05:51.124365Z
 3444
@@ -316,7 +350,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 2f47dda69333c012a55496a3792c369e
 2011-02-25T14:30:05.998365Z
 4949
@@ -350,7 +384,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 91ed592a8419f1bec48ba880c7a86e29
 2009-05-25T19:10:26.065563Z
 2766
@@ -384,7 +418,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 4a40844a6cd11aa7409bc8f4e9a2c74e
 2010-03-28T11:30:48.135356Z
 3619
@@ -418,11 +452,11 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-cfdd5556d40422dd9610d2124a2fefac
-2010-09-28T21:09:06.467392Z
-4222
-edavis10
+2011-06-06T13:20:53.000000Z
+818a8c71d5080050c1fe5a95e1469a3d
+2011-03-04T14:32:58.878627Z
+5003
+jplang
 
 
 
@@ -444,7 +478,7 @@
 
 
 
-916
+976
 
 i18n.rb
 file
@@ -452,7 +486,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 cc684405103aabd5f4aea0c21fd7c732
 2011-02-20T14:56:37.399906Z
 4894
@@ -489,7 +523,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 7f659c02de1ea89806beda1772dc4d36
 2010-12-12T13:11:53.259618Z
 4491
@@ -523,7 +557,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 68165c83be56d3204c582958d933ff0a
 2008-08-25T11:01:37.715099Z
 1753
@@ -557,10 +591,10 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-c6c19bce5ff3b4298316ffb112478868
-2011-01-30T14:37:23.564601Z
-4784
+2011-06-06T13:20:53.000000Z
+fe0857b61f8e946781b4eb6cb6298a1f
+2011-05-22T09:20:14.586112Z
+5879
 jplang
 has-props
 
@@ -583,7 +617,7 @@
 
 
 
-1056
+1083
 
 custom_field_format.rb
 file
@@ -591,11 +625,12 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-7fd1fcfb204480b0e9903fd03c53a563
-2010-04-16T15:34:05.970144Z
-3675
-edavis10
+2011-06-06T13:20:53.000000Z
+ae8c89a602b7d18e390aa1a7865a2319
+2011-04-01T14:02:05.869935Z
+5275
+jplang
+has-props
 
 
 
@@ -616,8 +651,7 @@
 
 
 
-
-2761
+3066
 
 mime_type.rb
 file
@@ -625,11 +659,11 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-dbfad515b1d5c277d2f8e9d67233185e
-2009-12-29T13:28:30.604471Z
-3258
-jplang
+2011-06-06T13:20:53.000000Z
+9494e5229ba69caf5121fd1f90c0fb9e
+2011-03-22T04:35:48.334519Z
+5190
+tmaruyama
 has-props
 
 
@@ -651,7 +685,7 @@
 
 
 
-3498
+3525
 
 wiki_formatting
 dir
@@ -665,7 +699,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 88435997a6d77548eab82526df38caf1
 2008-07-27T18:38:31.746909Z
 1702
@@ -699,7 +733,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 648c40cc515e97d063d2c2f218cbbc23
 2010-02-17T20:47:50.603139Z
 3446
@@ -733,7 +767,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 81bc46012d5a0067e18e08bada197d8c
 2010-10-25T23:32:01.793182Z
 4293
@@ -767,7 +801,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 7f3739a749929e1f65efb292620d361b
 2010-11-14T16:24:21.989522Z
 4406
@@ -801,7 +835,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 dfacee092edce74d74e8ea7d7a54aeba
 2010-11-14T16:24:21.989522Z
 4406
@@ -835,7 +869,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 7632bcee464a923f5aa7c9eba29f8081
 2008-04-26T11:59:51.889210Z
 1361
@@ -869,7 +903,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 763ba2f765c62f378371f2472679c464
 2011-02-26T13:09:25.657748Z
 4950
@@ -906,11 +940,11 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-561d23da6665fb790120f9d59962fb78
-2011-02-23T07:03:45.049119Z
-4929
-tmaruyama
+2011-06-06T13:20:53.000000Z
+34031c9894d99cfc79820222a06d34c5
+2011-03-11T20:23:29.177962Z
+5094
+jplang
 has-props
 
 
@@ -932,5 +966,5 @@
 
 
 
-5678
+7317
 
--- a/lib/redmine/.svn/text-base/custom_field_format.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/.svn/text-base/custom_field_format.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -22,12 +22,14 @@
     cattr_accessor :available
     @@available = {}
 
-    attr_accessor :name, :order, :label
+    attr_accessor :name, :order, :label, :edit_as, :class_names
 
     def initialize(name, options={})
       self.name = name
       self.label = options[:label]
       self.order = options[:order]
+      self.edit_as = options[:edit_as] || name
+      self.class_names = options[:only]
     end
 
     def format(value)
@@ -47,12 +49,11 @@
         return value
       }
     end
-
-    # Allow displaying the edit type of another field_format
-    #
-    # Example: display a custom field as a list
-    def edit_as
-      name
+    
+    ['user', 'version'].each do |name|
+      define_method("format_as_#{name}") {|value|
+        return value.blank? ? "" : name.classify.constantize.find_by_id(value.to_i).to_s
+      }
     end
 
     class << self
@@ -79,8 +80,10 @@
       end
 
       # Return an array of custom field formats which can be used in select_tag
-      def as_select
-        @@available.values.sort {|a,b|
+      def as_select(class_name=nil)
+        fields = @@available.values
+        fields = fields.select {|field| field.class_names.nil? || field.class_names.include?(class_name)}
+        fields.sort {|a,b|
           a.order <=> b.order
         }.collect {|custom_field_format|
           [ l(custom_field_format.label), custom_field_format.name ]
--- a/lib/redmine/.svn/text-base/mime_type.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/.svn/text-base/mime_type.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -37,6 +37,7 @@
       'text/xml' => 'xml,xsd,mxml',
       'text/yaml' => 'yml,yaml',
       'text/csv' => 'csv',
+      'text/x-po' => 'po',
       'image/gif' => 'gif',
       'image/jpeg' => 'jpg,jpeg,jpe',
       'image/png' => 'png',
--- a/lib/redmine/.svn/text-base/notifiable.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/.svn/text-base/notifiable.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -14,6 +14,7 @@
       notifications << Notifiable.new('issue_status_updated', 'issue_updated')
       notifications << Notifiable.new('issue_priority_updated', 'issue_updated')
       notifications << Notifiable.new('news_added')
+      notifications << Notifiable.new('news_comment_added')
       notifications << Notifiable.new('document_added')
       notifications << Notifiable.new('file_added')
       notifications << Notifiable.new('message_posted')
--- a/lib/redmine/.svn/text-base/unified_diff.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/.svn/text-base/unified_diff.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -17,14 +17,16 @@
 
 module Redmine
   # Class used to parse unified diffs
-  class UnifiedDiff < Array  
+  class UnifiedDiff < Array
+    attr_reader :diff_type
+    
     def initialize(diff, options={})
       options.assert_valid_keys(:type, :max_lines)
       diff = diff.split("\n") if diff.is_a?(String)
-      diff_type = options[:type] || 'inline'
+      @diff_type = options[:type] || 'inline'
       lines = 0
       @truncated = false
-      diff_table = DiffTable.new(diff_type)
+      diff_table = DiffTable.new(@diff_type)
       diff.each do |line|
         line_encoding = nil
         if line.respond_to?(:force_encoding)
@@ -53,17 +55,15 @@
   end
 
   # Class that represents a file diff
-  class DiffTable < Hash  
-    attr_reader :file_name, :line_num_l, :line_num_r    
+  class DiffTable < Array  
+    attr_reader :file_name
 
     # Initialize with a Diff file and the type of Diff View
     # The type view must be inline or sbs (side_by_side)
     def initialize(type="inline")
       @parsing = false
-      @nb_line = 1
-      @start = false
-      @before = 'same'
-      @second = true
+      @added = 0
+      @removed = 0
       @type = type
     end
 
@@ -86,11 +86,21 @@
           @line_num_l = $2.to_i
           @line_num_r = $5.to_i
         else
-          @nb_line += 1 if parse_line(line, @type)          
+          parse_line(line, @type)          
         end
       end
       return true
     end
+    
+    def each_line
+      prev_line_left, prev_line_right = nil, nil
+      each do |line|
+        spacing = prev_line_left && prev_line_right && (line.nb_line_left != prev_line_left+1) && (line.nb_line_right != prev_line_right+1)
+        yield spacing, line
+        prev_line_left = line.nb_line_left.to_i if line.nb_line_left.to_i > 0
+        prev_line_right = line.nb_line_right.to_i if line.nb_line_right.to_i > 0
+      end
+    end
 
     def inspect
       puts '### DIFF TABLE ###'
@@ -100,74 +110,91 @@
       end
     end
 
-  private  
-    # Test if is a Side By Side type
-    def sbs?(type, func)
-      if @start and type == "sbs"
-        if @before == func and @second
-          tmp_nb_line = @nb_line
-          self[tmp_nb_line] = Diff.new
-        else
-            @second = false
-            tmp_nb_line = @start
-            @start += 1
-            @nb_line -= 1
-        end
-      else
-        tmp_nb_line = @nb_line
-        @start = @nb_line
-        self[tmp_nb_line] = Diff.new
-        @second = true
-      end
-      unless self[tmp_nb_line]
-        @nb_line += 1
-        self[tmp_nb_line] = Diff.new
-      else
-        self[tmp_nb_line]
-      end
-    end
+    private
 
     # Escape the HTML for the diff
     def escapeHTML(line)
         CGI.escapeHTML(line)
     end
+      
+    def diff_for_added_line
+      if @type == 'sbs' && @removed > 0 && @added < @removed
+        self[-(@removed - @added)]
+      else
+        diff = Diff.new
+        self << diff
+        diff
+      end
+    end
 
     def parse_line(line, type="inline")
       if line[0, 1] == "+"
-        diff = sbs? type, 'add'
-        @before = 'add'
+        diff = diff_for_added_line
         diff.line_right = escapeHTML line[1..-1]
         diff.nb_line_right = @line_num_r
         diff.type_diff_right = 'diff_in'
         @line_num_r += 1
+        @added += 1
         true
       elsif line[0, 1] == "-"
-        diff = sbs? type, 'remove'
-        @before = 'remove'
+        diff = Diff.new
         diff.line_left = escapeHTML line[1..-1]
         diff.nb_line_left = @line_num_l
         diff.type_diff_left = 'diff_out'
+        self << diff
         @line_num_l += 1
+        @removed += 1
         true
-      elsif line[0, 1] =~ /\s/
-        @before = 'same'
-        @start = false
-        diff = Diff.new
-        diff.line_right = escapeHTML line[1..-1]
-        diff.nb_line_right = @line_num_r
-        diff.line_left = escapeHTML line[1..-1]
-        diff.nb_line_left = @line_num_l
-        self[@nb_line] = diff
-        @line_num_l += 1
-        @line_num_r += 1
-        true
-      elsif line[0, 1] = "\\"
+      else
+        write_offsets
+        if line[0, 1] =~ /\s/
+          diff = Diff.new
+          diff.line_right = escapeHTML line[1..-1]
+          diff.nb_line_right = @line_num_r
+          diff.line_left = escapeHTML line[1..-1]
+          diff.nb_line_left = @line_num_l
+          self << diff
+          @line_num_l += 1
+          @line_num_r += 1
+          true
+        elsif line[0, 1] = "\\"
           true
         else
           false
         end
       end
     end
+    
+    def write_offsets
+      if @added > 0 && @added == @removed
+        @added.times do |i|
+          line = self[-(1 + i)]
+          removed = (@type == 'sbs') ? line : self[-(1 + @added + i)]
+          offsets = offsets(removed.line_left, line.line_right)
+          removed.offsets = line.offsets = offsets
+        end
+      end
+      @added = 0
+      @removed = 0
+    end
+    
+    def offsets(line_left, line_right)
+      if line_left.present? && line_right.present? && line_left != line_right
+        max = [line_left.size, line_right.size].min
+        starting = 0
+        while starting < max && line_left[starting] == line_right[starting]
+          starting += 1
+        end
+        ending = -1
+        while ending >= -(max - starting) && line_left[ending] == line_right[ending]
+          ending -= 1
+        end
+        unless starting == 0 && ending == -1
+          [starting, ending]
+        end
+      end
+    end
+  end
 
   # A line of diff
   class Diff  
@@ -177,6 +204,7 @@
     attr_accessor :line_right
     attr_accessor :type_diff_right
     attr_accessor :type_diff_left
+    attr_accessor :offsets
     
     def initialize()
       self.nb_line_left = ''
@@ -186,6 +214,38 @@
       self.type_diff_right = ''
       self.type_diff_left = ''
     end
+    
+    def type_diff
+      type_diff_right == 'diff_in' ? type_diff_right : type_diff_left
+    end
+    
+    def line
+      type_diff_right == 'diff_in' ? line_right : line_left
+    end
+    
+    def html_line_left
+      if offsets
+        line_left.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>')
+      else
+        line_left
+      end
+    end
+    
+    def html_line_right
+      if offsets
+        line_right.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>')
+      else
+        line_right
+      end
+    end
+    
+    def html_line
+      if offsets
+        line.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>')
+      else
+        line
+      end
+    end
 
     def inspect
       puts '### Start Line Diff ###'
--- a/lib/redmine/.svn/text-base/version.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/.svn/text-base/version.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -3,9 +3,9 @@
 module Redmine
   module VERSION #:nodoc:
     MAJOR = 1
-    MINOR = 1
-    TINY  = 1
-    
+    MINOR = 2
+    TINY  = 0
+
     # Branch values:
     # * official release: nil
     # * stable branch:    stable
@@ -20,24 +20,25 @@
           f = File.open(entries_path, 'r')
           entries = f.read
           f.close
-     	  if entries.match(%r{^\d+})
-     	    revision = $1.to_i if entries.match(%r{^\d+\s+dir\s+(\d+)\s})
-     	  else
-   	        xml = REXML::Document.new(entries)
-   	        revision = xml.elements['wc-entries'].elements[1].attributes['revision'].to_i
-   	      end
-   	    rescue
-   	      # Could not find the current revision
-   	    end
- 	  end
- 	  revision
+          if entries.match(%r{^\d+})
+            revision = $1.to_i if entries.match(%r{^\d+\s+dir\s+(\d+)\s})
+          else
+            xml = REXML::Document.new(entries)
+            revision =
+              xml.elements['wc-entries'].elements[1].attributes['revision'].to_i
+          end
+        rescue
+          # Could not find the current revision
+        end
+      end
+      revision
     end
 
     REVISION = self.revision
-    ARRAY = [MAJOR, MINOR, TINY, BRANCH, REVISION].compact
-    STRING = ARRAY.join('.')
+    ARRAY    = [MAJOR, MINOR, TINY, BRANCH, REVISION].compact
+    STRING   = ARRAY.join('.')
     
-    def self.to_a; ARRAY end
+    def self.to_a; ARRAY  end
     def self.to_s; STRING end    
   end
 end
--- a/lib/redmine/activity/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/activity/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/activity
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/activity
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 20597949bb74e98a3ffc97bc8a3ead7d
 2010-07-06T02:22:03.226147Z
 3829
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/codeset_util.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,31 @@
+require 'iconv'
+
+module Redmine
+  module CodesetUtil
+
+    def self.replace_invalid_utf8(str)
+      return str if str.nil?
+      if str.respond_to?(:force_encoding)
+        str.force_encoding('UTF-8')
+        if ! str.valid_encoding?
+          str = str.encode("US-ASCII", :invalid => :replace,
+                :undef => :replace, :replace => '?').encode("UTF-8")
+        end
+      else
+        ic = Iconv.new('UTF-8', 'UTF-8')
+        txtar = ""
+        begin
+          txtar += ic.iconv(str)
+        rescue Iconv::IllegalSequence
+          txtar += $!.success
+          str = '?' + $!.failed[1,$!.failed.length]
+          retry
+        rescue
+          txtar += $!.success
+        end
+        str = txtar
+      end
+      str
+    end
+  end
+end
--- a/lib/redmine/core_ext/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/core_ext/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/core_ext
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/core_ext
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 fcafa1cc4149d3a5de82816c61b7fa02
 2009-08-17T16:32:24.020380Z
 2844
--- a/lib/redmine/core_ext/string/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/core_ext/string/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/core_ext/string
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/core_ext/string
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 e614ecdb2fac85cd9f8808e7cff7f9de
 2009-08-17T16:32:24.020380Z
 2844
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 1cc26c5de967944da3a6b07331512637
 2009-10-10T15:09:19.510095Z
 2912
--- a/lib/redmine/custom_field_format.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/custom_field_format.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -22,12 +22,14 @@
     cattr_accessor :available
     @@available = {}
 
-    attr_accessor :name, :order, :label
+    attr_accessor :name, :order, :label, :edit_as, :class_names
 
     def initialize(name, options={})
       self.name = name
       self.label = options[:label]
       self.order = options[:order]
+      self.edit_as = options[:edit_as] || name
+      self.class_names = options[:only]
     end
 
     def format(value)
@@ -47,12 +49,11 @@
         return value
       }
     end
-
-    # Allow displaying the edit type of another field_format
-    #
-    # Example: display a custom field as a list
-    def edit_as
-      name
+    
+    ['user', 'version'].each do |name|
+      define_method("format_as_#{name}") {|value|
+        return value.blank? ? "" : name.classify.constantize.find_by_id(value.to_i).to_s
+      }
     end
 
     class << self
@@ -79,8 +80,10 @@
       end
 
       # Return an array of custom field formats which can be used in select_tag
-      def as_select
-        @@available.values.sort {|a,b|
+      def as_select(class_name=nil)
+        fields = @@available.values
+        fields = fields.select {|field| field.class_names.nil? || field.class_names.include?(class_name)}
+        fields.sort {|a,b|
           a.order <=> b.order
         }.collect {|custom_field_format|
           [ l(custom_field_format.label), custom_field_format.name ]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/default_data/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/default_data
+END
+loader.rb
+K 25
+svn:wc:ra_dav:version-url
+V 73
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/default_data/loader.rb
+END
--- a/lib/redmine/default_data/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/default_data/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/default_data
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/default_data
 http://redmine.rubyforge.org/svn
 
 
 
-2010-06-30T01:55:44.694582Z
-3820
-edavis10
+2011-04-15T13:23:13.506236Z
+5466
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-41958e843a8ba03548eed089e8002549
-2010-06-30T01:55:44.694582Z
-3820
-edavis10
+2011-06-06T13:20:53.000000Z
+a052713b43f76c049afa9cba6ed46e77
+2011-04-15T13:23:13.506236Z
+5466
+jplang
 has-props
 
 
@@ -58,5 +58,5 @@
 
 
 
-10686
+10750
 
--- a/lib/redmine/default_data/.svn/text-base/loader.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/default_data/.svn/text-base/loader.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -41,6 +41,7 @@
           Role.transaction do
             # Roles
             manager = Role.create! :name => l(:default_role_manager), 
+                                   :issues_visibility => 'all',
                                    :position => 1
             manager.permissions = manager.setable_permissions.collect {|p| p.name}
             manager.save!
--- a/lib/redmine/default_data/loader.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/default_data/loader.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -41,6 +41,7 @@
           Role.transaction do
             # Roles
             manager = Role.create! :name => l(:default_role_manager), 
+                                   :issues_visibility => 'all',
                                    :position => 1
             manager.permissions = manager.setable_permissions.collect {|p| p.name}
             manager.save!
--- a/lib/redmine/export/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/export/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,11 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/4736/trunk/lib/redmine/export
+V 57
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/export
 END
 pdf.rb
 K 25
 svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4736/trunk/lib/redmine/export/pdf.rb
+V 64
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/export/pdf.rb
 END
--- a/lib/redmine/export/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/export/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/export
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/export
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-22T11:57:02.732751Z
-4736
-jplang
+2011-05-10T01:03:28.091124Z
+5723
+tmaruyama
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-b8bd24e9575d51f0c49f8245a5d593a2
-2011-01-22T11:57:02.732751Z
-4736
-jplang
+2011-06-06T13:20:53.000000Z
+2ed64538eebb760396d45f10184ff550
+2011-05-10T01:03:28.091124Z
+5723
+tmaruyama
 has-props
 
 
@@ -58,5 +58,5 @@
 
 
 
-10786
+14982
 
--- a/lib/redmine/export/.svn/text-base/pdf.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/export/.svn/text-base/pdf.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,72 +1,81 @@
 # encoding: utf-8
 #
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 require 'iconv'
 require 'rfpdf/fpdf'
-require 'rfpdf/chinese'
+require 'fpdf/chinese'
+require 'fpdf/japanese'
+require 'fpdf/korean'
 
 module Redmine
   module Export
     module PDF
       include ActionView::Helpers::TextHelper
       include ActionView::Helpers::NumberHelper
-      
-      class IFPDF < FPDF
+
+      class ITCPDF < TCPDF
         include Redmine::I18n
         attr_accessor :footer_date
-        
+
         def initialize(lang)
-          super()
           set_language_if_valid lang
-          case current_language.to_s.downcase
-          when 'ko'
+          pdf_encoding = l(:general_pdf_encoding).upcase
+          if RUBY_VERSION < '1.9'
+            @ic = Iconv.new(pdf_encoding, 'UTF-8')
+          end
+          super('P', 'mm', 'A4', (pdf_encoding == 'UTF-8'), pdf_encoding)
+          case pdf_encoding
+          when 'UTF-8'
+            @font_for_content = 'FreeSans'
+            @font_for_footer  = 'FreeSans'
+          when 'CP949'
             extend(PDF_Korean)
             AddUHCFont()
             @font_for_content = 'UHC'
-            @font_for_footer = 'UHC'
-          when 'ja'
+            @font_for_footer  = 'UHC'
+          when 'CP932'
             extend(PDF_Japanese)
             AddSJISFont()
             @font_for_content = 'SJIS'
-            @font_for_footer = 'SJIS'
-          when 'zh'
+            @font_for_footer  = 'SJIS'
+          when 'GB18030'
             extend(PDF_Chinese)
             AddGBFont()
             @font_for_content = 'GB'
-            @font_for_footer = 'GB'
-          when 'zh-tw'
+            @font_for_footer  = 'GB'
+          when 'BIG5'
             extend(PDF_Chinese)
             AddBig5Font()
             @font_for_content = 'Big5'
-            @font_for_footer = 'Big5'
+            @font_for_footer  = 'Big5'
           else
             @font_for_content = 'Arial'
-            @font_for_footer = 'Helvetica'              
+            @font_for_footer  = 'Helvetica'
           end
           SetCreator(Redmine::Info.app_name)
           SetFont(@font_for_content)
         end
-        
+
         def SetFontStyle(style, size)
           SetFont(@font_for_content, style, size)
         end
-        
+
         def SetTitle(txt)
           txt = begin
             utf16txt = Iconv.conv('UTF-16BE', 'UTF-8', txt)
@@ -78,7 +87,7 @@
           end || ''
           super(txt)
         end
-    
+
         def textstring(s)
           # Format a text string
           if s =~ /^</  # This means the string is hex-dumped.
@@ -87,80 +96,98 @@
             return '('+escape(s)+')'
           end
         end
-          
-        def Cell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='')
-          @ic ||= Iconv.new(l(:general_pdf_encoding), 'UTF-8')
-          # these quotation marks are not correctly rendered in the pdf
-          txt = txt.gsub(/[“�]/, '"') if txt
-          txt = begin
-            # 0x5c char handling
-            txtar = txt.split('\\')
-            txtar << '' if txt[-1] == ?\\
-            txtar.collect {|x| @ic.iconv(x)}.join('\\').gsub(/\\/, "\\\\\\\\")
-          rescue
-            txt
-          end || ''
-          super w,h,txt,border,ln,align,fill,link
+
+        def fix_text_encoding(txt)
+          RDMPdfEncoding::rdm_pdf_iconv(@ic, txt)
         end
-        
+
+        def RDMCell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='')
+          Cell(w,h,fix_text_encoding(txt),border,ln,align,fill,link)
+        end
+
+        def RDMMultiCell(w,h=0,txt='',border=0,align='',fill=0)
+          MultiCell(w,h,fix_text_encoding(txt),border,align,fill)
+        end
+
         def Footer
           SetFont(@font_for_footer, 'I', 8)
           SetY(-15)
           SetX(15)
-          Cell(0, 5, @footer_date, 0, 0, 'L')
+          RDMCell(0, 5, @footer_date, 0, 0, 'L')
           SetY(-15)
           SetX(-30)
-          Cell(0, 5, PageNo().to_s + '/{nb}', 0, 0, 'C')
+          RDMCell(0, 5, PageNo().to_s + '/{nb}', 0, 0, 'C')
         end
       end
-      
+
       # Returns a PDF string of a list of issues
       def issues_to_pdf(issues, project, query)
-        pdf = IFPDF.new(current_language)
+        pdf = ITCPDF.new(current_language)
         title = query.new_record? ? l(:label_issue_plural) : query.name
         title = "#{project} - #{title}" if project
         pdf.SetTitle(title)
-        pdf.AliasNbPages
+        pdf.alias_nb_pages
         pdf.footer_date = format_date(Date.today)
+        pdf.SetAutoPageBreak(false)
         pdf.AddPage("L")
-        
-        row_height = 6
+
+        # Landscape A4 = 210 x 297 mm
+        page_height   = 210
+        page_width    = 297
+        right_margin  = 10
+        bottom_margin = 20
+        col_id_width  = 10
+        row_height    = 5
+
+        # column widths
+        table_width = page_width - right_margin - 10  # fixed left margin
         col_width = []
         unless query.columns.empty?
-          col_width = query.columns.collect {|column| column.name == :subject ? 4.0 : 1.0 }
-          ratio = 262.0 / col_width.inject(0) {|s,w| s += w}
+          col_width = query.columns.collect do |c|
+            (c.name == :subject || (c.is_a?(QueryCustomFieldColumn) && ['string', 'text'].include?(c.custom_field.field_format)))? 4.0 : 1.0
+          end
+          ratio = (table_width - col_id_width) / col_width.inject(0) {|s,w| s += w}
           col_width = col_width.collect {|w| w * ratio}
         end
-        
+
         # title
-        pdf.SetFontStyle('B',11)    
-        pdf.Cell(190,10, title)
+        pdf.SetFontStyle('B',11)
+        pdf.RDMCell(190,10, title)
         pdf.Ln
-        
+
         # headers
         pdf.SetFontStyle('B',8)
         pdf.SetFillColor(230, 230, 230)
-        pdf.Cell(15, row_height, "#", 1, 0, 'L', 1)
-        query.columns.each_with_index do |column, i|
-          pdf.Cell(col_width[i], row_height, column.caption, 1, 0, 'L', 1)
-        end
-        pdf.Ln
-        
+
+        # render it background to find the max height used
+        base_x = pdf.GetX
+        base_y = pdf.GetY
+        max_height = issues_to_pdf_write_cells(pdf, query.columns, col_width, row_height, true)
+        pdf.Rect(base_x, base_y, table_width, max_height, 'FD');
+        pdf.SetXY(base_x, base_y);
+
+        # write the cells on page
+        pdf.RDMCell(col_id_width, row_height, "#", "T", 0, 'C', 1)
+        issues_to_pdf_write_cells(pdf, query.columns, col_width, row_height, true)
+        issues_to_pdf_draw_borders(pdf, base_x, base_y, base_y + max_height, col_id_width, col_width)
+        pdf.SetY(base_y + max_height);
+
         # rows
         pdf.SetFontStyle('',8)
         pdf.SetFillColor(255, 255, 255)
         previous_group = false
         issues.each do |issue|
-          if query.grouped? && (group = query.group_by_column.value(issue)) != previous_group
+          if query.grouped? &&
+               (group = query.group_by_column.value(issue)) != previous_group
             pdf.SetFontStyle('B',9)
-            pdf.Cell(277, row_height, 
+            pdf.RDMCell(277, row_height,
               (group.blank? ? 'None' : group.to_s) + " (#{query.issue_count_by_group[group]})",
               1, 1, 'L')
             pdf.SetFontStyle('',8)
             previous_group = group
           end
-          pdf.Cell(15, row_height, issue.id.to_s, 1, 0, 'L', 1)
-          query.columns.each_with_index do |column, i|
+          # fetch all the row values
+          col_values = query.columns.collect do |column|
             s = if column.is_a?(QueryCustomFieldColumn)
               cv = issue.custom_values.detect {|v| v.custom_field_id == column.custom_field.id}
               show_value(cv)
@@ -174,144 +201,230 @@
                 value
               end
             end
-            pdf.Cell(col_width[i], row_height, s.to_s, 1, 0, 'L', 1)
+            s.to_s
           end
-          pdf.Ln
+
+          # render it off-page to find the max height used
+          base_x = pdf.GetX
+          base_y = pdf.GetY
+          pdf.SetY(2 * page_height)
+          max_height = issues_to_pdf_write_cells(pdf, col_values, col_width, row_height)
+          pdf.SetXY(base_x, base_y)
+
+          # make new page if it doesn't fit on the current one
+          space_left = page_height - base_y - bottom_margin
+          if max_height > space_left
+            pdf.AddPage("L")
+            base_x = pdf.GetX
+            base_y = pdf.GetY
+          end
+
+          # write the cells on page
+          pdf.RDMCell(col_id_width, row_height, issue.id.to_s, "T", 0, 'C', 1)
+          issues_to_pdf_write_cells(pdf, col_values, col_width, row_height)
+          issues_to_pdf_draw_borders(pdf, base_x, base_y, base_y + max_height, col_id_width, col_width)
+          pdf.SetY(base_y + max_height);
         end
+
         if issues.size == Setting.issues_export_limit.to_i
           pdf.SetFontStyle('B',10)
-          pdf.Cell(0, row_height, '...')
+          pdf.RDMCell(0, row_height, '...')
         end
         pdf.Output
       end
 
+      # Renders MultiCells and returns the maximum height used
+      def issues_to_pdf_write_cells(pdf, col_values, col_widths,
+                                    row_height, head=false)
+        base_y = pdf.GetY
+        max_height = row_height
+        col_values.each_with_index do |column, i|
+          col_x = pdf.GetX
+          if head == true
+            pdf.RDMMultiCell(col_widths[i], row_height, column.caption, "T", 'L', 1)
+          else
+            pdf.RDMMultiCell(col_widths[i], row_height, column, "T", 'L', 1)
+          end
+          max_height = (pdf.GetY - base_y) if (pdf.GetY - base_y) > max_height
+          pdf.SetXY(col_x + col_widths[i], base_y);
+        end
+        return max_height
+      end
+
+      # Draw lines to close the row (MultiCell border drawing in not uniform)
+      def issues_to_pdf_draw_borders(pdf, top_x, top_y, lower_y,
+                                     id_width, col_widths)
+        col_x = top_x + id_width
+        pdf.Line(col_x, top_y, col_x, lower_y)    # id right border
+        col_widths.each do |width|
+          col_x += width
+          pdf.Line(col_x, top_y, col_x, lower_y)  # columns right border
+        end
+        pdf.Line(top_x, top_y, top_x, lower_y)    # left border
+        pdf.Line(top_x, lower_y, col_x, lower_y)  # bottom border
+      end
+
       # Returns a PDF string of a single issue
       def issue_to_pdf(issue)
-        pdf = IFPDF.new(current_language)
+        pdf = ITCPDF.new(current_language)
         pdf.SetTitle("#{issue.project} - ##{issue.tracker} #{issue.id}")
-        pdf.AliasNbPages
+        pdf.alias_nb_pages
         pdf.footer_date = format_date(Date.today)
         pdf.AddPage
-        
-        pdf.SetFontStyle('B',11)    
-        pdf.Cell(190,10, "#{issue.project} - #{issue.tracker} # #{issue.id}: #{issue.subject}")
+        pdf.SetFontStyle('B',11)
+        pdf.RDMMultiCell(190,5,
+             "#{issue.project} - #{issue.tracker} # #{issue.id}: #{issue.subject}")
         pdf.Ln
-        
+
         y0 = pdf.GetY
-        
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_status) + ":","LT")
+        pdf.RDMCell(35,5, l(:field_status) + ":","LT")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, issue.status.to_s,"RT")
+        pdf.RDMCell(60,5, issue.status.to_s,"RT")
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_priority) + ":","LT")
+        pdf.RDMCell(35,5, l(:field_priority) + ":","LT")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, issue.priority.to_s,"RT")        
+        pdf.RDMCell(60,5, issue.priority.to_s,"RT")
         pdf.Ln
-        
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_author) + ":","L")
+        pdf.RDMCell(35,5, l(:field_author) + ":","L")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, issue.author.to_s,"R")
+        pdf.RDMCell(60,5, issue.author.to_s,"R")
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_category) + ":","L")
+        pdf.RDMCell(35,5, l(:field_category) + ":","L")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, issue.category.to_s,"R")
-        pdf.Ln   
-        
+        pdf.RDMCell(60,5, issue.category.to_s,"R")
+        pdf.Ln
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_created_on) + ":","L")
+        pdf.RDMCell(35,5, l(:field_created_on) + ":","L")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, format_date(issue.created_on),"R")
+        pdf.RDMCell(60,5, format_date(issue.created_on),"R")
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_assigned_to) + ":","L")
+        pdf.RDMCell(35,5, l(:field_assigned_to) + ":","L")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, issue.assigned_to.to_s,"R")
+        pdf.RDMCell(60,5, issue.assigned_to.to_s,"R")
         pdf.Ln
-        
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_updated_on) + ":","LB")
+        pdf.RDMCell(35,5, l(:field_updated_on) + ":","LB")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, format_date(issue.updated_on),"RB")
+        pdf.RDMCell(60,5, format_date(issue.updated_on),"RB")
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_due_date) + ":","LB")
+        pdf.RDMCell(35,5, l(:field_due_date) + ":","LB")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, format_date(issue.due_date),"RB")
+        pdf.RDMCell(60,5, format_date(issue.due_date),"RB")
         pdf.Ln
-        
+
         for custom_value in issue.custom_field_values
           pdf.SetFontStyle('B',9)
-          pdf.Cell(35,5, custom_value.custom_field.name + ":","L")
+          pdf.RDMCell(35,5, custom_value.custom_field.name + ":","L")
           pdf.SetFontStyle('',9)
-          pdf.MultiCell(155,5, (show_value custom_value),"R")
+          pdf.RDMMultiCell(155,5, (show_value custom_value),"R")
         end
-        
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_subject) + ":","LTB")
+        pdf.RDMCell(35,5, l(:field_subject) + ":","LT")
         pdf.SetFontStyle('',9)
-        pdf.Cell(155,5, issue.subject,"RTB")
-        pdf.Ln    
-        
+        pdf.RDMMultiCell(155,5, issue.subject,"RT")
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_description) + ":")
+        pdf.RDMCell(35,5, l(:field_description) + ":","LT")
         pdf.SetFontStyle('',9)
-        pdf.MultiCell(155,5, issue.description.to_s,"BR")
-        
+        pdf.RDMMultiCell(155,5, issue.description.to_s,"RT")
+
         pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY)
-        pdf.Line(pdf.GetX, pdf.GetY, 170, pdf.GetY)
+        pdf.Line(pdf.GetX, pdf.GetY, pdf.GetX + 190, pdf.GetY)
         pdf.Ln
-        
-        if issue.changesets.any? && User.current.allowed_to?(:view_changesets, issue.project)
+
+        if issue.changesets.any? &&
+             User.current.allowed_to?(:view_changesets, issue.project)
           pdf.SetFontStyle('B',9)
-          pdf.Cell(190,5, l(:label_associated_revisions), "B")
+          pdf.RDMCell(190,5, l(:label_associated_revisions), "B")
           pdf.Ln
           for changeset in issue.changesets
             pdf.SetFontStyle('B',8)
-            pdf.Cell(190,5, format_time(changeset.committed_on) + " - " + changeset.author.to_s)
+            pdf.RDMCell(190,5,
+              format_time(changeset.committed_on) + " - " + changeset.author.to_s)
             pdf.Ln
             unless changeset.comments.blank?
               pdf.SetFontStyle('',8)
-              pdf.MultiCell(190,5, changeset.comments.to_s)
-            end   
+              pdf.RDMMultiCell(190,5, changeset.comments.to_s)
+            end
             pdf.Ln
           end
         end
-        
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(190,5, l(:label_history), "B")
-        pdf.Ln  
-        for journal in issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
+        pdf.RDMCell(190,5, l(:label_history), "B")
+        pdf.Ln
+        for journal in issue.journals.find(
+                          :all, :include => [:user, :details],
+                          :order => "#{Journal.table_name}.created_on ASC")
           pdf.SetFontStyle('B',8)
-          pdf.Cell(190,5, format_time(journal.created_on) + " - " + journal.user.name)
+          pdf.RDMCell(190,5,
+             format_time(journal.created_on) + " - " + journal.user.name)
           pdf.Ln
           pdf.SetFontStyle('I',8)
           for detail in journal.details
-            pdf.Cell(190,5, "- " + show_detail(detail, true))
-            pdf.Ln
+            pdf.RDMMultiCell(190,5, "- " + show_detail(detail, true))
           end
           if journal.notes?
+            pdf.Ln unless journal.details.empty?
             pdf.SetFontStyle('',8)
-            pdf.MultiCell(190,5, journal.notes.to_s)
-          end   
+            pdf.RDMMultiCell(190,5, journal.notes.to_s)
+          end
           pdf.Ln
         end
-        
+
         if issue.attachments.any?
           pdf.SetFontStyle('B',9)
-          pdf.Cell(190,5, l(:label_attachment_plural), "B")
+          pdf.RDMCell(190,5, l(:label_attachment_plural), "B")
           pdf.Ln
           for attachment in issue.attachments
             pdf.SetFontStyle('',8)
-            pdf.Cell(80,5, attachment.filename)
-            pdf.Cell(20,5, number_to_human_size(attachment.filesize),0,0,"R")
-            pdf.Cell(25,5, format_date(attachment.created_on),0,0,"R")
-            pdf.Cell(65,5, attachment.author.name,0,0,"R")
+            pdf.RDMCell(80,5, attachment.filename)
+            pdf.RDMCell(20,5, number_to_human_size(attachment.filesize),0,0,"R")
+            pdf.RDMCell(25,5, format_date(attachment.created_on),0,0,"R")
+            pdf.RDMCell(65,5, attachment.author.name,0,0,"R")
             pdf.Ln
           end
         end
         pdf.Output
       end
 
+      class RDMPdfEncoding
+        include Redmine::I18n
+        def self.rdm_pdf_iconv(ic, txt)
+          txt ||= ''
+          if txt.respond_to?(:force_encoding)
+            txt.force_encoding('UTF-8')
+            if l(:general_pdf_encoding).upcase != 'UTF-8'
+              txt = txt.encode(l(:general_pdf_encoding), :invalid => :replace,
+                               :undef => :replace, :replace => '?')
+            else
+              txt = Redmine::CodesetUtil.replace_invalid_utf8(txt)
+            end
+            txt.force_encoding('ASCII-8BIT')
+          else
+            ic ||= Iconv.new(l(:general_pdf_encoding), 'UTF-8')
+            txtar = ""
+            begin
+              txtar += ic.iconv(txt)
+            rescue Iconv::IllegalSequence
+              txtar += $!.success
+              txt = '?' + $!.failed[1,$!.failed.length]
+              retry
+            rescue
+              txtar += $!.success
+            end
+            txt = txtar
+          end
+          txt
+        end
+      end
     end
   end
 end
--- a/lib/redmine/export/pdf.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/export/pdf.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,72 +1,81 @@
 # encoding: utf-8
 #
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
 
 require 'iconv'
 require 'rfpdf/fpdf'
-require 'rfpdf/chinese'
+require 'fpdf/chinese'
+require 'fpdf/japanese'
+require 'fpdf/korean'
 
 module Redmine
   module Export
     module PDF
       include ActionView::Helpers::TextHelper
       include ActionView::Helpers::NumberHelper
-      
-      class IFPDF < FPDF
+
+      class ITCPDF < TCPDF
         include Redmine::I18n
         attr_accessor :footer_date
-        
+
         def initialize(lang)
-          super()
           set_language_if_valid lang
-          case current_language.to_s.downcase
-          when 'ko'
+          pdf_encoding = l(:general_pdf_encoding).upcase
+          if RUBY_VERSION < '1.9'
+            @ic = Iconv.new(pdf_encoding, 'UTF-8')
+          end
+          super('P', 'mm', 'A4', (pdf_encoding == 'UTF-8'), pdf_encoding)
+          case pdf_encoding
+          when 'UTF-8'
+            @font_for_content = 'FreeSans'
+            @font_for_footer  = 'FreeSans'
+          when 'CP949'
             extend(PDF_Korean)
             AddUHCFont()
             @font_for_content = 'UHC'
-            @font_for_footer = 'UHC'
-          when 'ja'
+            @font_for_footer  = 'UHC'
+          when 'CP932'
             extend(PDF_Japanese)
             AddSJISFont()
             @font_for_content = 'SJIS'
-            @font_for_footer = 'SJIS'
-          when 'zh'
+            @font_for_footer  = 'SJIS'
+          when 'GB18030'
             extend(PDF_Chinese)
             AddGBFont()
             @font_for_content = 'GB'
-            @font_for_footer = 'GB'
-          when 'zh-tw'
+            @font_for_footer  = 'GB'
+          when 'BIG5'
             extend(PDF_Chinese)
             AddBig5Font()
             @font_for_content = 'Big5'
-            @font_for_footer = 'Big5'
+            @font_for_footer  = 'Big5'
           else
             @font_for_content = 'Arial'
-            @font_for_footer = 'Helvetica'              
+            @font_for_footer  = 'Helvetica'
           end
           SetCreator(Redmine::Info.app_name)
           SetFont(@font_for_content)
         end
-        
+
         def SetFontStyle(style, size)
           SetFont(@font_for_content, style, size)
         end
-        
+
         def SetTitle(txt)
           txt = begin
             utf16txt = Iconv.conv('UTF-16BE', 'UTF-8', txt)
@@ -78,7 +87,7 @@
           end || ''
           super(txt)
         end
-    
+
         def textstring(s)
           # Format a text string
           if s =~ /^</  # This means the string is hex-dumped.
@@ -87,80 +96,98 @@
             return '('+escape(s)+')'
           end
         end
-          
-        def Cell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='')
-          @ic ||= Iconv.new(l(:general_pdf_encoding), 'UTF-8')
-          # these quotation marks are not correctly rendered in the pdf
-          txt = txt.gsub(/[“�]/, '"') if txt
-          txt = begin
-            # 0x5c char handling
-            txtar = txt.split('\\')
-            txtar << '' if txt[-1] == ?\\
-            txtar.collect {|x| @ic.iconv(x)}.join('\\').gsub(/\\/, "\\\\\\\\")
-          rescue
-            txt
-          end || ''
-          super w,h,txt,border,ln,align,fill,link
+
+        def fix_text_encoding(txt)
+          RDMPdfEncoding::rdm_pdf_iconv(@ic, txt)
         end
-        
+
+        def RDMCell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='')
+          Cell(w,h,fix_text_encoding(txt),border,ln,align,fill,link)
+        end
+
+        def RDMMultiCell(w,h=0,txt='',border=0,align='',fill=0)
+          MultiCell(w,h,fix_text_encoding(txt),border,align,fill)
+        end
+
         def Footer
           SetFont(@font_for_footer, 'I', 8)
           SetY(-15)
           SetX(15)
-          Cell(0, 5, @footer_date, 0, 0, 'L')
+          RDMCell(0, 5, @footer_date, 0, 0, 'L')
           SetY(-15)
           SetX(-30)
-          Cell(0, 5, PageNo().to_s + '/{nb}', 0, 0, 'C')
+          RDMCell(0, 5, PageNo().to_s + '/{nb}', 0, 0, 'C')
         end
       end
-      
+
       # Returns a PDF string of a list of issues
       def issues_to_pdf(issues, project, query)
-        pdf = IFPDF.new(current_language)
+        pdf = ITCPDF.new(current_language)
         title = query.new_record? ? l(:label_issue_plural) : query.name
         title = "#{project} - #{title}" if project
         pdf.SetTitle(title)
-        pdf.AliasNbPages
+        pdf.alias_nb_pages
         pdf.footer_date = format_date(Date.today)
+        pdf.SetAutoPageBreak(false)
         pdf.AddPage("L")
-        
-        row_height = 6
+
+        # Landscape A4 = 210 x 297 mm
+        page_height   = 210
+        page_width    = 297
+        right_margin  = 10
+        bottom_margin = 20
+        col_id_width  = 10
+        row_height    = 5
+
+        # column widths
+        table_width = page_width - right_margin - 10  # fixed left margin
         col_width = []
         unless query.columns.empty?
-          col_width = query.columns.collect {|column| column.name == :subject ? 4.0 : 1.0 }
-          ratio = 262.0 / col_width.inject(0) {|s,w| s += w}
+          col_width = query.columns.collect do |c|
+            (c.name == :subject || (c.is_a?(QueryCustomFieldColumn) && ['string', 'text'].include?(c.custom_field.field_format)))? 4.0 : 1.0
+          end
+          ratio = (table_width - col_id_width) / col_width.inject(0) {|s,w| s += w}
           col_width = col_width.collect {|w| w * ratio}
         end
-        
+
         # title
-        pdf.SetFontStyle('B',11)    
-        pdf.Cell(190,10, title)
+        pdf.SetFontStyle('B',11)
+        pdf.RDMCell(190,10, title)
         pdf.Ln
-        
+
         # headers
         pdf.SetFontStyle('B',8)
         pdf.SetFillColor(230, 230, 230)
-        pdf.Cell(15, row_height, "#", 1, 0, 'L', 1)
-        query.columns.each_with_index do |column, i|
-          pdf.Cell(col_width[i], row_height, column.caption, 1, 0, 'L', 1)
-        end
-        pdf.Ln
-        
+
+        # render it background to find the max height used
+        base_x = pdf.GetX
+        base_y = pdf.GetY
+        max_height = issues_to_pdf_write_cells(pdf, query.columns, col_width, row_height, true)
+        pdf.Rect(base_x, base_y, table_width, max_height, 'FD');
+        pdf.SetXY(base_x, base_y);
+
+        # write the cells on page
+        pdf.RDMCell(col_id_width, row_height, "#", "T", 0, 'C', 1)
+        issues_to_pdf_write_cells(pdf, query.columns, col_width, row_height, true)
+        issues_to_pdf_draw_borders(pdf, base_x, base_y, base_y + max_height, col_id_width, col_width)
+        pdf.SetY(base_y + max_height);
+
         # rows
         pdf.SetFontStyle('',8)
         pdf.SetFillColor(255, 255, 255)
         previous_group = false
         issues.each do |issue|
-          if query.grouped? && (group = query.group_by_column.value(issue)) != previous_group
+          if query.grouped? &&
+               (group = query.group_by_column.value(issue)) != previous_group
             pdf.SetFontStyle('B',9)
-            pdf.Cell(277, row_height, 
+            pdf.RDMCell(277, row_height,
               (group.blank? ? 'None' : group.to_s) + " (#{query.issue_count_by_group[group]})",
               1, 1, 'L')
             pdf.SetFontStyle('',8)
             previous_group = group
           end
-          pdf.Cell(15, row_height, issue.id.to_s, 1, 0, 'L', 1)
-          query.columns.each_with_index do |column, i|
+          # fetch all the row values
+          col_values = query.columns.collect do |column|
             s = if column.is_a?(QueryCustomFieldColumn)
               cv = issue.custom_values.detect {|v| v.custom_field_id == column.custom_field.id}
               show_value(cv)
@@ -174,144 +201,230 @@
                 value
               end
             end
-            pdf.Cell(col_width[i], row_height, s.to_s, 1, 0, 'L', 1)
+            s.to_s
           end
-          pdf.Ln
+
+          # render it off-page to find the max height used
+          base_x = pdf.GetX
+          base_y = pdf.GetY
+          pdf.SetY(2 * page_height)
+          max_height = issues_to_pdf_write_cells(pdf, col_values, col_width, row_height)
+          pdf.SetXY(base_x, base_y)
+
+          # make new page if it doesn't fit on the current one
+          space_left = page_height - base_y - bottom_margin
+          if max_height > space_left
+            pdf.AddPage("L")
+            base_x = pdf.GetX
+            base_y = pdf.GetY
+          end
+
+          # write the cells on page
+          pdf.RDMCell(col_id_width, row_height, issue.id.to_s, "T", 0, 'C', 1)
+          issues_to_pdf_write_cells(pdf, col_values, col_width, row_height)
+          issues_to_pdf_draw_borders(pdf, base_x, base_y, base_y + max_height, col_id_width, col_width)
+          pdf.SetY(base_y + max_height);
         end
+
         if issues.size == Setting.issues_export_limit.to_i
           pdf.SetFontStyle('B',10)
-          pdf.Cell(0, row_height, '...')
+          pdf.RDMCell(0, row_height, '...')
         end
         pdf.Output
       end
 
+      # Renders MultiCells and returns the maximum height used
+      def issues_to_pdf_write_cells(pdf, col_values, col_widths,
+                                    row_height, head=false)
+        base_y = pdf.GetY
+        max_height = row_height
+        col_values.each_with_index do |column, i|
+          col_x = pdf.GetX
+          if head == true
+            pdf.RDMMultiCell(col_widths[i], row_height, column.caption, "T", 'L', 1)
+          else
+            pdf.RDMMultiCell(col_widths[i], row_height, column, "T", 'L', 1)
+          end
+          max_height = (pdf.GetY - base_y) if (pdf.GetY - base_y) > max_height
+          pdf.SetXY(col_x + col_widths[i], base_y);
+        end
+        return max_height
+      end
+
+      # Draw lines to close the row (MultiCell border drawing in not uniform)
+      def issues_to_pdf_draw_borders(pdf, top_x, top_y, lower_y,
+                                     id_width, col_widths)
+        col_x = top_x + id_width
+        pdf.Line(col_x, top_y, col_x, lower_y)    # id right border
+        col_widths.each do |width|
+          col_x += width
+          pdf.Line(col_x, top_y, col_x, lower_y)  # columns right border
+        end
+        pdf.Line(top_x, top_y, top_x, lower_y)    # left border
+        pdf.Line(top_x, lower_y, col_x, lower_y)  # bottom border
+      end
+
       # Returns a PDF string of a single issue
       def issue_to_pdf(issue)
-        pdf = IFPDF.new(current_language)
+        pdf = ITCPDF.new(current_language)
         pdf.SetTitle("#{issue.project} - ##{issue.tracker} #{issue.id}")
-        pdf.AliasNbPages
+        pdf.alias_nb_pages
         pdf.footer_date = format_date(Date.today)
         pdf.AddPage
-        
-        pdf.SetFontStyle('B',11)    
-        pdf.Cell(190,10, "#{issue.project} - #{issue.tracker} # #{issue.id}: #{issue.subject}")
+        pdf.SetFontStyle('B',11)
+        pdf.RDMMultiCell(190,5,
+             "#{issue.project} - #{issue.tracker} # #{issue.id}: #{issue.subject}")
         pdf.Ln
-        
+
         y0 = pdf.GetY
-        
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_status) + ":","LT")
+        pdf.RDMCell(35,5, l(:field_status) + ":","LT")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, issue.status.to_s,"RT")
+        pdf.RDMCell(60,5, issue.status.to_s,"RT")
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_priority) + ":","LT")
+        pdf.RDMCell(35,5, l(:field_priority) + ":","LT")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, issue.priority.to_s,"RT")        
+        pdf.RDMCell(60,5, issue.priority.to_s,"RT")
         pdf.Ln
-        
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_author) + ":","L")
+        pdf.RDMCell(35,5, l(:field_author) + ":","L")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, issue.author.to_s,"R")
+        pdf.RDMCell(60,5, issue.author.to_s,"R")
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_category) + ":","L")
+        pdf.RDMCell(35,5, l(:field_category) + ":","L")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, issue.category.to_s,"R")
-        pdf.Ln   
-        
+        pdf.RDMCell(60,5, issue.category.to_s,"R")
+        pdf.Ln
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_created_on) + ":","L")
+        pdf.RDMCell(35,5, l(:field_created_on) + ":","L")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, format_date(issue.created_on),"R")
+        pdf.RDMCell(60,5, format_date(issue.created_on),"R")
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_assigned_to) + ":","L")
+        pdf.RDMCell(35,5, l(:field_assigned_to) + ":","L")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, issue.assigned_to.to_s,"R")
+        pdf.RDMCell(60,5, issue.assigned_to.to_s,"R")
         pdf.Ln
-        
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_updated_on) + ":","LB")
+        pdf.RDMCell(35,5, l(:field_updated_on) + ":","LB")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, format_date(issue.updated_on),"RB")
+        pdf.RDMCell(60,5, format_date(issue.updated_on),"RB")
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_due_date) + ":","LB")
+        pdf.RDMCell(35,5, l(:field_due_date) + ":","LB")
         pdf.SetFontStyle('',9)
-        pdf.Cell(60,5, format_date(issue.due_date),"RB")
+        pdf.RDMCell(60,5, format_date(issue.due_date),"RB")
         pdf.Ln
-        
+
         for custom_value in issue.custom_field_values
           pdf.SetFontStyle('B',9)
-          pdf.Cell(35,5, custom_value.custom_field.name + ":","L")
+          pdf.RDMCell(35,5, custom_value.custom_field.name + ":","L")
           pdf.SetFontStyle('',9)
-          pdf.MultiCell(155,5, (show_value custom_value),"R")
+          pdf.RDMMultiCell(155,5, (show_value custom_value),"R")
         end
-        
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_subject) + ":","LTB")
+        pdf.RDMCell(35,5, l(:field_subject) + ":","LT")
         pdf.SetFontStyle('',9)
-        pdf.Cell(155,5, issue.subject,"RTB")
-        pdf.Ln    
-        
+        pdf.RDMMultiCell(155,5, issue.subject,"RT")
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(35,5, l(:field_description) + ":")
+        pdf.RDMCell(35,5, l(:field_description) + ":","LT")
         pdf.SetFontStyle('',9)
-        pdf.MultiCell(155,5, issue.description.to_s,"BR")
-        
+        pdf.RDMMultiCell(155,5, issue.description.to_s,"RT")
+
         pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY)
-        pdf.Line(pdf.GetX, pdf.GetY, 170, pdf.GetY)
+        pdf.Line(pdf.GetX, pdf.GetY, pdf.GetX + 190, pdf.GetY)
         pdf.Ln
-        
-        if issue.changesets.any? && User.current.allowed_to?(:view_changesets, issue.project)
+
+        if issue.changesets.any? &&
+             User.current.allowed_to?(:view_changesets, issue.project)
           pdf.SetFontStyle('B',9)
-          pdf.Cell(190,5, l(:label_associated_revisions), "B")
+          pdf.RDMCell(190,5, l(:label_associated_revisions), "B")
           pdf.Ln
           for changeset in issue.changesets
             pdf.SetFontStyle('B',8)
-            pdf.Cell(190,5, format_time(changeset.committed_on) + " - " + changeset.author.to_s)
+            pdf.RDMCell(190,5,
+              format_time(changeset.committed_on) + " - " + changeset.author.to_s)
             pdf.Ln
             unless changeset.comments.blank?
               pdf.SetFontStyle('',8)
-              pdf.MultiCell(190,5, changeset.comments.to_s)
-            end   
+              pdf.RDMMultiCell(190,5, changeset.comments.to_s)
+            end
             pdf.Ln
           end
         end
-        
+
         pdf.SetFontStyle('B',9)
-        pdf.Cell(190,5, l(:label_history), "B")
-        pdf.Ln  
-        for journal in issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
+        pdf.RDMCell(190,5, l(:label_history), "B")
+        pdf.Ln
+        for journal in issue.journals.find(
+                          :all, :include => [:user, :details],
+                          :order => "#{Journal.table_name}.created_on ASC")
           pdf.SetFontStyle('B',8)
-          pdf.Cell(190,5, format_time(journal.created_on) + " - " + journal.user.name)
+          pdf.RDMCell(190,5,
+             format_time(journal.created_on) + " - " + journal.user.name)
           pdf.Ln
           pdf.SetFontStyle('I',8)
           for detail in journal.details
-            pdf.Cell(190,5, "- " + show_detail(detail, true))
-            pdf.Ln
+            pdf.RDMMultiCell(190,5, "- " + show_detail(detail, true))
           end
           if journal.notes?
+            pdf.Ln unless journal.details.empty?
             pdf.SetFontStyle('',8)
-            pdf.MultiCell(190,5, journal.notes.to_s)
-          end   
+            pdf.RDMMultiCell(190,5, journal.notes.to_s)
+          end
           pdf.Ln
         end
-        
+
         if issue.attachments.any?
           pdf.SetFontStyle('B',9)
-          pdf.Cell(190,5, l(:label_attachment_plural), "B")
+          pdf.RDMCell(190,5, l(:label_attachment_plural), "B")
           pdf.Ln
           for attachment in issue.attachments
             pdf.SetFontStyle('',8)
-            pdf.Cell(80,5, attachment.filename)
-            pdf.Cell(20,5, number_to_human_size(attachment.filesize),0,0,"R")
-            pdf.Cell(25,5, format_date(attachment.created_on),0,0,"R")
-            pdf.Cell(65,5, attachment.author.name,0,0,"R")
+            pdf.RDMCell(80,5, attachment.filename)
+            pdf.RDMCell(20,5, number_to_human_size(attachment.filesize),0,0,"R")
+            pdf.RDMCell(25,5, format_date(attachment.created_on),0,0,"R")
+            pdf.RDMCell(65,5, attachment.author.name,0,0,"R")
             pdf.Ln
           end
         end
         pdf.Output
       end
 
+      class RDMPdfEncoding
+        include Redmine::I18n
+        def self.rdm_pdf_iconv(ic, txt)
+          txt ||= ''
+          if txt.respond_to?(:force_encoding)
+            txt.force_encoding('UTF-8')
+            if l(:general_pdf_encoding).upcase != 'UTF-8'
+              txt = txt.encode(l(:general_pdf_encoding), :invalid => :replace,
+                               :undef => :replace, :replace => '?')
+            else
+              txt = Redmine::CodesetUtil.replace_invalid_utf8(txt)
+            end
+            txt.force_encoding('ASCII-8BIT')
+          else
+            ic ||= Iconv.new(l(:general_pdf_encoding), 'UTF-8')
+            txtar = ""
+            begin
+              txtar += ic.iconv(txt)
+            rescue Iconv::IllegalSequence
+              txtar += $!.success
+              txt = '?' + $!.failed[1,$!.failed.length]
+              retry
+            rescue
+              txtar += $!.success
+            end
+            txt = txtar
+          end
+          txt
+        end
+      end
     end
   end
 end
--- a/lib/redmine/helpers/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/helpers/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,23 +1,17 @@
 K 25
 svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4968/trunk/lib/redmine/helpers
+V 58
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/helpers
 END
 gantt.rb
 K 25
 svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4968/trunk/lib/redmine/helpers/gantt.rb
-END
-diff.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4953/trunk/lib/redmine/helpers/diff.rb
+V 67
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/helpers/gantt.rb
 END
 calendar.rb
 K 25
 svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/3166/trunk/lib/redmine/helpers/calendar.rb
+V 70
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/helpers/calendar.rb
 END
--- a/lib/redmine/helpers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/helpers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/helpers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/helpers
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-28T20:23:28.847227Z
-4968
-jplang
+2011-05-09T11:12:27.265905Z
+5720
+tmaruyama
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-b06b1d003a56093679e3004b619b0e04
-2011-02-28T20:23:28.847227Z
-4968
-jplang
+2011-06-06T13:20:53.000000Z
+111af23362cad335d5d23c03cc7668d1
+2011-05-09T11:12:27.265905Z
+5720
+tmaruyama
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-32380
+31709
 
 diff.rb
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 a3487dfca2baab10aacea141b7c0fc5f
 2011-02-27T12:50:47.369941Z
 4953
@@ -100,11 +100,11 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-0a7d81755cf7c1519d4b4c1d84712139
-2009-12-13T04:06:55.726600Z
-3166
-edavis10
+2011-06-06T13:20:53.000000Z
+4e48abe08914d8b6e345e9752257a603
+2011-03-27T15:43:26.269165Z
+5228
+jplang
 has-props
 
 
@@ -126,5 +126,5 @@
 
 
 
-2733
+2787
 
--- a/lib/redmine/helpers/.svn/text-base/calendar.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/helpers/.svn/text-base/calendar.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -68,6 +68,8 @@
         case Setting.start_of_week.to_i
         when 1
           @first_dow ||= (1 - 1)%7 + 1
+        when 6
+          @first_dow ||= (6 - 1)%7 + 1
         when 7
           @first_dow ||= (7 - 1)%7 + 1
         else
--- a/lib/redmine/helpers/.svn/text-base/gantt.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/helpers/.svn/text-base/gantt.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -38,10 +38,10 @@
       attr_accessor :query
       attr_accessor :project
       attr_accessor :view
-      
+
       def initialize(options={})
         options = options.dup
-        
+
         if options[:year] && options[:year].to_i >0
           @year_from = options[:year].to_i
           if options[:month] && options[:month].to_i >=1 && options[:month].to_i <= 12
@@ -53,27 +53,27 @@
           @month_from ||= Date.today.month
           @year_from ||= Date.today.year
         end
-        
+
         zoom = (options[:zoom] || User.current.pref[:gantt_zoom]).to_i
-        @zoom = (zoom > 0 && zoom < 5) ? zoom : 2    
+        @zoom = (zoom > 0 && zoom < 5) ? zoom : 2
         months = (options[:months] || User.current.pref[:gantt_months]).to_i
         @months = (months > 0 && months < 25) ? months : 6
-        
+
         # Save gantt parameters as user preference (zoom and months count)
         if (User.current.logged? && (@zoom != User.current.pref[:gantt_zoom] || @months != User.current.pref[:gantt_months]))
           User.current.pref[:gantt_zoom], User.current.pref[:gantt_months] = @zoom, @months
           User.current.preference.save
         end
-        
+
         @date_from = Date.civil(@year_from, @month_from, 1)
         @date_to = (@date_from >> @months) - 1
-        
+
         @subjects = ''
         @lines = ''
         @number_of_rows = nil
-        
+
         @issue_ancestors = []
-        
+
         @truncated = false
         if options.has_key?(:max_rows)
           @max_rows = options[:max_rows]
@@ -85,61 +85,35 @@
       def common_params
         { :controller => 'gantts', :action => 'show', :project_id => @project }
       end
-      
+
       def params
         common_params.merge({  :zoom => zoom, :year => year_from, :month => month_from, :months => months })
       end
-      
+
       def params_previous
         common_params.merge({:year => (date_from << months).year, :month => (date_from << months).month, :zoom => zoom, :months => months })
       end
-      
+
       def params_next
         common_params.merge({:year => (date_from >> months).year, :month => (date_from >> months).month, :zoom => zoom, :months => months })
       end
 
-            ### Extracted from the HTML view/helpers
       # Returns the number of rows that will be rendered on the Gantt chart
       def number_of_rows
         return @number_of_rows if @number_of_rows
-        
-        rows = if @project
-          number_of_rows_on_project(@project)
-        else
-          Project.roots.visible.has_module('issue_tracking').inject(0) do |total, project|
-            total += number_of_rows_on_project(project)
-          end
-        end
-        
+
+        rows = projects.inject(0) {|total, p| total += number_of_rows_on_project(p)}
         rows > @max_rows ? @max_rows : rows
       end
 
       # Returns the number of rows that will be used to list a project on
       # the Gantt chart.  This will recurse for each subproject.
       def number_of_rows_on_project(project)
-        # Remove the project requirement for Versions because it will
-        # restrict issues to only be on the current project.  This
-        # ends up missing issues which are assigned to shared versions.
-        @query.project = nil if @query.project
+        return 0 unless projects.include?(project)
 
-        # One Root project
         count = 1
-        # Issues without a Version
-        count += project.issues.for_gantt.without_version.with_query(@query).count
-
-        # Versions
-        count += project.versions.count
-
-        # Issues on the Versions
-        project.versions.each do |version|
-          count += version.fixed_issues.for_gantt.with_query(@query).count
-        end
-
-        # Subprojects
-        project.children.visible.has_module('issue_tracking').each do |subproject|
-          count += number_of_rows_on_project(subproject)
-        end
-
+        count += project_issues(project).size
+        count += project_versions(project).size
         count
       end
 
@@ -154,96 +128,119 @@
         render(options.merge(:only => :lines)) unless @lines_rendered
         @lines
       end
-      
+
+      # Returns issues that will be rendered
+      def issues
+        @issues ||= @query.issues(
+          :include => [:assigned_to, :tracker, :priority, :category, :fixed_version],
+          :order => "#{Project.table_name}.lft ASC, #{Issue.table_name}.id ASC",
+          :limit => @max_rows
+        )
+      end
+
+      # Return all the project nodes that will be displayed
+      def projects
+        return @projects if @projects
+
+        ids = issues.collect(&:project).uniq.collect(&:id)
+        if ids.any?
+          # All issues projects and their visible ancestors
+          @projects = Project.visible.all(
+            :joins => "LEFT JOIN #{Project.table_name} child ON #{Project.table_name}.lft <= child.lft AND #{Project.table_name}.rgt >= child.rgt",
+            :conditions => ["child.id IN (?)", ids],
+            :order => "#{Project.table_name}.lft ASC"
+          ).uniq
+        else
+          @projects = []
+        end
+      end
+
+      # Returns the issues that belong to +project+
+      def project_issues(project)
+        @issues_by_project ||= issues.group_by(&:project)
+        @issues_by_project[project] || []
+      end
+
+      # Returns the distinct versions of the issues that belong to +project+
+      def project_versions(project)
+        project_issues(project).collect(&:fixed_version).compact.uniq
+      end
+
+      # Returns the issues that belong to +project+ and are assigned to +version+
+      def version_issues(project, version)
+        project_issues(project).select {|issue| issue.fixed_version == version}
+      end
+
       def render(options={})
-        options = {:indent => 4, :render => :subject, :format => :html}.merge(options)
-        
+        options = {:top => 0, :top_increment => 20, :indent_increment => 20, :render => :subject, :format => :html}.merge(options)
+        indent = options[:indent] || 4
+
         @subjects = '' unless options[:only] == :lines
         @lines = '' unless options[:only] == :subjects
         @number_of_rows = 0
-        
-        if @project
-          render_project(@project, options)
-        else
-          Project.roots.visible.has_module('issue_tracking').each do |project|
-            render_project(project, options)
-            break if abort?
-          end
+
+        Project.project_tree(projects) do |project, level|
+          options[:indent] = indent + level * options[:indent_increment]
+          render_project(project, options)
+          break if abort?
         end
-        
+
         @subjects_rendered = true unless options[:only] == :lines
         @lines_rendered = true unless options[:only] == :subjects
-        
+
         render_end(options)
       end
 
       def render_project(project, options={})
-        options[:top] = 0 unless options.key? :top
-        options[:indent_increment] = 20 unless options.key? :indent_increment
-        options[:top_increment] = 20 unless options.key? :top_increment
-
         subject_for_project(project, options) unless options[:only] == :lines
         line_for_project(project, options) unless options[:only] == :subjects
-        
+
         options[:top] += options[:top_increment]
         options[:indent] += options[:indent_increment]
         @number_of_rows += 1
         return if abort?
-        
-        # Second, Issues without a version
-        issues = project.issues.for_gantt.without_version.with_query(@query).all(:limit => current_limit)
+
+        issues = project_issues(project).select {|i| i.fixed_version.nil?}
         sort_issues!(issues)
         if issues
           render_issues(issues, options)
           return if abort?
         end
 
-        # Third, Versions
-        project.versions.sort.each do |version|
-          render_version(version, options)
-          return if abort?
+        versions = project_versions(project)
+        versions.each do |version|
+          render_version(project, version, options)
         end
 
-        # Fourth, subprojects
-        project.children.visible.has_module('issue_tracking').each do |project|
-          render_project(project, options)
-          return if abort?
-        end unless project.leaf?
-
         # Remove indent to hit the next sibling
         options[:indent] -= options[:indent_increment]
       end
 
       def render_issues(issues, options={})
         @issue_ancestors = []
-        
+
         issues.each do |i|
           subject_for_issue(i, options) unless options[:only] == :lines
           line_for_issue(i, options) unless options[:only] == :subjects
-          
+
           options[:top] += options[:top_increment]
           @number_of_rows += 1
           break if abort?
         end
-        
+
         options[:indent] -= (options[:indent_increment] * @issue_ancestors.size)
       end
 
-      def render_version(version, options={})
+      def render_version(project, version, options={})
         # Version header
         subject_for_version(version, options) unless options[:only] == :lines
         line_for_version(version, options) unless options[:only] == :subjects
-        
+
         options[:top] += options[:top_increment]
         @number_of_rows += 1
         return if abort?
-        
-        # Remove the project requirement for Versions because it will
-        # restrict issues to only be on the current project.  This
-        # ends up missing issues which are assigned to shared versions.
-        @query.project = nil if @query.project
-        
-        issues = version.fixed_issues.for_gantt.with_query(@query).all(:limit => current_limit)
+
+        issues = version_issues(project, version)
         if issues
           sort_issues!(issues)
           # Indent issues
@@ -252,10 +249,10 @@
           options[:indent] -= options[:indent_increment]
         end
       end
-      
+
       def render_end(options={})
         case options[:format]
-        when :pdf        
+        when :pdf
           options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top])
         end
       end
@@ -280,10 +277,10 @@
         if project.is_a?(Project) && project.start_date && project.due_date
           options[:zoom] ||= 1
           options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]
-            
+
           coords = coordinates(project.start_date, project.due_date, nil, options[:zoom])
           label = h(project)
-          
+
           case options[:format]
           when :html
             html_task(options, coords, :css => "project task", :label => label, :markers => true)
@@ -318,7 +315,7 @@
         if version.is_a?(Version) && version.start_date && version.due_date
           options[:zoom] ||= 1
           options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]
-          
+
           coords = coordinates(version.start_date, version.due_date, version.completed_pourcent, options[:zoom])
           label = "#{h version } #{h version.completed_pourcent.to_i.to_s}%"
           label = h("#{version.project} -") + label unless @project && @project == version.project
@@ -342,14 +339,14 @@
           @issue_ancestors.pop
           options[:indent] -= options[:indent_increment]
         end
-          
+
         output = case options[:format]
         when :html
           css_classes = ''
           css_classes << ' issue-overdue' if issue.overdue?
           css_classes << ' issue-behind-schedule' if issue.behind_schedule?
           css_classes << ' icon icon-issue' unless Setting.gravatar_enabled? && issue.assigned_to
-          
+
           subject = "<span class='#{css_classes}'>"
           if issue.assigned_to.present?
             assigned_string = l(:field_assigned_to) + ": " + issue.assigned_to.name
@@ -369,7 +366,7 @@
           @issue_ancestors << issue
           options[:indent] += options[:indent_increment]
         end
-        
+
         output
       end
 
@@ -378,7 +375,7 @@
         if issue.is_a?(Issue) && issue.due_before
           coords = coordinates(issue.start_date, issue.due_before, issue.done_ratio, options[:zoom])
           label = "#{ issue.status.name } #{ issue.done_ratio }%"
-          
+
           case options[:format]
           when :html
             html_task(options, coords, :css => "task " + (issue.leaf? ? 'leaf' : 'parent'), :label => label, :issue => issue, :markers => !issue.leaf?)
@@ -396,31 +393,31 @@
       # Generates a gantt image
       # Only defined if RMagick is avalaible
       def to_image(format='PNG')
-        date_to = (@date_from >> @months)-1    
+        date_to = (@date_from >> @months)-1
         show_weeks = @zoom > 1
         show_days = @zoom > 2
-        
+
         subject_width = 400
-        header_heigth = 18
+        header_height = 18
         # width of one day in pixels
         zoom = @zoom*2
         g_width = (@date_to - @date_from + 1)*zoom
         g_height = 20 * number_of_rows + 30
-        headers_heigth = (show_weeks ? 2*header_heigth : header_heigth)
-        height = g_height + headers_heigth
-            
+        headers_height = (show_weeks ? 2*header_height : header_height)
+        height = g_height + headers_height
+
         imgl = Magick::ImageList.new
         imgl.new_image(subject_width+g_width+1, height)
         gc = Magick::Draw.new
-        
+
         # Subjects
         gc.stroke('transparent')
-        subjects(:image => gc, :top => (headers_heigth + 20), :indent => 4, :format => :image)
-    
+        subjects(:image => gc, :top => (headers_height + 20), :indent => 4, :format => :image)
+
         # Months headers
         month_f = @date_from
         left = subject_width
-        @months.times do 
+        @months.times do
           width = ((month_f >> 1) - month_f) * zoom
           gc.fill('white')
           gc.stroke('grey')
@@ -433,11 +430,11 @@
           left = left + width
           month_f = month_f >> 1
         end
-        
+
         # Weeks headers
         if show_weeks
         	left = subject_width
-        	height = header_heigth
+        	height = header_height
         	if @date_from.cwday == 1
         	    # date_from is monday
                 week_f = date_from
@@ -448,7 +445,7 @@
                 gc.fill('white')
                 gc.stroke('grey')
                 gc.stroke_width(1)
-                gc.rectangle(left, header_heigth, left + width, 2*header_heigth + g_height-1)
+                gc.rectangle(left, header_height, left + width, 2*header_height + g_height-1)
         		left = left + width
         	end
         	while week_f <= date_to
@@ -456,111 +453,111 @@
                 gc.fill('white')
                 gc.stroke('grey')
                 gc.stroke_width(1)
-                gc.rectangle(left.round, header_heigth, left.round + width, 2*header_heigth + g_height-1)
+                gc.rectangle(left.round, header_height, left.round + width, 2*header_height + g_height-1)
                 gc.fill('black')
                 gc.stroke('transparent')
                 gc.stroke_width(1)
-                gc.text(left.round + 2, header_heigth + 14, week_f.cweek.to_s)
+                gc.text(left.round + 2, header_height + 14, week_f.cweek.to_s)
         		left = left + width
         		week_f = week_f+7
         	end
         end
-        
+
         # Days details (week-end in grey)
         if show_days
         	left = subject_width
-        	height = g_height + header_heigth - 1
+        	height = g_height + header_height - 1
         	wday = @date_from.cwday
-        	(date_to - @date_from + 1).to_i.times do 
+        	(date_to - @date_from + 1).to_i.times do
               width =  zoom
               gc.fill(wday == 6 || wday == 7 ? '#eee' : 'white')
               gc.stroke('#ddd')
               gc.stroke_width(1)
-              gc.rectangle(left, 2*header_heigth, left + width, 2*header_heigth + g_height-1)
+              gc.rectangle(left, 2*header_height, left + width, 2*header_height + g_height-1)
               left = left + width
               wday = wday + 1
               wday = 1 if wday > 7
         	end
         end
-    
+
         # border
         gc.fill('transparent')
         gc.stroke('grey')
         gc.stroke_width(1)
-        gc.rectangle(0, 0, subject_width+g_width, headers_heigth)
+        gc.rectangle(0, 0, subject_width+g_width, headers_height)
         gc.stroke('black')
-        gc.rectangle(0, 0, subject_width+g_width, g_height+ headers_heigth-1)
-            
+        gc.rectangle(0, 0, subject_width+g_width, g_height+ headers_height-1)
+
         # content
-        top = headers_heigth + 20
+        top = headers_height + 20
 
         gc.stroke('transparent')
         lines(:image => gc, :top => top, :zoom => zoom, :subject_width => subject_width, :format => :image)
-        
+
         # today red line
         if Date.today >= @date_from and Date.today <= date_to
           gc.stroke('red')
           x = (Date.today-@date_from+1)*zoom + subject_width
-          gc.line(x, headers_heigth, x, headers_heigth + g_height-1)      
-        end    
-        
+          gc.line(x, headers_height, x, headers_height + g_height-1)
+        end
+
         gc.draw(imgl)
         imgl.format = format
         imgl.to_blob
       end if Object.const_defined?(:Magick)
 
       def to_pdf
-        pdf = ::Redmine::Export::PDF::IFPDF.new(current_language)
+        pdf = ::Redmine::Export::PDF::ITCPDF.new(current_language)
         pdf.SetTitle("#{l(:label_gantt)} #{project}")
-        pdf.AliasNbPages
+        pdf.alias_nb_pages
         pdf.footer_date = format_date(Date.today)
         pdf.AddPage("L")
         pdf.SetFontStyle('B',12)
         pdf.SetX(15)
-        pdf.Cell(PDF::LeftPaneWidth, 20, project.to_s)
+        pdf.RDMCell(PDF::LeftPaneWidth, 20, project.to_s)
         pdf.Ln
         pdf.SetFontStyle('B',9)
-        
+
         subject_width = PDF::LeftPaneWidth
-        header_heigth = 5
-        
-        headers_heigth = header_heigth
+        header_height = 5
+
+        headers_height = header_height
         show_weeks = false
         show_days = false
-        
+
         if self.months < 7
           show_weeks = true
-          headers_heigth = 2*header_heigth
+          headers_height = 2*header_height
           if self.months < 3
             show_days = true
-            headers_heigth = 3*header_heigth
+            headers_height = 3*header_height
           end
         end
-        
+
         g_width = PDF.right_pane_width
         zoom = (g_width) / (self.date_to - self.date_from + 1)
         g_height = 120
-        t_height = g_height + headers_heigth
-        
+        t_height = g_height + headers_height
+
         y_start = pdf.GetY
-        
+
         # Months headers
         month_f = self.date_from
         left = subject_width
-        height = header_heigth
-        self.months.times do 
-          width = ((month_f >> 1) - month_f) * zoom 
+        height = header_height
+        self.months.times do
+          width = ((month_f >> 1) - month_f) * zoom
           pdf.SetY(y_start)
           pdf.SetX(left)
-          pdf.Cell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C")
+          pdf.RDMCell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C")
           left = left + width
           month_f = month_f >> 1
-        end  
-        
+        end
+
         # Weeks headers
         if show_weeks
           left = subject_width
-          height = header_heigth
+          height = header_height
           if self.date_from.cwday == 1
             # self.date_from is monday
             week_f = self.date_from
@@ -568,44 +565,44 @@
             # find next monday after self.date_from
             week_f = self.date_from + (7 - self.date_from.cwday + 1)
             width = (7 - self.date_from.cwday + 1) * zoom-1
-            pdf.SetY(y_start + header_heigth)
+            pdf.SetY(y_start + header_height)
             pdf.SetX(left)
-            pdf.Cell(width + 1, height, "", "LTR")
+            pdf.RDMCell(width + 1, height, "", "LTR")
             left = left + width+1
           end
           while week_f <= self.date_to
             width = (week_f + 6 <= self.date_to) ? 7 * zoom : (self.date_to - week_f + 1) * zoom
-            pdf.SetY(y_start + header_heigth)
+            pdf.SetY(y_start + header_height)
             pdf.SetX(left)
-            pdf.Cell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C")
+            pdf.RDMCell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C")
             left = left + width
             week_f = week_f+7
           end
         end
-        
+
         # Days headers
         if show_days
           left = subject_width
-          height = header_heigth
+          height = header_height
           wday = self.date_from.cwday
           pdf.SetFontStyle('B',7)
-          (self.date_to - self.date_from + 1).to_i.times do 
+          (self.date_to - self.date_from + 1).to_i.times do
             width = zoom
-            pdf.SetY(y_start + 2 * header_heigth)
+            pdf.SetY(y_start + 2 * header_height)
             pdf.SetX(left)
-            pdf.Cell(width, height, day_name(wday).first, "LTR", 0, "C")
+            pdf.RDMCell(width, height, day_name(wday).first, "LTR", 0, "C")
             left = left + width
             wday = wday + 1
             wday = 1 if wday > 7
           end
         end
-        
+
         pdf.SetY(y_start)
         pdf.SetX(15)
-        pdf.Cell(subject_width+g_width-15, headers_heigth, "", 1)
-        
+        pdf.RDMCell(subject_width+g_width-15, headers_height, "", 1)
+
         # Tasks
-        top = headers_heigth + y_start
+        top = headers_height + y_start
         options = {
           :top => top,
           :zoom => zoom,
@@ -620,12 +617,12 @@
         render(options)
         pdf.Output
       end
-      
+
       private
-      
+
       def coordinates(start_date, end_date, progress, zoom=nil)
         zoom ||= @zoom
-        
+
         coords = {}
         if start_date && end_date && start_date < self.date_to && end_date > self.date_from
           if start_date > self.date_from
@@ -640,17 +637,17 @@
           else
             coords[:bar_end] = self.date_to - self.date_from + 1
           end
-        
+
           if progress
-            progress_date = start_date + (end_date - start_date) * (progress / 100.0)
+            progress_date = start_date + (end_date - start_date + 1) * (progress / 100.0)
             if progress_date > self.date_from && progress_date > start_date
               if progress_date < self.date_to
-                coords[:bar_progress_end] = progress_date - self.date_from + 1
+                coords[:bar_progress_end] = progress_date - self.date_from
               else
                 coords[:bar_progress_end] = self.date_to - self.date_from + 1
               end
             end
-            
+
             if progress_date < Date.today
               late_date = [Date.today, end_date].min
               if late_date > self.date_from && late_date > start_date
@@ -663,7 +660,7 @@
             end
           end
         end
-        
+
         # Transforms dates into pixels witdh
         coords.keys.each do |key|
           coords[key] = (coords[key] * zoom).floor
@@ -675,7 +672,7 @@
       def sort_issues!(issues)
         issues.sort! { |a, b| gantt_issue_compare(a, b, issues) }
       end
-  
+
       # TODO: top level issues should be sorted by start date
       def gantt_issue_compare(x, y, issues)
         if x.root_id == y.root_id
@@ -684,7 +681,7 @@
           x.root_id <=> y.root_id
         end
       end
-      
+
       def current_limit
         if @max_rows
           @max_rows - @number_of_rows
@@ -692,13 +689,13 @@
           nil
         end
       end
-      
+
       def abort?
         if @max_rows && @number_of_rows >= @max_rows
           @truncated = true
         end
       end
-      
+
       def pdf_new_page?(options)
         if options[:top] > 180
           options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top])
@@ -707,41 +704,41 @@
           options[:pdf].Line(15, options[:top] - 0.1, PDF::TotalWidth, options[:top] - 0.1)
         end
       end
-      
+
       def html_subject(params, subject, options={})
         style = "position: absolute;top:#{params[:top]}px;left:#{params[:indent]}px;"
         style << "width:#{params[:subject_width] - params[:indent]}px;" if params[:subject_width]
-        
+
         output = view.content_tag 'div', subject, :class => options[:css], :style => style, :title => options[:title]
         @subjects << output
         output
       end
-      
+
       def pdf_subject(params, subject, options={})
         params[:pdf].SetY(params[:top])
         params[:pdf].SetX(15)
-        
+
         char_limit = PDF::MaxCharactorsForSubject - params[:indent]
-        params[:pdf].Cell(params[:subject_width]-15, 5, (" " * params[:indent]) +  subject.to_s.sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR")
-      
+        params[:pdf].RDMCell(params[:subject_width]-15, 5, (" " * params[:indent]) +  subject.to_s.sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR")
+
         params[:pdf].SetY(params[:top])
         params[:pdf].SetX(params[:subject_width])
-        params[:pdf].Cell(params[:g_width], 5, "", "LR")
+        params[:pdf].RDMCell(params[:g_width], 5, "", "LR")
       end
-      
+
       def image_subject(params, subject, options={})
         params[:image].fill('black')
         params[:image].stroke('transparent')
         params[:image].stroke_width(1)
         params[:image].text(params[:indent], params[:top] + 2, subject)
       end
-      
+
       def html_task(params, coords, options={})
         output = ''
         # Renders the task bar, with progress and late
         if coords[:bar_start] && coords[:bar_end]
           output << "<div style='top:#{ params[:top] }px;left:#{ coords[:bar_start] }px;width:#{ coords[:bar_end] - coords[:bar_start] - 2}px;' class='#{options[:css]} task_todo'>&nbsp;</div>"
-          
+
           if coords[:bar_late_end]
             output << "<div style='top:#{ params[:top] }px;left:#{ coords[:bar_start] }px;width:#{ coords[:bar_late_end] - coords[:bar_start] - 2}px;' class='#{options[:css]} task_late'>&nbsp;</div>"
           end
@@ -774,28 +771,28 @@
         @lines << output
         output
       end
-      
+
       def pdf_task(params, coords, options={})
         height = options[:height] || 2
-        
+
         # Renders the task bar, with progress and late
         if coords[:bar_start] && coords[:bar_end]
           params[:pdf].SetY(params[:top]+1.5)
           params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
           params[:pdf].SetFillColor(200,200,200)
-          params[:pdf].Cell(coords[:bar_end] - coords[:bar_start], height, "", 0, 0, "", 1)
-            
+          params[:pdf].RDMCell(coords[:bar_end] - coords[:bar_start], height, "", 0, 0, "", 1)
+
           if coords[:bar_late_end]
             params[:pdf].SetY(params[:top]+1.5)
             params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
             params[:pdf].SetFillColor(255,100,100)
-            params[:pdf].Cell(coords[:bar_late_end] - coords[:bar_start], height, "", 0, 0, "", 1)
+            params[:pdf].RDMCell(coords[:bar_late_end] - coords[:bar_start], height, "", 0, 0, "", 1)
           end
           if coords[:bar_progress_end]
             params[:pdf].SetY(params[:top]+1.5)
             params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
             params[:pdf].SetFillColor(90,200,90)
-            params[:pdf].Cell(coords[:bar_progress_end] - coords[:bar_start], height, "", 0, 0, "", 1)
+            params[:pdf].RDMCell(coords[:bar_progress_end] - coords[:bar_start], height, "", 0, 0, "", 1)
           end
         end
         # Renders the markers
@@ -804,30 +801,30 @@
             params[:pdf].SetY(params[:top] + 1)
             params[:pdf].SetX(params[:subject_width] + coords[:start] - 1)
             params[:pdf].SetFillColor(50,50,200)
-            params[:pdf].Cell(2, 2, "", 0, 0, "", 1) 
+            params[:pdf].RDMCell(2, 2, "", 0, 0, "", 1)
           end
           if coords[:end]
             params[:pdf].SetY(params[:top] + 1)
             params[:pdf].SetX(params[:subject_width] + coords[:end] - 1)
             params[:pdf].SetFillColor(50,50,200)
-            params[:pdf].Cell(2, 2, "", 0, 0, "", 1) 
+            params[:pdf].RDMCell(2, 2, "", 0, 0, "", 1)
           end
         end
         # Renders the label on the right
         if options[:label]
           params[:pdf].SetX(params[:subject_width] + (coords[:bar_end] || 0) + 5)
-          params[:pdf].Cell(30, 2, options[:label])
+          params[:pdf].RDMCell(30, 2, options[:label])
         end
       end
 
       def image_task(params, coords, options={})
         height = options[:height] || 6
-        
+
         # Renders the task bar, with progress and late
         if coords[:bar_start] && coords[:bar_end]
           params[:image].fill('#aaa')
           params[:image].rectangle(params[:subject_width] + coords[:bar_start], params[:top], params[:subject_width] + coords[:bar_end], params[:top] - height)
- 
+
           if coords[:bar_late_end]
             params[:image].fill('#f66')
             params[:image].rectangle(params[:subject_width] + coords[:bar_start], params[:top], params[:subject_width] + coords[:bar_late_end], params[:top] - height)
--- a/lib/redmine/helpers/calendar.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/helpers/calendar.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -68,6 +68,8 @@
         case Setting.start_of_week.to_i
         when 1
           @first_dow ||= (1 - 1)%7 + 1
+        when 6
+          @first_dow ||= (6 - 1)%7 + 1
         when 7
           @first_dow ||= (7 - 1)%7 + 1
         else
--- a/lib/redmine/helpers/gantt.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/helpers/gantt.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -38,10 +38,10 @@
       attr_accessor :query
       attr_accessor :project
       attr_accessor :view
-      
+
       def initialize(options={})
         options = options.dup
-        
+
         if options[:year] && options[:year].to_i >0
           @year_from = options[:year].to_i
           if options[:month] && options[:month].to_i >=1 && options[:month].to_i <= 12
@@ -53,27 +53,27 @@
           @month_from ||= Date.today.month
           @year_from ||= Date.today.year
         end
-        
+
         zoom = (options[:zoom] || User.current.pref[:gantt_zoom]).to_i
-        @zoom = (zoom > 0 && zoom < 5) ? zoom : 2    
+        @zoom = (zoom > 0 && zoom < 5) ? zoom : 2
         months = (options[:months] || User.current.pref[:gantt_months]).to_i
         @months = (months > 0 && months < 25) ? months : 6
-        
+
         # Save gantt parameters as user preference (zoom and months count)
         if (User.current.logged? && (@zoom != User.current.pref[:gantt_zoom] || @months != User.current.pref[:gantt_months]))
           User.current.pref[:gantt_zoom], User.current.pref[:gantt_months] = @zoom, @months
           User.current.preference.save
         end
-        
+
         @date_from = Date.civil(@year_from, @month_from, 1)
         @date_to = (@date_from >> @months) - 1
-        
+
         @subjects = ''
         @lines = ''
         @number_of_rows = nil
-        
+
         @issue_ancestors = []
-        
+
         @truncated = false
         if options.has_key?(:max_rows)
           @max_rows = options[:max_rows]
@@ -85,61 +85,35 @@
       def common_params
         { :controller => 'gantts', :action => 'show', :project_id => @project }
       end
-      
+
       def params
         common_params.merge({  :zoom => zoom, :year => year_from, :month => month_from, :months => months })
       end
-      
+
       def params_previous
         common_params.merge({:year => (date_from << months).year, :month => (date_from << months).month, :zoom => zoom, :months => months })
       end
-      
+
       def params_next
         common_params.merge({:year => (date_from >> months).year, :month => (date_from >> months).month, :zoom => zoom, :months => months })
       end
 
-            ### Extracted from the HTML view/helpers
       # Returns the number of rows that will be rendered on the Gantt chart
       def number_of_rows
         return @number_of_rows if @number_of_rows
-        
-        rows = if @project
-          number_of_rows_on_project(@project)
-        else
-          Project.roots.visible.has_module('issue_tracking').inject(0) do |total, project|
-            total += number_of_rows_on_project(project)
-          end
-        end
-        
+
+        rows = projects.inject(0) {|total, p| total += number_of_rows_on_project(p)}
         rows > @max_rows ? @max_rows : rows
       end
 
       # Returns the number of rows that will be used to list a project on
       # the Gantt chart.  This will recurse for each subproject.
       def number_of_rows_on_project(project)
-        # Remove the project requirement for Versions because it will
-        # restrict issues to only be on the current project.  This
-        # ends up missing issues which are assigned to shared versions.
-        @query.project = nil if @query.project
+        return 0 unless projects.include?(project)
 
-        # One Root project
         count = 1
-        # Issues without a Version
-        count += project.issues.for_gantt.without_version.with_query(@query).count
-
-        # Versions
-        count += project.versions.count
-
-        # Issues on the Versions
-        project.versions.each do |version|
-          count += version.fixed_issues.for_gantt.with_query(@query).count
-        end
-
-        # Subprojects
-        project.children.visible.has_module('issue_tracking').each do |subproject|
-          count += number_of_rows_on_project(subproject)
-        end
-
+        count += project_issues(project).size
+        count += project_versions(project).size
         count
       end
 
@@ -154,96 +128,119 @@
         render(options.merge(:only => :lines)) unless @lines_rendered
         @lines
       end
-      
+
+      # Returns issues that will be rendered
+      def issues
+        @issues ||= @query.issues(
+          :include => [:assigned_to, :tracker, :priority, :category, :fixed_version],
+          :order => "#{Project.table_name}.lft ASC, #{Issue.table_name}.id ASC",
+          :limit => @max_rows
+        )
+      end
+
+      # Return all the project nodes that will be displayed
+      def projects
+        return @projects if @projects
+
+        ids = issues.collect(&:project).uniq.collect(&:id)
+        if ids.any?
+          # All issues projects and their visible ancestors
+          @projects = Project.visible.all(
+            :joins => "LEFT JOIN #{Project.table_name} child ON #{Project.table_name}.lft <= child.lft AND #{Project.table_name}.rgt >= child.rgt",
+            :conditions => ["child.id IN (?)", ids],
+            :order => "#{Project.table_name}.lft ASC"
+          ).uniq
+        else
+          @projects = []
+        end
+      end
+
+      # Returns the issues that belong to +project+
+      def project_issues(project)
+        @issues_by_project ||= issues.group_by(&:project)
+        @issues_by_project[project] || []
+      end
+
+      # Returns the distinct versions of the issues that belong to +project+
+      def project_versions(project)
+        project_issues(project).collect(&:fixed_version).compact.uniq
+      end
+
+      # Returns the issues that belong to +project+ and are assigned to +version+
+      def version_issues(project, version)
+        project_issues(project).select {|issue| issue.fixed_version == version}
+      end
+
       def render(options={})
-        options = {:indent => 4, :render => :subject, :format => :html}.merge(options)
-        
+        options = {:top => 0, :top_increment => 20, :indent_increment => 20, :render => :subject, :format => :html}.merge(options)
+        indent = options[:indent] || 4
+
         @subjects = '' unless options[:only] == :lines
         @lines = '' unless options[:only] == :subjects
         @number_of_rows = 0
-        
-        if @project
-          render_project(@project, options)
-        else
-          Project.roots.visible.has_module('issue_tracking').each do |project|
-            render_project(project, options)
-            break if abort?
-          end
+
+        Project.project_tree(projects) do |project, level|
+          options[:indent] = indent + level * options[:indent_increment]
+          render_project(project, options)
+          break if abort?
         end
-        
+
         @subjects_rendered = true unless options[:only] == :lines
         @lines_rendered = true unless options[:only] == :subjects
-        
+
         render_end(options)
       end
 
       def render_project(project, options={})
-        options[:top] = 0 unless options.key? :top
-        options[:indent_increment] = 20 unless options.key? :indent_increment
-        options[:top_increment] = 20 unless options.key? :top_increment
-
         subject_for_project(project, options) unless options[:only] == :lines
         line_for_project(project, options) unless options[:only] == :subjects
-        
+
         options[:top] += options[:top_increment]
         options[:indent] += options[:indent_increment]
         @number_of_rows += 1
         return if abort?
-        
-        # Second, Issues without a version
-        issues = project.issues.for_gantt.without_version.with_query(@query).all(:limit => current_limit)
+
+        issues = project_issues(project).select {|i| i.fixed_version.nil?}
         sort_issues!(issues)
         if issues
           render_issues(issues, options)
           return if abort?
         end
 
-        # Third, Versions
-        project.versions.sort.each do |version|
-          render_version(version, options)
-          return if abort?
+        versions = project_versions(project)
+        versions.each do |version|
+          render_version(project, version, options)
         end
 
-        # Fourth, subprojects
-        project.children.visible.has_module('issue_tracking').each do |project|
-          render_project(project, options)
-          return if abort?
-        end unless project.leaf?
-
         # Remove indent to hit the next sibling
         options[:indent] -= options[:indent_increment]
       end
 
       def render_issues(issues, options={})
         @issue_ancestors = []
-        
+
         issues.each do |i|
           subject_for_issue(i, options) unless options[:only] == :lines
           line_for_issue(i, options) unless options[:only] == :subjects
-          
+
           options[:top] += options[:top_increment]
           @number_of_rows += 1
           break if abort?
         end
-        
+
         options[:indent] -= (options[:indent_increment] * @issue_ancestors.size)
       end
 
-      def render_version(version, options={})
+      def render_version(project, version, options={})
         # Version header
         subject_for_version(version, options) unless options[:only] == :lines
         line_for_version(version, options) unless options[:only] == :subjects
-        
+
         options[:top] += options[:top_increment]
         @number_of_rows += 1
         return if abort?
-        
-        # Remove the project requirement for Versions because it will
-        # restrict issues to only be on the current project.  This
-        # ends up missing issues which are assigned to shared versions.
-        @query.project = nil if @query.project
-        
-        issues = version.fixed_issues.for_gantt.with_query(@query).all(:limit => current_limit)
+
+        issues = version_issues(project, version)
         if issues
           sort_issues!(issues)
           # Indent issues
@@ -252,10 +249,10 @@
           options[:indent] -= options[:indent_increment]
         end
       end
-      
+
       def render_end(options={})
         case options[:format]
-        when :pdf        
+        when :pdf
           options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top])
         end
       end
@@ -280,10 +277,10 @@
         if project.is_a?(Project) && project.start_date && project.due_date
           options[:zoom] ||= 1
           options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]
-            
+
           coords = coordinates(project.start_date, project.due_date, nil, options[:zoom])
           label = h(project)
-          
+
           case options[:format]
           when :html
             html_task(options, coords, :css => "project task", :label => label, :markers => true)
@@ -318,7 +315,7 @@
         if version.is_a?(Version) && version.start_date && version.due_date
           options[:zoom] ||= 1
           options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]
-          
+
           coords = coordinates(version.start_date, version.due_date, version.completed_pourcent, options[:zoom])
           label = "#{h version } #{h version.completed_pourcent.to_i.to_s}%"
           label = h("#{version.project} -") + label unless @project && @project == version.project
@@ -342,14 +339,14 @@
           @issue_ancestors.pop
           options[:indent] -= options[:indent_increment]
         end
-          
+
         output = case options[:format]
         when :html
           css_classes = ''
           css_classes << ' issue-overdue' if issue.overdue?
           css_classes << ' issue-behind-schedule' if issue.behind_schedule?
           css_classes << ' icon icon-issue' unless Setting.gravatar_enabled? && issue.assigned_to
-          
+
           subject = "<span class='#{css_classes}'>"
           if issue.assigned_to.present?
             assigned_string = l(:field_assigned_to) + ": " + issue.assigned_to.name
@@ -369,7 +366,7 @@
           @issue_ancestors << issue
           options[:indent] += options[:indent_increment]
         end
-        
+
         output
       end
 
@@ -378,7 +375,7 @@
         if issue.is_a?(Issue) && issue.due_before
           coords = coordinates(issue.start_date, issue.due_before, issue.done_ratio, options[:zoom])
           label = "#{ issue.status.name } #{ issue.done_ratio }%"
-          
+
           case options[:format]
           when :html
             html_task(options, coords, :css => "task " + (issue.leaf? ? 'leaf' : 'parent'), :label => label, :issue => issue, :markers => !issue.leaf?)
@@ -396,31 +393,31 @@
       # Generates a gantt image
       # Only defined if RMagick is avalaible
       def to_image(format='PNG')
-        date_to = (@date_from >> @months)-1    
+        date_to = (@date_from >> @months)-1
         show_weeks = @zoom > 1
         show_days = @zoom > 2
-        
+
         subject_width = 400
-        header_heigth = 18
+        header_height = 18
         # width of one day in pixels
         zoom = @zoom*2
         g_width = (@date_to - @date_from + 1)*zoom
         g_height = 20 * number_of_rows + 30
-        headers_heigth = (show_weeks ? 2*header_heigth : header_heigth)
-        height = g_height + headers_heigth
-            
+        headers_height = (show_weeks ? 2*header_height : header_height)
+        height = g_height + headers_height
+
         imgl = Magick::ImageList.new
         imgl.new_image(subject_width+g_width+1, height)
         gc = Magick::Draw.new
-        
+
         # Subjects
         gc.stroke('transparent')
-        subjects(:image => gc, :top => (headers_heigth + 20), :indent => 4, :format => :image)
-    
+        subjects(:image => gc, :top => (headers_height + 20), :indent => 4, :format => :image)
+
         # Months headers
         month_f = @date_from
         left = subject_width
-        @months.times do 
+        @months.times do
           width = ((month_f >> 1) - month_f) * zoom
           gc.fill('white')
           gc.stroke('grey')
@@ -433,11 +430,11 @@
           left = left + width
           month_f = month_f >> 1
         end
-        
+
         # Weeks headers
         if show_weeks
         	left = subject_width
-        	height = header_heigth
+        	height = header_height
         	if @date_from.cwday == 1
         	    # date_from is monday
                 week_f = date_from
@@ -448,7 +445,7 @@
                 gc.fill('white')
                 gc.stroke('grey')
                 gc.stroke_width(1)
-                gc.rectangle(left, header_heigth, left + width, 2*header_heigth + g_height-1)
+                gc.rectangle(left, header_height, left + width, 2*header_height + g_height-1)
         		left = left + width
         	end
         	while week_f <= date_to
@@ -456,111 +453,111 @@
                 gc.fill('white')
                 gc.stroke('grey')
                 gc.stroke_width(1)
-                gc.rectangle(left.round, header_heigth, left.round + width, 2*header_heigth + g_height-1)
+                gc.rectangle(left.round, header_height, left.round + width, 2*header_height + g_height-1)
                 gc.fill('black')
                 gc.stroke('transparent')
                 gc.stroke_width(1)
-                gc.text(left.round + 2, header_heigth + 14, week_f.cweek.to_s)
+                gc.text(left.round + 2, header_height + 14, week_f.cweek.to_s)
         		left = left + width
         		week_f = week_f+7
         	end
         end
-        
+
         # Days details (week-end in grey)
         if show_days
         	left = subject_width
-        	height = g_height + header_heigth - 1
+        	height = g_height + header_height - 1
         	wday = @date_from.cwday
-        	(date_to - @date_from + 1).to_i.times do 
+        	(date_to - @date_from + 1).to_i.times do
               width =  zoom
               gc.fill(wday == 6 || wday == 7 ? '#eee' : 'white')
               gc.stroke('#ddd')
               gc.stroke_width(1)
-              gc.rectangle(left, 2*header_heigth, left + width, 2*header_heigth + g_height-1)
+              gc.rectangle(left, 2*header_height, left + width, 2*header_height + g_height-1)
               left = left + width
               wday = wday + 1
               wday = 1 if wday > 7
         	end
         end
-    
+
         # border
         gc.fill('transparent')
         gc.stroke('grey')
         gc.stroke_width(1)
-        gc.rectangle(0, 0, subject_width+g_width, headers_heigth)
+        gc.rectangle(0, 0, subject_width+g_width, headers_height)
         gc.stroke('black')
-        gc.rectangle(0, 0, subject_width+g_width, g_height+ headers_heigth-1)
-            
+        gc.rectangle(0, 0, subject_width+g_width, g_height+ headers_height-1)
+
         # content
-        top = headers_heigth + 20
+        top = headers_height + 20
 
         gc.stroke('transparent')
         lines(:image => gc, :top => top, :zoom => zoom, :subject_width => subject_width, :format => :image)
-        
+
         # today red line
         if Date.today >= @date_from and Date.today <= date_to
           gc.stroke('red')
           x = (Date.today-@date_from+1)*zoom + subject_width
-          gc.line(x, headers_heigth, x, headers_heigth + g_height-1)      
-        end    
-        
+          gc.line(x, headers_height, x, headers_height + g_height-1)
+        end
+
         gc.draw(imgl)
         imgl.format = format
         imgl.to_blob
       end if Object.const_defined?(:Magick)
 
       def to_pdf
-        pdf = ::Redmine::Export::PDF::IFPDF.new(current_language)
+        pdf = ::Redmine::Export::PDF::ITCPDF.new(current_language)
         pdf.SetTitle("#{l(:label_gantt)} #{project}")
-        pdf.AliasNbPages
+        pdf.alias_nb_pages
         pdf.footer_date = format_date(Date.today)
         pdf.AddPage("L")
         pdf.SetFontStyle('B',12)
         pdf.SetX(15)
-        pdf.Cell(PDF::LeftPaneWidth, 20, project.to_s)
+        pdf.RDMCell(PDF::LeftPaneWidth, 20, project.to_s)
         pdf.Ln
         pdf.SetFontStyle('B',9)
-        
+
         subject_width = PDF::LeftPaneWidth
-        header_heigth = 5
-        
-        headers_heigth = header_heigth
+        header_height = 5
+
+        headers_height = header_height
         show_weeks = false
         show_days = false
-        
+
         if self.months < 7
           show_weeks = true
-          headers_heigth = 2*header_heigth
+          headers_height = 2*header_height
           if self.months < 3
             show_days = true
-            headers_heigth = 3*header_heigth
+            headers_height = 3*header_height
           end
         end
-        
+
         g_width = PDF.right_pane_width
         zoom = (g_width) / (self.date_to - self.date_from + 1)
         g_height = 120
-        t_height = g_height + headers_heigth
-        
+        t_height = g_height + headers_height
+
         y_start = pdf.GetY
-        
+
         # Months headers
         month_f = self.date_from
         left = subject_width
-        height = header_heigth
-        self.months.times do 
-          width = ((month_f >> 1) - month_f) * zoom 
+        height = header_height
+        self.months.times do
+          width = ((month_f >> 1) - month_f) * zoom
           pdf.SetY(y_start)
           pdf.SetX(left)
-          pdf.Cell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C")
+          pdf.RDMCell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C")
           left = left + width
           month_f = month_f >> 1
-        end  
-        
+        end
+
         # Weeks headers
         if show_weeks
           left = subject_width
-          height = header_heigth
+          height = header_height
           if self.date_from.cwday == 1
             # self.date_from is monday
             week_f = self.date_from
@@ -568,44 +565,44 @@
             # find next monday after self.date_from
             week_f = self.date_from + (7 - self.date_from.cwday + 1)
             width = (7 - self.date_from.cwday + 1) * zoom-1
-            pdf.SetY(y_start + header_heigth)
+            pdf.SetY(y_start + header_height)
             pdf.SetX(left)
-            pdf.Cell(width + 1, height, "", "LTR")
+            pdf.RDMCell(width + 1, height, "", "LTR")
             left = left + width+1
           end
           while week_f <= self.date_to
             width = (week_f + 6 <= self.date_to) ? 7 * zoom : (self.date_to - week_f + 1) * zoom
-            pdf.SetY(y_start + header_heigth)
+            pdf.SetY(y_start + header_height)
             pdf.SetX(left)
-            pdf.Cell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C")
+            pdf.RDMCell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C")
             left = left + width
             week_f = week_f+7
           end
         end
-        
+
         # Days headers
         if show_days
           left = subject_width
-          height = header_heigth
+          height = header_height
           wday = self.date_from.cwday
           pdf.SetFontStyle('B',7)
-          (self.date_to - self.date_from + 1).to_i.times do 
+          (self.date_to - self.date_from + 1).to_i.times do
             width = zoom
-            pdf.SetY(y_start + 2 * header_heigth)
+            pdf.SetY(y_start + 2 * header_height)
             pdf.SetX(left)
-            pdf.Cell(width, height, day_name(wday).first, "LTR", 0, "C")
+            pdf.RDMCell(width, height, day_name(wday).first, "LTR", 0, "C")
             left = left + width
             wday = wday + 1
             wday = 1 if wday > 7
           end
         end
-        
+
         pdf.SetY(y_start)
         pdf.SetX(15)
-        pdf.Cell(subject_width+g_width-15, headers_heigth, "", 1)
-        
+        pdf.RDMCell(subject_width+g_width-15, headers_height, "", 1)
+
         # Tasks
-        top = headers_heigth + y_start
+        top = headers_height + y_start
         options = {
           :top => top,
           :zoom => zoom,
@@ -620,12 +617,12 @@
         render(options)
         pdf.Output
       end
-      
+
       private
-      
+
       def coordinates(start_date, end_date, progress, zoom=nil)
         zoom ||= @zoom
-        
+
         coords = {}
         if start_date && end_date && start_date < self.date_to && end_date > self.date_from
           if start_date > self.date_from
@@ -640,17 +637,17 @@
           else
             coords[:bar_end] = self.date_to - self.date_from + 1
           end
-        
+
           if progress
-            progress_date = start_date + (end_date - start_date) * (progress / 100.0)
+            progress_date = start_date + (end_date - start_date + 1) * (progress / 100.0)
             if progress_date > self.date_from && progress_date > start_date
               if progress_date < self.date_to
-                coords[:bar_progress_end] = progress_date - self.date_from + 1
+                coords[:bar_progress_end] = progress_date - self.date_from
               else
                 coords[:bar_progress_end] = self.date_to - self.date_from + 1
               end
             end
-            
+
             if progress_date < Date.today
               late_date = [Date.today, end_date].min
               if late_date > self.date_from && late_date > start_date
@@ -663,7 +660,7 @@
             end
           end
         end
-        
+
         # Transforms dates into pixels witdh
         coords.keys.each do |key|
           coords[key] = (coords[key] * zoom).floor
@@ -675,7 +672,7 @@
       def sort_issues!(issues)
         issues.sort! { |a, b| gantt_issue_compare(a, b, issues) }
       end
-  
+
       # TODO: top level issues should be sorted by start date
       def gantt_issue_compare(x, y, issues)
         if x.root_id == y.root_id
@@ -684,7 +681,7 @@
           x.root_id <=> y.root_id
         end
       end
-      
+
       def current_limit
         if @max_rows
           @max_rows - @number_of_rows
@@ -692,13 +689,13 @@
           nil
         end
       end
-      
+
       def abort?
         if @max_rows && @number_of_rows >= @max_rows
           @truncated = true
         end
       end
-      
+
       def pdf_new_page?(options)
         if options[:top] > 180
           options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top])
@@ -707,41 +704,41 @@
           options[:pdf].Line(15, options[:top] - 0.1, PDF::TotalWidth, options[:top] - 0.1)
         end
       end
-      
+
       def html_subject(params, subject, options={})
         style = "position: absolute;top:#{params[:top]}px;left:#{params[:indent]}px;"
         style << "width:#{params[:subject_width] - params[:indent]}px;" if params[:subject_width]
-        
+
         output = view.content_tag 'div', subject, :class => options[:css], :style => style, :title => options[:title]
         @subjects << output
         output
       end
-      
+
       def pdf_subject(params, subject, options={})
         params[:pdf].SetY(params[:top])
         params[:pdf].SetX(15)
-        
+
         char_limit = PDF::MaxCharactorsForSubject - params[:indent]
-        params[:pdf].Cell(params[:subject_width]-15, 5, (" " * params[:indent]) +  subject.to_s.sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR")
-      
+        params[:pdf].RDMCell(params[:subject_width]-15, 5, (" " * params[:indent]) +  subject.to_s.sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR")
+
         params[:pdf].SetY(params[:top])
         params[:pdf].SetX(params[:subject_width])
-        params[:pdf].Cell(params[:g_width], 5, "", "LR")
+        params[:pdf].RDMCell(params[:g_width], 5, "", "LR")
       end
-      
+
       def image_subject(params, subject, options={})
         params[:image].fill('black')
         params[:image].stroke('transparent')
         params[:image].stroke_width(1)
         params[:image].text(params[:indent], params[:top] + 2, subject)
       end
-      
+
       def html_task(params, coords, options={})
         output = ''
         # Renders the task bar, with progress and late
         if coords[:bar_start] && coords[:bar_end]
           output << "<div style='top:#{ params[:top] }px;left:#{ coords[:bar_start] }px;width:#{ coords[:bar_end] - coords[:bar_start] - 2}px;' class='#{options[:css]} task_todo'>&nbsp;</div>"
-          
+
           if coords[:bar_late_end]
             output << "<div style='top:#{ params[:top] }px;left:#{ coords[:bar_start] }px;width:#{ coords[:bar_late_end] - coords[:bar_start] - 2}px;' class='#{options[:css]} task_late'>&nbsp;</div>"
           end
@@ -774,28 +771,28 @@
         @lines << output
         output
       end
-      
+
       def pdf_task(params, coords, options={})
         height = options[:height] || 2
-        
+
         # Renders the task bar, with progress and late
         if coords[:bar_start] && coords[:bar_end]
           params[:pdf].SetY(params[:top]+1.5)
           params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
           params[:pdf].SetFillColor(200,200,200)
-          params[:pdf].Cell(coords[:bar_end] - coords[:bar_start], height, "", 0, 0, "", 1)
-            
+          params[:pdf].RDMCell(coords[:bar_end] - coords[:bar_start], height, "", 0, 0, "", 1)
+
           if coords[:bar_late_end]
             params[:pdf].SetY(params[:top]+1.5)
             params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
             params[:pdf].SetFillColor(255,100,100)
-            params[:pdf].Cell(coords[:bar_late_end] - coords[:bar_start], height, "", 0, 0, "", 1)
+            params[:pdf].RDMCell(coords[:bar_late_end] - coords[:bar_start], height, "", 0, 0, "", 1)
           end
           if coords[:bar_progress_end]
             params[:pdf].SetY(params[:top]+1.5)
             params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
             params[:pdf].SetFillColor(90,200,90)
-            params[:pdf].Cell(coords[:bar_progress_end] - coords[:bar_start], height, "", 0, 0, "", 1)
+            params[:pdf].RDMCell(coords[:bar_progress_end] - coords[:bar_start], height, "", 0, 0, "", 1)
           end
         end
         # Renders the markers
@@ -804,30 +801,30 @@
             params[:pdf].SetY(params[:top] + 1)
             params[:pdf].SetX(params[:subject_width] + coords[:start] - 1)
             params[:pdf].SetFillColor(50,50,200)
-            params[:pdf].Cell(2, 2, "", 0, 0, "", 1) 
+            params[:pdf].RDMCell(2, 2, "", 0, 0, "", 1)
           end
           if coords[:end]
             params[:pdf].SetY(params[:top] + 1)
             params[:pdf].SetX(params[:subject_width] + coords[:end] - 1)
             params[:pdf].SetFillColor(50,50,200)
-            params[:pdf].Cell(2, 2, "", 0, 0, "", 1) 
+            params[:pdf].RDMCell(2, 2, "", 0, 0, "", 1)
           end
         end
         # Renders the label on the right
         if options[:label]
           params[:pdf].SetX(params[:subject_width] + (coords[:bar_end] || 0) + 5)
-          params[:pdf].Cell(30, 2, options[:label])
+          params[:pdf].RDMCell(30, 2, options[:label])
         end
       end
 
       def image_task(params, coords, options={})
         height = options[:height] || 6
-        
+
         # Renders the task bar, with progress and late
         if coords[:bar_start] && coords[:bar_end]
           params[:image].fill('#aaa')
           params[:image].rectangle(params[:subject_width] + coords[:bar_start], params[:top], params[:subject_width] + coords[:bar_end], params[:top] - height)
- 
+
           if coords[:bar_late_end]
             params[:image].fill('#f66')
             params[:image].rectangle(params[:subject_width] + coords[:bar_start], params[:top], params[:subject_width] + coords[:bar_late_end], params[:top] - height)
--- a/lib/redmine/mime_type.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/mime_type.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -37,6 +37,7 @@
       'text/xml' => 'xml,xsd,mxml',
       'text/yaml' => 'yml,yaml',
       'text/csv' => 'csv',
+      'text/x-po' => 'po',
       'image/gif' => 'gif',
       'image/jpeg' => 'jpg,jpeg,jpe',
       'image/png' => 'png',
--- a/lib/redmine/notifiable.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/notifiable.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -14,6 +14,7 @@
       notifications << Notifiable.new('issue_status_updated', 'issue_updated')
       notifications << Notifiable.new('issue_priority_updated', 'issue_updated')
       notifications << Notifiable.new('news_added')
+      notifications << Notifiable.new('news_comment_added')
       notifications << Notifiable.new('document_added')
       notifications << Notifiable.new('file_added')
       notifications << Notifiable.new('message_posted')
--- a/lib/redmine/scm/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,11 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 40
-/svn/!svn/ver/4993/trunk/lib/redmine/scm
+V 54
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm
 END
-base.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/3440/trunk/lib/redmine/scm/base.rb
-END
--- a/lib/redmine/scm/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/scm
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-03T05:51:46.224821Z
-4993
+2011-05-21T02:39:42.521746Z
+5870
 tmaruyama
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 3a053c03d210decd9105a24ff5e1aa8f
 2010-02-16T22:41:59.625572Z
 3440
--- a/lib/redmine/scm/adapters/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,53 +1,53 @@
 K 25
 svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4993/trunk/lib/redmine/scm/adapters
+V 63
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters
 END
 subversion_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/4993/trunk/lib/redmine/scm/adapters/subversion_adapter.rb
+V 85
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/subversion_adapter.rb
 END
 bazaar_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4992/trunk/lib/redmine/scm/adapters/bazaar_adapter.rb
+V 81
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/bazaar_adapter.rb
 END
 abstract_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/4959/trunk/lib/redmine/scm/adapters/abstract_adapter.rb
+V 83
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/abstract_adapter.rb
 END
 git_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4992/trunk/lib/redmine/scm/adapters/git_adapter.rb
+V 78
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/git_adapter.rb
 END
 mercurial_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/4993/trunk/lib/redmine/scm/adapters/mercurial_adapter.rb
+V 84
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/mercurial_adapter.rb
 END
 filesystem_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/4941/trunk/lib/redmine/scm/adapters/filesystem_adapter.rb
+V 85
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/filesystem_adapter.rb
 END
 cvs_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4992/trunk/lib/redmine/scm/adapters/cvs_adapter.rb
+V 78
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/cvs_adapter.rb
 END
 darcs_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/4992/trunk/lib/redmine/scm/adapters/darcs_adapter.rb
+V 80
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/darcs_adapter.rb
 END
--- a/lib/redmine/scm/adapters/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm/adapters
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/scm/adapters
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-03T05:51:46.224821Z
-4993
+2011-05-21T02:39:42.521746Z
+5870
 tmaruyama
 
 
@@ -32,11 +32,12 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-7e0b7e8a12996f271854b48e2d7611e4
-2011-03-03T05:51:46.224821Z
-4993
+2011-06-06T13:20:53.000000Z
+bf7d7b180f55d2100736e363ce125552
+2011-05-10T17:52:56.415969Z
+5731
 tmaruyama
+has-props
 
 
 
@@ -57,8 +58,7 @@
 
 
 
-
-11535
+11495
 
 bazaar_adapter.rb
 file
@@ -66,10 +66,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-2614557fb37905301939071ec226fe16
-2011-03-03T05:32:33.802461Z
-4992
+2011-06-06T13:20:53.000000Z
+8bcb2a65cfdf8d27dc53f10469887018
+2011-05-06T12:57:32.851840Z
+5668
 tmaruyama
 has-props
 
@@ -92,7 +92,7 @@
 
 
 
-8274
+8398
 
 mercurial
 dir
@@ -103,10 +103,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-5cc0323dd42df9a3377099b0fdf9e95f
-2011-02-28T04:46:42.639929Z
-4959
+2011-06-06T13:20:53.000000Z
+b5e95cdfce320e25a25588b5bf01d39a
+2011-05-21T02:16:51.624699Z
+5863
 tmaruyama
 has-props
 
@@ -129,7 +129,7 @@
 
 
 
-9832
+9625
 
 git_adapter.rb
 file
@@ -137,10 +137,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-ba10ae64fed2363f2533aa558752be37
-2011-03-03T05:32:33.802461Z
-4992
+2011-06-06T13:20:53.000000Z
+8b7b85fc7884f18402dfd33412bb1632
+2011-05-21T02:39:42.521746Z
+5870
 tmaruyama
 has-props
 
@@ -163,7 +163,7 @@
 
 
 
-11905
+13537
 
 mercurial_adapter.rb
 file
@@ -171,10 +171,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-fe99380d7b29fe936554e10293751813
-2011-03-03T05:51:46.224821Z
-4993
+2011-06-06T13:20:53.000000Z
+ef24fdf73dd59d164e60121c21aa5b93
+2011-05-21T02:38:04.545904Z
+5868
 tmaruyama
 has-props
 
@@ -197,7 +197,7 @@
 
 
 
-11159
+11824
 
 filesystem_adapter.rb
 file
@@ -205,10 +205,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-4acd04cfa5dac0e54a35b8ef4a565217
-2011-02-24T05:58:59.661399Z
-4941
+2011-06-06T13:20:53.000000Z
+23ac49fabb89c7578c173ef09c7f280f
+2011-05-21T02:17:34.152882Z
+5864
 tmaruyama
 has-props
 
@@ -231,7 +231,7 @@
 
 
 
-4266
+4409
 
 cvs_adapter.rb
 file
@@ -239,10 +239,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-a3914eff33df4b5a05a108945137360b
-2011-03-03T05:32:33.802461Z
-4992
+2011-06-06T13:20:53.000000Z
+0c56303ba5340dfff7860be537a1ccc1
+2011-05-21T02:18:53.346845Z
+5866
 tmaruyama
 has-props
 
@@ -265,7 +265,7 @@
 
 
 
-14573
+16766
 
 darcs_adapter.rb
 file
@@ -273,10 +273,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-23725596dd2797f4dcdd5336e715c59a
-2011-03-03T05:32:33.802461Z
-4992
+2011-06-06T13:20:53.000000Z
+f039e19c659f52d26c9be8a566b90539
+2011-05-06T12:57:54.181968Z
+5669
 tmaruyama
 has-props
 
@@ -299,5 +299,5 @@
 
 
 
-8925
+8935
 
--- a/lib/redmine/scm/adapters/.svn/text-base/abstract_adapter.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/abstract_adapter.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -90,12 +90,16 @@
         def url
           @url
         end
-      
+
+        def path_encoding
+          nil
+        end
+
         # get info about the svn repository
         def info
           return nil
         end
-        
+
         # Returns the entry identified by path and revision identifier
         # or nil if entry doesn't exist in the repository
         def entry(path=nil, identifier=nil)
@@ -111,10 +115,10 @@
             es ? es.detect {|e| e.name == search_name} : nil
           end
         end
-        
+
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
-        def entries(path=nil, identifier=nil)
+        def entries(path=nil, identifier=nil, options={})
           return nil
         end
 
@@ -122,30 +126,30 @@
           return nil
         end
 
-        def tags 
+        def tags
           return nil
         end
 
         def default_branch
           return nil
         end
-        
+
         def properties(path, identifier=nil)
           return nil
         end
-    
+
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
           return nil
         end
-        
+
         def diff(path, identifier_from, identifier_to=nil)
           return nil
         end
-        
+
         def cat(path, identifier=nil)
           return nil
         end
-        
+
         def with_leading_slash(path)
           path ||= ''
           (path[0,1]!="/") ? "/#{path}" : path
@@ -175,7 +179,7 @@
           info = self.info
           info ? info.root_url : nil
         end
-        
+
         def target(path)
           path ||= ''
           base = path.match(/^\//) ? root_url : url
@@ -223,7 +227,7 @@
           q = (Redmine::Platform.mswin? ? '"' : "'")
           cmd.to_s.gsub(/(\-\-(password|username))\s+(#{q}[^#{q}]+#{q}|[^#{q}]\S+)/, '\\1 xxxx')
         end
-        
+
         def strip_credential(cmd)
           self.class.strip_credential(cmd)
         end
@@ -242,7 +246,7 @@
 
       class Entries < Array
         def sort_by_name
-          sort {|x,y| 
+          sort {|x,y|
             if x.kind == y.kind
               x.name.to_s <=> y.name.to_s
             else
@@ -250,12 +254,12 @@
             end
           }
         end
-        
+
         def revisions
           revisions ||= Revisions.new(collect{|entry| entry.lastrev}.compact)
         end
       end
-      
+
       class Info
         attr_accessor :root_url, :lastrev
         def initialize(attributes={})
@@ -263,7 +267,7 @@
           self.lastrev = attributes[:lastrev]
         end
       end
-      
+
       class Entry
         attr_accessor :name, :path, :kind, :size, :lastrev
         def initialize(attributes={})
@@ -273,20 +277,20 @@
           self.size = attributes[:size].to_i if attributes[:size]
           self.lastrev = attributes[:lastrev]
         end
-        
+
         def is_file?
           'file' == self.kind
         end
-        
+
         def is_dir?
           'dir' == self.kind
         end
-        
+
         def is_text?
           Redmine::MimeType.is_type?('text', name)
         end
       end
-      
+
       class Revisions < Array
         def latest
           sort {|x,y|
@@ -296,53 +300,48 @@
               0
             end
           }.last
-        end 
+        end
       end
-      
+
       class Revision
-        attr_accessor :scmid, :name, :author, :time, :message, :paths, :revision, :branch
-        attr_writer :identifier
+        attr_accessor :scmid, :name, :author, :time, :message,
+                      :paths, :revision, :branch, :identifier
 
         def initialize(attributes={})
           self.identifier = attributes[:identifier]
-          self.scmid = attributes[:scmid]
-          self.name = attributes[:name] || self.identifier
-          self.author = attributes[:author]
-          self.time = attributes[:time]
-          self.message = attributes[:message] || ""
-          self.paths = attributes[:paths]
-          self.revision = attributes[:revision]
-          self.branch = attributes[:branch]
-        end
-
-        # Returns the identifier of this revision; see also Changeset model
-        def identifier
-          (@identifier || revision).to_s
+          self.scmid      = attributes[:scmid]
+          self.name       = attributes[:name] || self.identifier
+          self.author     = attributes[:author]
+          self.time       = attributes[:time]
+          self.message    = attributes[:message] || ""
+          self.paths      = attributes[:paths]
+          self.revision   = attributes[:revision]
+          self.branch     = attributes[:branch]
         end
 
         # Returns the readable identifier.
         def format_identifier
-          identifier
+          self.identifier.to_s
         end
       end
 
       class Annotate
         attr_reader :lines, :revisions
-        
+
         def initialize
           @lines = []
           @revisions = []
         end
-        
+
         def add_line(line, revision)
           @lines << line
           @revisions << revision
         end
-        
+
         def content
           content = lines.join("\n")
         end
-        
+
         def empty?
           lines.empty?
         end
--- a/lib/redmine/scm/adapters/.svn/text-base/bazaar_adapter.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/bazaar_adapter.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -78,12 +78,12 @@
 
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
-        def entries(path=nil, identifier=nil)
+        def entries(path=nil, identifier=nil, options={})
           path ||= ''
           entries = Entries.new
           cmd = "#{self.class.sq_bin} ls -v --show-ids"
-          identifier = -1 unless identifier && identifier.to_i > 0 
-          cmd << " -r#{identifier.to_i}" 
+          identifier = -1 unless identifier && identifier.to_i > 0
+          cmd << " -r#{identifier.to_i}"
           cmd << " #{target(path)}"
           shellout(cmd) do |io|
             prefix = "#{url}/#{path}".gsub('\\', '/')
@@ -120,7 +120,6 @@
                 parsing = nil
               else
                 next unless revision
-                
                 if line =~ /^revno: (\d+)($|\s\[merge\]$)/
                   revision.identifier = $1.to_i
                 elsif line =~ /^committer: (.+)$/
@@ -168,7 +167,7 @@
         def diff(path, identifier_from, identifier_to=nil)
           path ||= ''
           if identifier_to
-            identifier_to = identifier_to.to_i 
+            identifier_to = identifier_to.to_i
           else
             identifier_to = identifier_from.to_i - 1
           end
@@ -209,7 +208,13 @@
             identifier = nil
             io.each_line do |line|
               next unless line =~ %r{^(\d+) ([^|]+)\| (.*)$}
-              blame.add_line($3.rstrip, Revision.new(:identifier => $1.to_i, :author => $2.strip))
+              rev = $1
+              blame.add_line($3.rstrip,
+                 Revision.new(
+                  :identifier => rev,
+                  :revision   => rev,
+                  :author     => $2.strip
+                  ))
             end
           end
           return nil if $? && $?.exitstatus != 0
--- a/lib/redmine/scm/adapters/.svn/text-base/cvs_adapter.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/cvs_adapter.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -5,12 +5,12 @@
 # modify it under the terms of the 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.
@@ -25,6 +25,9 @@
         # CVS executable name
         CVS_BIN = Redmine::Configuration['scm_cvs_command'] || "cvs"
 
+        # raised if scm command exited with error, e.g. unknown revision.
+        class ScmCommandAborted < CommandFailed; end
+
         class << self
           def client_command
             @@bin    ||= CVS_BIN
@@ -58,26 +61,25 @@
         end
 
         # Guidelines for the input:
-        #  url -> the project-path, relative to the cvsroot (eg. module name)
+        #  url      -> the project-path, relative to the cvsroot (eg. module name)
         #  root_url -> the good old, sometimes damned, CVSROOT
-        #  login -> unnecessary
+        #  login    -> unnecessary
         #  password -> unnecessary too
         def initialize(url, root_url=nil, login=nil, password=nil,
                        path_encoding=nil)
-          @url = url
-          @login = login if login && !login.empty?
+          @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding
+          @url      = url
+          # TODO: better Exception here (IllegalArgumentException)
+          raise CommandFailed if root_url.blank?
+          @root_url  = root_url
+
+          # These are unused.
+          @login    = login if login && !login.empty?
           @password = (password || "") if @login
-          #TODO: better Exception here (IllegalArgumentException)
-          raise CommandFailed if root_url.blank?
-          @root_url = root_url
         end
 
-        def root_url
-          @root_url
-        end
-
-        def url
-          @url
+        def path_encoding
+          @path_encoding
         end
 
         def info
@@ -92,43 +94,59 @@
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
         # this method is used by the repository-browser (aka LIST)
-        def entries(path=nil, identifier=nil)
+        def entries(path=nil, identifier=nil, options={})
           logger.debug "<cvs> entries '#{path}' with identifier '#{identifier}'"
-          path_with_project="#{url}#{with_leading_slash(path)}"
+          path_locale = scm_iconv(@path_encoding, 'UTF-8', path)
+          path_locale.force_encoding("ASCII-8BIT") if path_locale.respond_to?(:force_encoding)
           entries = Entries.new
-          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rls -e"
-          cmd << " -D \"#{time_to_cvstime(identifier)}\"" if identifier
-          cmd << " #{shell_quote path_with_project}"
-          shellout(cmd) do |io|
-            io.each_line(){|line|
-              fields=line.chop.split('/',-1)
+          cmd_args = %w|-q rls -e|
+          cmd_args << "-D" << time_to_cvstime_rlog(identifier) if identifier
+          cmd_args << path_with_proj(path)
+          scm_cmd(*cmd_args) do |io|
+            io.each_line() do |line|
+              fields = line.chop.split('/',-1)
               logger.debug(">>InspectLine #{fields.inspect}")
-
               if fields[0]!="D"
-                entries << Entry.new({:name => fields[-5],
+                time = nil
+                # Thu Dec 13 16:27:22 2007
+                time_l = fields[-3].split(' ')
+                if time_l.size == 5 && time_l[4].length == 4
+                  begin
+                    time = Time.parse(
+                             "#{time_l[1]} #{time_l[2]} #{time_l[3]} GMT #{time_l[4]}")
+                  rescue
+                  end
+                end
+                entries << Entry.new(
+                 {
+                  :name => scm_iconv('UTF-8', @path_encoding, fields[-5]),
                   #:path => fields[-4].include?(path)?fields[-4]:(path + "/"+ fields[-4]),
-                  :path => "#{path}/#{fields[-5]}",
+                  :path => scm_iconv('UTF-8', @path_encoding, "#{path_locale}/#{fields[-5]}"),
                   :kind => 'file',
                   :size => nil,
-                  :lastrev => Revision.new({
-                    :revision => fields[-4],
-                    :name => fields[-4],
-                    :time => Time.parse(fields[-3]),
-                    :author => ''
+                  :lastrev => Revision.new(
+                      {
+                        :revision => fields[-4],
+                        :name     => scm_iconv('UTF-8', @path_encoding, fields[-4]),
+                        :time     => time,
+                        :author   => ''
+                      })
                   })
-                })
               else
-                entries << Entry.new({:name => fields[1],
-                  :path => "#{path}/#{fields[1]}",
-                  :kind => 'dir',
-                  :size => nil,
+                entries << Entry.new(
+                 {
+                  :name    => scm_iconv('UTF-8', @path_encoding, fields[1]),
+                  :path    => scm_iconv('UTF-8', @path_encoding, "#{path_locale}/#{fields[1]}"),
+                  :kind    => 'dir',
+                  :size    => nil,
                   :lastrev => nil
-                })
+                 })
               end
-            }
+            end
           end
-          return nil if $? && $?.exitstatus != 0
           entries.sort_by_name
+        rescue ScmCommandAborted
+          nil
         end
 
         STARTLOG="----------------------------"
@@ -138,111 +156,106 @@
         # in the repository. both identifier have to be dates or nil.
         # these method returns nothing but yield every result in block
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={}, &block)
-          logger.debug "<cvs> revisions path:'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}"
-
-          path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rlog"
-          cmd << " -d\">#{time_to_cvstime_rlog(identifier_from)}\"" if identifier_from
-          cmd << " #{shell_quote path_with_project}"
-          shellout(cmd) do |io|
-            state="entry_start"
-            
-            commit_log=String.new
-            revision=nil
-            date=nil
-            author=nil
-            entry_path=nil
-            entry_name=nil
-            file_state=nil
-            branch_map=nil
-            
+          path_with_project_utf8   = path_with_proj(path)
+          path_with_project_locale = scm_iconv(@path_encoding, 'UTF-8', path_with_project_utf8)
+          logger.debug "<cvs> revisions path:" +
+              "'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}"
+          cmd_args = %w|-q rlog|
+          cmd_args << "-d" << ">#{time_to_cvstime_rlog(identifier_from)}" if identifier_from
+          cmd_args << path_with_project_utf8
+          scm_cmd(*cmd_args) do |io|
+            state      = "entry_start"
+            commit_log = String.new
+            revision   = nil
+            date       = nil
+            author     = nil
+            entry_path = nil
+            entry_name = nil
+            file_state = nil
+            branch_map = nil
             io.each_line() do |line|
-              
-              if state!="revision" && /^#{ENDLOG}/ =~ line
-                commit_log=String.new
-                revision=nil
-                state="entry_start"
+              if state != "revision" && /^#{ENDLOG}/ =~ line
+                commit_log = String.new
+                revision   = nil
+                state      = "entry_start"
               end
-              
-              if state=="entry_start"
-                branch_map=Hash.new
-                if /^RCS file: #{Regexp.escape(root_url_path)}\/#{Regexp.escape(path_with_project)}(.+),v$/ =~ line
+              if state == "entry_start"
+                branch_map = Hash.new
+                if /^RCS file: #{Regexp.escape(root_url_path)}\/#{Regexp.escape(path_with_project_locale)}(.+),v$/ =~ line
                   entry_path = normalize_cvs_path($1)
                   entry_name = normalize_path(File.basename($1))
                   logger.debug("Path #{entry_path} <=> Name #{entry_name}")
                 elsif /^head: (.+)$/ =~ line
                   entry_headRev = $1 #unless entry.nil?
                 elsif /^symbolic names:/ =~ line
-                  state="symbolic" #unless entry.nil?
+                  state = "symbolic" #unless entry.nil?
                 elsif /^#{STARTLOG}/ =~ line
-                  commit_log=String.new
-                  state="revision"
-                end  
+                  commit_log = String.new
+                  state      = "revision"
+                end
                 next
-              elsif state=="symbolic"
-                if /^(.*):\s(.*)/ =~ (line.strip) 
-                  branch_map[$1]=$2
+              elsif state == "symbolic"
+                if /^(.*):\s(.*)/ =~ (line.strip)
+                  branch_map[$1] = $2
                 else
-                  state="tags"
+                  state = "tags"
                   next
-                end          
-              elsif state=="tags"
+                end
+              elsif state == "tags"
                 if /^#{STARTLOG}/ =~ line
                   commit_log = ""
-                  state="revision"
+                  state = "revision"
                 elsif /^#{ENDLOG}/ =~ line
-                  state="head"
+                  state = "head"
                 end
                 next
-              elsif state=="revision"
+              elsif state == "revision"
                 if /^#{ENDLOG}/ =~ line || /^#{STARTLOG}/ =~ line
                   if revision
-
-                    revHelper=CvsRevisionHelper.new(revision)
-                    revBranch="HEAD"
-                    
-                    branch_map.each() do |branch_name,branch_point|
+                    revHelper = CvsRevisionHelper.new(revision)
+                    revBranch = "HEAD"
+                    branch_map.each() do |branch_name, branch_point|
                       if revHelper.is_in_branch_with_symbol(branch_point)
-                        revBranch=branch_name
+                        revBranch = branch_name
                       end
                     end
-                    
                     logger.debug("********** YIELD Revision #{revision}::#{revBranch}")
-                    
                     yield Revision.new({
-                      :time => date,
-                      :author => author,
-                      :message=>commit_log.chomp,
+                      :time    => date,
+                      :author  => author,
+                      :message => commit_log.chomp,
                       :paths => [{
                         :revision => revision,
-                        :branch=> revBranch,
-                        :path=>entry_path,
-                        :name=>entry_name,
-                        :kind=>'file',
-                        :action=>file_state
-                      }]
-                    })
+                        :branch   => revBranch,
+                        :path     => scm_iconv('UTF-8', @path_encoding, entry_path),
+                        :name     => scm_iconv('UTF-8', @path_encoding, entry_name),
+                        :kind     => 'file',
+                        :action   => file_state
+                           }]
+                         })
                   end
-
-                  commit_log=String.new
-                  revision=nil
-                  
+                  commit_log = String.new
+                  revision   = nil
                   if /^#{ENDLOG}/ =~ line
-                    state="entry_start"
+                    state = "entry_start"
                   end
                   next
                 end
 
                 if /^branches: (.+)$/ =~ line
-                  #TODO: version.branch = $1
+                  # TODO: version.branch = $1
                 elsif /^revision (\d+(?:\.\d+)+).*$/ =~ line
-                  revision = $1   
+                  revision = $1
                 elsif /^date:\s+(\d+.\d+.\d+\s+\d+:\d+:\d+)/ =~ line
-                  date      = Time.parse($1)
-                  author    = /author: ([^;]+)/.match(line)[1]
-                  file_state     = /state: ([^;]+)/.match(line)[1]
-                  #TODO: linechanges only available in CVS.... maybe a feature our SVN implementation. i'm sure, they are
-                  #    useful for stats or something else
+                  date       = Time.parse($1)
+                  line_utf8    = scm_iconv('UTF-8', options[:log_encoding], line)
+                  author_utf8  = /author: ([^;]+)/.match(line_utf8)[1]
+                  author       = scm_iconv(options[:log_encoding], 'UTF-8', author_utf8)
+                  file_state   = /state: ([^;]+)/.match(line)[1]
+                  # TODO:
+                  #    linechanges only available in CVS....
+                  #    maybe a feature our SVN implementation.
+                  #    I'm sure, they are useful for stats or something else
                   #                linechanges =/lines: \+(\d+) -(\d+)/.match(line)
                   #                unless linechanges.nil?
                   #                  version.line_plus  = linechanges[1]
@@ -257,52 +270,66 @@
               end
             end
           end
+        rescue ScmCommandAborted
+          Revisions.new
         end
 
         def diff(path, identifier_from, identifier_to=nil)
-          logger.debug "<cvs> diff path:'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}"
-          path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rdiff -u -r#{identifier_to} -r#{identifier_from} #{shell_quote path_with_project}"
+          logger.debug "<cvs> diff path:'#{path}'" +
+              ",identifier_from #{identifier_from}, identifier_to #{identifier_to}"
+          cmd_args = %w|rdiff -u|
+          cmd_args << "-r#{identifier_to}"
+          cmd_args << "-r#{identifier_from}"
+          cmd_args << path_with_proj(path)
           diff = []
-          shellout(cmd) do |io|
+          scm_cmd(*cmd_args) do |io|
             io.each_line do |line|
               diff << line
             end
           end
-          return nil if $? && $?.exitstatus != 0
           diff
+        rescue ScmCommandAborted
+          nil
         end
 
         def cat(path, identifier=nil)
           identifier = (identifier) ? identifier : "HEAD"
           logger.debug "<cvs> cat path:'#{path}',identifier #{identifier}"
-          path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} co"
-          cmd << " -D \"#{time_to_cvstime(identifier)}\"" if identifier
-          cmd << " -p #{shell_quote path_with_project}"
+          cmd_args = %w|-q co|
+          cmd_args << "-D" << time_to_cvstime(identifier) if identifier
+          cmd_args << "-p" << path_with_proj(path)
           cat = nil
-          shellout(cmd) do |io|
+          scm_cmd(*cmd_args) do |io|
             io.binmode
             cat = io.read
           end
-          return nil if $? && $?.exitstatus != 0
           cat
+        rescue ScmCommandAborted
+          nil
         end
 
         def annotate(path, identifier=nil)
-          identifier = (identifier) ? identifier.to_i : "HEAD"
+          identifier = (identifier) ? identifier : "HEAD"
           logger.debug "<cvs> annotate path:'#{path}',identifier #{identifier}"
-          path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rannotate -r#{identifier} #{shell_quote path_with_project}"
+          cmd_args = %w|rannotate|
+          cmd_args << "-D" << time_to_cvstime(identifier) if identifier
+          cmd_args << path_with_proj(path)
           blame = Annotate.new
-          shellout(cmd) do |io|
+          scm_cmd(*cmd_args) do |io|
             io.each_line do |line|
               next unless line =~ %r{^([\d\.]+)\s+\(([^\)]+)\s+[^\)]+\):\s(.*)$}
-              blame.add_line($3.rstrip, Revision.new(:revision => $1, :author => $2.strip))
+              blame.add_line(
+                  $3.rstrip,
+                  Revision.new(
+                    :revision   => $1,
+                    :identifier => nil,
+                    :author     => $2.strip
+                    ))
             end
           end
-          return nil if $? && $?.exitstatus != 0
           blame
+        rescue ScmCommandAborted
+          Annotate.new
         end
 
         private
@@ -317,12 +344,12 @@
         # convert a date/time into the CVS-format
         def time_to_cvstime(time)
           return nil if time.nil?
-          return Time.now if time == 'HEAD'
-          
+          time = Time.now if time == 'HEAD'
+
           unless time.kind_of? Time
             time = Time.parse(time)
           end
-          return time.strftime("%Y-%m-%d %H:%M:%S")
+          return time_to_cvstime_rlog(time)
         end
 
         def time_to_cvstime_rlog(time)
@@ -330,77 +357,104 @@
           t1 = time.clone.localtime
           return t1.strftime("%Y-%m-%d %H:%M:%S")
         end
-          
+
         def normalize_cvs_path(path)
           normalize_path(path.gsub(/Attic\//,''))
         end
-          
+
         def normalize_path(path)
           path.sub(/^(\/)*(.*)/,'\2').sub(/(.*)(,v)+/,'\1')
-        end   
-      end  
-  
+        end
+
+        def path_with_proj(path)
+          "#{url}#{with_leading_slash(path)}"
+        end
+        private :path_with_proj
+
+        class Revision < Redmine::Scm::Adapters::Revision
+          # Returns the readable identifier
+          def format_identifier
+            revision.to_s
+          end
+        end
+
+        def scm_cmd(*args, &block)
+          full_args = [CVS_BIN, '-d', root_url]
+          full_args += args
+          full_args_locale = []
+          full_args.map do |e|
+            full_args_locale << scm_iconv(@path_encoding, 'UTF-8', e)
+          end
+          ret = shellout(full_args_locale.map { |e| shell_quote e.to_s }.join(' '), &block)
+          if $? && $?.exitstatus != 0
+            raise ScmCommandAborted, "cvs exited with non-zero status: #{$?.exitstatus}"
+          end
+          ret
+        end
+        private :scm_cmd
+      end
+
       class CvsRevisionHelper
         attr_accessor :complete_rev, :revision, :base, :branchid
-        
+
         def initialize(complete_rev)
           @complete_rev = complete_rev
           parseRevision()
         end
-    
+
         def branchPoint
           return @base
         end
-      
+
         def branchVersion
           if isBranchRevision
             return @base+"."+@branchid
           end
           return @base
         end
-      
+
         def isBranchRevision
           !@branchid.nil?
         end
-        
+
         def prevRev
-          unless @revision==0
-            return buildRevision(@revision-1)
+          unless @revision == 0
+            return buildRevision( @revision - 1 )
           end
-          return buildRevision(@revision)    
+          return buildRevision( @revision )
         end
-        
+
         def is_in_branch_with_symbol(branch_symbol)
-          bpieces=branch_symbol.split(".")
-          branch_start="#{bpieces[0..-3].join(".")}.#{bpieces[-1]}"
-          return (branchVersion==branch_start)
+          bpieces = branch_symbol.split(".")
+          branch_start = "#{bpieces[0..-3].join(".")}.#{bpieces[-1]}"
+          return ( branchVersion == branch_start )
         end
-    
+
         private
         def buildRevision(rev)
-          if rev== 0
+          if rev == 0
             if @branchid.nil?
-              @base+".0"
+              @base + ".0"
             else
               @base
             end
-          elsif @branchid.nil? 
-            @base+"."+rev.to_s
+          elsif @branchid.nil?
+            @base + "." + rev.to_s
           else
-            @base+"."+@branchid+"."+rev.to_s
+            @base + "." + @branchid + "." + rev.to_s
           end
         end
-        
+
         # Interpretiert die cvs revisionsnummern wie z.b. 1.14 oder 1.3.0.15
         def parseRevision()
-          pieces=@complete_rev.split(".")
-          @revision=pieces.last.to_i
-          baseSize=1
-          baseSize+=(pieces.size/2)
-          @base=pieces[0..-baseSize].join(".")
+          pieces = @complete_rev.split(".")
+          @revision = pieces.last.to_i
+          baseSize = 1
+          baseSize += (pieces.size / 2)
+          @base = pieces[0..-baseSize].join(".")
           if baseSize > 2
-            @branchid=pieces[-2]
-          end     
+            @branchid = pieces[-2]
+          end
         end
       end
     end
--- a/lib/redmine/scm/adapters/.svn/text-base/darcs_adapter.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/darcs_adapter.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -76,7 +76,7 @@
 
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
-        def entries(path=nil, identifier=nil)
+        def entries(path=nil, identifier=nil, options={})
           path_prefix = (path.blank? ? '' : "#{path}/")
           if path.blank?
             path = ( self.class.client_version_above?([2, 2, 0]) ? @url : '.' )
--- a/lib/redmine/scm/adapters/.svn/text-base/filesystem_adapter.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/filesystem_adapter.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# RedMine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # FileSystem adapter
 # File written by Paul Rivier, at Demotera.
@@ -8,12 +8,12 @@
 # modify it under the terms of the 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.
@@ -35,14 +35,18 @@
         def initialize(url, root_url=nil, login=nil, password=nil,
                        path_encoding=nil)
           @url = with_trailling_slash(url)
-          @path_encoding = path_encoding || 'UTF-8'
+          @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding
+        end
+
+        def path_encoding
+          @path_encoding
         end
 
         def format_path_ends(path, leading=true, trailling=true)
-          path = leading ? with_leading_slash(path) : 
+          path = leading ? with_leading_slash(path) :
             without_leading_slash(path)
-          trailling ? with_trailling_slash(path) : 
-            without_trailling_slash(path) 
+          trailling ? with_trailling_slash(path) :
+            without_trailling_slash(path)
         end
 
         def info
@@ -54,13 +58,15 @@
           return nil
         end
 
-        def entries(path="", identifier=nil)
+        def entries(path="", identifier=nil, options={})
           entries = Entries.new
           trgt_utf8 = target(path)
           trgt = scm_iconv(@path_encoding, 'UTF-8', trgt_utf8)
           Dir.new(trgt).each do |e1|
             e_utf8 = scm_iconv('UTF-8', @path_encoding, e1)
-            relative_path_utf8 = format_path_ends((format_path_ends(path,false,true) + e_utf8),false,false)
+            next if e_utf8.blank?
+            relative_path_utf8 = format_path_ends(
+                (format_path_ends(path,false,true) + e_utf8),false,false)
             t1_utf8 = target(relative_path_utf8)
             t1 = scm_iconv(@path_encoding, 'UTF-8', t1_utf8)
             relative_path = scm_iconv(@path_encoding, 'UTF-8', relative_path_utf8)
@@ -76,7 +82,7 @@
                           :path => utf_8_path,
                           :kind => (File.directory?(t1) ? 'dir' : 'file'),
                           :size => (File.directory?(t1) ? nil : [File.size(t1)].pack('l').unpack('L').first),
-                          :lastrev => 
+                          :lastrev =>
                               Revision.new({:time => (File.mtime(t1)) })
                         })
             end
--- a/lib/redmine/scm/adapters/.svn/text-base/git_adapter.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/git_adapter.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -22,8 +22,6 @@
     module Adapters
       class GitAdapter < AbstractAdapter
 
-        SCM_GIT_REPORT_LAST_COMMIT = true
-
         # Git executable name
         GIT_BIN = Redmine::Configuration['scm_git_command'] || "git"
 
@@ -64,7 +62,11 @@
 
         def initialize(url, root_url=nil, login=nil, password=nil, path_encoding=nil)
           super
-          @flag_report_last_commit = SCM_GIT_REPORT_LAST_COMMIT
+          @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding
+        end
+
+        def path_encoding
+          @path_encoding
         end
 
         def info
@@ -78,59 +80,88 @@
         def branches
           return @branches if @branches
           @branches = []
-          cmd = "#{self.class.sq_bin} --git-dir #{target('')} branch --no-color"
-          shellout(cmd) do |io|
+          cmd_args = %w|branch --no-color|
+          scm_cmd(*cmd_args) do |io|
             io.each_line do |line|
               @branches << line.match('\s*\*?\s*(.*)$')[1]
             end
           end
           @branches.sort!
+        rescue ScmCommandAborted
+          nil
         end
 
         def tags
           return @tags if @tags
-          cmd = "#{self.class.sq_bin} --git-dir #{target('')} tag"
-          shellout(cmd) do |io|
+          cmd_args = %w|tag|
+          scm_cmd(*cmd_args) do |io|
             @tags = io.readlines.sort!.map{|t| t.strip}
           end
+        rescue ScmCommandAborted
+          nil
+        end
+
+        def default_branch
+          bras = self.branches
+          return nil if bras.nil?
+          bras.include?('master') ? 'master' : bras.first
+        end
+
+        def entry(path=nil, identifier=nil)
+          parts = path.to_s.split(%r{[\/\\]}).select {|n| !n.blank?}
+          search_path = parts[0..-2].join('/')
+          search_name = parts[-1]
+          if search_path.blank? && search_name.blank?
+            # Root entry
+            Entry.new(:path => '', :kind => 'dir')
+          else
+            # Search for the entry in the parent directory
+            es = entries(search_path, identifier,
+                         options = {:report_last_commit => false})
+            es ? es.detect {|e| e.name == search_name} : nil
+          end
         end
 
-        def default_branch
-          branches.include?('master') ? 'master' : branches.first
-        end
-
-        def entries(path=nil, identifier=nil)
+        def entries(path=nil, identifier=nil, options={})
           path ||= ''
+          p = scm_iconv(@path_encoding, 'UTF-8', path)
           entries = Entries.new
-          cmd = "#{self.class.sq_bin} --git-dir #{target('')} ls-tree -l "
-          cmd << shell_quote("HEAD:" + path) if identifier.nil?
-          cmd << shell_quote(identifier + ":" + path) if identifier
-          shellout(cmd)  do |io|
+          cmd_args = %w|ls-tree -l|
+          cmd_args << "HEAD:#{p}"          if identifier.nil?
+          cmd_args << "#{identifier}:#{p}" if identifier
+          scm_cmd(*cmd_args) do |io|
             io.each_line do |line|
               e = line.chomp.to_s
               if e =~ /^\d+\s+(\w+)\s+([0-9a-f]{40})\s+([0-9-]+)\t(.+)$/
                 type = $1
-                sha = $2
+                sha  = $2
                 size = $3
                 name = $4
-                full_path = path.empty? ? name : "#{path}/#{name}"
-                entries << Entry.new({:name => name,
-                 :path => full_path,
+                if name.respond_to?(:force_encoding)
+                  name.force_encoding(@path_encoding)
+                end
+                full_path = p.empty? ? name : "#{p}/#{name}"
+                n      = scm_iconv('UTF-8', @path_encoding, name)
+                full_p = scm_iconv('UTF-8', @path_encoding, full_path)
+                entries << Entry.new({:name => n,
+                 :path => full_p,
                  :kind => (type == "tree") ? 'dir' : 'file',
                  :size => (type == "tree") ? nil : size,
-                 :lastrev => @flag_report_last_commit ? lastrev(full_path,identifier) : Revision.new
+                 :lastrev => options[:report_last_commit] ?
+                                 lastrev(full_path, identifier) : Revision.new
                 }) unless entries.detect{|entry| entry.name == name}
               end
             end
           end
-          return nil if $? && $?.exitstatus != 0
           entries.sort_by_name
+        rescue ScmCommandAborted
+          nil
         end
 
         def lastrev(path, rev)
           return nil if path.nil?
           cmd_args = %w|log --no-color --encoding=UTF-8 --date=iso --pretty=fuller --no-merges -n 1|
-          cmd_args << rev if rev 
+          cmd_args << rev if rev
           cmd_args << "--" << path unless path.empty?
           lines = []
           scm_cmd(*cmd_args) { |io| lines = io.readlines }
@@ -141,11 +172,11 @@
 
               Revision.new({
                 :identifier => id,
-                :scmid => id,
-                :author => author, 
-                :time => time,
-                :message => nil, 
-                :paths => nil 
+                :scmid      => id,
+                :author     => author,
+                :time       => time,
+                :message    => nil,
+                :paths      => nil
                 })
           rescue NoMethodError => e
               logger.error("The revision '#{path}' has a wrong format")
@@ -156,7 +187,7 @@
         end
 
         def revisions(path, identifier_from, identifier_to, options={})
-          revisions = Revisions.new
+          revs = Revisions.new
           cmd_args = %w|log --no-color --encoding=UTF-8 --raw --date=iso --pretty=fuller|
           cmd_args << "--reverse" if options[:reverse]
           cmd_args << "--all" if options[:all]
@@ -166,13 +197,12 @@
           from_to << "#{identifier_to}" if identifier_to
           cmd_args << from_to if !from_to.empty?
           cmd_args << "--since=#{options[:since].strftime("%Y-%m-%d %H:%M:%S")}" if options[:since]
-          cmd_args << "--" << path if path && !path.empty?
+          cmd_args << "--" << scm_iconv(@path_encoding, 'UTF-8', path) if path && !path.empty?
 
           scm_cmd *cmd_args do |io|
             files=[]
             changeset = {}
             parsing_descr = 0  #0: not parsing desc or files, 1: parsing desc, 2: parsing files
-            revno = 1
 
             io.each_line do |line|
               if line =~ /^commit ([0-9a-f]{40})$/
@@ -182,20 +212,19 @@
                   parsing_descr = 0
                   revision = Revision.new({
                     :identifier => changeset[:commit],
-                    :scmid => changeset[:commit],
-                    :author => changeset[:author],
-                    :time => Time.parse(changeset[:date]),
-                    :message => changeset[:description],
-                    :paths => files
+                    :scmid      => changeset[:commit],
+                    :author     => changeset[:author],
+                    :time       => Time.parse(changeset[:date]),
+                    :message    => changeset[:description],
+                    :paths      => files
                   })
                   if block_given?
                     yield revision
                   else
-                    revisions << revision
+                    revs << revision
                   end
                   changeset = {}
                   files = []
-                  revno = revno + 1
                 end
                 changeset[:commit] = $1
               elsif (parsing_descr == 0) && line =~ /^(\w+):\s*(.*)$/
@@ -210,73 +239,75 @@
                 parsing_descr = 1
                 changeset[:description] = ""
               elsif (parsing_descr == 1 || parsing_descr == 2) \
-              && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\t(.+)$/
+                  && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\t(.+)$/
                 parsing_descr = 2
-                fileaction = $1
-                filepath = $2
-                files << {:action => fileaction, :path => filepath}
+                fileaction    = $1
+                filepath      = $2
+                p = scm_iconv('UTF-8', @path_encoding, filepath)
+                files << {:action => fileaction, :path => p}
               elsif (parsing_descr == 1 || parsing_descr == 2) \
-              && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\t(.+)$/
+                  && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\t(.+)$/
                 parsing_descr = 2
-                fileaction = $1
-                filepath = $3
-                files << {:action => fileaction, :path => filepath}
+                fileaction    = $1
+                filepath      = $3
+                p = scm_iconv('UTF-8', @path_encoding, filepath)
+                files << {:action => fileaction, :path => p}
               elsif (parsing_descr == 1) && line.chomp.to_s == ""
                 parsing_descr = 2
               elsif (parsing_descr == 1)
                 changeset[:description] << line[4..-1]
               end
-            end 
+            end
 
             if changeset[:commit]
               revision = Revision.new({
                 :identifier => changeset[:commit],
-                :scmid => changeset[:commit],
-                :author => changeset[:author],
-                :time => Time.parse(changeset[:date]),
-                :message => changeset[:description],
-                :paths => files
-              })
-
+                :scmid      => changeset[:commit],
+                :author     => changeset[:author],
+                :time       => Time.parse(changeset[:date]),
+                :message    => changeset[:description],
+                :paths      => files
+                 })
               if block_given?
                 yield revision
               else
-                revisions << revision
+                revs << revision
               end
             end
           end
-          revisions
-        rescue ScmCommandAborted
-          revisions
+          revs
+        rescue ScmCommandAborted => e
+          logger.error("git log #{from_to.to_s} error: #{e.message}")
+          revs
         end
 
         def diff(path, identifier_from, identifier_to=nil)
           path ||= ''
-
+          cmd_args = []
           if identifier_to
-            cmd = "#{self.class.sq_bin} --git-dir #{target('')} diff --no-color #{shell_quote identifier_to} #{shell_quote identifier_from}" 
+            cmd_args << "diff" << "--no-color" <<  identifier_to << identifier_from
           else
-            cmd = "#{self.class.sq_bin} --git-dir #{target('')} show --no-color #{shell_quote identifier_from}"
+            cmd_args << "show" << "--no-color" << identifier_from
           end
-
-          cmd << " -- #{shell_quote path}" unless path.empty?
+          cmd_args << "--" <<  scm_iconv(@path_encoding, 'UTF-8', path) unless path.empty?
           diff = []
-          shellout(cmd) do |io|
+          scm_cmd *cmd_args do |io|
             io.each_line do |line|
               diff << line
             end
           end
-          return nil if $? && $?.exitstatus != 0
           diff
+        rescue ScmCommandAborted
+          nil
         end
-        
+
         def annotate(path, identifier=nil)
           identifier = 'HEAD' if identifier.blank?
-          cmd = "#{self.class.sq_bin} --git-dir #{target('')} blame -p #{shell_quote identifier} -- #{shell_quote path}"
+          cmd_args = %w|blame|
+          cmd_args << "-p" << identifier << "--" <<  scm_iconv(@path_encoding, 'UTF-8', path)
           blame = Annotate.new
           content = nil
-          shellout(cmd) { |io| io.binmode; content = io.read }
-          return nil if $? && $?.exitstatus != 0
+          scm_cmd(*cmd_args) { |io| io.binmode; content = io.read }
           # git annotates binary files
           return nil if content.is_binary_data?
           identifier = ''
@@ -288,26 +319,35 @@
             elsif line =~ /^author (.+)/
               authors_by_commit[identifier] = $1.strip
             elsif line =~ /^\t(.*)/
-              blame.add_line($1, Revision.new(:identifier => identifier, :author => authors_by_commit[identifier]))
+              blame.add_line($1, Revision.new(
+                                    :identifier => identifier,
+                                    :revision   => identifier,
+                                    :scmid      => identifier,
+                                    :author     => authors_by_commit[identifier]
+                                    ))
               identifier = ''
               author = ''
             end
           end
           blame
+        rescue ScmCommandAborted
+          nil
         end
 
         def cat(path, identifier=nil)
           if identifier.nil?
             identifier = 'HEAD'
           end
-          cmd = "#{self.class.sq_bin} --git-dir #{target('')} show --no-color #{shell_quote(identifier + ':' + path)}"
+          cmd_args = %w|show --no-color|
+          cmd_args << "#{identifier}:#{scm_iconv(@path_encoding, 'UTF-8', path)}"
           cat = nil
-          shellout(cmd) do |io|
+          scm_cmd(*cmd_args) do |io|
             io.binmode
             cat = io.read
           end
-          return nil if $? && $?.exitstatus != 0
           cat
+        rescue ScmCommandAborted
+          nil
         end
 
         class Revision < Redmine::Scm::Adapters::Revision
@@ -320,6 +360,10 @@
         def scm_cmd(*args, &block)
           repo_path = root_url || url
           full_args = [GIT_BIN, '--git-dir', repo_path]
+          if self.class.client_version_above?([1, 7, 2])
+            full_args << '-c' << 'core.quotepath=false'
+            full_args << '-c' << 'log.decorate=no'
+          end
           full_args += args
           ret = shellout(full_args.map { |e| shell_quote e.to_s }.join(' '), &block)
           if $? && $?.exitstatus != 0
--- a/lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -47,7 +47,7 @@
           end
 
           def client_available
-            !client_version.empty?
+            client_version_above?([0, 9, 5])
           end
 
           def hgversion
@@ -83,7 +83,11 @@
 
         def initialize(url, root_url=nil, login=nil, password=nil, path_encoding=nil)
           super
-          @path_encoding = path_encoding || 'UTF-8'
+          @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding
+        end
+
+        def path_encoding
+          @path_encoding
         end
 
         def info
@@ -118,7 +122,7 @@
         end
 
         def summary
-          return @summary if @summary 
+          return @summary if @summary
           hg 'rhsummary' do |io|
             output = io.read
             if output.respond_to?(:force_encoding)
@@ -132,7 +136,7 @@
         end
         private :summary
 
-        def entries(path=nil, identifier=nil)
+        def entries(path=nil, identifier=nil, options={})
           p1 = scm_iconv(@path_encoding, 'UTF-8', path)
           manifest = hg('rhmanifest', '-r', CGI.escape(hgrev(identifier)),
                         CGI.escape(without_leading_slash(p1.to_s))) do |io|
@@ -193,30 +197,39 @@
             rescue
             end
           end
-
           as_ary(log['logentry']).each do |le|
             cpalist = as_ary(le['paths']['path-copied']).map do |e|
-              [e['__content__'], e['copyfrom-path']].map { |s| CGI.unescape(s) }
+              [e['__content__'], e['copyfrom-path']].map do |s|
+                scm_iconv('UTF-8', @path_encoding, CGI.unescape(s))
+              end
             end
             cpmap = Hash[*cpalist.flatten]
-
             paths = as_ary(le['paths']['path']).map do |e|
               p = scm_iconv('UTF-8', @path_encoding, CGI.unescape(e['__content__']) )
-              {:action => e['action'], :path => with_leading_slash(p),
-               :from_path => (cpmap.member?(p) ? with_leading_slash(cpmap[p]) : nil),
-               :from_revision => (cpmap.member?(p) ? le['revision'] : nil)}
+              {:action        => e['action'],
+               :path          => with_leading_slash(p),
+               :from_path     => (cpmap.member?(p) ? with_leading_slash(cpmap[p]) : nil),
+               :from_revision => (cpmap.member?(p) ? le['node'] : nil)}
             end.sort { |a, b| a[:path] <=> b[:path] }
-
             yield Revision.new(:revision => le['revision'],
-                               :scmid => le['node'],
-                               :author => (le['author']['__content__'] rescue ''),
-                               :time => Time.parse(le['date']['__content__']).localtime,
-                               :message => le['msg']['__content__'],
-                               :paths => paths)
+                               :scmid    => le['node'],
+                               :author   => (le['author']['__content__'] rescue ''),
+                               :time     => Time.parse(le['date']['__content__']),
+                               :message  => le['msg']['__content__'],
+                               :paths    => paths)
           end
           self
         end
 
+        # Returns list of nodes in the specified branch
+        def nodes_in_branch(branch, options={})
+          hg_args = ['rhlog', '--template', '{node|short}\n', '--rhbranch', CGI.escape(branch)]
+          hg_args << '--from' << CGI.escape(branch)
+          hg_args << '--to'   << '0'
+          hg_args << '--limit' << options[:limit] if options[:limit]
+          hg(*hg_args) { |io| io.readlines.map { |e| e.chomp } }
+        end
+
         def diff(path, identifier_from, identifier_to=nil)
           hg_args = %w|rhdiff|
           if identifier_to
@@ -241,7 +254,7 @@
 
         def cat(path, identifier=nil)
           p = CGI.escape(scm_iconv(@path_encoding, 'UTF-8', path))
-          hg 'rhcat', '-r', hgrev(identifier), hgtarget(p) do |io|
+          hg 'rhcat', '-r', CGI.escape(hgrev(identifier)), hgtarget(p) do |io|
             io.binmode
             io.read
           end
@@ -252,7 +265,7 @@
         def annotate(path, identifier=nil)
           p = CGI.escape(scm_iconv(@path_encoding, 'UTF-8', path))
           blame = Annotate.new
-          hg 'rhannotate', '-ncu', '-r', hgrev(identifier), hgtarget(p) do |io|
+          hg 'rhannotate', '-ncu', '-r', CGI.escape(hgrev(identifier)), hgtarget(p) do |io|
             io.each_line do |line|
               line.force_encoding('ASCII-8BIT') if line.respond_to?(:force_encoding)
               next unless line =~ %r{^([^:]+)\s(\d+)\s([0-9a-f]+):\s(.*)$}
--- a/lib/redmine/scm/adapters/.svn/text-base/subversion_adapter.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/subversion_adapter.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,282 +1,291 @@
-# Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the 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.
-
-require 'redmine/scm/adapters/abstract_adapter'
-require 'uri'
-
-module Redmine
-  module Scm
-    module Adapters
-      class SubversionAdapter < AbstractAdapter
-
-        # SVN executable name
-        SVN_BIN = Redmine::Configuration['scm_subversion_command'] || "svn"
-
-        class << self
-          def client_command
-            @@bin    ||= SVN_BIN
-          end
-
-          def sq_bin
-            @@sq_bin ||= shell_quote(SVN_BIN)
-          end
-
-          def client_version
-            @@client_version ||= (svn_binary_version || [])
-          end
-
-          def client_available
-            !client_version.empty?
-          end
-
-          def svn_binary_version
-            scm_version = scm_version_from_command_line.dup
-            if scm_version.respond_to?(:force_encoding)
-              scm_version.force_encoding('ASCII-8BIT')
-            end
-            if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)})
-              m[2].scan(%r{\d+}).collect(&:to_i)
-            end
-          end
-
-          def scm_version_from_command_line
-            shellout("#{sq_bin} --version") { |io| io.read }.to_s
-          end
-        end
-
-        # Get info about the svn repository
-        def info
-          cmd = "#{self.class.sq_bin} info --xml #{target}"
-          cmd << credentials_string
-          info = nil
-          shellout(cmd) do |io|
-            output = io.read
-            if output.respond_to?(:force_encoding)
-              output.force_encoding('UTF-8')
-            end
-            begin
-              doc = ActiveSupport::XmlMini.parse(output)
-              #root_url = doc.elements["info/entry/repository/root"].text          
-              info = Info.new({:root_url => doc['info']['entry']['repository']['root']['__content__'],
-                               :lastrev => Revision.new({
-                                 :identifier => doc['info']['entry']['commit']['revision'],
-                                 :time => Time.parse(doc['info']['entry']['commit']['date']['__content__']).localtime,
-                                 :author => (doc['info']['entry']['commit']['author'] ? doc['info']['entry']['commit']['author']['__content__'] : "")
-                               })
-                             })
-            rescue
-            end
-          end
-          return nil if $? && $?.exitstatus != 0
-          info
-        rescue CommandFailed
-          return nil
-        end
-
-        # Returns an Entries collection
-        # or nil if the given path doesn't exist in the repository
-        def entries(path=nil, identifier=nil)
-          path ||= ''
-          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          entries = Entries.new
-          cmd = "#{self.class.sq_bin} list --xml #{target(path)}@#{identifier}"
-          cmd << credentials_string
-          shellout(cmd) do |io|
-            output = io.read
-            if output.respond_to?(:force_encoding)
-              output.force_encoding('UTF-8')
-            end
-            begin
-              doc = ActiveSupport::XmlMini.parse(output)
-              each_xml_element(doc['lists']['list'], 'entry') do |entry|
-                commit = entry['commit']
-                commit_date = commit['date']
-                # Skip directory if there is no commit date (usually that
-                # means that we don't have read access to it)
-                next if entry['kind'] == 'dir' && commit_date.nil?
-                name = entry['name']['__content__']
-                entries << Entry.new({:name => URI.unescape(name),
-                            :path => ((path.empty? ? "" : "#{path}/") + name),
-                            :kind => entry['kind'],
-                            :size => ((s = entry['size']) ? s['__content__'].to_i : nil),
-                            :lastrev => Revision.new({
-                              :identifier => commit['revision'],
-                              :time => Time.parse(commit_date['__content__'].to_s).localtime,
-                              :author => ((a = commit['author']) ? a['__content__'] : nil)
-                              })
-                            })
-              end
-            rescue Exception => e
-              logger.error("Error parsing svn output: #{e.message}")
-              logger.error("Output was:\n #{output}")
-            end
-          end
-          return nil if $? && $?.exitstatus != 0
-          logger.debug("Found #{entries.size} entries in the repository for #{target(path)}") if logger && logger.debug?
-          entries.sort_by_name
-        end
-
-        def properties(path, identifier=nil)
-          # proplist xml output supported in svn 1.5.0 and higher
-          return nil unless self.class.client_version_above?([1, 5, 0])
-          
-          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          cmd = "#{self.class.sq_bin} proplist --verbose --xml #{target(path)}@#{identifier}"
-          cmd << credentials_string
-          properties = {}
-          shellout(cmd) do |io|
-            output = io.read
-            if output.respond_to?(:force_encoding)
-              output.force_encoding('UTF-8')
-            end
-            begin
-              doc = ActiveSupport::XmlMini.parse(output)
-              each_xml_element(doc['properties']['target'], 'property') do |property|
-                properties[ property['name'] ] = property['__content__'].to_s
-              end
-            rescue
-            end
-          end
-          return nil if $? && $?.exitstatus != 0
-          properties
-        end
-
-        def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
-          path ||= ''
-          identifier_from = (identifier_from && identifier_from.to_i > 0) ? identifier_from.to_i : "HEAD"
-          identifier_to = (identifier_to && identifier_to.to_i > 0) ? identifier_to.to_i : 1
-          revisions = Revisions.new
-          cmd = "#{self.class.sq_bin} log --xml -r #{identifier_from}:#{identifier_to}"
-          cmd << credentials_string
-          cmd << " --verbose " if  options[:with_paths]
-          cmd << " --limit #{options[:limit].to_i}" if options[:limit]
-          cmd << ' ' + target(path)
-          shellout(cmd) do |io|
-            output = io.read
-            if output.respond_to?(:force_encoding)
-              output.force_encoding('UTF-8')
-            end
-            begin
-              doc = ActiveSupport::XmlMini.parse(output)
-              each_xml_element(doc['log'], 'logentry') do |logentry|
-                paths = []
-                each_xml_element(logentry['paths'], 'path') do |path|
-                  paths << {:action => path['action'],
-                            :path => path['__content__'],
-                            :from_path => path['copyfrom-path'],
-                            :from_revision => path['copyfrom-rev']
-                            }
-                end if logentry['paths'] && logentry['paths']['path']
-                paths.sort! { |x,y| x[:path] <=> y[:path] }
-                
-                revisions << Revision.new({:identifier => logentry['revision'],
-                              :author => (logentry['author'] ? logentry['author']['__content__'] : ""),
-                              :time => Time.parse(logentry['date']['__content__'].to_s).localtime,
-                              :message => logentry['msg']['__content__'],
-                              :paths => paths
-                            })
-              end
-            rescue
-            end
-          end
-          return nil if $? && $?.exitstatus != 0
-          revisions
-        end
-
-        def diff(path, identifier_from, identifier_to=nil, type="inline")
-          path ||= ''
-          identifier_from = (identifier_from and identifier_from.to_i > 0) ? identifier_from.to_i : ''
-
-          identifier_to = (identifier_to and identifier_to.to_i > 0) ? identifier_to.to_i : (identifier_from.to_i - 1)
-
-          cmd = "#{self.class.sq_bin} diff -r "
-          cmd << "#{identifier_to}:"
-          cmd << "#{identifier_from}"
-          cmd << " #{target(path)}@#{identifier_from}"
-          cmd << credentials_string
-          diff = []
-          shellout(cmd) do |io|
-            io.each_line do |line|
-              diff << line
-            end
-          end
-          return nil if $? && $?.exitstatus != 0
-          diff
-        end
-
-        def cat(path, identifier=nil)
-          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          cmd = "#{self.class.sq_bin} cat #{target(path)}@#{identifier}"
-          cmd << credentials_string
-          cat = nil
-          shellout(cmd) do |io|
-            io.binmode
-            cat = io.read
-          end
-          return nil if $? && $?.exitstatus != 0
-          cat
-        end
-
-        def annotate(path, identifier=nil)
-          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          cmd = "#{self.class.sq_bin} blame #{target(path)}@#{identifier}"
-          cmd << credentials_string
-          blame = Annotate.new
-          shellout(cmd) do |io|
-            io.each_line do |line|
-              next unless line =~ %r{^\s*(\d+)\s*(\S+)\s(.*)$}
-              blame.add_line($3.rstrip, Revision.new(:identifier => $1.to_i, :author => $2.strip))
-            end
-          end
-          return nil if $? && $?.exitstatus != 0
-          blame
-        end
-        
-        private
-        
-        def credentials_string
-          str = ''
-          str << " --username #{shell_quote(@login)}" unless @login.blank?
-          str << " --password #{shell_quote(@password)}" unless @login.blank? || @password.blank?
-          str << " --no-auth-cache --non-interactive"
-          str
-        end
-        
-        # Helper that iterates over the child elements of a xml node
-        # MiniXml returns a hash when a single child is found or an array of hashes for multiple children
-        def each_xml_element(node, name)
-          if node && node[name]
-            if node[name].is_a?(Hash)
-              yield node[name]
-            else
-              node[name].each do |element|
-                yield element
-              end
-            end
-          end
-        end
-
-        def target(path = '')
-          base = path.match(/^\//) ? root_url : url
-          uri = "#{base}/#{path}"
-          uri = URI.escape(URI.escape(uri), '[]')
-          shell_quote(uri.gsub(/[?<>\*]/, ''))
-        end
-      end
-    end
-  end
-end
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
+require 'redmine/scm/adapters/abstract_adapter'
+require 'uri'
+
+module Redmine
+  module Scm
+    module Adapters
+      class SubversionAdapter < AbstractAdapter
+
+        # SVN executable name
+        SVN_BIN = Redmine::Configuration['scm_subversion_command'] || "svn"
+
+        class << self
+          def client_command
+            @@bin    ||= SVN_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(SVN_BIN)
+          end
+
+          def client_version
+            @@client_version ||= (svn_binary_version || [])
+          end
+
+          def client_available
+            # --xml options are introduced in 1.3.
+            # http://subversion.apache.org/docs/release-notes/1.3.html
+            client_version_above?([1, 3])
+          end
+
+          def svn_binary_version
+            scm_version = scm_version_from_command_line.dup
+            if scm_version.respond_to?(:force_encoding)
+              scm_version.force_encoding('ASCII-8BIT')
+            end
+            if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)})
+              m[2].scan(%r{\d+}).collect(&:to_i)
+            end
+          end
+
+          def scm_version_from_command_line
+            shellout("#{sq_bin} --version") { |io| io.read }.to_s
+          end
+        end
+
+        # Get info about the svn repository
+        def info
+          cmd = "#{self.class.sq_bin} info --xml #{target}"
+          cmd << credentials_string
+          info = nil
+          shellout(cmd) do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
+            begin
+              doc = ActiveSupport::XmlMini.parse(output)
+              # root_url = doc.elements["info/entry/repository/root"].text
+              info = Info.new({:root_url => doc['info']['entry']['repository']['root']['__content__'],
+                               :lastrev => Revision.new({
+                                 :identifier => doc['info']['entry']['commit']['revision'],
+                                 :time => Time.parse(doc['info']['entry']['commit']['date']['__content__']).localtime,
+                                 :author => (doc['info']['entry']['commit']['author'] ? doc['info']['entry']['commit']['author']['__content__'] : "")
+                               })
+                             })
+            rescue
+            end
+          end
+          return nil if $? && $?.exitstatus != 0
+          info
+        rescue CommandFailed
+          return nil
+        end
+
+        # Returns an Entries collection
+        # or nil if the given path doesn't exist in the repository
+        def entries(path=nil, identifier=nil, options={})
+          path ||= ''
+          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
+          entries = Entries.new
+          cmd = "#{self.class.sq_bin} list --xml #{target(path)}@#{identifier}"
+          cmd << credentials_string
+          shellout(cmd) do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
+            begin
+              doc = ActiveSupport::XmlMini.parse(output)
+              each_xml_element(doc['lists']['list'], 'entry') do |entry|
+                commit = entry['commit']
+                commit_date = commit['date']
+                # Skip directory if there is no commit date (usually that
+                # means that we don't have read access to it)
+                next if entry['kind'] == 'dir' && commit_date.nil?
+                name = entry['name']['__content__']
+                entries << Entry.new({:name => URI.unescape(name),
+                            :path => ((path.empty? ? "" : "#{path}/") + name),
+                            :kind => entry['kind'],
+                            :size => ((s = entry['size']) ? s['__content__'].to_i : nil),
+                            :lastrev => Revision.new({
+                              :identifier => commit['revision'],
+                              :time => Time.parse(commit_date['__content__'].to_s).localtime,
+                              :author => ((a = commit['author']) ? a['__content__'] : nil)
+                              })
+                            })
+              end
+            rescue Exception => e
+              logger.error("Error parsing svn output: #{e.message}")
+              logger.error("Output was:\n #{output}")
+            end
+          end
+          return nil if $? && $?.exitstatus != 0
+          logger.debug("Found #{entries.size} entries in the repository for #{target(path)}") if logger && logger.debug?
+          entries.sort_by_name
+        end
+
+        def properties(path, identifier=nil)
+          # proplist xml output supported in svn 1.5.0 and higher
+          return nil unless self.class.client_version_above?([1, 5, 0])
+
+          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
+          cmd = "#{self.class.sq_bin} proplist --verbose --xml #{target(path)}@#{identifier}"
+          cmd << credentials_string
+          properties = {}
+          shellout(cmd) do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
+            begin
+              doc = ActiveSupport::XmlMini.parse(output)
+              each_xml_element(doc['properties']['target'], 'property') do |property|
+                properties[ property['name'] ] = property['__content__'].to_s
+              end
+            rescue
+            end
+          end
+          return nil if $? && $?.exitstatus != 0
+          properties
+        end
+
+        def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
+          path ||= ''
+          identifier_from = (identifier_from && identifier_from.to_i > 0) ? identifier_from.to_i : "HEAD"
+          identifier_to = (identifier_to && identifier_to.to_i > 0) ? identifier_to.to_i : 1
+          revisions = Revisions.new
+          cmd = "#{self.class.sq_bin} log --xml -r #{identifier_from}:#{identifier_to}"
+          cmd << credentials_string
+          cmd << " --verbose " if  options[:with_paths]
+          cmd << " --limit #{options[:limit].to_i}" if options[:limit]
+          cmd << ' ' + target(path)
+          shellout(cmd) do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
+            begin
+              doc = ActiveSupport::XmlMini.parse(output)
+              each_xml_element(doc['log'], 'logentry') do |logentry|
+                paths = []
+                each_xml_element(logentry['paths'], 'path') do |path|
+                  paths << {:action => path['action'],
+                            :path => path['__content__'],
+                            :from_path => path['copyfrom-path'],
+                            :from_revision => path['copyfrom-rev']
+                            }
+                end if logentry['paths'] && logentry['paths']['path']
+                paths.sort! { |x,y| x[:path] <=> y[:path] }
+
+                revisions << Revision.new({:identifier => logentry['revision'],
+                              :author => (logentry['author'] ? logentry['author']['__content__'] : ""),
+                              :time => Time.parse(logentry['date']['__content__'].to_s).localtime,
+                              :message => logentry['msg']['__content__'],
+                              :paths => paths
+                            })
+              end
+            rescue
+            end
+          end
+          return nil if $? && $?.exitstatus != 0
+          revisions
+        end
+
+        def diff(path, identifier_from, identifier_to=nil, type="inline")
+          path ||= ''
+          identifier_from = (identifier_from and identifier_from.to_i > 0) ? identifier_from.to_i : ''
+
+          identifier_to = (identifier_to and identifier_to.to_i > 0) ? identifier_to.to_i : (identifier_from.to_i - 1)
+
+          cmd = "#{self.class.sq_bin} diff -r "
+          cmd << "#{identifier_to}:"
+          cmd << "#{identifier_from}"
+          cmd << " #{target(path)}@#{identifier_from}"
+          cmd << credentials_string
+          diff = []
+          shellout(cmd) do |io|
+            io.each_line do |line|
+              diff << line
+            end
+          end
+          return nil if $? && $?.exitstatus != 0
+          diff
+        end
+
+        def cat(path, identifier=nil)
+          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
+          cmd = "#{self.class.sq_bin} cat #{target(path)}@#{identifier}"
+          cmd << credentials_string
+          cat = nil
+          shellout(cmd) do |io|
+            io.binmode
+            cat = io.read
+          end
+          return nil if $? && $?.exitstatus != 0
+          cat
+        end
+
+        def annotate(path, identifier=nil)
+          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
+          cmd = "#{self.class.sq_bin} blame #{target(path)}@#{identifier}"
+          cmd << credentials_string
+          blame = Annotate.new
+          shellout(cmd) do |io|
+            io.each_line do |line|
+              next unless line =~ %r{^\s*(\d+)\s*(\S+)\s(.*)$}
+              rev = $1
+              blame.add_line($3.rstrip,
+                   Revision.new(
+                      :identifier => rev,
+                      :revision   => rev,
+                      :author     => $2.strip
+                      ))
+            end
+          end
+          return nil if $? && $?.exitstatus != 0
+          blame
+        end
+
+        private
+
+        def credentials_string
+          str = ''
+          str << " --username #{shell_quote(@login)}" unless @login.blank?
+          str << " --password #{shell_quote(@password)}" unless @login.blank? || @password.blank?
+          str << " --no-auth-cache --non-interactive"
+          str
+        end
+
+        # Helper that iterates over the child elements of a xml node
+        # MiniXml returns a hash when a single child is found
+        # or an array of hashes for multiple children
+        def each_xml_element(node, name)
+          if node && node[name]
+            if node[name].is_a?(Hash)
+              yield node[name]
+            else
+              node[name].each do |element|
+                yield element
+              end
+            end
+          end
+        end
+
+        def target(path = '')
+          base = path.match(/^\//) ? root_url : url
+          uri = "#{base}/#{path}"
+          uri = URI.escape(URI.escape(uri), '[]')
+          shell_quote(uri.gsub(/[?<>\*]/, ''))
+        end
+      end
+    end
+  end
+end
--- a/lib/redmine/scm/adapters/abstract_adapter.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/abstract_adapter.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -90,12 +90,16 @@
         def url
           @url
         end
-      
+
+        def path_encoding
+          nil
+        end
+
         # get info about the svn repository
         def info
           return nil
         end
-        
+
         # Returns the entry identified by path and revision identifier
         # or nil if entry doesn't exist in the repository
         def entry(path=nil, identifier=nil)
@@ -111,10 +115,10 @@
             es ? es.detect {|e| e.name == search_name} : nil
           end
         end
-        
+
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
-        def entries(path=nil, identifier=nil)
+        def entries(path=nil, identifier=nil, options={})
           return nil
         end
 
@@ -122,30 +126,30 @@
           return nil
         end
 
-        def tags 
+        def tags
           return nil
         end
 
         def default_branch
           return nil
         end
-        
+
         def properties(path, identifier=nil)
           return nil
         end
-    
+
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
           return nil
         end
-        
+
         def diff(path, identifier_from, identifier_to=nil)
           return nil
         end
-        
+
         def cat(path, identifier=nil)
           return nil
         end
-        
+
         def with_leading_slash(path)
           path ||= ''
           (path[0,1]!="/") ? "/#{path}" : path
@@ -175,7 +179,7 @@
           info = self.info
           info ? info.root_url : nil
         end
-        
+
         def target(path)
           path ||= ''
           base = path.match(/^\//) ? root_url : url
@@ -223,7 +227,7 @@
           q = (Redmine::Platform.mswin? ? '"' : "'")
           cmd.to_s.gsub(/(\-\-(password|username))\s+(#{q}[^#{q}]+#{q}|[^#{q}]\S+)/, '\\1 xxxx')
         end
-        
+
         def strip_credential(cmd)
           self.class.strip_credential(cmd)
         end
@@ -242,7 +246,7 @@
 
       class Entries < Array
         def sort_by_name
-          sort {|x,y| 
+          sort {|x,y|
             if x.kind == y.kind
               x.name.to_s <=> y.name.to_s
             else
@@ -250,12 +254,12 @@
             end
           }
         end
-        
+
         def revisions
           revisions ||= Revisions.new(collect{|entry| entry.lastrev}.compact)
         end
       end
-      
+
       class Info
         attr_accessor :root_url, :lastrev
         def initialize(attributes={})
@@ -263,7 +267,7 @@
           self.lastrev = attributes[:lastrev]
         end
       end
-      
+
       class Entry
         attr_accessor :name, :path, :kind, :size, :lastrev
         def initialize(attributes={})
@@ -273,20 +277,20 @@
           self.size = attributes[:size].to_i if attributes[:size]
           self.lastrev = attributes[:lastrev]
         end
-        
+
         def is_file?
           'file' == self.kind
         end
-        
+
         def is_dir?
           'dir' == self.kind
         end
-        
+
         def is_text?
           Redmine::MimeType.is_type?('text', name)
         end
       end
-      
+
       class Revisions < Array
         def latest
           sort {|x,y|
@@ -296,53 +300,48 @@
               0
             end
           }.last
-        end 
+        end
       end
-      
+
       class Revision
-        attr_accessor :scmid, :name, :author, :time, :message, :paths, :revision, :branch
-        attr_writer :identifier
+        attr_accessor :scmid, :name, :author, :time, :message,
+                      :paths, :revision, :branch, :identifier
 
         def initialize(attributes={})
           self.identifier = attributes[:identifier]
-          self.scmid = attributes[:scmid]
-          self.name = attributes[:name] || self.identifier
-          self.author = attributes[:author]
-          self.time = attributes[:time]
-          self.message = attributes[:message] || ""
-          self.paths = attributes[:paths]
-          self.revision = attributes[:revision]
-          self.branch = attributes[:branch]
-        end
-
-        # Returns the identifier of this revision; see also Changeset model
-        def identifier
-          (@identifier || revision).to_s
+          self.scmid      = attributes[:scmid]
+          self.name       = attributes[:name] || self.identifier
+          self.author     = attributes[:author]
+          self.time       = attributes[:time]
+          self.message    = attributes[:message] || ""
+          self.paths      = attributes[:paths]
+          self.revision   = attributes[:revision]
+          self.branch     = attributes[:branch]
         end
 
         # Returns the readable identifier.
         def format_identifier
-          identifier
+          self.identifier.to_s
         end
       end
 
       class Annotate
         attr_reader :lines, :revisions
-        
+
         def initialize
           @lines = []
           @revisions = []
         end
-        
+
         def add_line(line, revision)
           @lines << line
           @revisions << revision
         end
-        
+
         def content
           content = lines.join("\n")
         end
-        
+
         def empty?
           lines.empty?
         end
--- a/lib/redmine/scm/adapters/bazaar_adapter.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/bazaar_adapter.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -78,12 +78,12 @@
 
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
-        def entries(path=nil, identifier=nil)
+        def entries(path=nil, identifier=nil, options={})
           path ||= ''
           entries = Entries.new
           cmd = "#{self.class.sq_bin} ls -v --show-ids"
-          identifier = -1 unless identifier && identifier.to_i > 0 
-          cmd << " -r#{identifier.to_i}" 
+          identifier = -1 unless identifier && identifier.to_i > 0
+          cmd << " -r#{identifier.to_i}"
           cmd << " #{target(path)}"
           shellout(cmd) do |io|
             prefix = "#{url}/#{path}".gsub('\\', '/')
@@ -120,7 +120,6 @@
                 parsing = nil
               else
                 next unless revision
-                
                 if line =~ /^revno: (\d+)($|\s\[merge\]$)/
                   revision.identifier = $1.to_i
                 elsif line =~ /^committer: (.+)$/
@@ -168,7 +167,7 @@
         def diff(path, identifier_from, identifier_to=nil)
           path ||= ''
           if identifier_to
-            identifier_to = identifier_to.to_i 
+            identifier_to = identifier_to.to_i
           else
             identifier_to = identifier_from.to_i - 1
           end
@@ -209,7 +208,13 @@
             identifier = nil
             io.each_line do |line|
               next unless line =~ %r{^(\d+) ([^|]+)\| (.*)$}
-              blame.add_line($3.rstrip, Revision.new(:identifier => $1.to_i, :author => $2.strip))
+              rev = $1
+              blame.add_line($3.rstrip,
+                 Revision.new(
+                  :identifier => rev,
+                  :revision   => rev,
+                  :author     => $2.strip
+                  ))
             end
           end
           return nil if $? && $?.exitstatus != 0
--- a/lib/redmine/scm/adapters/cvs_adapter.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/cvs_adapter.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -5,12 +5,12 @@
 # modify it under the terms of the 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.
@@ -25,6 +25,9 @@
         # CVS executable name
         CVS_BIN = Redmine::Configuration['scm_cvs_command'] || "cvs"
 
+        # raised if scm command exited with error, e.g. unknown revision.
+        class ScmCommandAborted < CommandFailed; end
+
         class << self
           def client_command
             @@bin    ||= CVS_BIN
@@ -58,26 +61,25 @@
         end
 
         # Guidelines for the input:
-        #  url -> the project-path, relative to the cvsroot (eg. module name)
+        #  url      -> the project-path, relative to the cvsroot (eg. module name)
         #  root_url -> the good old, sometimes damned, CVSROOT
-        #  login -> unnecessary
+        #  login    -> unnecessary
         #  password -> unnecessary too
         def initialize(url, root_url=nil, login=nil, password=nil,
                        path_encoding=nil)
-          @url = url
-          @login = login if login && !login.empty?
+          @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding
+          @url      = url
+          # TODO: better Exception here (IllegalArgumentException)
+          raise CommandFailed if root_url.blank?
+          @root_url  = root_url
+
+          # These are unused.
+          @login    = login if login && !login.empty?
           @password = (password || "") if @login
-          #TODO: better Exception here (IllegalArgumentException)
-          raise CommandFailed if root_url.blank?
-          @root_url = root_url
         end
 
-        def root_url
-          @root_url
-        end
-
-        def url
-          @url
+        def path_encoding
+          @path_encoding
         end
 
         def info
@@ -92,43 +94,59 @@
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
         # this method is used by the repository-browser (aka LIST)
-        def entries(path=nil, identifier=nil)
+        def entries(path=nil, identifier=nil, options={})
           logger.debug "<cvs> entries '#{path}' with identifier '#{identifier}'"
-          path_with_project="#{url}#{with_leading_slash(path)}"
+          path_locale = scm_iconv(@path_encoding, 'UTF-8', path)
+          path_locale.force_encoding("ASCII-8BIT") if path_locale.respond_to?(:force_encoding)
           entries = Entries.new
-          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rls -e"
-          cmd << " -D \"#{time_to_cvstime(identifier)}\"" if identifier
-          cmd << " #{shell_quote path_with_project}"
-          shellout(cmd) do |io|
-            io.each_line(){|line|
-              fields=line.chop.split('/',-1)
+          cmd_args = %w|-q rls -e|
+          cmd_args << "-D" << time_to_cvstime_rlog(identifier) if identifier
+          cmd_args << path_with_proj(path)
+          scm_cmd(*cmd_args) do |io|
+            io.each_line() do |line|
+              fields = line.chop.split('/',-1)
               logger.debug(">>InspectLine #{fields.inspect}")
-
               if fields[0]!="D"
-                entries << Entry.new({:name => fields[-5],
+                time = nil
+                # Thu Dec 13 16:27:22 2007
+                time_l = fields[-3].split(' ')
+                if time_l.size == 5 && time_l[4].length == 4
+                  begin
+                    time = Time.parse(
+                             "#{time_l[1]} #{time_l[2]} #{time_l[3]} GMT #{time_l[4]}")
+                  rescue
+                  end
+                end
+                entries << Entry.new(
+                 {
+                  :name => scm_iconv('UTF-8', @path_encoding, fields[-5]),
                   #:path => fields[-4].include?(path)?fields[-4]:(path + "/"+ fields[-4]),
-                  :path => "#{path}/#{fields[-5]}",
+                  :path => scm_iconv('UTF-8', @path_encoding, "#{path_locale}/#{fields[-5]}"),
                   :kind => 'file',
                   :size => nil,
-                  :lastrev => Revision.new({
-                    :revision => fields[-4],
-                    :name => fields[-4],
-                    :time => Time.parse(fields[-3]),
-                    :author => ''
+                  :lastrev => Revision.new(
+                      {
+                        :revision => fields[-4],
+                        :name     => scm_iconv('UTF-8', @path_encoding, fields[-4]),
+                        :time     => time,
+                        :author   => ''
+                      })
                   })
-                })
               else
-                entries << Entry.new({:name => fields[1],
-                  :path => "#{path}/#{fields[1]}",
-                  :kind => 'dir',
-                  :size => nil,
+                entries << Entry.new(
+                 {
+                  :name    => scm_iconv('UTF-8', @path_encoding, fields[1]),
+                  :path    => scm_iconv('UTF-8', @path_encoding, "#{path_locale}/#{fields[1]}"),
+                  :kind    => 'dir',
+                  :size    => nil,
                   :lastrev => nil
-                })
+                 })
               end
-            }
+            end
           end
-          return nil if $? && $?.exitstatus != 0
           entries.sort_by_name
+        rescue ScmCommandAborted
+          nil
         end
 
         STARTLOG="----------------------------"
@@ -138,111 +156,106 @@
         # in the repository. both identifier have to be dates or nil.
         # these method returns nothing but yield every result in block
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={}, &block)
-          logger.debug "<cvs> revisions path:'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}"
-
-          path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rlog"
-          cmd << " -d\">#{time_to_cvstime_rlog(identifier_from)}\"" if identifier_from
-          cmd << " #{shell_quote path_with_project}"
-          shellout(cmd) do |io|
-            state="entry_start"
-            
-            commit_log=String.new
-            revision=nil
-            date=nil
-            author=nil
-            entry_path=nil
-            entry_name=nil
-            file_state=nil
-            branch_map=nil
-            
+          path_with_project_utf8   = path_with_proj(path)
+          path_with_project_locale = scm_iconv(@path_encoding, 'UTF-8', path_with_project_utf8)
+          logger.debug "<cvs> revisions path:" +
+              "'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}"
+          cmd_args = %w|-q rlog|
+          cmd_args << "-d" << ">#{time_to_cvstime_rlog(identifier_from)}" if identifier_from
+          cmd_args << path_with_project_utf8
+          scm_cmd(*cmd_args) do |io|
+            state      = "entry_start"
+            commit_log = String.new
+            revision   = nil
+            date       = nil
+            author     = nil
+            entry_path = nil
+            entry_name = nil
+            file_state = nil
+            branch_map = nil
             io.each_line() do |line|
-              
-              if state!="revision" && /^#{ENDLOG}/ =~ line
-                commit_log=String.new
-                revision=nil
-                state="entry_start"
+              if state != "revision" && /^#{ENDLOG}/ =~ line
+                commit_log = String.new
+                revision   = nil
+                state      = "entry_start"
               end
-              
-              if state=="entry_start"
-                branch_map=Hash.new
-                if /^RCS file: #{Regexp.escape(root_url_path)}\/#{Regexp.escape(path_with_project)}(.+),v$/ =~ line
+              if state == "entry_start"
+                branch_map = Hash.new
+                if /^RCS file: #{Regexp.escape(root_url_path)}\/#{Regexp.escape(path_with_project_locale)}(.+),v$/ =~ line
                   entry_path = normalize_cvs_path($1)
                   entry_name = normalize_path(File.basename($1))
                   logger.debug("Path #{entry_path} <=> Name #{entry_name}")
                 elsif /^head: (.+)$/ =~ line
                   entry_headRev = $1 #unless entry.nil?
                 elsif /^symbolic names:/ =~ line
-                  state="symbolic" #unless entry.nil?
+                  state = "symbolic" #unless entry.nil?
                 elsif /^#{STARTLOG}/ =~ line
-                  commit_log=String.new
-                  state="revision"
-                end  
+                  commit_log = String.new
+                  state      = "revision"
+                end
                 next
-              elsif state=="symbolic"
-                if /^(.*):\s(.*)/ =~ (line.strip) 
-                  branch_map[$1]=$2
+              elsif state == "symbolic"
+                if /^(.*):\s(.*)/ =~ (line.strip)
+                  branch_map[$1] = $2
                 else
-                  state="tags"
+                  state = "tags"
                   next
-                end          
-              elsif state=="tags"
+                end
+              elsif state == "tags"
                 if /^#{STARTLOG}/ =~ line
                   commit_log = ""
-                  state="revision"
+                  state = "revision"
                 elsif /^#{ENDLOG}/ =~ line
-                  state="head"
+                  state = "head"
                 end
                 next
-              elsif state=="revision"
+              elsif state == "revision"
                 if /^#{ENDLOG}/ =~ line || /^#{STARTLOG}/ =~ line
                   if revision
-
-                    revHelper=CvsRevisionHelper.new(revision)
-                    revBranch="HEAD"
-                    
-                    branch_map.each() do |branch_name,branch_point|
+                    revHelper = CvsRevisionHelper.new(revision)
+                    revBranch = "HEAD"
+                    branch_map.each() do |branch_name, branch_point|
                       if revHelper.is_in_branch_with_symbol(branch_point)
-                        revBranch=branch_name
+                        revBranch = branch_name
                       end
                     end
-                    
                     logger.debug("********** YIELD Revision #{revision}::#{revBranch}")
-                    
                     yield Revision.new({
-                      :time => date,
-                      :author => author,
-                      :message=>commit_log.chomp,
+                      :time    => date,
+                      :author  => author,
+                      :message => commit_log.chomp,
                       :paths => [{
                         :revision => revision,
-                        :branch=> revBranch,
-                        :path=>entry_path,
-                        :name=>entry_name,
-                        :kind=>'file',
-                        :action=>file_state
-                      }]
-                    })
+                        :branch   => revBranch,
+                        :path     => scm_iconv('UTF-8', @path_encoding, entry_path),
+                        :name     => scm_iconv('UTF-8', @path_encoding, entry_name),
+                        :kind     => 'file',
+                        :action   => file_state
+                           }]
+                         })
                   end
-
-                  commit_log=String.new
-                  revision=nil
-                  
+                  commit_log = String.new
+                  revision   = nil
                   if /^#{ENDLOG}/ =~ line
-                    state="entry_start"
+                    state = "entry_start"
                   end
                   next
                 end
 
                 if /^branches: (.+)$/ =~ line
-                  #TODO: version.branch = $1
+                  # TODO: version.branch = $1
                 elsif /^revision (\d+(?:\.\d+)+).*$/ =~ line
-                  revision = $1   
+                  revision = $1
                 elsif /^date:\s+(\d+.\d+.\d+\s+\d+:\d+:\d+)/ =~ line
-                  date      = Time.parse($1)
-                  author    = /author: ([^;]+)/.match(line)[1]
-                  file_state     = /state: ([^;]+)/.match(line)[1]
-                  #TODO: linechanges only available in CVS.... maybe a feature our SVN implementation. i'm sure, they are
-                  #    useful for stats or something else
+                  date       = Time.parse($1)
+                  line_utf8    = scm_iconv('UTF-8', options[:log_encoding], line)
+                  author_utf8  = /author: ([^;]+)/.match(line_utf8)[1]
+                  author       = scm_iconv(options[:log_encoding], 'UTF-8', author_utf8)
+                  file_state   = /state: ([^;]+)/.match(line)[1]
+                  # TODO:
+                  #    linechanges only available in CVS....
+                  #    maybe a feature our SVN implementation.
+                  #    I'm sure, they are useful for stats or something else
                   #                linechanges =/lines: \+(\d+) -(\d+)/.match(line)
                   #                unless linechanges.nil?
                   #                  version.line_plus  = linechanges[1]
@@ -257,52 +270,66 @@
               end
             end
           end
+        rescue ScmCommandAborted
+          Revisions.new
         end
 
         def diff(path, identifier_from, identifier_to=nil)
-          logger.debug "<cvs> diff path:'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}"
-          path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rdiff -u -r#{identifier_to} -r#{identifier_from} #{shell_quote path_with_project}"
+          logger.debug "<cvs> diff path:'#{path}'" +
+              ",identifier_from #{identifier_from}, identifier_to #{identifier_to}"
+          cmd_args = %w|rdiff -u|
+          cmd_args << "-r#{identifier_to}"
+          cmd_args << "-r#{identifier_from}"
+          cmd_args << path_with_proj(path)
           diff = []
-          shellout(cmd) do |io|
+          scm_cmd(*cmd_args) do |io|
             io.each_line do |line|
               diff << line
             end
           end
-          return nil if $? && $?.exitstatus != 0
           diff
+        rescue ScmCommandAborted
+          nil
         end
 
         def cat(path, identifier=nil)
           identifier = (identifier) ? identifier : "HEAD"
           logger.debug "<cvs> cat path:'#{path}',identifier #{identifier}"
-          path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} co"
-          cmd << " -D \"#{time_to_cvstime(identifier)}\"" if identifier
-          cmd << " -p #{shell_quote path_with_project}"
+          cmd_args = %w|-q co|
+          cmd_args << "-D" << time_to_cvstime(identifier) if identifier
+          cmd_args << "-p" << path_with_proj(path)
           cat = nil
-          shellout(cmd) do |io|
+          scm_cmd(*cmd_args) do |io|
             io.binmode
             cat = io.read
           end
-          return nil if $? && $?.exitstatus != 0
           cat
+        rescue ScmCommandAborted
+          nil
         end
 
         def annotate(path, identifier=nil)
-          identifier = (identifier) ? identifier.to_i : "HEAD"
+          identifier = (identifier) ? identifier : "HEAD"
           logger.debug "<cvs> annotate path:'#{path}',identifier #{identifier}"
-          path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rannotate -r#{identifier} #{shell_quote path_with_project}"
+          cmd_args = %w|rannotate|
+          cmd_args << "-D" << time_to_cvstime(identifier) if identifier
+          cmd_args << path_with_proj(path)
           blame = Annotate.new
-          shellout(cmd) do |io|
+          scm_cmd(*cmd_args) do |io|
             io.each_line do |line|
               next unless line =~ %r{^([\d\.]+)\s+\(([^\)]+)\s+[^\)]+\):\s(.*)$}
-              blame.add_line($3.rstrip, Revision.new(:revision => $1, :author => $2.strip))
+              blame.add_line(
+                  $3.rstrip,
+                  Revision.new(
+                    :revision   => $1,
+                    :identifier => nil,
+                    :author     => $2.strip
+                    ))
             end
           end
-          return nil if $? && $?.exitstatus != 0
           blame
+        rescue ScmCommandAborted
+          Annotate.new
         end
 
         private
@@ -317,12 +344,12 @@
         # convert a date/time into the CVS-format
         def time_to_cvstime(time)
           return nil if time.nil?
-          return Time.now if time == 'HEAD'
-          
+          time = Time.now if time == 'HEAD'
+
           unless time.kind_of? Time
             time = Time.parse(time)
           end
-          return time.strftime("%Y-%m-%d %H:%M:%S")
+          return time_to_cvstime_rlog(time)
         end
 
         def time_to_cvstime_rlog(time)
@@ -330,77 +357,104 @@
           t1 = time.clone.localtime
           return t1.strftime("%Y-%m-%d %H:%M:%S")
         end
-          
+
         def normalize_cvs_path(path)
           normalize_path(path.gsub(/Attic\//,''))
         end
-          
+
         def normalize_path(path)
           path.sub(/^(\/)*(.*)/,'\2').sub(/(.*)(,v)+/,'\1')
-        end   
-      end  
-  
+        end
+
+        def path_with_proj(path)
+          "#{url}#{with_leading_slash(path)}"
+        end
+        private :path_with_proj
+
+        class Revision < Redmine::Scm::Adapters::Revision
+          # Returns the readable identifier
+          def format_identifier
+            revision.to_s
+          end
+        end
+
+        def scm_cmd(*args, &block)
+          full_args = [CVS_BIN, '-d', root_url]
+          full_args += args
+          full_args_locale = []
+          full_args.map do |e|
+            full_args_locale << scm_iconv(@path_encoding, 'UTF-8', e)
+          end
+          ret = shellout(full_args_locale.map { |e| shell_quote e.to_s }.join(' '), &block)
+          if $? && $?.exitstatus != 0
+            raise ScmCommandAborted, "cvs exited with non-zero status: #{$?.exitstatus}"
+          end
+          ret
+        end
+        private :scm_cmd
+      end
+
       class CvsRevisionHelper
         attr_accessor :complete_rev, :revision, :base, :branchid
-        
+
         def initialize(complete_rev)
           @complete_rev = complete_rev
           parseRevision()
         end
-    
+
         def branchPoint
           return @base
         end
-      
+
         def branchVersion
           if isBranchRevision
             return @base+"."+@branchid
           end
           return @base
         end
-      
+
         def isBranchRevision
           !@branchid.nil?
         end
-        
+
         def prevRev
-          unless @revision==0
-            return buildRevision(@revision-1)
+          unless @revision == 0
+            return buildRevision( @revision - 1 )
           end
-          return buildRevision(@revision)    
+          return buildRevision( @revision )
         end
-        
+
         def is_in_branch_with_symbol(branch_symbol)
-          bpieces=branch_symbol.split(".")
-          branch_start="#{bpieces[0..-3].join(".")}.#{bpieces[-1]}"
-          return (branchVersion==branch_start)
+          bpieces = branch_symbol.split(".")
+          branch_start = "#{bpieces[0..-3].join(".")}.#{bpieces[-1]}"
+          return ( branchVersion == branch_start )
         end
-    
+
         private
         def buildRevision(rev)
-          if rev== 0
+          if rev == 0
             if @branchid.nil?
-              @base+".0"
+              @base + ".0"
             else
               @base
             end
-          elsif @branchid.nil? 
-            @base+"."+rev.to_s
+          elsif @branchid.nil?
+            @base + "." + rev.to_s
           else
-            @base+"."+@branchid+"."+rev.to_s
+            @base + "." + @branchid + "." + rev.to_s
           end
         end
-        
+
         # Interpretiert die cvs revisionsnummern wie z.b. 1.14 oder 1.3.0.15
         def parseRevision()
-          pieces=@complete_rev.split(".")
-          @revision=pieces.last.to_i
-          baseSize=1
-          baseSize+=(pieces.size/2)
-          @base=pieces[0..-baseSize].join(".")
+          pieces = @complete_rev.split(".")
+          @revision = pieces.last.to_i
+          baseSize = 1
+          baseSize += (pieces.size / 2)
+          @base = pieces[0..-baseSize].join(".")
           if baseSize > 2
-            @branchid=pieces[-2]
-          end     
+            @branchid = pieces[-2]
+          end
         end
       end
     end
--- a/lib/redmine/scm/adapters/darcs_adapter.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/darcs_adapter.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -76,7 +76,7 @@
 
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
-        def entries(path=nil, identifier=nil)
+        def entries(path=nil, identifier=nil, options={})
           path_prefix = (path.blank? ? '' : "#{path}/")
           if path.blank?
             path = ( self.class.client_version_above?([2, 2, 0]) ? @url : '.' )
--- a/lib/redmine/scm/adapters/filesystem_adapter.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/filesystem_adapter.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# RedMine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # FileSystem adapter
 # File written by Paul Rivier, at Demotera.
@@ -8,12 +8,12 @@
 # modify it under the terms of the 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.
@@ -35,14 +35,18 @@
         def initialize(url, root_url=nil, login=nil, password=nil,
                        path_encoding=nil)
           @url = with_trailling_slash(url)
-          @path_encoding = path_encoding || 'UTF-8'
+          @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding
+        end
+
+        def path_encoding
+          @path_encoding
         end
 
         def format_path_ends(path, leading=true, trailling=true)
-          path = leading ? with_leading_slash(path) : 
+          path = leading ? with_leading_slash(path) :
             without_leading_slash(path)
-          trailling ? with_trailling_slash(path) : 
-            without_trailling_slash(path) 
+          trailling ? with_trailling_slash(path) :
+            without_trailling_slash(path)
         end
 
         def info
@@ -54,13 +58,15 @@
           return nil
         end
 
-        def entries(path="", identifier=nil)
+        def entries(path="", identifier=nil, options={})
           entries = Entries.new
           trgt_utf8 = target(path)
           trgt = scm_iconv(@path_encoding, 'UTF-8', trgt_utf8)
           Dir.new(trgt).each do |e1|
             e_utf8 = scm_iconv('UTF-8', @path_encoding, e1)
-            relative_path_utf8 = format_path_ends((format_path_ends(path,false,true) + e_utf8),false,false)
+            next if e_utf8.blank?
+            relative_path_utf8 = format_path_ends(
+                (format_path_ends(path,false,true) + e_utf8),false,false)
             t1_utf8 = target(relative_path_utf8)
             t1 = scm_iconv(@path_encoding, 'UTF-8', t1_utf8)
             relative_path = scm_iconv(@path_encoding, 'UTF-8', relative_path_utf8)
@@ -76,7 +82,7 @@
                           :path => utf_8_path,
                           :kind => (File.directory?(t1) ? 'dir' : 'file'),
                           :size => (File.directory?(t1) ? nil : [File.size(t1)].pack('l').unpack('L').first),
-                          :lastrev => 
+                          :lastrev =>
                               Revision.new({:time => (File.mtime(t1)) })
                         })
             end
--- a/lib/redmine/scm/adapters/git_adapter.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/git_adapter.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -22,8 +22,6 @@
     module Adapters
       class GitAdapter < AbstractAdapter
 
-        SCM_GIT_REPORT_LAST_COMMIT = true
-
         # Git executable name
         GIT_BIN = Redmine::Configuration['scm_git_command'] || "git"
 
@@ -64,7 +62,11 @@
 
         def initialize(url, root_url=nil, login=nil, password=nil, path_encoding=nil)
           super
-          @flag_report_last_commit = SCM_GIT_REPORT_LAST_COMMIT
+          @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding
+        end
+
+        def path_encoding
+          @path_encoding
         end
 
         def info
@@ -78,59 +80,88 @@
         def branches
           return @branches if @branches
           @branches = []
-          cmd = "#{self.class.sq_bin} --git-dir #{target('')} branch --no-color"
-          shellout(cmd) do |io|
+          cmd_args = %w|branch --no-color|
+          scm_cmd(*cmd_args) do |io|
             io.each_line do |line|
               @branches << line.match('\s*\*?\s*(.*)$')[1]
             end
           end
           @branches.sort!
+        rescue ScmCommandAborted
+          nil
         end
 
         def tags
           return @tags if @tags
-          cmd = "#{self.class.sq_bin} --git-dir #{target('')} tag"
-          shellout(cmd) do |io|
+          cmd_args = %w|tag|
+          scm_cmd(*cmd_args) do |io|
             @tags = io.readlines.sort!.map{|t| t.strip}
           end
+        rescue ScmCommandAborted
+          nil
+        end
+
+        def default_branch
+          bras = self.branches
+          return nil if bras.nil?
+          bras.include?('master') ? 'master' : bras.first
+        end
+
+        def entry(path=nil, identifier=nil)
+          parts = path.to_s.split(%r{[\/\\]}).select {|n| !n.blank?}
+          search_path = parts[0..-2].join('/')
+          search_name = parts[-1]
+          if search_path.blank? && search_name.blank?
+            # Root entry
+            Entry.new(:path => '', :kind => 'dir')
+          else
+            # Search for the entry in the parent directory
+            es = entries(search_path, identifier,
+                         options = {:report_last_commit => false})
+            es ? es.detect {|e| e.name == search_name} : nil
+          end
         end
 
-        def default_branch
-          branches.include?('master') ? 'master' : branches.first
-        end
-
-        def entries(path=nil, identifier=nil)
+        def entries(path=nil, identifier=nil, options={})
           path ||= ''
+          p = scm_iconv(@path_encoding, 'UTF-8', path)
           entries = Entries.new
-          cmd = "#{self.class.sq_bin} --git-dir #{target('')} ls-tree -l "
-          cmd << shell_quote("HEAD:" + path) if identifier.nil?
-          cmd << shell_quote(identifier + ":" + path) if identifier
-          shellout(cmd)  do |io|
+          cmd_args = %w|ls-tree -l|
+          cmd_args << "HEAD:#{p}"          if identifier.nil?
+          cmd_args << "#{identifier}:#{p}" if identifier
+          scm_cmd(*cmd_args) do |io|
             io.each_line do |line|
               e = line.chomp.to_s
               if e =~ /^\d+\s+(\w+)\s+([0-9a-f]{40})\s+([0-9-]+)\t(.+)$/
                 type = $1
-                sha = $2
+                sha  = $2
                 size = $3
                 name = $4
-                full_path = path.empty? ? name : "#{path}/#{name}"
-                entries << Entry.new({:name => name,
-                 :path => full_path,
+                if name.respond_to?(:force_encoding)
+                  name.force_encoding(@path_encoding)
+                end
+                full_path = p.empty? ? name : "#{p}/#{name}"
+                n      = scm_iconv('UTF-8', @path_encoding, name)
+                full_p = scm_iconv('UTF-8', @path_encoding, full_path)
+                entries << Entry.new({:name => n,
+                 :path => full_p,
                  :kind => (type == "tree") ? 'dir' : 'file',
                  :size => (type == "tree") ? nil : size,
-                 :lastrev => @flag_report_last_commit ? lastrev(full_path,identifier) : Revision.new
+                 :lastrev => options[:report_last_commit] ?
+                                 lastrev(full_path, identifier) : Revision.new
                 }) unless entries.detect{|entry| entry.name == name}
               end
             end
           end
-          return nil if $? && $?.exitstatus != 0
           entries.sort_by_name
+        rescue ScmCommandAborted
+          nil
         end
 
         def lastrev(path, rev)
           return nil if path.nil?
           cmd_args = %w|log --no-color --encoding=UTF-8 --date=iso --pretty=fuller --no-merges -n 1|
-          cmd_args << rev if rev 
+          cmd_args << rev if rev
           cmd_args << "--" << path unless path.empty?
           lines = []
           scm_cmd(*cmd_args) { |io| lines = io.readlines }
@@ -141,11 +172,11 @@
 
               Revision.new({
                 :identifier => id,
-                :scmid => id,
-                :author => author, 
-                :time => time,
-                :message => nil, 
-                :paths => nil 
+                :scmid      => id,
+                :author     => author,
+                :time       => time,
+                :message    => nil,
+                :paths      => nil
                 })
           rescue NoMethodError => e
               logger.error("The revision '#{path}' has a wrong format")
@@ -156,7 +187,7 @@
         end
 
         def revisions(path, identifier_from, identifier_to, options={})
-          revisions = Revisions.new
+          revs = Revisions.new
           cmd_args = %w|log --no-color --encoding=UTF-8 --raw --date=iso --pretty=fuller|
           cmd_args << "--reverse" if options[:reverse]
           cmd_args << "--all" if options[:all]
@@ -166,13 +197,12 @@
           from_to << "#{identifier_to}" if identifier_to
           cmd_args << from_to if !from_to.empty?
           cmd_args << "--since=#{options[:since].strftime("%Y-%m-%d %H:%M:%S")}" if options[:since]
-          cmd_args << "--" << path if path && !path.empty?
+          cmd_args << "--" << scm_iconv(@path_encoding, 'UTF-8', path) if path && !path.empty?
 
           scm_cmd *cmd_args do |io|
             files=[]
             changeset = {}
             parsing_descr = 0  #0: not parsing desc or files, 1: parsing desc, 2: parsing files
-            revno = 1
 
             io.each_line do |line|
               if line =~ /^commit ([0-9a-f]{40})$/
@@ -182,20 +212,19 @@
                   parsing_descr = 0
                   revision = Revision.new({
                     :identifier => changeset[:commit],
-                    :scmid => changeset[:commit],
-                    :author => changeset[:author],
-                    :time => Time.parse(changeset[:date]),
-                    :message => changeset[:description],
-                    :paths => files
+                    :scmid      => changeset[:commit],
+                    :author     => changeset[:author],
+                    :time       => Time.parse(changeset[:date]),
+                    :message    => changeset[:description],
+                    :paths      => files
                   })
                   if block_given?
                     yield revision
                   else
-                    revisions << revision
+                    revs << revision
                   end
                   changeset = {}
                   files = []
-                  revno = revno + 1
                 end
                 changeset[:commit] = $1
               elsif (parsing_descr == 0) && line =~ /^(\w+):\s*(.*)$/
@@ -210,73 +239,75 @@
                 parsing_descr = 1
                 changeset[:description] = ""
               elsif (parsing_descr == 1 || parsing_descr == 2) \
-              && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\t(.+)$/
+                  && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\t(.+)$/
                 parsing_descr = 2
-                fileaction = $1
-                filepath = $2
-                files << {:action => fileaction, :path => filepath}
+                fileaction    = $1
+                filepath      = $2
+                p = scm_iconv('UTF-8', @path_encoding, filepath)
+                files << {:action => fileaction, :path => p}
               elsif (parsing_descr == 1 || parsing_descr == 2) \
-              && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\t(.+)$/
+                  && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\t(.+)$/
                 parsing_descr = 2
-                fileaction = $1
-                filepath = $3
-                files << {:action => fileaction, :path => filepath}
+                fileaction    = $1
+                filepath      = $3
+                p = scm_iconv('UTF-8', @path_encoding, filepath)
+                files << {:action => fileaction, :path => p}
               elsif (parsing_descr == 1) && line.chomp.to_s == ""
                 parsing_descr = 2
               elsif (parsing_descr == 1)
                 changeset[:description] << line[4..-1]
               end
-            end 
+            end
 
             if changeset[:commit]
               revision = Revision.new({
                 :identifier => changeset[:commit],
-                :scmid => changeset[:commit],
-                :author => changeset[:author],
-                :time => Time.parse(changeset[:date]),
-                :message => changeset[:description],
-                :paths => files
-              })
-
+                :scmid      => changeset[:commit],
+                :author     => changeset[:author],
+                :time       => Time.parse(changeset[:date]),
+                :message    => changeset[:description],
+                :paths      => files
+                 })
               if block_given?
                 yield revision
               else
-                revisions << revision
+                revs << revision
               end
             end
           end
-          revisions
-        rescue ScmCommandAborted
-          revisions
+          revs
+        rescue ScmCommandAborted => e
+          logger.error("git log #{from_to.to_s} error: #{e.message}")
+          revs
         end
 
         def diff(path, identifier_from, identifier_to=nil)
           path ||= ''
-
+          cmd_args = []
           if identifier_to
-            cmd = "#{self.class.sq_bin} --git-dir #{target('')} diff --no-color #{shell_quote identifier_to} #{shell_quote identifier_from}" 
+            cmd_args << "diff" << "--no-color" <<  identifier_to << identifier_from
           else
-            cmd = "#{self.class.sq_bin} --git-dir #{target('')} show --no-color #{shell_quote identifier_from}"
+            cmd_args << "show" << "--no-color" << identifier_from
           end
-
-          cmd << " -- #{shell_quote path}" unless path.empty?
+          cmd_args << "--" <<  scm_iconv(@path_encoding, 'UTF-8', path) unless path.empty?
           diff = []
-          shellout(cmd) do |io|
+          scm_cmd *cmd_args do |io|
             io.each_line do |line|
               diff << line
             end
           end
-          return nil if $? && $?.exitstatus != 0
           diff
+        rescue ScmCommandAborted
+          nil
         end
-        
+
         def annotate(path, identifier=nil)
           identifier = 'HEAD' if identifier.blank?
-          cmd = "#{self.class.sq_bin} --git-dir #{target('')} blame -p #{shell_quote identifier} -- #{shell_quote path}"
+          cmd_args = %w|blame|
+          cmd_args << "-p" << identifier << "--" <<  scm_iconv(@path_encoding, 'UTF-8', path)
           blame = Annotate.new
           content = nil
-          shellout(cmd) { |io| io.binmode; content = io.read }
-          return nil if $? && $?.exitstatus != 0
+          scm_cmd(*cmd_args) { |io| io.binmode; content = io.read }
           # git annotates binary files
           return nil if content.is_binary_data?
           identifier = ''
@@ -288,26 +319,35 @@
             elsif line =~ /^author (.+)/
               authors_by_commit[identifier] = $1.strip
             elsif line =~ /^\t(.*)/
-              blame.add_line($1, Revision.new(:identifier => identifier, :author => authors_by_commit[identifier]))
+              blame.add_line($1, Revision.new(
+                                    :identifier => identifier,
+                                    :revision   => identifier,
+                                    :scmid      => identifier,
+                                    :author     => authors_by_commit[identifier]
+                                    ))
               identifier = ''
               author = ''
             end
           end
           blame
+        rescue ScmCommandAborted
+          nil
         end
 
         def cat(path, identifier=nil)
           if identifier.nil?
             identifier = 'HEAD'
           end
-          cmd = "#{self.class.sq_bin} --git-dir #{target('')} show --no-color #{shell_quote(identifier + ':' + path)}"
+          cmd_args = %w|show --no-color|
+          cmd_args << "#{identifier}:#{scm_iconv(@path_encoding, 'UTF-8', path)}"
           cat = nil
-          shellout(cmd) do |io|
+          scm_cmd(*cmd_args) do |io|
             io.binmode
             cat = io.read
           end
-          return nil if $? && $?.exitstatus != 0
           cat
+        rescue ScmCommandAborted
+          nil
         end
 
         class Revision < Redmine::Scm::Adapters::Revision
@@ -320,6 +360,10 @@
         def scm_cmd(*args, &block)
           repo_path = root_url || url
           full_args = [GIT_BIN, '--git-dir', repo_path]
+          if self.class.client_version_above?([1, 7, 2])
+            full_args << '-c' << 'core.quotepath=false'
+            full_args << '-c' << 'log.decorate=no'
+          end
           full_args += args
           ret = shellout(full_args.map { |e| shell_quote e.to_s }.join(' '), &block)
           if $? && $?.exitstatus != 0
--- a/lib/redmine/scm/adapters/mercurial/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/mercurial/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,23 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4989/trunk/lib/redmine/scm/adapters/mercurial
-END
-hg-template-0.9.5.tmpl
-K 25
-svn:wc:ra_dav:version-url
-V 82
-/svn/!svn/ver/4633/trunk/lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl
+V 73
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/mercurial
 END
 redminehelper.py
 K 25
 svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/4989/trunk/lib/redmine/scm/adapters/mercurial/redminehelper.py
+V 90
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/mercurial/redminehelper.py
 END
-hg-template-1.0.tmpl
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/4633/trunk/lib/redmine/scm/adapters/mercurial/hg-template-1.0.tmpl
-END
--- a/lib/redmine/scm/adapters/mercurial/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/mercurial/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm/adapters/mercurial
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/scm/adapters/mercurial
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-02T10:17:36.526269Z
-4989
+2011-03-14T02:23:54.474379Z
+5112
 tmaruyama
 has-props
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 961af0eb6ab17203d985cdeac685937e
 2011-01-05T15:02:24.961855Z
 4633
@@ -66,10 +66,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-5bf6790a201bf33c17cae96c6a9d75fc
-2011-03-02T10:17:36.526269Z
-4989
+2011-06-06T13:20:53.000000Z
+e00d9a9bc9249ea3dca63636370ba377
+2011-03-14T02:23:54.474379Z
+5112
 tmaruyama
 
 
@@ -92,7 +92,7 @@
 
 
 
-6270
+7856
 
 hg-template-1.0.tmpl
 file
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 9d5de62ae8cdc141d3f8b970dbba07a0
 2011-01-05T15:02:24.961855Z
 4633
--- a/lib/redmine/scm/adapters/mercurial/.svn/text-base/redminehelper.py.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/mercurial/.svn/text-base/redminehelper.py.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -120,9 +120,13 @@
     ui.write('</manifest>\n')
 
 def rhannotate(ui, repo, *pats, **opts):
+    rev = urllib.unquote_plus(opts.pop('rev', None))
+    opts['rev'] = rev
     return commands.annotate(ui, repo, *map(urllib.unquote_plus, pats), **opts)
 
 def rhcat(ui, repo, file1, *pats, **opts):
+    rev = urllib.unquote_plus(opts.pop('rev', None))
+    opts['rev'] = rev
     return commands.cat(ui, repo, urllib.unquote_plus(file1), *map(urllib.unquote_plus, pats), **opts)
 
 def rhdiff(ui, repo, *pats, **opts):
@@ -134,6 +138,18 @@
     opts['nodates'] = True
     return commands.diff(ui, repo, *map(urllib.unquote_plus, pats), **opts)
 
+def rhlog(ui, repo, *pats, **opts):
+    rev      = opts.pop('rev')
+    bra0     = opts.pop('branch')
+    from_rev = urllib.unquote_plus(opts.pop('from', None))
+    to_rev   = urllib.unquote_plus(opts.pop('to'  , None))
+    bra      = urllib.unquote_plus(opts.pop('rhbranch', None))
+    from_rev = from_rev.replace('"', '\\"')
+    to_rev   = to_rev.replace('"', '\\"')
+    opts['rev'] = ['"%s":"%s"' % (from_rev, to_rev)]
+    opts['branch'] = [bra]
+    return commands.log(ui, repo, *map(urllib.unquote_plus, pats), **opts)
+
 def rhmanifest(ui, repo, path='', **opts):
     """output the sub-manifest of the specified directory"""
     ui.write('<?xml version="1.0"?>\n')
@@ -176,6 +192,26 @@
                [('r', 'rev', [], 'revision'),
                 ('c', 'change', '', 'change made by revision')],
                'hg rhdiff ([-c REV] | [-r REV] ...) [FILE]...'),
+    'rhlog': (rhlog,
+                   [
+                    ('r', 'rev', [], 'show the specified revision'),
+                    ('b', 'branch', [],
+                       'show changesets within the given named branch', 'BRANCH'),
+                    ('l', 'limit', '',
+                         'limit number of changes displayed', 'NUM'),
+                    ('d', 'date', '',
+                         'show revisions matching date spec', 'DATE'),
+                    ('u', 'user', [],
+                      'revisions committed by user', 'USER'),
+                    ('', 'from', '',
+                      '', ''),
+                    ('', 'to', '',
+                      '', ''),
+                    ('', 'rhbranch', '',
+                      '', ''),
+                    ('', 'template', '',
+                       'display with template', 'TEMPLATE')],
+                   'hg rhlog [OPTION]... [FILE]'),
     'rhmanifest': (rhmanifest,
                    [('r', 'rev', '', 'show the specified revision')],
                    'hg rhmanifest [-r REV] [PATH]'),
--- a/lib/redmine/scm/adapters/mercurial/redminehelper.py	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/mercurial/redminehelper.py	Mon Jun 06 14:41:04 2011 +0100
@@ -120,9 +120,13 @@
     ui.write('</manifest>\n')
 
 def rhannotate(ui, repo, *pats, **opts):
+    rev = urllib.unquote_plus(opts.pop('rev', None))
+    opts['rev'] = rev
     return commands.annotate(ui, repo, *map(urllib.unquote_plus, pats), **opts)
 
 def rhcat(ui, repo, file1, *pats, **opts):
+    rev = urllib.unquote_plus(opts.pop('rev', None))
+    opts['rev'] = rev
     return commands.cat(ui, repo, urllib.unquote_plus(file1), *map(urllib.unquote_plus, pats), **opts)
 
 def rhdiff(ui, repo, *pats, **opts):
@@ -134,6 +138,18 @@
     opts['nodates'] = True
     return commands.diff(ui, repo, *map(urllib.unquote_plus, pats), **opts)
 
+def rhlog(ui, repo, *pats, **opts):
+    rev      = opts.pop('rev')
+    bra0     = opts.pop('branch')
+    from_rev = urllib.unquote_plus(opts.pop('from', None))
+    to_rev   = urllib.unquote_plus(opts.pop('to'  , None))
+    bra      = urllib.unquote_plus(opts.pop('rhbranch', None))
+    from_rev = from_rev.replace('"', '\\"')
+    to_rev   = to_rev.replace('"', '\\"')
+    opts['rev'] = ['"%s":"%s"' % (from_rev, to_rev)]
+    opts['branch'] = [bra]
+    return commands.log(ui, repo, *map(urllib.unquote_plus, pats), **opts)
+
 def rhmanifest(ui, repo, path='', **opts):
     """output the sub-manifest of the specified directory"""
     ui.write('<?xml version="1.0"?>\n')
@@ -176,6 +192,26 @@
                [('r', 'rev', [], 'revision'),
                 ('c', 'change', '', 'change made by revision')],
                'hg rhdiff ([-c REV] | [-r REV] ...) [FILE]...'),
+    'rhlog': (rhlog,
+                   [
+                    ('r', 'rev', [], 'show the specified revision'),
+                    ('b', 'branch', [],
+                       'show changesets within the given named branch', 'BRANCH'),
+                    ('l', 'limit', '',
+                         'limit number of changes displayed', 'NUM'),
+                    ('d', 'date', '',
+                         'show revisions matching date spec', 'DATE'),
+                    ('u', 'user', [],
+                      'revisions committed by user', 'USER'),
+                    ('', 'from', '',
+                      '', ''),
+                    ('', 'to', '',
+                      '', ''),
+                    ('', 'rhbranch', '',
+                      '', ''),
+                    ('', 'template', '',
+                       'display with template', 'TEMPLATE')],
+                   'hg rhlog [OPTION]... [FILE]'),
     'rhmanifest': (rhmanifest,
                    [('r', 'rev', '', 'show the specified revision')],
                    'hg rhmanifest [-r REV] [PATH]'),
--- a/lib/redmine/scm/adapters/mercurial_adapter.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/mercurial_adapter.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -47,7 +47,7 @@
           end
 
           def client_available
-            !client_version.empty?
+            client_version_above?([0, 9, 5])
           end
 
           def hgversion
@@ -83,7 +83,11 @@
 
         def initialize(url, root_url=nil, login=nil, password=nil, path_encoding=nil)
           super
-          @path_encoding = path_encoding || 'UTF-8'
+          @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding
+        end
+
+        def path_encoding
+          @path_encoding
         end
 
         def info
@@ -118,7 +122,7 @@
         end
 
         def summary
-          return @summary if @summary 
+          return @summary if @summary
           hg 'rhsummary' do |io|
             output = io.read
             if output.respond_to?(:force_encoding)
@@ -132,7 +136,7 @@
         end
         private :summary
 
-        def entries(path=nil, identifier=nil)
+        def entries(path=nil, identifier=nil, options={})
           p1 = scm_iconv(@path_encoding, 'UTF-8', path)
           manifest = hg('rhmanifest', '-r', CGI.escape(hgrev(identifier)),
                         CGI.escape(without_leading_slash(p1.to_s))) do |io|
@@ -192,30 +196,39 @@
             rescue
             end
           end
-
           as_ary(log['logentry']).each do |le|
             cpalist = as_ary(le['paths']['path-copied']).map do |e|
-              [e['__content__'], e['copyfrom-path']].map { |s| CGI.unescape(s) }
+              [e['__content__'], e['copyfrom-path']].map do |s|
+                scm_iconv('UTF-8', @path_encoding, CGI.unescape(s))
+              end
             end
             cpmap = Hash[*cpalist.flatten]
-
             paths = as_ary(le['paths']['path']).map do |e|
               p = scm_iconv('UTF-8', @path_encoding, CGI.unescape(e['__content__']) )
-              {:action => e['action'], :path => with_leading_slash(p),
-               :from_path => (cpmap.member?(p) ? with_leading_slash(cpmap[p]) : nil),
-               :from_revision => (cpmap.member?(p) ? le['revision'] : nil)}
+              {:action        => e['action'],
+               :path          => with_leading_slash(p),
+               :from_path     => (cpmap.member?(p) ? with_leading_slash(cpmap[p]) : nil),
+               :from_revision => (cpmap.member?(p) ? le['node'] : nil)}
             end.sort { |a, b| a[:path] <=> b[:path] }
-
             yield Revision.new(:revision => le['revision'],
-                               :scmid => le['node'],
-                               :author => (le['author']['__content__'] rescue ''),
-                               :time => Time.parse(le['date']['__content__']).localtime,
-                               :message => le['msg']['__content__'],
-                               :paths => paths)
+                               :scmid    => le['node'],
+                               :author   => (le['author']['__content__'] rescue ''),
+                               :time     => Time.parse(le['date']['__content__']),
+                               :message  => le['msg']['__content__'],
+                               :paths    => paths)
           end
           self
         end
 
+        # Returns list of nodes in the specified branch
+        def nodes_in_branch(branch, options={})
+          hg_args = ['rhlog', '--template', '{node|short}\n', '--rhbranch', CGI.escape(branch)]
+          hg_args << '--from' << CGI.escape(branch)
+          hg_args << '--to'   << '0'
+          hg_args << '--limit' << options[:limit] if options[:limit]
+          hg(*hg_args) { |io| io.readlines.map { |e| e.chomp } }
+        end
+
         def diff(path, identifier_from, identifier_to=nil)
           hg_args = %w|rhdiff|
           if identifier_to
@@ -240,7 +253,7 @@
 
         def cat(path, identifier=nil)
           p = CGI.escape(scm_iconv(@path_encoding, 'UTF-8', path))
-          hg 'rhcat', '-r', hgrev(identifier), hgtarget(p) do |io|
+          hg 'rhcat', '-r', CGI.escape(hgrev(identifier)), hgtarget(p) do |io|
             io.binmode
             io.read
           end
@@ -251,7 +264,7 @@
         def annotate(path, identifier=nil)
           p = CGI.escape(scm_iconv(@path_encoding, 'UTF-8', path))
           blame = Annotate.new
-          hg 'rhannotate', '-ncu', '-r', hgrev(identifier), hgtarget(p) do |io|
+          hg 'rhannotate', '-ncu', '-r', CGI.escape(hgrev(identifier)), hgtarget(p) do |io|
             io.each_line do |line|
               line.force_encoding('ASCII-8BIT') if line.respond_to?(:force_encoding)
               next unless line =~ %r{^([^:]+)\s(\d+)\s([0-9a-f]+):\s(.*)$}
--- a/lib/redmine/scm/adapters/subversion_adapter.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/scm/adapters/subversion_adapter.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,282 +1,291 @@
-# Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the 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.
-
-require 'redmine/scm/adapters/abstract_adapter'
-require 'uri'
-
-module Redmine
-  module Scm
-    module Adapters
-      class SubversionAdapter < AbstractAdapter
-
-        # SVN executable name
-        SVN_BIN = Redmine::Configuration['scm_subversion_command'] || "svn"
-
-        class << self
-          def client_command
-            @@bin    ||= SVN_BIN
-          end
-
-          def sq_bin
-            @@sq_bin ||= shell_quote(SVN_BIN)
-          end
-
-          def client_version
-            @@client_version ||= (svn_binary_version || [])
-          end
-
-          def client_available
-            !client_version.empty?
-          end
-
-          def svn_binary_version
-            scm_version = scm_version_from_command_line.dup
-            if scm_version.respond_to?(:force_encoding)
-              scm_version.force_encoding('ASCII-8BIT')
-            end
-            if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)})
-              m[2].scan(%r{\d+}).collect(&:to_i)
-            end
-          end
-
-          def scm_version_from_command_line
-            shellout("#{sq_bin} --version") { |io| io.read }.to_s
-          end
-        end
-
-        # Get info about the svn repository
-        def info
-          cmd = "#{self.class.sq_bin} info --xml #{target}"
-          cmd << credentials_string
-          info = nil
-          shellout(cmd) do |io|
-            output = io.read
-            if output.respond_to?(:force_encoding)
-              output.force_encoding('UTF-8')
-            end
-            begin
-              doc = ActiveSupport::XmlMini.parse(output)
-              #root_url = doc.elements["info/entry/repository/root"].text          
-              info = Info.new({:root_url => doc['info']['entry']['repository']['root']['__content__'],
-                               :lastrev => Revision.new({
-                                 :identifier => doc['info']['entry']['commit']['revision'],
-                                 :time => Time.parse(doc['info']['entry']['commit']['date']['__content__']).localtime,
-                                 :author => (doc['info']['entry']['commit']['author'] ? doc['info']['entry']['commit']['author']['__content__'] : "")
-                               })
-                             })
-            rescue
-            end
-          end
-          return nil if $? && $?.exitstatus != 0
-          info
-        rescue CommandFailed
-          return nil
-        end
-
-        # Returns an Entries collection
-        # or nil if the given path doesn't exist in the repository
-        def entries(path=nil, identifier=nil)
-          path ||= ''
-          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          entries = Entries.new
-          cmd = "#{self.class.sq_bin} list --xml #{target(path)}@#{identifier}"
-          cmd << credentials_string
-          shellout(cmd) do |io|
-            output = io.read
-            if output.respond_to?(:force_encoding)
-              output.force_encoding('UTF-8')
-            end
-            begin
-              doc = ActiveSupport::XmlMini.parse(output)
-              each_xml_element(doc['lists']['list'], 'entry') do |entry|
-                commit = entry['commit']
-                commit_date = commit['date']
-                # Skip directory if there is no commit date (usually that
-                # means that we don't have read access to it)
-                next if entry['kind'] == 'dir' && commit_date.nil?
-                name = entry['name']['__content__']
-                entries << Entry.new({:name => URI.unescape(name),
-                            :path => ((path.empty? ? "" : "#{path}/") + name),
-                            :kind => entry['kind'],
-                            :size => ((s = entry['size']) ? s['__content__'].to_i : nil),
-                            :lastrev => Revision.new({
-                              :identifier => commit['revision'],
-                              :time => Time.parse(commit_date['__content__'].to_s).localtime,
-                              :author => ((a = commit['author']) ? a['__content__'] : nil)
-                              })
-                            })
-              end
-            rescue Exception => e
-              logger.error("Error parsing svn output: #{e.message}")
-              logger.error("Output was:\n #{output}")
-            end
-          end
-          return nil if $? && $?.exitstatus != 0
-          logger.debug("Found #{entries.size} entries in the repository for #{target(path)}") if logger && logger.debug?
-          entries.sort_by_name
-        end
-
-        def properties(path, identifier=nil)
-          # proplist xml output supported in svn 1.5.0 and higher
-          return nil unless self.class.client_version_above?([1, 5, 0])
-          
-          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          cmd = "#{self.class.sq_bin} proplist --verbose --xml #{target(path)}@#{identifier}"
-          cmd << credentials_string
-          properties = {}
-          shellout(cmd) do |io|
-            output = io.read
-            if output.respond_to?(:force_encoding)
-              output.force_encoding('UTF-8')
-            end
-            begin
-              doc = ActiveSupport::XmlMini.parse(output)
-              each_xml_element(doc['properties']['target'], 'property') do |property|
-                properties[ property['name'] ] = property['__content__'].to_s
-              end
-            rescue
-            end
-          end
-          return nil if $? && $?.exitstatus != 0
-          properties
-        end
-
-        def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
-          path ||= ''
-          identifier_from = (identifier_from && identifier_from.to_i > 0) ? identifier_from.to_i : "HEAD"
-          identifier_to = (identifier_to && identifier_to.to_i > 0) ? identifier_to.to_i : 1
-          revisions = Revisions.new
-          cmd = "#{self.class.sq_bin} log --xml -r #{identifier_from}:#{identifier_to}"
-          cmd << credentials_string
-          cmd << " --verbose " if  options[:with_paths]
-          cmd << " --limit #{options[:limit].to_i}" if options[:limit]
-          cmd << ' ' + target(path)
-          shellout(cmd) do |io|
-            output = io.read
-            if output.respond_to?(:force_encoding)
-              output.force_encoding('UTF-8')
-            end
-            begin
-              doc = ActiveSupport::XmlMini.parse(output)
-              each_xml_element(doc['log'], 'logentry') do |logentry|
-                paths = []
-                each_xml_element(logentry['paths'], 'path') do |path|
-                  paths << {:action => path['action'],
-                            :path => path['__content__'],
-                            :from_path => path['copyfrom-path'],
-                            :from_revision => path['copyfrom-rev']
-                            }
-                end if logentry['paths'] && logentry['paths']['path']
-                paths.sort! { |x,y| x[:path] <=> y[:path] }
-                
-                revisions << Revision.new({:identifier => logentry['revision'],
-                              :author => (logentry['author'] ? logentry['author']['__content__'] : ""),
-                              :time => Time.parse(logentry['date']['__content__'].to_s).localtime,
-                              :message => logentry['msg']['__content__'],
-                              :paths => paths
-                            })
-              end
-            rescue
-            end
-          end
-          return nil if $? && $?.exitstatus != 0
-          revisions
-        end
-
-        def diff(path, identifier_from, identifier_to=nil, type="inline")
-          path ||= ''
-          identifier_from = (identifier_from and identifier_from.to_i > 0) ? identifier_from.to_i : ''
-
-          identifier_to = (identifier_to and identifier_to.to_i > 0) ? identifier_to.to_i : (identifier_from.to_i - 1)
-
-          cmd = "#{self.class.sq_bin} diff -r "
-          cmd << "#{identifier_to}:"
-          cmd << "#{identifier_from}"
-          cmd << " #{target(path)}@#{identifier_from}"
-          cmd << credentials_string
-          diff = []
-          shellout(cmd) do |io|
-            io.each_line do |line|
-              diff << line
-            end
-          end
-          return nil if $? && $?.exitstatus != 0
-          diff
-        end
-
-        def cat(path, identifier=nil)
-          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          cmd = "#{self.class.sq_bin} cat #{target(path)}@#{identifier}"
-          cmd << credentials_string
-          cat = nil
-          shellout(cmd) do |io|
-            io.binmode
-            cat = io.read
-          end
-          return nil if $? && $?.exitstatus != 0
-          cat
-        end
-
-        def annotate(path, identifier=nil)
-          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          cmd = "#{self.class.sq_bin} blame #{target(path)}@#{identifier}"
-          cmd << credentials_string
-          blame = Annotate.new
-          shellout(cmd) do |io|
-            io.each_line do |line|
-              next unless line =~ %r{^\s*(\d+)\s*(\S+)\s(.*)$}
-              blame.add_line($3.rstrip, Revision.new(:identifier => $1.to_i, :author => $2.strip))
-            end
-          end
-          return nil if $? && $?.exitstatus != 0
-          blame
-        end
-        
-        private
-        
-        def credentials_string
-          str = ''
-          str << " --username #{shell_quote(@login)}" unless @login.blank?
-          str << " --password #{shell_quote(@password)}" unless @login.blank? || @password.blank?
-          str << " --no-auth-cache --non-interactive"
-          str
-        end
-        
-        # Helper that iterates over the child elements of a xml node
-        # MiniXml returns a hash when a single child is found or an array of hashes for multiple children
-        def each_xml_element(node, name)
-          if node && node[name]
-            if node[name].is_a?(Hash)
-              yield node[name]
-            else
-              node[name].each do |element|
-                yield element
-              end
-            end
-          end
-        end
-
-        def target(path = '')
-          base = path.match(/^\//) ? root_url : url
-          uri = "#{base}/#{path}"
-          uri = URI.escape(URI.escape(uri), '[]')
-          shell_quote(uri.gsub(/[?<>\*]/, ''))
-        end
-      end
-    end
-  end
-end
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
+require 'redmine/scm/adapters/abstract_adapter'
+require 'uri'
+
+module Redmine
+  module Scm
+    module Adapters
+      class SubversionAdapter < AbstractAdapter
+
+        # SVN executable name
+        SVN_BIN = Redmine::Configuration['scm_subversion_command'] || "svn"
+
+        class << self
+          def client_command
+            @@bin    ||= SVN_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(SVN_BIN)
+          end
+
+          def client_version
+            @@client_version ||= (svn_binary_version || [])
+          end
+
+          def client_available
+            # --xml options are introduced in 1.3.
+            # http://subversion.apache.org/docs/release-notes/1.3.html
+            client_version_above?([1, 3])
+          end
+
+          def svn_binary_version
+            scm_version = scm_version_from_command_line.dup
+            if scm_version.respond_to?(:force_encoding)
+              scm_version.force_encoding('ASCII-8BIT')
+            end
+            if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)})
+              m[2].scan(%r{\d+}).collect(&:to_i)
+            end
+          end
+
+          def scm_version_from_command_line
+            shellout("#{sq_bin} --version") { |io| io.read }.to_s
+          end
+        end
+
+        # Get info about the svn repository
+        def info
+          cmd = "#{self.class.sq_bin} info --xml #{target}"
+          cmd << credentials_string
+          info = nil
+          shellout(cmd) do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
+            begin
+              doc = ActiveSupport::XmlMini.parse(output)
+              # root_url = doc.elements["info/entry/repository/root"].text
+              info = Info.new({:root_url => doc['info']['entry']['repository']['root']['__content__'],
+                               :lastrev => Revision.new({
+                                 :identifier => doc['info']['entry']['commit']['revision'],
+                                 :time => Time.parse(doc['info']['entry']['commit']['date']['__content__']).localtime,
+                                 :author => (doc['info']['entry']['commit']['author'] ? doc['info']['entry']['commit']['author']['__content__'] : "")
+                               })
+                             })
+            rescue
+            end
+          end
+          return nil if $? && $?.exitstatus != 0
+          info
+        rescue CommandFailed
+          return nil
+        end
+
+        # Returns an Entries collection
+        # or nil if the given path doesn't exist in the repository
+        def entries(path=nil, identifier=nil, options={})
+          path ||= ''
+          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
+          entries = Entries.new
+          cmd = "#{self.class.sq_bin} list --xml #{target(path)}@#{identifier}"
+          cmd << credentials_string
+          shellout(cmd) do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
+            begin
+              doc = ActiveSupport::XmlMini.parse(output)
+              each_xml_element(doc['lists']['list'], 'entry') do |entry|
+                commit = entry['commit']
+                commit_date = commit['date']
+                # Skip directory if there is no commit date (usually that
+                # means that we don't have read access to it)
+                next if entry['kind'] == 'dir' && commit_date.nil?
+                name = entry['name']['__content__']
+                entries << Entry.new({:name => URI.unescape(name),
+                            :path => ((path.empty? ? "" : "#{path}/") + name),
+                            :kind => entry['kind'],
+                            :size => ((s = entry['size']) ? s['__content__'].to_i : nil),
+                            :lastrev => Revision.new({
+                              :identifier => commit['revision'],
+                              :time => Time.parse(commit_date['__content__'].to_s).localtime,
+                              :author => ((a = commit['author']) ? a['__content__'] : nil)
+                              })
+                            })
+              end
+            rescue Exception => e
+              logger.error("Error parsing svn output: #{e.message}")
+              logger.error("Output was:\n #{output}")
+            end
+          end
+          return nil if $? && $?.exitstatus != 0
+          logger.debug("Found #{entries.size} entries in the repository for #{target(path)}") if logger && logger.debug?
+          entries.sort_by_name
+        end
+
+        def properties(path, identifier=nil)
+          # proplist xml output supported in svn 1.5.0 and higher
+          return nil unless self.class.client_version_above?([1, 5, 0])
+
+          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
+          cmd = "#{self.class.sq_bin} proplist --verbose --xml #{target(path)}@#{identifier}"
+          cmd << credentials_string
+          properties = {}
+          shellout(cmd) do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
+            begin
+              doc = ActiveSupport::XmlMini.parse(output)
+              each_xml_element(doc['properties']['target'], 'property') do |property|
+                properties[ property['name'] ] = property['__content__'].to_s
+              end
+            rescue
+            end
+          end
+          return nil if $? && $?.exitstatus != 0
+          properties
+        end
+
+        def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
+          path ||= ''
+          identifier_from = (identifier_from && identifier_from.to_i > 0) ? identifier_from.to_i : "HEAD"
+          identifier_to = (identifier_to && identifier_to.to_i > 0) ? identifier_to.to_i : 1
+          revisions = Revisions.new
+          cmd = "#{self.class.sq_bin} log --xml -r #{identifier_from}:#{identifier_to}"
+          cmd << credentials_string
+          cmd << " --verbose " if  options[:with_paths]
+          cmd << " --limit #{options[:limit].to_i}" if options[:limit]
+          cmd << ' ' + target(path)
+          shellout(cmd) do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
+            begin
+              doc = ActiveSupport::XmlMini.parse(output)
+              each_xml_element(doc['log'], 'logentry') do |logentry|
+                paths = []
+                each_xml_element(logentry['paths'], 'path') do |path|
+                  paths << {:action => path['action'],
+                            :path => path['__content__'],
+                            :from_path => path['copyfrom-path'],
+                            :from_revision => path['copyfrom-rev']
+                            }
+                end if logentry['paths'] && logentry['paths']['path']
+                paths.sort! { |x,y| x[:path] <=> y[:path] }
+
+                revisions << Revision.new({:identifier => logentry['revision'],
+                              :author => (logentry['author'] ? logentry['author']['__content__'] : ""),
+                              :time => Time.parse(logentry['date']['__content__'].to_s).localtime,
+                              :message => logentry['msg']['__content__'],
+                              :paths => paths
+                            })
+              end
+            rescue
+            end
+          end
+          return nil if $? && $?.exitstatus != 0
+          revisions
+        end
+
+        def diff(path, identifier_from, identifier_to=nil, type="inline")
+          path ||= ''
+          identifier_from = (identifier_from and identifier_from.to_i > 0) ? identifier_from.to_i : ''
+
+          identifier_to = (identifier_to and identifier_to.to_i > 0) ? identifier_to.to_i : (identifier_from.to_i - 1)
+
+          cmd = "#{self.class.sq_bin} diff -r "
+          cmd << "#{identifier_to}:"
+          cmd << "#{identifier_from}"
+          cmd << " #{target(path)}@#{identifier_from}"
+          cmd << credentials_string
+          diff = []
+          shellout(cmd) do |io|
+            io.each_line do |line|
+              diff << line
+            end
+          end
+          return nil if $? && $?.exitstatus != 0
+          diff
+        end
+
+        def cat(path, identifier=nil)
+          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
+          cmd = "#{self.class.sq_bin} cat #{target(path)}@#{identifier}"
+          cmd << credentials_string
+          cat = nil
+          shellout(cmd) do |io|
+            io.binmode
+            cat = io.read
+          end
+          return nil if $? && $?.exitstatus != 0
+          cat
+        end
+
+        def annotate(path, identifier=nil)
+          identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
+          cmd = "#{self.class.sq_bin} blame #{target(path)}@#{identifier}"
+          cmd << credentials_string
+          blame = Annotate.new
+          shellout(cmd) do |io|
+            io.each_line do |line|
+              next unless line =~ %r{^\s*(\d+)\s*(\S+)\s(.*)$}
+              rev = $1
+              blame.add_line($3.rstrip,
+                   Revision.new(
+                      :identifier => rev,
+                      :revision   => rev,
+                      :author     => $2.strip
+                      ))
+            end
+          end
+          return nil if $? && $?.exitstatus != 0
+          blame
+        end
+
+        private
+
+        def credentials_string
+          str = ''
+          str << " --username #{shell_quote(@login)}" unless @login.blank?
+          str << " --password #{shell_quote(@password)}" unless @login.blank? || @password.blank?
+          str << " --no-auth-cache --non-interactive"
+          str
+        end
+
+        # Helper that iterates over the child elements of a xml node
+        # MiniXml returns a hash when a single child is found
+        # or an array of hashes for multiple children
+        def each_xml_element(node, name)
+          if node && node[name]
+            if node[name].is_a?(Hash)
+              yield node[name]
+            else
+              node[name].each do |element|
+                yield element
+              end
+            end
+          end
+        end
+
+        def target(path = '')
+          base = path.match(/^\//) ? root_url : url
+          uri = "#{base}/#{path}"
+          uri = URI.escape(URI.escape(uri), '[]')
+          shell_quote(uri.gsub(/[?<>\*]/, ''))
+        end
+      end
+    end
+  end
+end
--- a/lib/redmine/unified_diff.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/unified_diff.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -17,14 +17,16 @@
 
 module Redmine
   # Class used to parse unified diffs
-  class UnifiedDiff < Array  
+  class UnifiedDiff < Array
+    attr_reader :diff_type
+    
     def initialize(diff, options={})
       options.assert_valid_keys(:type, :max_lines)
       diff = diff.split("\n") if diff.is_a?(String)
-      diff_type = options[:type] || 'inline'
+      @diff_type = options[:type] || 'inline'
       lines = 0
       @truncated = false
-      diff_table = DiffTable.new(diff_type)
+      diff_table = DiffTable.new(@diff_type)
       diff.each do |line|
         line_encoding = nil
         if line.respond_to?(:force_encoding)
@@ -53,17 +55,15 @@
   end
 
   # Class that represents a file diff
-  class DiffTable < Hash  
-    attr_reader :file_name, :line_num_l, :line_num_r    
+  class DiffTable < Array  
+    attr_reader :file_name
 
     # Initialize with a Diff file and the type of Diff View
     # The type view must be inline or sbs (side_by_side)
     def initialize(type="inline")
       @parsing = false
-      @nb_line = 1
-      @start = false
-      @before = 'same'
-      @second = true
+      @added = 0
+      @removed = 0
       @type = type
     end
 
@@ -86,11 +86,21 @@
           @line_num_l = $2.to_i
           @line_num_r = $5.to_i
         else
-          @nb_line += 1 if parse_line(line, @type)          
+          parse_line(line, @type)          
         end
       end
       return true
     end
+    
+    def each_line
+      prev_line_left, prev_line_right = nil, nil
+      each do |line|
+        spacing = prev_line_left && prev_line_right && (line.nb_line_left != prev_line_left+1) && (line.nb_line_right != prev_line_right+1)
+        yield spacing, line
+        prev_line_left = line.nb_line_left.to_i if line.nb_line_left.to_i > 0
+        prev_line_right = line.nb_line_right.to_i if line.nb_line_right.to_i > 0
+      end
+    end
 
     def inspect
       puts '### DIFF TABLE ###'
@@ -100,74 +110,91 @@
       end
     end
 
-  private  
-    # Test if is a Side By Side type
-    def sbs?(type, func)
-      if @start and type == "sbs"
-        if @before == func and @second
-          tmp_nb_line = @nb_line
-          self[tmp_nb_line] = Diff.new
-        else
-            @second = false
-            tmp_nb_line = @start
-            @start += 1
-            @nb_line -= 1
-        end
-      else
-        tmp_nb_line = @nb_line
-        @start = @nb_line
-        self[tmp_nb_line] = Diff.new
-        @second = true
-      end
-      unless self[tmp_nb_line]
-        @nb_line += 1
-        self[tmp_nb_line] = Diff.new
-      else
-        self[tmp_nb_line]
-      end
-    end
+    private
 
     # Escape the HTML for the diff
     def escapeHTML(line)
         CGI.escapeHTML(line)
     end
+      
+    def diff_for_added_line
+      if @type == 'sbs' && @removed > 0 && @added < @removed
+        self[-(@removed - @added)]
+      else
+        diff = Diff.new
+        self << diff
+        diff
+      end
+    end
 
     def parse_line(line, type="inline")
       if line[0, 1] == "+"
-        diff = sbs? type, 'add'
-        @before = 'add'
+        diff = diff_for_added_line
         diff.line_right = escapeHTML line[1..-1]
         diff.nb_line_right = @line_num_r
         diff.type_diff_right = 'diff_in'
         @line_num_r += 1
+        @added += 1
         true
       elsif line[0, 1] == "-"
-        diff = sbs? type, 'remove'
-        @before = 'remove'
+        diff = Diff.new
         diff.line_left = escapeHTML line[1..-1]
         diff.nb_line_left = @line_num_l
         diff.type_diff_left = 'diff_out'
+        self << diff
         @line_num_l += 1
+        @removed += 1
         true
-      elsif line[0, 1] =~ /\s/
-        @before = 'same'
-        @start = false
-        diff = Diff.new
-        diff.line_right = escapeHTML line[1..-1]
-        diff.nb_line_right = @line_num_r
-        diff.line_left = escapeHTML line[1..-1]
-        diff.nb_line_left = @line_num_l
-        self[@nb_line] = diff
-        @line_num_l += 1
-        @line_num_r += 1
-        true
-      elsif line[0, 1] = "\\"
+      else
+        write_offsets
+        if line[0, 1] =~ /\s/
+          diff = Diff.new
+          diff.line_right = escapeHTML line[1..-1]
+          diff.nb_line_right = @line_num_r
+          diff.line_left = escapeHTML line[1..-1]
+          diff.nb_line_left = @line_num_l
+          self << diff
+          @line_num_l += 1
+          @line_num_r += 1
+          true
+        elsif line[0, 1] = "\\"
           true
         else
           false
         end
       end
     end
+    
+    def write_offsets
+      if @added > 0 && @added == @removed
+        @added.times do |i|
+          line = self[-(1 + i)]
+          removed = (@type == 'sbs') ? line : self[-(1 + @added + i)]
+          offsets = offsets(removed.line_left, line.line_right)
+          removed.offsets = line.offsets = offsets
+        end
+      end
+      @added = 0
+      @removed = 0
+    end
+    
+    def offsets(line_left, line_right)
+      if line_left.present? && line_right.present? && line_left != line_right
+        max = [line_left.size, line_right.size].min
+        starting = 0
+        while starting < max && line_left[starting] == line_right[starting]
+          starting += 1
+        end
+        ending = -1
+        while ending >= -(max - starting) && line_left[ending] == line_right[ending]
+          ending -= 1
+        end
+        unless starting == 0 && ending == -1
+          [starting, ending]
+        end
+      end
+    end
+  end
 
   # A line of diff
   class Diff  
@@ -177,6 +204,7 @@
     attr_accessor :line_right
     attr_accessor :type_diff_right
     attr_accessor :type_diff_left
+    attr_accessor :offsets
     
     def initialize()
       self.nb_line_left = ''
@@ -186,6 +214,38 @@
       self.type_diff_right = ''
       self.type_diff_left = ''
     end
+    
+    def type_diff
+      type_diff_right == 'diff_in' ? type_diff_right : type_diff_left
+    end
+    
+    def line
+      type_diff_right == 'diff_in' ? line_right : line_left
+    end
+    
+    def html_line_left
+      if offsets
+        line_left.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>')
+      else
+        line_left
+      end
+    end
+    
+    def html_line_right
+      if offsets
+        line_right.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>')
+      else
+        line_right
+      end
+    end
+    
+    def html_line
+      if offsets
+        line.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>')
+      else
+        line
+      end
+    end
 
     def inspect
       puts '### Start Line Diff ###'
--- a/lib/redmine/version.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/version.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -3,9 +3,9 @@
 module Redmine
   module VERSION #:nodoc:
     MAJOR = 1
-    MINOR = 1
-    TINY  = 1
-    
+    MINOR = 2
+    TINY  = 0
+
     # Branch values:
     # * official release: nil
     # * stable branch:    stable
@@ -20,24 +20,25 @@
           f = File.open(entries_path, 'r')
           entries = f.read
           f.close
-     	  if entries.match(%r{^\d+})
-     	    revision = $1.to_i if entries.match(%r{^\d+\s+dir\s+(\d+)\s})
-     	  else
-   	        xml = REXML::Document.new(entries)
-   	        revision = xml.elements['wc-entries'].elements[1].attributes['revision'].to_i
-   	      end
-   	    rescue
-   	      # Could not find the current revision
-   	    end
- 	  end
- 	  revision
+          if entries.match(%r{^\d+})
+            revision = $1.to_i if entries.match(%r{^\d+\s+dir\s+(\d+)\s})
+          else
+            xml = REXML::Document.new(entries)
+            revision =
+              xml.elements['wc-entries'].elements[1].attributes['revision'].to_i
+          end
+        rescue
+          # Could not find the current revision
+        end
+      end
+      revision
     end
 
     REVISION = self.revision
-    ARRAY = [MAJOR, MINOR, TINY, BRANCH, REVISION].compact
-    STRING = ARRAY.join('.')
+    ARRAY    = [MAJOR, MINOR, TINY, BRANCH, REVISION].compact
+    STRING   = ARRAY.join('.')
     
-    def self.to_a; ARRAY end
+    def self.to_a; ARRAY  end
     def self.to_s; STRING end    
   end
 end
--- a/lib/redmine/views/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/views/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/views
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/views
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 e0e38b713c41ea63221dd877c6939983
 2010-12-03T11:25:21.858858Z
 4452
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 849e9df27c041f540e690c6192939edf
 2009-01-29T13:54:44.887081Z
 2334
@@ -106,7 +106,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 04feeced33ca55e9fb99099efe2fdcf6
 2010-12-03T11:25:21.858858Z
 4452
--- a/lib/redmine/views/builders/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/views/builders/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/views/builders
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/views/builders
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 8816150c9264dfa6e639af165670cbb1
 2010-12-11T13:13:49.013705Z
 4489
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 f9654f4bc43dbb5c01d5be2d6b045dd7
 2010-12-11T13:13:49.013705Z
 4489
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 4b47e2fa5030d1cdad48f3abb5ab7c44
 2010-12-03T11:25:21.858858Z
 4452
--- a/lib/redmine/views/my_page/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/views/my_page/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/views/my_page
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/views/my_page
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 b06dfe20a85191516f81de5874f37ec6
 2009-04-05T13:33:54.194067Z
 2659
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/wiki_formatting/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/wiki_formatting
+END
--- a/lib/redmine/wiki_formatting/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/wiki_formatting/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/wiki_formatting
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/wiki_formatting
 http://redmine.rubyforge.org/svn
 
 
 
-2010-11-06T17:47:27.890964Z
-4376
+2011-03-28T20:16:05.752041Z
+5242
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 879f8ce24a6bb5e4f5ea3b6f798b7a63
 2010-11-06T17:47:27.890964Z
 4376
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/wiki_formatting/textile/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/wiki_formatting/textile
+END
+helper.rb
+K 25
+svn:wc:ra_dav:version-url
+V 84
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/wiki_formatting/textile/helper.rb
+END
+formatter.rb
+K 25
+svn:wc:ra_dav:version-url
+V 87
+/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/wiki_formatting/textile/formatter.rb
+END
--- a/lib/redmine/wiki_formatting/textile/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/wiki_formatting/textile/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/redmine/wiki_formatting/textile
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/wiki_formatting/textile
 http://redmine.rubyforge.org/svn
 
 
 
-2010-11-06T17:47:27.890964Z
-4376
+2011-03-28T20:16:05.752041Z
+5242
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-dec83b1d0d7f682d1ebf1f172fe3c90b
-2009-11-11T10:55:19.574870Z
-3025
+2011-06-06T13:20:53.000000Z
+e4c07fbafae7798129e133c528e1eec8
+2011-03-28T20:16:05.752041Z
+5242
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-1936
+2123
 
 formatter.rb
 file
@@ -66,10 +66,10 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-b8052f700ecb0991fabdd3a5b684a412
-2010-11-06T17:47:27.890964Z
-4376
+2011-06-06T13:20:53.000000Z
+aeba307e1011ac3f15b25fd91065ae2e
+2011-03-14T20:35:36.619571Z
+5133
 jplang
 has-props
 
@@ -92,5 +92,5 @@
 
 
 
-4724
+4722
 
--- a/lib/redmine/wiki_formatting/textile/.svn/text-base/formatter.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/wiki_formatting/textile/.svn/text-base/formatter.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -43,7 +43,7 @@
         # Patch for RedCloth.  Fixed in RedCloth r128 but _why hasn't released it yet.
         # <a href="http://code.whytheluckystiff.net/redcloth/changeset/128">http://code.whytheluckystiff.net/redcloth/changeset/128</a>
         def hard_break( text ) 
-          text.gsub!( /(.)\n(?!\n|\Z|>| *([#*=]+(\s|$)|[{|]))/, "\\1<br />" ) if hard_breaks
+          text.gsub!( /(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, "\\1<br />" ) if hard_breaks
         end
         
         # Patch to add code highlighting support to RedCloth
--- a/lib/redmine/wiki_formatting/textile/.svn/text-base/helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/wiki_formatting/textile/.svn/text-base/helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -20,17 +20,13 @@
     module Textile
       module Helper
         def wikitoolbar_for(field_id)
+          heads_for_wiki_formatter
           # Is there a simple way to link to a public resource?
           url = "#{Redmine::Utils.relative_url_root}/help/wiki_syntax.html"
-          
-          help_link = l(:setting_text_formatting) + ': ' +
-            link_to(l(:label_help), url,
-                    :onclick => "window.open(\"#{ url }\", \"\", \"resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes\"); return false;")
+          help_link = link_to(l(:setting_text_formatting), url,
+            :onclick => "window.open(\"#{ url }\", \"\", \"resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes\"); return false;")
       
-          javascript_include_tag('jstoolbar/jstoolbar') +
-            javascript_include_tag('jstoolbar/textile') +
-            javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language.to_s.downcase}") +
-          javascript_tag("var wikiToolbar = new jsToolBar($('#{field_id}')); wikiToolbar.setHelpLink('#{help_link}'); wikiToolbar.draw();")
+          javascript_tag("var wikiToolbar = new jsToolBar($('#{field_id}')); wikiToolbar.setHelpLink('#{escape_javascript help_link}'); wikiToolbar.draw();")
         end
       
         def initial_page_content(page)
@@ -38,7 +34,15 @@
         end
       
         def heads_for_wiki_formatter
-          stylesheet_link_tag 'jstoolbar'
+          unless @heads_for_wiki_formatter_included
+            content_for :header_tags do
+              javascript_include_tag('jstoolbar/jstoolbar') +
+              javascript_include_tag('jstoolbar/textile') +
+              javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language.to_s.downcase}") +
+              stylesheet_link_tag('jstoolbar')
+            end
+            @heads_for_wiki_formatter_included = true
+          end
         end
       end
     end
--- a/lib/redmine/wiki_formatting/textile/formatter.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/wiki_formatting/textile/formatter.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -43,7 +43,7 @@
         # Patch for RedCloth.  Fixed in RedCloth r128 but _why hasn't released it yet.
         # <a href="http://code.whytheluckystiff.net/redcloth/changeset/128">http://code.whytheluckystiff.net/redcloth/changeset/128</a>
         def hard_break( text ) 
-          text.gsub!( /(.)\n(?!\n|\Z|>| *([#*=]+(\s|$)|[{|]))/, "\\1<br />" ) if hard_breaks
+          text.gsub!( /(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, "\\1<br />" ) if hard_breaks
         end
         
         # Patch to add code highlighting support to RedCloth
--- a/lib/redmine/wiki_formatting/textile/helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/redmine/wiki_formatting/textile/helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -20,17 +20,13 @@
     module Textile
       module Helper
         def wikitoolbar_for(field_id)
+          heads_for_wiki_formatter
           # Is there a simple way to link to a public resource?
           url = "#{Redmine::Utils.relative_url_root}/help/wiki_syntax.html"
-          
-          help_link = l(:setting_text_formatting) + ': ' +
-            link_to(l(:label_help), url,
-                    :onclick => "window.open(\"#{ url }\", \"\", \"resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes\"); return false;")
+          help_link = link_to(l(:setting_text_formatting), url,
+            :onclick => "window.open(\"#{ url }\", \"\", \"resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes\"); return false;")
       
-          javascript_include_tag('jstoolbar/jstoolbar') +
-            javascript_include_tag('jstoolbar/textile') +
-            javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language.to_s.downcase}") +
-          javascript_tag("var wikiToolbar = new jsToolBar($('#{field_id}')); wikiToolbar.setHelpLink('#{help_link}'); wikiToolbar.draw();")
+          javascript_tag("var wikiToolbar = new jsToolBar($('#{field_id}')); wikiToolbar.setHelpLink('#{escape_javascript help_link}'); wikiToolbar.draw();")
         end
       
         def initial_page_content(page)
@@ -38,7 +34,15 @@
         end
       
         def heads_for_wiki_formatter
-          stylesheet_link_tag 'jstoolbar'
+          unless @heads_for_wiki_formatter_included
+            content_for :header_tags do
+              javascript_include_tag('jstoolbar/jstoolbar') +
+              javascript_include_tag('jstoolbar/textile') +
+              javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language.to_s.downcase}") +
+              stylesheet_link_tag('jstoolbar')
+            end
+            @heads_for_wiki_formatter_included = true
+          end
         end
       end
     end
--- a/lib/tasks/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/tasks/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,125 +1,23 @@
 K 25
 svn:wc:ra_dav:version-url
-V 34
-/svn/!svn/ver/4950/trunk/lib/tasks
-END
-deprecated.rake
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/691/trunk/lib/tasks/deprecated.rake
-END
-jdbc.rake
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/3721/trunk/lib/tasks/jdbc.rake
+V 48
+/svn/!svn/ver/5943/branches/1.2-stable/lib/tasks
 END
 extract_fixtures.rake
 K 25
 svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/67/trunk/lib/tasks/extract_fixtures.rake
-END
-reminder.rake
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/4167/trunk/lib/tasks/reminder.rake
-END
-metrics.rake
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/2825/trunk/lib/tasks/metrics.rake
-END
-initializers.rake
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4405/trunk/lib/tasks/initializers.rake
-END
-ciphering.rake
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4950/trunk/lib/tasks/ciphering.rake
-END
-permissions.rake
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3948/trunk/lib/tasks/permissions.rake
-END
-load_default_data.rake
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/2592/trunk/lib/tasks/load_default_data.rake
-END
-testing.rake
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/4806/trunk/lib/tasks/testing.rake
-END
-watchers.rake
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/3167/trunk/lib/tasks/watchers.rake
-END
-plugins.rake
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/1786/trunk/lib/tasks/plugins.rake
-END
-yardoc.rake
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/3922/trunk/lib/tasks/yardoc.rake
+V 70
+/svn/!svn/ver/5878/branches/1.2-stable/lib/tasks/extract_fixtures.rake
 END
 locales.rake
 K 25
 svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/4937/trunk/lib/tasks/locales.rake
-END
-migrate_from_trac.rake
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4599/trunk/lib/tasks/migrate_from_trac.rake
-END
-migrate_from_mantis.rake
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4765/trunk/lib/tasks/migrate_from_mantis.rake
+V 61
+/svn/!svn/ver/5878/branches/1.2-stable/lib/tasks/locales.rake
 END
 email.rake
 K 25
 svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/4256/trunk/lib/tasks/email.rake
+V 59
+/svn/!svn/ver/5943/branches/1.2-stable/lib/tasks/email.rake
 END
-migrate_plugins.rake
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/752/trunk/lib/tasks/migrate_plugins.rake
-END
-ci.rake
-K 25
-svn:wc:ra_dav:version-url
-V 42
-/svn/!svn/ver/4643/trunk/lib/tasks/ci.rake
-END
-fetch_changesets.rake
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/1155/trunk/lib/tasks/fetch_changesets.rake
-END
--- a/lib/tasks/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/tasks/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/lib/tasks
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/tasks
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-26T13:09:25.657748Z
-4950
-jplang
+2011-05-28T03:34:47.536780Z
+5943
+tmaruyama
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 03301be8b264b5cb46d05896861dcc4d
 2007-09-02T08:08:10.346505Z
 691
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 2ee57ccc06c675e55c38a4153a27c7c3
 2010-05-01T09:37:46.451305Z
 3721
@@ -100,11 +100,11 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-0c57af5536009680bb8c3c3302fc628d
-2006-07-29T09:32:58.780216Z
-12
-jplang
+2011-06-06T13:20:53.000000Z
+7a4ab6c4928c49aa5194dec204164068
+2011-04-28T07:10:13.491200Z
+5560
+tmaruyama
 
 
 
@@ -126,7 +126,7 @@
 
 
 
-877
+863
 
 reminder.rake
 file
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 07fcf57752978d65a694eb57adcc0851
 2010-09-20T23:17:51.402972Z
 4167
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 0254f4ee916dee0a2572e63e947f8a1b
 2009-07-27T00:55:43.057910Z
 2825
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c25b466de7654465538a91e5f5ab32b9
 2010-11-14T15:14:19.280754Z
 4405
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 b522c20249b1fad89c3276d10ccaaf6b
 2011-02-26T13:09:25.657748Z
 4950
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 010fbb563237ff01803aa47736cf863e
 2010-08-18T17:23:23.071766Z
 3948
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 984c757ee4c8fa78f649f8dd34b715cf
 2009-03-15T10:03:56.604709Z
 2592
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 ca73c8345daa839f0145c671ad94b91f
 2011-02-11T15:30:45.959165Z
 4806
@@ -372,7 +372,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 16eaf27a5959829a12961ff16e233600
 2009-12-13T12:39:22.716082Z
 3167
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 f27a83cf3f04d7906ac2f3ca40d01a20
 2008-09-05T10:31:06.632668Z
 1786
@@ -440,7 +440,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 5c9889bed6f4a4d18dbeb3d904855bb6
 2010-08-07T15:11:26.667915Z
 3922
@@ -474,11 +474,11 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-ceb44040708bb290ad5b62b5a366e823
-2011-02-23T18:03:33.945201Z
-4937
-jplang
+2011-06-06T13:20:53.000000Z
+d8372de066f74a4f6e71b5795a316cf3
+2011-05-10T11:41:30.089198Z
+5724
+tmaruyama
 has-props
 
 
@@ -500,7 +500,7 @@
 
 
 
-4250
+4206
 
 migrate_from_trac.rake
 file
@@ -508,7 +508,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 db60f05f7cd325cbdd984f0b6d7b42ea
 2010-12-31T15:30:50.544770Z
 4599
@@ -542,7 +542,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ba7db3c8df92c72d300288ec7276dbad
 2011-01-28T19:45:09.952949Z
 4765
@@ -576,11 +576,11 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-7875b7a15307c626a93c284f33757320
-2010-10-15T22:50:33.240825Z
-4256
-edavis10
+2011-06-06T13:20:53.000000Z
+6d17052a266b55a94e9d8de784cc1331
+2011-05-28T03:34:47.536780Z
+5943
+tmaruyama
 
 
 
@@ -602,7 +602,7 @@
 
 
 
-8244
+8145
 
 migrate_plugins.rake
 file
@@ -610,7 +610,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 82e0901f7cbdda05ed63c12a764c3614
 2007-09-23T17:19:27.414302Z
 752
@@ -644,7 +644,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 93f8964aea856c06fb2eaa62ca2023c2
 2011-01-06T18:52:37.169690Z
 4643
@@ -678,7 +678,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 320b77011663b1209247bb809bc43ecb
 2008-02-16T16:25:58.204498Z
 1155
--- a/lib/tasks/.svn/text-base/email.rake.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/tasks/.svn/text-base/email.rake.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -29,7 +29,7 @@
                            create: create a user account
   no_permission_check=1    disable permission checking when receiving
                            the email
-  
+
 Issue attributes control options:
   project=PROJECT          identifier of the target project
   status=STATUS            name of the target status
@@ -58,10 +58,10 @@
       options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
       options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user']
       options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check']
-      
+
       MailHandler.receive(STDIN.read, options)
     end
-    
+
     desc <<-END_DESC
 Read emails from an IMAP server.
 
@@ -73,7 +73,7 @@
                            create: create a user account
   no_permission_check=1    disable permission checking when receiving
                            the email
-  
+
 Available IMAP options:
   host=HOST                IMAP server host (default: 127.0.0.1)
   port=PORT                IMAP server port (default: 143)
@@ -81,7 +81,7 @@
   username=USERNAME        IMAP account
   password=PASSWORD        IMAP password
   folder=FOLDER            IMAP folder to read (default: INBOX)
-  
+
 Issue attributes control options:
   project=PROJECT          identifier of the target project
   status=STATUS            name of the target status
@@ -91,22 +91,22 @@
   allow_override=ATTRS     allow email content to override attributes
                            specified by previous options
                            ATTRS is a comma separated list of attributes
-                           
+
 Processed emails control options:
   move_on_success=MAILBOX  move emails that were successfully received
                            to MAILBOX instead of deleting them
   move_on_failure=MAILBOX  move emails that were ignored to MAILBOX
-  
+
 Examples:
   # No project specified. Emails MUST contain the 'Project' keyword:
-  
+
   rake redmine:email:receive_iamp RAILS_ENV="production" \\
     host=imap.foo.bar username=redmine@example.net password=xxx
 
 
   # Fixed project and default tracker specified, but emails can override
   # both tracker and priority attributes:
-  
+
   rake redmine:email:receive_iamp RAILS_ENV="production" \\
     host=imap.foo.bar username=redmine@example.net password=xxx ssl=1 \\
     project=foo \\
@@ -123,7 +123,7 @@
                       :folder => ENV['folder'],
                       :move_on_success => ENV['move_on_success'],
                       :move_on_failure => ENV['move_on_failure']}
-                      
+
       options = { :issue => {} }
       %w(project status tracker category priority).each { |a| options[:issue][a.to_sym] = ENV[a] if ENV[a] }
       options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
@@ -132,7 +132,7 @@
 
       Redmine::IMAP.check(imap_options, options)
     end
-    
+
     desc <<-END_DESC
 Read emails from an POP3 server.
 
@@ -148,7 +148,7 @@
 
 See redmine:email:receive_imap for more options and examples.
 END_DESC
-    
+
     task :receive_pop3 => :environment do
       pop_options  = {:host => ENV['host'],
                       :port => ENV['port'],
@@ -156,24 +156,24 @@
                       :username => ENV['username'],
                       :password => ENV['password'],
                       :delete_unprocessed => ENV['delete_unprocessed']}
-                      
+
       options = { :issue => {} }
       %w(project status tracker category priority).each { |a| options[:issue][a.to_sym] = ENV[a] if ENV[a] }
       options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
       options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user']
       options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check']
-      
+
       Redmine::POP3.check(pop_options, options)
     end
-    
+
     desc "Send a test email to the user with the provided login name"
     task :test, :login, :needs => :environment do |task, args|
       include Redmine::I18n
-      abort l(:notice_email_error, "Please include the user login to test with. Example: login=examle-login") if args[:login].blank?
+      abort l(:notice_email_error, "Please include the user login to test with. Example: rake redmine:email:test[login]") if args[:login].blank?
 
       user = User.find_by_login(args[:login])
-      abort l(:notice_email_error, "User #{args[:login]} not found") unless user.logged?
-      
+      abort l(:notice_email_error, "User #{args[:login]} not found") unless user && user.logged?
+
       ActionMailer::Base.raise_delivery_errors = true
       begin
         Mailer.deliver_test(User.current)
--- a/lib/tasks/.svn/text-base/extract_fixtures.rake.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/tasks/.svn/text-base/extract_fixtures.rake.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -10,15 +10,13 @@
     File.open("#{RAILS_ROOT}/#{table_name}.yml", 'w' ) do |file|
       data = ActiveRecord::Base.connection.select_all(sql % table_name)
       file.write data.inject({}) { |hash, record|
-      
-      # cast extracted values
-      ActiveRecord::Base.connection.columns(table_name).each { |col|
-        record[col.name] = col.type_cast(record[col.name]) if record[col.name]      
-      }      
-      
-      hash["#{table_name}_#{i.succ!}"] = record
-      hash
+        # cast extracted values
+        ActiveRecord::Base.connection.columns(table_name).each { |col|
+          record[col.name] = col.type_cast(record[col.name]) if record[col.name]
+        }
+        hash["#{table_name}_#{i.succ!}"] = record
+        hash
       }.to_yaml
     end
   end
-end
\ No newline at end of file
+end
--- a/lib/tasks/.svn/text-base/locales.rake.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/tasks/.svn/text-base/locales.rake.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -9,21 +9,21 @@
   desc 'Updates language files based on en.yml content (only works for new top level keys).'
   task :update do
     dir = ENV['DIR'] || './config/locales'
-    
+
     en_strings = YAML.load(File.read(File.join(dir,'en.yml')))['en']
-    
+
     files = Dir.glob(File.join(dir,'*.{yaml,yml}'))
     files.each do |file|
       puts "Updating file #{file}"
       file_strings = YAML.load(File.read(file))
       file_strings = file_strings[file_strings.keys.first]
-    
+
       missing_keys = en_strings.keys - file_strings.keys
       next if missing_keys.empty?
-      
+
       puts "==> Missing #{missing_keys.size} keys (#{missing_keys.join(', ')})"
       lang = File.open(file, 'a')
-      
+
       missing_keys.each do |key|
         {key => en_strings[key]}.to_yaml.each_line do |line|
           next if line =~ /^---/ || line.empty?
@@ -31,11 +31,11 @@
           lang << "  #{line}"
         end
       end
-      
+
       lang.close
     end
   end
-  
+
   desc 'Checks interpolation arguments in locals against en.yml'
   task :check_interpolation do
     dir = ENV['DIR'] || './config/locales'
@@ -44,7 +44,7 @@
     files.each do |file|
       file_strings = YAML.load(File.read(file))
       file_strings = file_strings[file_strings.keys.first]
-      
+
       file_strings.each do |key, string|
         next unless string.is_a?(String)
         string.scan /%\{\w+\}/ do |match|
@@ -71,7 +71,7 @@
     deletes = ENV['key'] ? Regexp.union(ENV['key'].split(',')) : nil
     # Ignore multiline keys (begin with | or >) and keys with children (nothing meaningful after :)
     delete_regex = /\A  #{deletes}: +[^\|>\s#].*\z/
-    
+
     files.each do |path|
       # Skip certain locales
       (puts "Skipping #{path}"; next) if File.basename(path, ".yml") =~ skips
@@ -80,7 +80,7 @@
       File.open(path, 'w') {|file| orig_content.each_line {|line| file.puts line unless line.chomp =~ delete_regex}}
     end
   end
-  
+
   desc <<-END_DESC
 Adds a new top-level translation string to all locale file (only works for childless keys, probably doesn\'t work on windows, doesn't check for duplicates).
 
--- a/lib/tasks/email.rake	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/tasks/email.rake	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -29,7 +29,7 @@
                            create: create a user account
   no_permission_check=1    disable permission checking when receiving
                            the email
-  
+
 Issue attributes control options:
   project=PROJECT          identifier of the target project
   status=STATUS            name of the target status
@@ -58,10 +58,10 @@
       options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
       options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user']
       options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check']
-      
+
       MailHandler.receive(STDIN.read, options)
     end
-    
+
     desc <<-END_DESC
 Read emails from an IMAP server.
 
@@ -73,7 +73,7 @@
                            create: create a user account
   no_permission_check=1    disable permission checking when receiving
                            the email
-  
+
 Available IMAP options:
   host=HOST                IMAP server host (default: 127.0.0.1)
   port=PORT                IMAP server port (default: 143)
@@ -81,7 +81,7 @@
   username=USERNAME        IMAP account
   password=PASSWORD        IMAP password
   folder=FOLDER            IMAP folder to read (default: INBOX)
-  
+
 Issue attributes control options:
   project=PROJECT          identifier of the target project
   status=STATUS            name of the target status
@@ -91,22 +91,22 @@
   allow_override=ATTRS     allow email content to override attributes
                            specified by previous options
                            ATTRS is a comma separated list of attributes
-                           
+
 Processed emails control options:
   move_on_success=MAILBOX  move emails that were successfully received
                            to MAILBOX instead of deleting them
   move_on_failure=MAILBOX  move emails that were ignored to MAILBOX
-  
+
 Examples:
   # No project specified. Emails MUST contain the 'Project' keyword:
-  
+
   rake redmine:email:receive_iamp RAILS_ENV="production" \\
     host=imap.foo.bar username=redmine@example.net password=xxx
 
 
   # Fixed project and default tracker specified, but emails can override
   # both tracker and priority attributes:
-  
+
   rake redmine:email:receive_iamp RAILS_ENV="production" \\
     host=imap.foo.bar username=redmine@example.net password=xxx ssl=1 \\
     project=foo \\
@@ -123,7 +123,7 @@
                       :folder => ENV['folder'],
                       :move_on_success => ENV['move_on_success'],
                       :move_on_failure => ENV['move_on_failure']}
-                      
+
       options = { :issue => {} }
       %w(project status tracker category priority).each { |a| options[:issue][a.to_sym] = ENV[a] if ENV[a] }
       options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
@@ -132,7 +132,7 @@
 
       Redmine::IMAP.check(imap_options, options)
     end
-    
+
     desc <<-END_DESC
 Read emails from an POP3 server.
 
@@ -148,7 +148,7 @@
 
 See redmine:email:receive_imap for more options and examples.
 END_DESC
-    
+
     task :receive_pop3 => :environment do
       pop_options  = {:host => ENV['host'],
                       :port => ENV['port'],
@@ -156,24 +156,24 @@
                       :username => ENV['username'],
                       :password => ENV['password'],
                       :delete_unprocessed => ENV['delete_unprocessed']}
-                      
+
       options = { :issue => {} }
       %w(project status tracker category priority).each { |a| options[:issue][a.to_sym] = ENV[a] if ENV[a] }
       options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
       options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user']
       options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check']
-      
+
       Redmine::POP3.check(pop_options, options)
     end
-    
+
     desc "Send a test email to the user with the provided login name"
     task :test, :login, :needs => :environment do |task, args|
       include Redmine::I18n
-      abort l(:notice_email_error, "Please include the user login to test with. Example: login=examle-login") if args[:login].blank?
+      abort l(:notice_email_error, "Please include the user login to test with. Example: rake redmine:email:test[login]") if args[:login].blank?
 
       user = User.find_by_login(args[:login])
-      abort l(:notice_email_error, "User #{args[:login]} not found") unless user.logged?
-      
+      abort l(:notice_email_error, "User #{args[:login]} not found") unless user && user.logged?
+
       ActionMailer::Base.raise_delivery_errors = true
       begin
         Mailer.deliver_test(User.current)
--- a/lib/tasks/extract_fixtures.rake	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/tasks/extract_fixtures.rake	Mon Jun 06 14:41:04 2011 +0100
@@ -10,15 +10,13 @@
     File.open("#{RAILS_ROOT}/#{table_name}.yml", 'w' ) do |file|
       data = ActiveRecord::Base.connection.select_all(sql % table_name)
       file.write data.inject({}) { |hash, record|
-      
-      # cast extracted values
-      ActiveRecord::Base.connection.columns(table_name).each { |col|
-        record[col.name] = col.type_cast(record[col.name]) if record[col.name]      
-      }      
-      
-      hash["#{table_name}_#{i.succ!}"] = record
-      hash
+        # cast extracted values
+        ActiveRecord::Base.connection.columns(table_name).each { |col|
+          record[col.name] = col.type_cast(record[col.name]) if record[col.name]
+        }
+        hash["#{table_name}_#{i.succ!}"] = record
+        hash
       }.to_yaml
     end
   end
-end
\ No newline at end of file
+end
--- a/lib/tasks/locales.rake	Thu Mar 03 15:08:45 2011 +0000
+++ b/lib/tasks/locales.rake	Mon Jun 06 14:41:04 2011 +0100
@@ -9,21 +9,21 @@
   desc 'Updates language files based on en.yml content (only works for new top level keys).'
   task :update do
     dir = ENV['DIR'] || './config/locales'
-    
+
     en_strings = YAML.load(File.read(File.join(dir,'en.yml')))['en']
-    
+
     files = Dir.glob(File.join(dir,'*.{yaml,yml}'))
     files.each do |file|
       puts "Updating file #{file}"
       file_strings = YAML.load(File.read(file))
       file_strings = file_strings[file_strings.keys.first]
-    
+
       missing_keys = en_strings.keys - file_strings.keys
       next if missing_keys.empty?
-      
+
       puts "==> Missing #{missing_keys.size} keys (#{missing_keys.join(', ')})"
       lang = File.open(file, 'a')
-      
+
       missing_keys.each do |key|
         {key => en_strings[key]}.to_yaml.each_line do |line|
           next if line =~ /^---/ || line.empty?
@@ -31,11 +31,11 @@
           lang << "  #{line}"
         end
       end
-      
+
       lang.close
     end
   end
-  
+
   desc 'Checks interpolation arguments in locals against en.yml'
   task :check_interpolation do
     dir = ENV['DIR'] || './config/locales'
@@ -44,7 +44,7 @@
     files.each do |file|
       file_strings = YAML.load(File.read(file))
       file_strings = file_strings[file_strings.keys.first]
-      
+
       file_strings.each do |key, string|
         next unless string.is_a?(String)
         string.scan /%\{\w+\}/ do |match|
@@ -71,7 +71,7 @@
     deletes = ENV['key'] ? Regexp.union(ENV['key'].split(',')) : nil
     # Ignore multiline keys (begin with | or >) and keys with children (nothing meaningful after :)
     delete_regex = /\A  #{deletes}: +[^\|>\s#].*\z/
-    
+
     files.each do |path|
       # Skip certain locales
       (puts "Skipping #{path}"; next) if File.basename(path, ".yml") =~ skips
@@ -80,7 +80,7 @@
       File.open(path, 'w') {|file| orig_content.each_line {|line| file.puts line unless line.chomp =~ delete_regex}}
     end
   end
-  
+
   desc <<-END_DESC
 Adds a new top-level translation string to all locale file (only works for childless keys, probably doesn\'t work on windows, doesn't check for duplicates).
 
--- a/log/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/log/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/log
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/log
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:11.000000Z
+2011-06-06T13:15:00.000000Z
 ae0415159f2c4dba3fc1a559d4c0f9f5
 2006-10-15T09:00:05.847811Z
 31
--- a/public/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,47 +1,17 @@
 K 25
 svn:wc:ra_dav:version-url
-V 31
-/svn/!svn/ver/4954/trunk/public
-END
-dispatch.fcgi.example
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/2017/trunk/public/dispatch.fcgi.example
+V 45
+/svn/!svn/ver/5961/branches/1.2-stable/public
 END
 500.html
 K 25
 svn:wc:ra_dav:version-url
-V 39
-/svn/!svn/ver/419/trunk/public/500.html
+V 54
+/svn/!svn/ver/5878/branches/1.2-stable/public/500.html
 END
 404.html
 K 25
 svn:wc:ra_dav:version-url
-V 39
-/svn/!svn/ver/419/trunk/public/404.html
+V 54
+/svn/!svn/ver/5878/branches/1.2-stable/public/404.html
 END
-dispatch.cgi.example
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/2017/trunk/public/dispatch.cgi.example
-END
-dispatch.rb.example
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/2017/trunk/public/dispatch.rb.example
-END
-favicon.ico
-K 25
-svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/3845/trunk/public/favicon.ico
-END
-htaccess.fcgi.example
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4775/trunk/public/htaccess.fcgi.example
-END
--- a/public/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-27T13:34:41.060565Z
-4954
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 aeefa1552a4af651eadd16f4e0bb1323
 2008-11-11T13:54:10.112610Z
 2017
@@ -72,11 +72,11 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-b78e2e9e0cd94c786bb9404516e062c4
-2007-04-04T18:20:45.423396Z
-419
-jplang
+2011-06-06T13:20:53.000000Z
+18ae067e7e513237ff7f6162b48a42c4
+2011-04-27T00:21:35.080410Z
+5552
+tmaruyama
 has-props
 
 
@@ -98,7 +98,7 @@
 
 
 
-576
+674
 
 help
 dir
@@ -112,11 +112,11 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-5acfd3818d5f470c26a1af577d06195e
-2007-04-04T18:20:45.423396Z
-419
-jplang
+2011-06-06T13:20:53.000000Z
+f0fc42f7395f7301cdddfb37c50b9173
+2011-04-27T00:21:14.313029Z
+5551
+tmaruyama
 has-props
 
 
@@ -138,7 +138,7 @@
 
 
 
-484
+485
 
 dispatch.cgi.example
 file
@@ -146,7 +146,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 5a5128856eb14ac7b3f94099cb504775
 2008-11-11T13:54:10.112610Z
 2017
@@ -180,7 +180,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 5a5128856eb14ac7b3f94099cb504775
 2008-11-11T13:54:10.112610Z
 2017
@@ -217,7 +217,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 6d85758acb4f4baa4d242ba451c91026
 2010-07-16T03:45:50.104236Z
 3845
@@ -251,7 +251,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 67c99c6ef23adb15d9efed92be959b6e
 2011-01-30T06:31:28.038726Z
 4775
--- a/public/.svn/text-base/404.html.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/.svn/text-base/404.html.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<title>redMine 404 error</title>
+<title>Redmine 404 error</title>
 <style>
 body{
 font-family: Trebuchet MS,Georgia,"Times New Roman",serif;
@@ -20,4 +20,4 @@
   <p>The page you were trying to access doesn't exist or has been removed.</p>
   <p><a href="javascript:history.back()">Back</a></p>
 </body>
-</html>
\ No newline at end of file
+</html>
--- a/public/.svn/text-base/500.html.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/.svn/text-base/500.html.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<title>redMine 500 error</title>
+<title>Redmine 500 error</title>
 <style>
 body{
 font-family: Trebuchet MS,Georgia,"Times New Roman",serif;
@@ -18,7 +18,8 @@
 <body>
   <h1>Internal error</h1>
   <p>An error occurred on the page you were trying to access.<br />
-  If you continue to experience problems please contact your redMine administrator for assistance.</p>
+  If you continue to experience problems please contact your Redmine administrator for assistance.</p>
+  <p>If you are the Redmine administrator, check your log files for details about the error.</p>
   <p><a href="javascript:history.back()">Back</a></p>
 </body>
-</html>
\ No newline at end of file
+</html>
--- a/public/404.html	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/404.html	Mon Jun 06 14:41:04 2011 +0100
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<title>redMine 404 error</title>
+<title>Redmine 404 error</title>
 <style>
 body{
 font-family: Trebuchet MS,Georgia,"Times New Roman",serif;
@@ -20,4 +20,4 @@
   <p>The page you were trying to access doesn't exist or has been removed.</p>
   <p><a href="javascript:history.back()">Back</a></p>
 </body>
-</html>
\ No newline at end of file
+</html>
--- a/public/500.html	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/500.html	Mon Jun 06 14:41:04 2011 +0100
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<title>redMine 500 error</title>
+<title>Redmine 500 error</title>
 <style>
 body{
 font-family: Trebuchet MS,Georgia,"Times New Roman",serif;
@@ -18,7 +18,8 @@
 <body>
   <h1>Internal error</h1>
   <p>An error occurred on the page you were trying to access.<br />
-  If you continue to experience problems please contact your redMine administrator for assistance.</p>
+  If you continue to experience problems please contact your Redmine administrator for assistance.</p>
+  <p>If you are the Redmine administrator, check your log files for details about the error.</p>
   <p><a href="javascript:history.back()">Back</a></p>
 </body>
-</html>
\ No newline at end of file
+</html>
--- a/public/help/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/help/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,17 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
-V 36
-/svn/!svn/ver/4758/trunk/public/help
+V 50
+/svn/!svn/ver/5878/branches/1.2-stable/public/help
 END
 wiki_syntax_detailed.html
 K 25
 svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4758/trunk/public/help/wiki_syntax_detailed.html
+V 76
+/svn/!svn/ver/5878/branches/1.2-stable/public/help/wiki_syntax_detailed.html
 END
-wiki_syntax.html
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/1803/trunk/public/help/wiki_syntax.html
-END
--- a/public/help/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/help/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/help
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/help
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-23T16:12:38.944844Z
-4758
-jplang
+2011-05-02T23:07:16.509786Z
+5614
+tmaruyama
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-4e4c86877abc332b323cde0e35f235fa
-2011-01-23T16:12:38.944844Z
-4758
-jplang
+2011-06-06T13:20:53.000000Z
+001a8d607fd9aee0f2dab7d389c61086
+2011-05-02T23:07:16.509786Z
+5614
+tmaruyama
 
 
 
@@ -58,7 +58,7 @@
 
 
 
-12098
+12101
 
 wiki_syntax.html
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 f3c9e77ebd5a0c8e580df191a00bc01c
 2008-09-13T09:45:07.868598Z
 1803
--- a/public/help/.svn/text-base/wiki_syntax_detailed.html.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/help/.svn/text-base/wiki_syntax_detailed.html.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -47,7 +47,7 @@
             <li>Link to an issue: <strong>#124</strong> (displays <del><a href="#" class="issue" title="bulk edit doesn't change the category or fixed version properties (Closed)">#124</a></del>, link is striked-through if the issue is closed)</li>
             <li>Link to a changeset: <strong>r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">r758</a>)</li>
             <li>Link to a changeset with a non-numeric hash: <strong>commit:c6f4d0fd</strong> (displays <a href="#" class="changeset">c6f4d0fd</a>).</li>
-            <li>Link to a changeset of another project: <strong>sandbox:r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">sanbox:r758</a>)</li>
+            <li>Link to a changeset of another project: <strong>sandbox:r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">sandbox:r758</a>)</li>
             <li>Link to a changeset with a non-numeric hash: <strong>sandbox:c6f4d0fd</strong> (displays <a href="#" class="changeset">sandbox:c6f4d0fd</a>).</li>
         </ul>
 
@@ -205,7 +205,7 @@
 p=. centered
 </pre>
 
-        <p style="text-align:center;">This is centered paragraph.</p>
+        <p style="text-align:center;">This is a centered paragraph.</p>
 
 
         <h3><a name="10" class="wiki-page"></a>Blockquotes</h3>
--- a/public/help/wiki_syntax_detailed.html	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/help/wiki_syntax_detailed.html	Mon Jun 06 14:41:04 2011 +0100
@@ -47,7 +47,7 @@
             <li>Link to an issue: <strong>#124</strong> (displays <del><a href="#" class="issue" title="bulk edit doesn't change the category or fixed version properties (Closed)">#124</a></del>, link is striked-through if the issue is closed)</li>
             <li>Link to a changeset: <strong>r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">r758</a>)</li>
             <li>Link to a changeset with a non-numeric hash: <strong>commit:c6f4d0fd</strong> (displays <a href="#" class="changeset">c6f4d0fd</a>).</li>
-            <li>Link to a changeset of another project: <strong>sandbox:r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">sanbox:r758</a>)</li>
+            <li>Link to a changeset of another project: <strong>sandbox:r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">sandbox:r758</a>)</li>
             <li>Link to a changeset with a non-numeric hash: <strong>sandbox:c6f4d0fd</strong> (displays <a href="#" class="changeset">sandbox:c6f4d0fd</a>).</li>
         </ul>
 
@@ -205,7 +205,7 @@
 p=. centered
 </pre>
 
-        <p style="text-align:center;">This is centered paragraph.</p>
+        <p style="text-align:center;">This is a centered paragraph.</p>
 
 
         <h3><a name="10" class="wiki-page"></a>Blockquotes</h3>
--- a/public/images/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/images/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,581 +1,23 @@
 K 25
 svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/4534/trunk/public/images
+V 52
+/svn/!svn/ver/5878/branches/1.2-stable/public/images
 END
-time.png
+link_break.png
 K 25
 svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/3419/trunk/public/images/time.png
-END
-task_parent_end.png
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4534/trunk/public/images/task_parent_end.png
-END
-arrow_expanded.png
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/3419/trunk/public/images/arrow_expanded.png
-END
-bullet_toggle_minus.png
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/3419/trunk/public/images/bullet_toggle_minus.png
-END
-milestone_late.png
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4072/trunk/public/images/milestone_late.png
-END
-folder_open_add.png
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/3419/trunk/public/images/folder_open_add.png
-END
-2downarrow.png
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/3419/trunk/public/images/2downarrow.png
-END
-warning.png
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/3419/trunk/public/images/warning.png
-END
-move.png
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/3419/trunk/public/images/move.png
-END
-fav_off.png
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/3419/trunk/public/images/fav_off.png
-END
-reload.png
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/3430/trunk/public/images/reload.png
-END
-project_marker.png
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4072/trunk/public/images/project_marker.png
-END
-ticket_note.png
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/3419/trunk/public/images/ticket_note.png
-END
-copy.png
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/3419/trunk/public/images/copy.png
+V 67
+/svn/!svn/ver/5878/branches/1.2-stable/public/images/link_break.png
 END
 zoom_in.png
 K 25
 svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/3419/trunk/public/images/zoom_in.png
-END
-news.png
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/3419/trunk/public/images/news.png
-END
-bullet_end.png
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/3477/trunk/public/images/bullet_end.png
-END
-external.png
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3419/trunk/public/images/external.png
-END
-bullet_orange.png
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/3419/trunk/public/images/bullet_orange.png
-END
-lightning.png
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3419/trunk/public/images/lightning.png
-END
-milestone_todo.png
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4072/trunk/public/images/milestone_todo.png
-END
-edit.png
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/3419/trunk/public/images/edit.png
-END
-package.png
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/3419/trunk/public/images/package.png
-END
-folder_open.png
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/3419/trunk/public/images/folder_open.png
-END
-link.png
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/3419/trunk/public/images/link.png
-END
-history.png
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/3419/trunk/public/images/history.png
-END
-delete.png
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/3419/trunk/public/images/delete.png
-END
-table_multiple.png
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/3419/trunk/public/images/table_multiple.png
-END
-feed.png
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/3419/trunk/public/images/feed.png
-END
-close.png
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/3419/trunk/public/images/close.png
-END
-task_done.png
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4072/trunk/public/images/task_done.png
-END
-bullet_delete.png
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/3419/trunk/public/images/bullet_delete.png
-END
-text_list_bullets.png
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/3419/trunk/public/images/text_list_bullets.png
-END
-bullet_arrow_left.png
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/3419/trunk/public/images/bullet_arrow_left.png
-END
-bullet_go.png
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3426/trunk/public/images/bullet_go.png
-END
-sort_asc.png
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3419/trunk/public/images/sort_asc.png
-END
-toggle_check.png
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3419/trunk/public/images/toggle_check.png
-END
-bullet_diamond.png
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/3477/trunk/public/images/bullet_diamond.png
-END
-bullet_black.png
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3419/trunk/public/images/bullet_black.png
-END
-comments.png
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3419/trunk/public/images/comments.png
-END
-folder_open_orange.png
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/3419/trunk/public/images/folder_open_orange.png
-END
-attachment.png
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/3419/trunk/public/images/attachment.png
-END
-textfield.png
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3419/trunk/public/images/textfield.png
-END
-false.png
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/3419/trunk/public/images/false.png
-END
-bullet_toggle_plus.png
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/3419/trunk/public/images/bullet_toggle_plus.png
-END
-unlock.png
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/3430/trunk/public/images/unlock.png
-END
-group.png
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/3419/trunk/public/images/group.png
-END
-plugin.png
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/3419/trunk/public/images/plugin.png
-END
-loading.gif
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/67/trunk/public/images/loading.gif
-END
-bullet_blue.png
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/3419/trunk/public/images/bullet_blue.png
-END
-save.png
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/3419/trunk/public/images/save.png
-END
-bullet_add.png
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/3419/trunk/public/images/bullet_add.png
-END
-draft.png
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/3419/trunk/public/images/draft.png
-END
-milestone_done.png
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4072/trunk/public/images/milestone_done.png
-END
-exclamation.png
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/3419/trunk/public/images/exclamation.png
-END
-ticket_go.png
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3419/trunk/public/images/ticket_go.png
-END
-folder.png
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/3419/trunk/public/images/folder.png
-END
-report.png
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/3419/trunk/public/images/report.png
+V 64
+/svn/!svn/ver/5878/branches/1.2-stable/public/images/zoom_in.png
 END
 zoom_out.png
 K 25
 svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3419/trunk/public/images/zoom_out.png
+V 65
+/svn/!svn/ver/5878/branches/1.2-stable/public/images/zoom_out.png
 END
-fav.png
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/3419/trunk/public/images/fav.png
-END
-document.png
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3419/trunk/public/images/document.png
-END
-bullet_purple.png
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/3419/trunk/public/images/bullet_purple.png
-END
-true.png
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/3419/trunk/public/images/true.png
-END
-arrow_down.png
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/3419/trunk/public/images/arrow_down.png
-END
-2uparrow.png
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3419/trunk/public/images/2uparrow.png
-END
-cancel.png
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/3419/trunk/public/images/cancel.png
-END
-help.png
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/3419/trunk/public/images/help.png
-END
-add.png
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/3419/trunk/public/images/add.png
-END
-close_hl.png
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3419/trunk/public/images/close_hl.png
-END
-projects.png
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3419/trunk/public/images/projects.png
-END
-bullet_arrow_right.png
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/3419/trunk/public/images/bullet_arrow_right.png
-END
-stats.png
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/3419/trunk/public/images/stats.png
-END
-locked.png
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/3419/trunk/public/images/locked.png
-END
-changeset.png
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3419/trunk/public/images/changeset.png
-END
-comment.png
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/3419/trunk/public/images/comment.png
-END
-1downarrow.png
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/3419/trunk/public/images/1downarrow.png
-END
-time_add.png
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3419/trunk/public/images/time_add.png
-END
-task_late.png
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3419/trunk/public/images/task_late.png
-END
-wiki_edit.png
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3419/trunk/public/images/wiki_edit.png
-END
-calendar.png
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3419/trunk/public/images/calendar.png
-END
-duplicate.png
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3419/trunk/public/images/duplicate.png
-END
-database_key.png
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3419/trunk/public/images/database_key.png
-END
-server_key.png
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/3859/trunk/public/images/server_key.png
-END
-user.png
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/3419/trunk/public/images/user.png
-END
-arrow_collapsed.png
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/3419/trunk/public/images/arrow_collapsed.png
-END
-1uparrow.png
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3419/trunk/public/images/1uparrow.png
-END
-zoom_in_g.png
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3419/trunk/public/images/zoom_in_g.png
-END
-zoom_out_g.png
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/3419/trunk/public/images/zoom_out_g.png
-END
-ticket.png
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/3419/trunk/public/images/ticket.png
-END
-message.png
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/3419/trunk/public/images/message.png
-END
-openid-bg.gif
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/2442/trunk/public/images/openid-bg.gif
-END
-sort_desc.png
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3419/trunk/public/images/sort_desc.png
-END
-version_marker.png
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4072/trunk/public/images/version_marker.png
-END
-task_todo.png
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3419/trunk/public/images/task_todo.png
-END
-ticket_edit.png
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/3419/trunk/public/images/ticket_edit.png
-END
-ticket_checked.png
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/3419/trunk/public/images/ticket_checked.png
-END
--- a/public/images/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/images/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/images
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/images
 http://redmine.rubyforge.org/svn
 
 
 
-2010-12-18T16:06:20.343240Z
-4534
+2011-04-11T19:30:33.088851Z
+5424
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 45d9f8f4b7723c5df684fd6785b40700
 2010-02-13T09:08:12.698526Z
 3419
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 7042481efe0084860d2a7b176086b306
 2010-12-18T16:06:20.343240Z
 4534
@@ -94,13 +94,47 @@
 
 224
 
+link_break.png
+file
+
+
+
+
+2011-06-06T13:20:53.000000Z
+c57d26e66ee81c9750a35266329fb15a
+2011-04-11T19:30:33.088851Z
+5424
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+657
+
 arrow_expanded.png
 file
 
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 2455a62f4801926d7c69099f5134c867
 2010-02-13T09:08:12.698526Z
 3419
@@ -134,7 +168,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 bc6f6e0d67aba9e7689e852dad4977f9
 2010-02-13T09:08:12.698526Z
 3419
@@ -168,7 +202,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ecc1979ed435769c700725495428359f
 2010-09-10T03:09:02.311267Z
 4072
@@ -202,7 +236,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 8ae3a2d9ef884ed73a4157cd9c0465b8
 2010-02-13T09:08:12.698526Z
 3419
@@ -236,7 +270,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 6730b4ea633194233bec98ee5f7a3977
 2010-02-13T09:08:12.698526Z
 3419
@@ -270,7 +304,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 f1cdd6ad27b9211924dcd8a4c8133f1b
 2010-02-13T09:08:12.698526Z
 3419
@@ -304,7 +338,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 0a2ceb01cbc3c01186fdcc25ced8eb0d
 2010-02-13T09:08:12.698526Z
 3419
@@ -338,7 +372,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ff96c02d8f18116bb3f005f2c8b86e91
 2010-02-13T09:08:12.698526Z
 3419
@@ -372,7 +406,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 a20844852ce8909ed4a19ccb0f6c6518
 2010-02-14T13:13:16.743297Z
 3430
@@ -406,7 +440,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 94cfc6b14b69f8eb30909fa1a0d8721d
 2010-09-10T03:09:02.311267Z
 4072
@@ -440,7 +474,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 6a0f06b7f2b400d1d7b07180a909fed2
 2010-02-13T09:08:12.698526Z
 3419
@@ -474,10 +508,10 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-91b883d074b727f1a95cd0ce48510a3c
-2010-02-13T09:08:12.698526Z
-3419
+2011-06-06T13:20:53.000000Z
+530887306aa20d3aaf2b5c6191bdaf72
+2011-03-13T16:56:20.654860Z
+5111
 jplang
 has-props
 
@@ -500,7 +534,7 @@
 
 
 
-461
+680
 
 copy.png
 file
@@ -508,7 +542,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 acd6a5a422b44466803829ce8a12fd9a
 2010-02-13T09:08:12.698526Z
 3419
@@ -542,7 +576,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 63c87d73f46ed17a4ebc2b5a7e6cd6f4
 2010-02-13T09:08:12.698526Z
 3419
@@ -576,7 +610,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 45e9710ba200afbac6ba55970bd9d625
 2010-02-23T21:10:15.865943Z
 3477
@@ -613,7 +647,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 7604387e10f9c0be473a497ee5f516b8
 2010-02-13T09:08:12.698526Z
 3419
@@ -647,7 +681,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 66da3813f290297bc39d289b859c3818
 2010-02-13T09:08:12.698526Z
 3419
@@ -681,7 +715,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 0c32351cd2f92465a51d8da771bd92cb
 2010-02-13T09:08:12.698526Z
 3419
@@ -715,7 +749,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 59894f5d5656b1f6e2af9c22187e6e86
 2010-09-10T03:09:02.311267Z
 4072
@@ -749,7 +783,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 30a7571b4822a789787f2a8b25ad4808
 2010-02-13T09:08:12.698526Z
 3419
@@ -783,7 +817,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 80f689a299e7e69fb2512482bca6f5d4
 2010-02-13T09:08:12.698526Z
 3419
@@ -817,7 +851,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ce8f2e6769f9abc327609dea0ded14e5
 2010-02-13T09:08:12.698526Z
 3419
@@ -851,7 +885,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 242909ef391b4ebc83d53b13b4d90991
 2010-02-13T09:08:12.698526Z
 3419
@@ -885,7 +919,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 cf95da81d3626d67d5f49792341e396a
 2010-02-13T09:08:12.698526Z
 3419
@@ -919,7 +953,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 62d29dab3c8967d0ca404a25059c3dbd
 2010-02-13T09:08:12.698526Z
 3419
@@ -953,7 +987,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 eecb8adaaeabcff6c838886809c85f93
 2010-02-13T09:08:12.698526Z
 3419
@@ -987,7 +1021,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 898a97e88d0cfc1dd41a6903d0a7cd72
 2010-02-13T09:08:12.698526Z
 3419
@@ -1021,7 +1055,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 3713155c5afcfeffaf877126d6b942aa
 2010-02-13T09:08:12.698526Z
 3419
@@ -1055,7 +1089,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 40c58172e0c52eee4deb5227ec37f0cf
 2010-09-10T03:09:02.311267Z
 4072
@@ -1089,7 +1123,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 fba036d7348ff28f7ab7dacbc52bc32a
 2010-02-13T09:08:12.698526Z
 3419
@@ -1123,7 +1157,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 01c137e009015642700b935edb321a89
 2010-02-13T09:08:12.698526Z
 3419
@@ -1157,7 +1191,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ef1412a13d9113c5e5e85cfcd8300d9d
 2010-02-13T09:08:12.698526Z
 3419
@@ -1191,7 +1225,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 b2e4e10fb114db28b9245210a5505c44
 2010-02-14T11:52:12.027647Z
 3426
@@ -1225,7 +1259,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 e0d9ad958faa1c07b84c78c7b7e5ffae
 2010-02-13T09:08:12.698526Z
 3419
@@ -1259,7 +1293,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 3eb9e517f1a10430f7ec0ed7d30e05d8
 2010-02-13T09:08:12.698526Z
 3419
@@ -1293,7 +1327,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 e341b581fbbf8a5d038c8432409ceb5f
 2010-02-23T21:10:15.865943Z
 3477
@@ -1327,7 +1361,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 981a44ce8d3f71125a300dece0cc0f21
 2010-02-13T09:08:12.698526Z
 3419
@@ -1361,7 +1395,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c4e01ea1c0ce5a1cd5154dfd2512fb21
 2010-02-13T09:08:12.698526Z
 3419
@@ -1395,7 +1429,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 944495c065d05a9161ad7da534703010
 2010-02-13T09:08:12.698526Z
 3419
@@ -1429,7 +1463,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 0a35d4eaddb2292fed7062295ee0dcd8
 2010-02-13T09:08:12.698526Z
 3419
@@ -1463,7 +1497,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 985a1dadffeaa303ff1eef4ea53ec0f4
 2010-02-13T09:08:12.698526Z
 3419
@@ -1497,7 +1531,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 f0c51de3ba403e552c8ab6e8084448a4
 2010-02-13T09:08:12.698526Z
 3419
@@ -1531,7 +1565,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 06cbf5da7daca348a87a6299a4112d71
 2010-02-13T09:08:12.698526Z
 3419
@@ -1565,7 +1599,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 fa1be48a747127ee34d4fae020b825d4
 2010-02-14T13:13:16.743297Z
 3430
@@ -1599,7 +1633,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 8e1056421acf9e61af00f0dcb83fef12
 2010-02-13T09:08:12.698526Z
 3419
@@ -1633,7 +1667,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 e019855b07d30f1ce1baf59b9df27125
 2010-02-13T09:08:12.698526Z
 3419
@@ -1667,7 +1701,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 03ce3dcc84af110e9da8699a841e5200
 2006-12-03T19:55:45.161980Z
 62
@@ -1701,7 +1735,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 3363f60299360fb5539b769d089e145f
 2010-02-13T09:08:12.698526Z
 3419
@@ -1735,7 +1769,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 9e64db8f4905a17e3a6f68792cd5e199
 2010-02-13T09:08:12.698526Z
 3419
@@ -1769,7 +1803,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 848b802c0ce8e051f98f086f6e31c8cd
 2010-02-13T09:08:12.698526Z
 3419
@@ -1803,7 +1837,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 eec8605f3797315b2d8397422df1aed3
 2010-02-13T09:08:12.698526Z
 3419
@@ -1837,7 +1871,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 40c58172e0c52eee4deb5227ec37f0cf
 2010-09-10T03:09:02.311267Z
 4072
@@ -1871,7 +1905,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 7b5dcbdd0de4541b39e1302b6277684d
 2010-02-13T09:08:12.698526Z
 3419
@@ -1905,7 +1939,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 dca02b582c10127fcdc8af47e94d4e4c
 2010-02-13T09:08:12.698526Z
 3419
@@ -1939,7 +1973,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 59f2dc025632f00403490176e7f42bfc
 2010-02-13T09:08:12.698526Z
 3419
@@ -1973,7 +2007,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 8d8ec49f5773997411ff708a82e40568
 2010-02-13T09:08:12.698526Z
 3419
@@ -2007,10 +2041,10 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-42b319d6ad0249fb20833a17d5f373a4
-2010-02-13T09:08:12.698526Z
-3419
+2011-06-06T13:20:53.000000Z
+d453bba70090aa33b51aaeee64331b20
+2011-03-13T16:56:20.654860Z
+5111
 jplang
 has-props
 
@@ -2033,7 +2067,7 @@
 
 
 
-461
+657
 
 fav.png
 file
@@ -2041,7 +2075,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 29feed9e7b5c34854bf9f9f39681e06b
 2010-02-13T09:08:12.698526Z
 3419
@@ -2075,7 +2109,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c4c76ce450e3e838afd6aa8f34a8d9a8
 2010-02-13T09:08:12.698526Z
 3419
@@ -2109,7 +2143,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 97c12039afee2ea9c5a13e74f6fa5c0c
 2010-02-13T09:08:12.698526Z
 3419
@@ -2143,7 +2177,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 a30b3000c7286879d10ca1fbff06f71d
 2010-02-13T09:08:12.698526Z
 3419
@@ -2177,7 +2211,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ed9b7ced8e3b6275c14d528dc6909691
 2010-02-13T09:08:12.698526Z
 3419
@@ -2211,7 +2245,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 afef823014efb32adcd9606b69119562
 2010-02-13T09:08:12.698526Z
 3419
@@ -2245,7 +2279,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 812bdb688394ba6e2ed3cb7ceb4b7df0
 2010-02-13T09:08:12.698526Z
 3419
@@ -2279,7 +2313,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 7e62689a93d0a23cbd1cf2dd754653e2
 2010-02-13T09:08:12.698526Z
 3419
@@ -2313,7 +2347,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 9856446e5026c8d31704b84e836dc06e
 2010-02-13T09:08:12.698526Z
 3419
@@ -2347,7 +2381,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 f94f71deb205f49de993ad9521791ada
 2010-02-13T09:08:12.698526Z
 3419
@@ -2381,7 +2415,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 3ec32bbf3ad9e052833d05c0d41445f0
 2010-02-13T09:08:12.698526Z
 3419
@@ -2415,7 +2449,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 980dcfdb816ce626e4d2df5c2a308549
 2010-02-13T09:08:12.698526Z
 3419
@@ -2449,7 +2483,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 3e9542b5042e280bc2fc0ae98c81529f
 2010-02-13T09:08:12.698526Z
 3419
@@ -2483,7 +2517,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 9a911ac680f354452f13729921e80d21
 2010-02-13T09:08:12.698526Z
 3419
@@ -2517,7 +2551,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ea73bd6514b7d5f1d7ea2bd336f9303a
 2010-02-13T09:08:12.698526Z
 3419
@@ -2551,7 +2585,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 3b0e537dabdfa5385e76ea465c4ea57b
 2010-02-13T09:08:12.698526Z
 3419
@@ -2585,7 +2619,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 82e11faddb62c05a1ef9701035919c00
 2010-02-13T09:08:12.698526Z
 3419
@@ -2619,7 +2653,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 cd3890ab38793e53a99227a180616a70
 2010-02-13T09:08:12.698526Z
 3419
@@ -2653,7 +2687,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 9a73430b658b4e16668b3e3cc7e241b4
 2010-02-13T09:08:12.698526Z
 3419
@@ -2687,7 +2721,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 558c616ebcfa38b1c7b298184e58eb91
 2010-02-13T09:08:12.698526Z
 3419
@@ -2721,7 +2755,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 2459e5967a6ddd78589ab52970574f3f
 2010-02-13T09:08:12.698526Z
 3419
@@ -2755,7 +2789,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 60f9166d90d7aeb71d0ec9ee337c3f5e
 2010-02-13T09:08:12.698526Z
 3419
@@ -2792,7 +2826,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 cd5b56dff1c089b4e1e3db29b2b7226e
 2010-02-13T09:08:12.698526Z
 3419
@@ -2826,7 +2860,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 6172a7483daa35983c4ea5a35bd8c64a
 2010-07-20T23:50:15.173990Z
 3859
@@ -2860,7 +2894,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 6b08128a1b67ecb4b1ed06c9c505ac63
 2010-02-13T09:08:12.698526Z
 3419
@@ -2894,7 +2928,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 980dcfdb816ce626e4d2df5c2a308549
 2010-02-13T09:08:12.698526Z
 3419
@@ -2928,7 +2962,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 035a9d73627fc55aeaa7b553ac82ae9e
 2010-02-13T09:08:12.698526Z
 3419
@@ -2956,81 +2990,13 @@
 
 220
 
-zoom_in_g.png
-file
-
-
-
-
-2011-03-03T11:05:14.000000Z
-06b4b4425c7439fd898cd68e97f75d0f
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-242
-
-zoom_out_g.png
-file
-
-
-
-
-2011-03-03T11:05:14.000000Z
-d8ae88af42e1b9d1a4f9397041b17cd8
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-241
-
 ticket.png
 file
 
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 85089bb401af7c5d7325ee317483ac70
 2010-02-13T09:08:12.698526Z
 3419
@@ -3064,7 +3030,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 11dc95a35460864fc1e81bd95121cbf4
 2010-02-13T09:08:12.698526Z
 3419
@@ -3098,7 +3064,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 d8720cf3644e6ae0511c1391fb2ecf07
 2009-02-11T19:07:07.158826Z
 2442
@@ -3132,7 +3098,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 8b706274d81243b3d26fdf06dfc9e533
 2010-02-13T09:08:12.698526Z
 3419
@@ -3166,7 +3132,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 f0626259c107cfa1d1e4cb9d9f6edd34
 2010-09-10T03:09:02.311267Z
 4072
@@ -3200,7 +3166,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 9265bd26d6ba3d780dcd6fe676352d93
 2010-02-13T09:08:12.698526Z
 3419
@@ -3234,7 +3200,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 e34a59e24637e7bf462f5a742dbe243f
 2010-02-13T09:08:12.698526Z
 3419
@@ -3268,7 +3234,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 11f086774137d85a5cc6590ec3335ead
 2010-02-13T09:08:12.698526Z
 3419
--- a/public/images/.svn/prop-base/zoom_in_g.png.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
--- a/public/images/.svn/prop-base/zoom_out_g.png.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
Binary file public/images/.svn/text-base/zoom_in.png.svn-base has changed
Binary file public/images/.svn/text-base/zoom_in_g.png.svn-base has changed
Binary file public/images/.svn/text-base/zoom_out.png.svn-base has changed
Binary file public/images/.svn/text-base/zoom_out_g.png.svn-base has changed
--- a/public/images/files/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/images/files/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/images/files
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/images/files
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 136af9d95025ca62a3091a261266e13f
 2010-02-13T09:08:12.698526Z
 3419
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c801cf9aa0103de823e53e83459a1ff9
 2010-02-13T09:08:12.698526Z
 3419
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 1e51c81cb33d3d6746d440c1babfe0f5
 2010-02-13T09:08:12.698526Z
 3419
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 db0495227202385c9fce1b73f2d58ff0
 2010-02-13T09:08:12.698526Z
 3419
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 94db8424e52f54d7372a976574c4598e
 2010-02-13T09:08:12.698526Z
 3419
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ad3ed8ec19bb2a3cca8c03e0ea1aa846
 2010-02-13T09:08:12.698526Z
 3419
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 8e05d64f0b9f45f076b41521a8d6a8d1
 2010-02-13T09:08:12.698526Z
 3419
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ea9b5de5353e1cac630021dfed30dba4
 2010-02-13T09:08:12.698526Z
 3419
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 0790c67308754572014015fa90eef406
 2010-02-13T09:08:12.698526Z
 3419
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 e11f9ebff53e8088dce2a0028f0d5190
 2010-02-13T09:08:12.698526Z
 3419
--- a/public/images/jstoolbar/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/images/jstoolbar/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/images/jstoolbar
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/images/jstoolbar
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c77264aa6d145362b791c99d18f53ace
 2010-02-13T09:08:12.698526Z
 3419
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c19bfc8d9620c00cdd8ae322426bc07e
 2010-02-13T09:08:12.698526Z
 3419
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 5477ff20be77ab65aa6b75f47778234e
 2010-02-13T09:08:12.698526Z
 3419
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 cb940b592da5ed0367305cb0514d5684
 2010-02-13T09:08:12.698526Z
 3419
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ef6624df45946b54e3b23db2a0c6b77b
 2010-02-13T09:08:12.698526Z
 3419
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 f9d7446ceaa5142a5030e9430b3a2bb4
 2010-02-13T09:08:12.698526Z
 3419
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 04a0e86c9eec7d85d445e7627b5fc8ea
 2010-02-13T09:08:12.698526Z
 3419
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 123b8289e1bd69a5944cf727a5e39bc9
 2010-02-13T09:08:12.698526Z
 3419
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 15d8f6c0fbf85718123fb7c7da782713
 2010-02-13T09:08:12.698526Z
 3419
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 5a29cb56451be0fd714b99d2b2649bf0
 2010-02-13T09:08:12.698526Z
 3419
@@ -372,7 +372,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 07234419aecb827f11eef1ebd9b42482
 2010-02-13T09:08:12.698526Z
 3419
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 5042501ddf948fe938ded69a40ef1024
 2010-02-13T09:08:12.698526Z
 3419
@@ -440,7 +440,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 584fb45fd15d894adc19ff3cf626fae9
 2010-02-13T09:08:12.698526Z
 3419
@@ -474,7 +474,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 8448f92476ae933bacef7bc30ffd18fd
 2010-02-13T09:08:12.698526Z
 3419
@@ -508,7 +508,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 38ee94bc0a44b9420854aceeccd2dd59
 2010-02-13T09:08:12.698526Z
 3419
Binary file public/images/link_break.png has changed
Binary file public/images/zoom_in.png has changed
Binary file public/images/zoom_in_g.png has changed
Binary file public/images/zoom_out.png has changed
Binary file public/images/zoom_out_g.png has changed
--- a/public/javascripts/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/javascripts/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,53 +1,23 @@
 K 25
 svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/4947/trunk/public/javascripts
+V 57
+/svn/!svn/ver/5878/branches/1.2-stable/public/javascripts
 END
 prototype.js
 K 25
 svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/2493/trunk/public/javascripts/prototype.js
+V 70
+/svn/!svn/ver/5878/branches/1.2-stable/public/javascripts/prototype.js
 END
 context_menu.js
 K 25
 svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4947/trunk/public/javascripts/context_menu.js
-END
-repository_navigation.js
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/2840/trunk/public/javascripts/repository_navigation.js
-END
-effects.js
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/2493/trunk/public/javascripts/effects.js
-END
-select_list_move.js
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/3106/trunk/public/javascripts/select_list_move.js
-END
-dragdrop.js
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/2493/trunk/public/javascripts/dragdrop.js
+V 73
+/svn/!svn/ver/5878/branches/1.2-stable/public/javascripts/context_menu.js
 END
 application.js
 K 25
 svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4900/trunk/public/javascripts/application.js
+V 72
+/svn/!svn/ver/5878/branches/1.2-stable/public/javascripts/application.js
 END
-controls.js
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/2493/trunk/public/javascripts/controls.js
-END
--- a/public/javascripts/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/javascripts/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/javascripts
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/javascripts
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-24T17:56:17.648907Z
-4947
+2011-04-15T14:14:43.241176Z
+5469
 jplang
 
 
@@ -35,10 +35,10 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-b5684120e496c310977713be34be4868
-2009-02-21T11:04:50.579477Z
-2493
+2011-06-06T13:20:53.000000Z
+e5d25b8a35d52a3b54ca788ae2b12155
+2011-04-15T14:14:43.241176Z
+5469
 jplang
 has-props
 
@@ -61,7 +61,7 @@
 
 
 
-129738
+165673
 
 context_menu.js
 file
@@ -69,10 +69,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-3065b1a7ff2aca0c2d6fb394f4fef7fa
-2011-02-24T17:56:17.648907Z
-4947
+2011-06-06T13:20:53.000000Z
+f936eacae12ca9c5474dd3d3bae9b77d
+2011-04-11T19:30:54.206635Z
+5425
 jplang
 has-props
 
@@ -95,7 +95,7 @@
 
 
 
-6852
+6902
 
 calendar
 dir
@@ -106,7 +106,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 b868f888ccb92a2e7d3b955f0213078c
 2009-08-15T22:41:40.505056Z
 2840
@@ -140,7 +140,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 a7d95dc040992701ba78fd5b97af950e
 2009-02-21T11:04:50.579477Z
 2493
@@ -174,7 +174,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 d62b158eef2592fbe11ce104e118631c
 2009-11-28T11:59:45.246623Z
 3106
@@ -208,7 +208,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 3aa08ad9af21eb305a120e2e1a47d1af
 2009-02-21T11:04:50.579477Z
 2493
@@ -242,10 +242,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-312c6491eda00cbd741131ab1685a4b9
-2011-02-21T09:53:29.844413Z
-4900
+2011-06-06T13:20:53.000000Z
+cdfcc56344ae1e775ae40952fe02f46a
+2011-03-20T16:01:25.050501Z
+5174
 jplang
 has-props
 
@@ -268,7 +268,7 @@
 
 
 
-8869
+10107
 
 controls.js
 file
@@ -276,7 +276,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 136701e951925f3dcb84f9a231f9326e
 2009-02-21T11:04:50.579477Z
 2493
--- a/public/javascripts/.svn/text-base/application.js.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/javascripts/.svn/text-base/application.js.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -40,6 +40,37 @@
 	}
 }
 
+function collapseAllRowGroups(el) {
+  var tbody = Element.up(el, 'tbody');
+  tbody.childElements('tr').each(function(tr) {
+    if (tr.hasClassName('group')) {
+      tr.removeClassName('open');
+    } else {
+      tr.hide();
+    }
+  })
+}
+
+function expandAllRowGroups(el) {
+  var tbody = Element.up(el, 'tbody');
+  tbody.childElements('tr').each(function(tr) {
+    if (tr.hasClassName('group')) {
+      tr.addClassName('open');
+    } else {
+      tr.show();
+    }
+  })
+}
+
+function toggleAllRowGroups(el) {
+	var tr = Element.up(el, 'tr');
+  if (tr.hasClassName('open')) {
+    collapseAllRowGroups(el);
+  } else {
+    expandAllRowGroups(el);
+  }
+}
+
 function toggleFieldset(el) {
 	var fieldset = Element.up(el, 'fieldset');
 	fieldset.toggleClassName('collapsed');
@@ -299,9 +330,27 @@
 	}
 });
 
-/* shows and hides ajax indicator */
+/* 
+ * 1 - registers a callback which copies the csrf token into the
+ * X-CSRF-Token header with each ajax request.  Necessary to 
+ * work with rails applications which have fixed
+ * CVE-2011-0447
+ * 2 - shows and hides ajax indicator
+ */
 Ajax.Responders.register({
-    onCreate: function(){
+    onCreate: function(request){
+        var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
+
+        if (csrf_meta_tag) {
+            var header = 'X-CSRF-Token',
+                token = csrf_meta_tag.readAttribute('content');
+
+            if (!request.options.requestHeaders) {
+              request.options.requestHeaders = {};
+            }
+            request.options.requestHeaders[header] = token;
+          }
+
         if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
             Element.show('ajax-indicator');
         }
--- a/public/javascripts/.svn/text-base/context_menu.js.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/javascripts/.svn/text-base/context_menu.js.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -36,7 +36,7 @@
 
   Click: function(e) {
   	this.hideMenu();
-  	if (Event.element(e).tagName == 'A') { return; }
+  	if (Event.element(e).tagName == 'A' || Event.element(e).tagName == 'IMG') { return; }
     if (Event.isLeftClick(e) || (navigator.appVersion.match(/\bMSIE\b/))) {      
       var tr = Event.findElement(e, 'tr');
       if (tr!=null && tr!=document && tr.hasClassName('hascontextmenu')) {
@@ -50,7 +50,7 @@
             tr.removeClassName('context-menu-selection');
           }
         } else {
-          if (e.ctrlKey) {
+          if (e.ctrlKey || e.metaKey) {
             this.toggleSelection(tr);
           } else if (e.shiftKey) {
             if (this.lastSelected != null) {
--- a/public/javascripts/.svn/text-base/prototype.js.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/javascripts/.svn/text-base/prototype.js.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-/*  Prototype JavaScript framework, version 1.6.0.3
- *  (c) 2005-2008 Sam Stephenson
+/*  Prototype JavaScript framework, version 1.7
+ *  (c) 2005-2010 Sam Stephenson
  *
  *  Prototype is freely distributable under the terms of an MIT-style license.
  *  For details, see the Prototype web site: http://www.prototypejs.org/
@@ -7,32 +7,53 @@
  *--------------------------------------------------------------------------*/
 
 var Prototype = {
-  Version: '1.6.0.3',
-
-  Browser: {
-    IE:     !!(window.attachEvent &&
-      navigator.userAgent.indexOf('Opera') === -1),
-    Opera:  navigator.userAgent.indexOf('Opera') > -1,
-    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
-    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 &&
-      navigator.userAgent.indexOf('KHTML') === -1,
-    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
-  },
+
+  Version: '1.7',
+
+  Browser: (function(){
+    var ua = navigator.userAgent;
+    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
+    return {
+      IE:             !!window.attachEvent && !isOpera,
+      Opera:          isOpera,
+      WebKit:         ua.indexOf('AppleWebKit/') > -1,
+      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
+      MobileSafari:   /Apple.*Mobile/.test(ua)
+    }
+  })(),
 
   BrowserFeatures: {
     XPath: !!document.evaluate,
+
     SelectorsAPI: !!document.querySelector,
-    ElementExtensions: !!window.HTMLElement,
-    SpecificElementExtensions:
-      document.createElement('div')['__proto__'] &&
-      document.createElement('div')['__proto__'] !==
-        document.createElement('form')['__proto__']
+
+    ElementExtensions: (function() {
+      var constructor = window.Element || window.HTMLElement;
+      return !!(constructor && constructor.prototype);
+    })(),
+    SpecificElementExtensions: (function() {
+      if (typeof window.HTMLDivElement !== 'undefined')
+        return true;
+
+      var div = document.createElement('div'),
+          form = document.createElement('form'),
+          isSupported = false;
+
+      if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
+        isSupported = true;
+      }
+
+      div = form = null;
+
+      return isSupported;
+    })()
   },
 
   ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
   JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
 
   emptyFunction: function() { },
+
   K: function(x) { return x }
 };
 
@@ -40,232 +61,8 @@
   Prototype.BrowserFeatures.SpecificElementExtensions = false;
 
 
-/* Based on Alex Arnell's inheritance implementation. */
-var Class = {
-  create: function() {
-    var parent = null, properties = $A(arguments);
-    if (Object.isFunction(properties[0]))
-      parent = properties.shift();
-
-    function klass() {
-      this.initialize.apply(this, arguments);
-    }
-
-    Object.extend(klass, Class.Methods);
-    klass.superclass = parent;
-    klass.subclasses = [];
-
-    if (parent) {
-      var subclass = function() { };
-      subclass.prototype = parent.prototype;
-      klass.prototype = new subclass;
-      parent.subclasses.push(klass);
-    }
-
-    for (var i = 0; i < properties.length; i++)
-      klass.addMethods(properties[i]);
-
-    if (!klass.prototype.initialize)
-      klass.prototype.initialize = Prototype.emptyFunction;
-
-    klass.prototype.constructor = klass;
-
-    return klass;
-  }
-};
-
-Class.Methods = {
-  addMethods: function(source) {
-    var ancestor   = this.superclass && this.superclass.prototype;
-    var properties = Object.keys(source);
-
-    if (!Object.keys({ toString: true }).length)
-      properties.push("toString", "valueOf");
-
-    for (var i = 0, length = properties.length; i < length; i++) {
-      var property = properties[i], value = source[property];
-      if (ancestor && Object.isFunction(value) &&
-          value.argumentNames().first() == "$super") {
-        var method = value;
-        value = (function(m) {
-          return function() { return ancestor[m].apply(this, arguments) };
-        })(property).wrap(method);
-
-        value.valueOf = method.valueOf.bind(method);
-        value.toString = method.toString.bind(method);
-      }
-      this.prototype[property] = value;
-    }
-
-    return this;
-  }
-};
-
 var Abstract = { };
 
-Object.extend = function(destination, source) {
-  for (var property in source)
-    destination[property] = source[property];
-  return destination;
-};
-
-Object.extend(Object, {
-  inspect: function(object) {
-    try {
-      if (Object.isUndefined(object)) return 'undefined';
-      if (object === null) return 'null';
-      return object.inspect ? object.inspect() : String(object);
-    } catch (e) {
-      if (e instanceof RangeError) return '...';
-      throw e;
-    }
-  },
-
-  toJSON: function(object) {
-    var type = typeof object;
-    switch (type) {
-      case 'undefined':
-      case 'function':
-      case 'unknown': return;
-      case 'boolean': return object.toString();
-    }
-
-    if (object === null) return 'null';
-    if (object.toJSON) return object.toJSON();
-    if (Object.isElement(object)) return;
-
-    var results = [];
-    for (var property in object) {
-      var value = Object.toJSON(object[property]);
-      if (!Object.isUndefined(value))
-        results.push(property.toJSON() + ': ' + value);
-    }
-
-    return '{' + results.join(', ') + '}';
-  },
-
-  toQueryString: function(object) {
-    return $H(object).toQueryString();
-  },
-
-  toHTML: function(object) {
-    return object && object.toHTML ? object.toHTML() : String.interpret(object);
-  },
-
-  keys: function(object) {
-    var keys = [];
-    for (var property in object)
-      keys.push(property);
-    return keys;
-  },
-
-  values: function(object) {
-    var values = [];
-    for (var property in object)
-      values.push(object[property]);
-    return values;
-  },
-
-  clone: function(object) {
-    return Object.extend({ }, object);
-  },
-
-  isElement: function(object) {
-    return !!(object && object.nodeType == 1);
-  },
-
-  isArray: function(object) {
-    return object != null && typeof object == "object" &&
-      'splice' in object && 'join' in object;
-  },
-
-  isHash: function(object) {
-    return object instanceof Hash;
-  },
-
-  isFunction: function(object) {
-    return typeof object == "function";
-  },
-
-  isString: function(object) {
-    return typeof object == "string";
-  },
-
-  isNumber: function(object) {
-    return typeof object == "number";
-  },
-
-  isUndefined: function(object) {
-    return typeof object == "undefined";
-  }
-});
-
-Object.extend(Function.prototype, {
-  argumentNames: function() {
-    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1]
-      .replace(/\s+/g, '').split(',');
-    return names.length == 1 && !names[0] ? [] : names;
-  },
-
-  bind: function() {
-    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
-    var __method = this, args = $A(arguments), object = args.shift();
-    return function() {
-      return __method.apply(object, args.concat($A(arguments)));
-    }
-  },
-
-  bindAsEventListener: function() {
-    var __method = this, args = $A(arguments), object = args.shift();
-    return function(event) {
-      return __method.apply(object, [event || window.event].concat(args));
-    }
-  },
-
-  curry: function() {
-    if (!arguments.length) return this;
-    var __method = this, args = $A(arguments);
-    return function() {
-      return __method.apply(this, args.concat($A(arguments)));
-    }
-  },
-
-  delay: function() {
-    var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
-    return window.setTimeout(function() {
-      return __method.apply(__method, args);
-    }, timeout);
-  },
-
-  defer: function() {
-    var args = [0.01].concat($A(arguments));
-    return this.delay.apply(this, args);
-  },
-
-  wrap: function(wrapper) {
-    var __method = this;
-    return function() {
-      return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
-    }
-  },
-
-  methodize: function() {
-    if (this._methodized) return this._methodized;
-    var __method = this;
-    return this._methodized = function() {
-      return __method.apply(null, [this].concat($A(arguments)));
-    };
-  }
-});
-
-Date.prototype.toJSON = function() {
-  return '"' + this.getUTCFullYear() + '-' +
-    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
-    this.getUTCDate().toPaddedString(2) + 'T' +
-    this.getUTCHours().toPaddedString(2) + ':' +
-    this.getUTCMinutes().toPaddedString(2) + ':' +
-    this.getUTCSeconds().toPaddedString(2) + 'Z"';
-};
 
 var Try = {
   these: function() {
@@ -283,14 +80,407 @@
   }
 };
 
+/* Based on Alex Arnell's inheritance implementation. */
+
+var Class = (function() {
+
+  var IS_DONTENUM_BUGGY = (function(){
+    for (var p in { toString: 1 }) {
+      if (p === 'toString') return false;
+    }
+    return true;
+  })();
+
+  function subclass() {};
+  function create() {
+    var parent = null, properties = $A(arguments);
+    if (Object.isFunction(properties[0]))
+      parent = properties.shift();
+
+    function klass() {
+      this.initialize.apply(this, arguments);
+    }
+
+    Object.extend(klass, Class.Methods);
+    klass.superclass = parent;
+    klass.subclasses = [];
+
+    if (parent) {
+      subclass.prototype = parent.prototype;
+      klass.prototype = new subclass;
+      parent.subclasses.push(klass);
+    }
+
+    for (var i = 0, length = properties.length; i < length; i++)
+      klass.addMethods(properties[i]);
+
+    if (!klass.prototype.initialize)
+      klass.prototype.initialize = Prototype.emptyFunction;
+
+    klass.prototype.constructor = klass;
+    return klass;
+  }
+
+  function addMethods(source) {
+    var ancestor   = this.superclass && this.superclass.prototype,
+        properties = Object.keys(source);
+
+    if (IS_DONTENUM_BUGGY) {
+      if (source.toString != Object.prototype.toString)
+        properties.push("toString");
+      if (source.valueOf != Object.prototype.valueOf)
+        properties.push("valueOf");
+    }
+
+    for (var i = 0, length = properties.length; i < length; i++) {
+      var property = properties[i], value = source[property];
+      if (ancestor && Object.isFunction(value) &&
+          value.argumentNames()[0] == "$super") {
+        var method = value;
+        value = (function(m) {
+          return function() { return ancestor[m].apply(this, arguments); };
+        })(property).wrap(method);
+
+        value.valueOf = method.valueOf.bind(method);
+        value.toString = method.toString.bind(method);
+      }
+      this.prototype[property] = value;
+    }
+
+    return this;
+  }
+
+  return {
+    create: create,
+    Methods: {
+      addMethods: addMethods
+    }
+  };
+})();
+(function() {
+
+  var _toString = Object.prototype.toString,
+      NULL_TYPE = 'Null',
+      UNDEFINED_TYPE = 'Undefined',
+      BOOLEAN_TYPE = 'Boolean',
+      NUMBER_TYPE = 'Number',
+      STRING_TYPE = 'String',
+      OBJECT_TYPE = 'Object',
+      FUNCTION_CLASS = '[object Function]',
+      BOOLEAN_CLASS = '[object Boolean]',
+      NUMBER_CLASS = '[object Number]',
+      STRING_CLASS = '[object String]',
+      ARRAY_CLASS = '[object Array]',
+      DATE_CLASS = '[object Date]',
+      NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON &&
+        typeof JSON.stringify === 'function' &&
+        JSON.stringify(0) === '0' &&
+        typeof JSON.stringify(Prototype.K) === 'undefined';
+
+  function Type(o) {
+    switch(o) {
+      case null: return NULL_TYPE;
+      case (void 0): return UNDEFINED_TYPE;
+    }
+    var type = typeof o;
+    switch(type) {
+      case 'boolean': return BOOLEAN_TYPE;
+      case 'number':  return NUMBER_TYPE;
+      case 'string':  return STRING_TYPE;
+    }
+    return OBJECT_TYPE;
+  }
+
+  function extend(destination, source) {
+    for (var property in source)
+      destination[property] = source[property];
+    return destination;
+  }
+
+  function inspect(object) {
+    try {
+      if (isUndefined(object)) return 'undefined';
+      if (object === null) return 'null';
+      return object.inspect ? object.inspect() : String(object);
+    } catch (e) {
+      if (e instanceof RangeError) return '...';
+      throw e;
+    }
+  }
+
+  function toJSON(value) {
+    return Str('', { '': value }, []);
+  }
+
+  function Str(key, holder, stack) {
+    var value = holder[key],
+        type = typeof value;
+
+    if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') {
+      value = value.toJSON(key);
+    }
+
+    var _class = _toString.call(value);
+
+    switch (_class) {
+      case NUMBER_CLASS:
+      case BOOLEAN_CLASS:
+      case STRING_CLASS:
+        value = value.valueOf();
+    }
+
+    switch (value) {
+      case null: return 'null';
+      case true: return 'true';
+      case false: return 'false';
+    }
+
+    type = typeof value;
+    switch (type) {
+      case 'string':
+        return value.inspect(true);
+      case 'number':
+        return isFinite(value) ? String(value) : 'null';
+      case 'object':
+
+        for (var i = 0, length = stack.length; i < length; i++) {
+          if (stack[i] === value) { throw new TypeError(); }
+        }
+        stack.push(value);
+
+        var partial = [];
+        if (_class === ARRAY_CLASS) {
+          for (var i = 0, length = value.length; i < length; i++) {
+            var str = Str(i, value, stack);
+            partial.push(typeof str === 'undefined' ? 'null' : str);
+          }
+          partial = '[' + partial.join(',') + ']';
+        } else {
+          var keys = Object.keys(value);
+          for (var i = 0, length = keys.length; i < length; i++) {
+            var key = keys[i], str = Str(key, value, stack);
+            if (typeof str !== "undefined") {
+               partial.push(key.inspect(true)+ ':' + str);
+             }
+          }
+          partial = '{' + partial.join(',') + '}';
+        }
+        stack.pop();
+        return partial;
+    }
+  }
+
+  function stringify(object) {
+    return JSON.stringify(object);
+  }
+
+  function toQueryString(object) {
+    return $H(object).toQueryString();
+  }
+
+  function toHTML(object) {
+    return object && object.toHTML ? object.toHTML() : String.interpret(object);
+  }
+
+  function keys(object) {
+    if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); }
+    var results = [];
+    for (var property in object) {
+      if (object.hasOwnProperty(property)) {
+        results.push(property);
+      }
+    }
+    return results;
+  }
+
+  function values(object) {
+    var results = [];
+    for (var property in object)
+      results.push(object[property]);
+    return results;
+  }
+
+  function clone(object) {
+    return extend({ }, object);
+  }
+
+  function isElement(object) {
+    return !!(object && object.nodeType == 1);
+  }
+
+  function isArray(object) {
+    return _toString.call(object) === ARRAY_CLASS;
+  }
+
+  var hasNativeIsArray = (typeof Array.isArray == 'function')
+    && Array.isArray([]) && !Array.isArray({});
+
+  if (hasNativeIsArray) {
+    isArray = Array.isArray;
+  }
+
+  function isHash(object) {
+    return object instanceof Hash;
+  }
+
+  function isFunction(object) {
+    return _toString.call(object) === FUNCTION_CLASS;
+  }
+
+  function isString(object) {
+    return _toString.call(object) === STRING_CLASS;
+  }
+
+  function isNumber(object) {
+    return _toString.call(object) === NUMBER_CLASS;
+  }
+
+  function isDate(object) {
+    return _toString.call(object) === DATE_CLASS;
+  }
+
+  function isUndefined(object) {
+    return typeof object === "undefined";
+  }
+
+  extend(Object, {
+    extend:        extend,
+    inspect:       inspect,
+    toJSON:        NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON,
+    toQueryString: toQueryString,
+    toHTML:        toHTML,
+    keys:          Object.keys || keys,
+    values:        values,
+    clone:         clone,
+    isElement:     isElement,
+    isArray:       isArray,
+    isHash:        isHash,
+    isFunction:    isFunction,
+    isString:      isString,
+    isNumber:      isNumber,
+    isDate:        isDate,
+    isUndefined:   isUndefined
+  });
+})();
+Object.extend(Function.prototype, (function() {
+  var slice = Array.prototype.slice;
+
+  function update(array, args) {
+    var arrayLength = array.length, length = args.length;
+    while (length--) array[arrayLength + length] = args[length];
+    return array;
+  }
+
+  function merge(array, args) {
+    array = slice.call(array, 0);
+    return update(array, args);
+  }
+
+  function argumentNames() {
+    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
+      .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
+      .replace(/\s+/g, '').split(',');
+    return names.length == 1 && !names[0] ? [] : names;
+  }
+
+  function bind(context) {
+    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
+    var __method = this, args = slice.call(arguments, 1);
+    return function() {
+      var a = merge(args, arguments);
+      return __method.apply(context, a);
+    }
+  }
+
+  function bindAsEventListener(context) {
+    var __method = this, args = slice.call(arguments, 1);
+    return function(event) {
+      var a = update([event || window.event], args);
+      return __method.apply(context, a);
+    }
+  }
+
+  function curry() {
+    if (!arguments.length) return this;
+    var __method = this, args = slice.call(arguments, 0);
+    return function() {
+      var a = merge(args, arguments);
+      return __method.apply(this, a);
+    }
+  }
+
+  function delay(timeout) {
+    var __method = this, args = slice.call(arguments, 1);
+    timeout = timeout * 1000;
+    return window.setTimeout(function() {
+      return __method.apply(__method, args);
+    }, timeout);
+  }
+
+  function defer() {
+    var args = update([0.01], arguments);
+    return this.delay.apply(this, args);
+  }
+
+  function wrap(wrapper) {
+    var __method = this;
+    return function() {
+      var a = update([__method.bind(this)], arguments);
+      return wrapper.apply(this, a);
+    }
+  }
+
+  function methodize() {
+    if (this._methodized) return this._methodized;
+    var __method = this;
+    return this._methodized = function() {
+      var a = update([this], arguments);
+      return __method.apply(null, a);
+    };
+  }
+
+  return {
+    argumentNames:       argumentNames,
+    bind:                bind,
+    bindAsEventListener: bindAsEventListener,
+    curry:               curry,
+    delay:               delay,
+    defer:               defer,
+    wrap:                wrap,
+    methodize:           methodize
+  }
+})());
+
+
+
+(function(proto) {
+
+
+  function toISOString() {
+    return this.getUTCFullYear() + '-' +
+      (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+      this.getUTCDate().toPaddedString(2) + 'T' +
+      this.getUTCHours().toPaddedString(2) + ':' +
+      this.getUTCMinutes().toPaddedString(2) + ':' +
+      this.getUTCSeconds().toPaddedString(2) + 'Z';
+  }
+
+
+  function toJSON() {
+    return this.toISOString();
+  }
+
+  if (!proto.toISOString) proto.toISOString = toISOString;
+  if (!proto.toJSON) proto.toJSON = toJSON;
+
+})(Date.prototype);
+
+
 RegExp.prototype.match = RegExp.prototype.test;
 
 RegExp.escape = function(str) {
   return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
 };
-
-/*--------------------------------------------------------------------------*/
-
 var PeriodicalExecuter = Class.create({
   initialize: function(callback, frequency) {
     this.callback = callback;
@@ -319,8 +509,10 @@
       try {
         this.currentlyExecuting = true;
         this.execute();
-      } finally {
         this.currentlyExecuting = false;
+      } catch(e) {
+        this.currentlyExecuting = false;
+        throw e;
       }
     }
   }
@@ -339,10 +531,28 @@
   }
 });
 
-Object.extend(String.prototype, {
-  gsub: function(pattern, replacement) {
+Object.extend(String.prototype, (function() {
+  var NATIVE_JSON_PARSE_SUPPORT = window.JSON &&
+    typeof JSON.parse === 'function' &&
+    JSON.parse('{"test": true}').test;
+
+  function prepareReplacement(replacement) {
+    if (Object.isFunction(replacement)) return replacement;
+    var template = new Template(replacement);
+    return function(match) { return template.evaluate(match) };
+  }
+
+  function gsub(pattern, replacement) {
     var result = '', source = this, match;
-    replacement = arguments.callee.prepareReplacement(replacement);
+    replacement = prepareReplacement(replacement);
+
+    if (Object.isString(pattern))
+      pattern = RegExp.escape(pattern);
+
+    if (!(pattern.length || pattern.source)) {
+      replacement = replacement('');
+      return replacement + source.split('').join(replacement) + replacement;
+    }
 
     while (source.length > 0) {
       if (match = source.match(pattern)) {
@@ -354,76 +564,72 @@
       }
     }
     return result;
-  },
-
-  sub: function(pattern, replacement, count) {
-    replacement = this.gsub.prepareReplacement(replacement);
+  }
+
+  function sub(pattern, replacement, count) {
+    replacement = prepareReplacement(replacement);
     count = Object.isUndefined(count) ? 1 : count;
 
     return this.gsub(pattern, function(match) {
       if (--count < 0) return match[0];
       return replacement(match);
     });
-  },
-
-  scan: function(pattern, iterator) {
+  }
+
+  function scan(pattern, iterator) {
     this.gsub(pattern, iterator);
     return String(this);
-  },
-
-  truncate: function(length, truncation) {
+  }
+
+  function truncate(length, truncation) {
     length = length || 30;
     truncation = Object.isUndefined(truncation) ? '...' : truncation;
     return this.length > length ?
       this.slice(0, length - truncation.length) + truncation : String(this);
-  },
-
-  strip: function() {
+  }
+
+  function strip() {
     return this.replace(/^\s+/, '').replace(/\s+$/, '');
-  },
-
-  stripTags: function() {
-    return this.replace(/<\/?[^>]+>/gi, '');
-  },
-
-  stripScripts: function() {
+  }
+
+  function stripTags() {
+    return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
+  }
+
+  function stripScripts() {
     return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
-  },
-
-  extractScripts: function() {
-    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
-    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+  }
+
+  function extractScripts() {
+    var matchAll = new RegExp(Prototype.ScriptFragment, 'img'),
+        matchOne = new RegExp(Prototype.ScriptFragment, 'im');
     return (this.match(matchAll) || []).map(function(scriptTag) {
       return (scriptTag.match(matchOne) || ['', ''])[1];
     });
-  },
-
-  evalScripts: function() {
+  }
+
+  function evalScripts() {
     return this.extractScripts().map(function(script) { return eval(script) });
-  },
-
-  escapeHTML: function() {
-    var self = arguments.callee;
-    self.text.data = this;
-    return self.div.innerHTML;
-  },
-
-  unescapeHTML: function() {
-    var div = new Element('div');
-    div.innerHTML = this.stripTags();
-    return div.childNodes[0] ? (div.childNodes.length > 1 ?
-      $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
-      div.childNodes[0].nodeValue) : '';
-  },
-
-  toQueryParams: function(separator) {
+  }
+
+  function escapeHTML() {
+    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+  }
+
+  function unescapeHTML() {
+    return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
+  }
+
+
+  function toQueryParams(separator) {
     var match = this.strip().match(/([^?#]*)(#.*)?$/);
     if (!match) return { };
 
     return match[1].split(separator || '&').inject({ }, function(hash, pair) {
       if ((pair = pair.split('='))[0]) {
-        var key = decodeURIComponent(pair.shift());
-        var value = pair.length > 1 ? pair.join('=') : pair[0];
+        var key = decodeURIComponent(pair.shift()),
+            value = pair.length > 1 ? pair.join('=') : pair[0];
+
         if (value != undefined) value = decodeURIComponent(value);
 
         if (key in hash) {
@@ -434,128 +640,144 @@
       }
       return hash;
     });
-  },
-
-  toArray: function() {
+  }
+
+  function toArray() {
     return this.split('');
-  },
-
-  succ: function() {
+  }
+
+  function succ() {
     return this.slice(0, this.length - 1) +
       String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
-  },
-
-  times: function(count) {
+  }
+
+  function times(count) {
     return count < 1 ? '' : new Array(count + 1).join(this);
-  },
-
-  camelize: function() {
-    var parts = this.split('-'), len = parts.length;
-    if (len == 1) return parts[0];
-
-    var camelized = this.charAt(0) == '-'
-      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
-      : parts[0];
-
-    for (var i = 1; i < len; i++)
-      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
-
-    return camelized;
-  },
-
-  capitalize: function() {
+  }
+
+  function camelize() {
+    return this.replace(/-+(.)?/g, function(match, chr) {
+      return chr ? chr.toUpperCase() : '';
+    });
+  }
+
+  function capitalize() {
     return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
-  },
-
-  underscore: function() {
-    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
-  },
-
-  dasherize: function() {
-    return this.gsub(/_/,'-');
-  },
-
-  inspect: function(useDoubleQuotes) {
-    var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
-      var character = String.specialChar[match[0]];
-      return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
+  }
+
+  function underscore() {
+    return this.replace(/::/g, '/')
+               .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
+               .replace(/([a-z\d])([A-Z])/g, '$1_$2')
+               .replace(/-/g, '_')
+               .toLowerCase();
+  }
+
+  function dasherize() {
+    return this.replace(/_/g, '-');
+  }
+
+  function inspect(useDoubleQuotes) {
+    var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) {
+      if (character in String.specialChar) {
+        return String.specialChar[character];
+      }
+      return '\\u00' + character.charCodeAt().toPaddedString(2, 16);
     });
     if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
     return "'" + escapedString.replace(/'/g, '\\\'') + "'";
-  },
-
-  toJSON: function() {
-    return this.inspect(true);
-  },
-
-  unfilterJSON: function(filter) {
-    return this.sub(filter || Prototype.JSONFilter, '#{1}');
-  },
-
-  isJSON: function() {
+  }
+
+  function unfilterJSON(filter) {
+    return this.replace(filter || Prototype.JSONFilter, '$1');
+  }
+
+  function isJSON() {
     var str = this;
     if (str.blank()) return false;
-    str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
-    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
-  },
-
-  evalJSON: function(sanitize) {
-    var json = this.unfilterJSON();
+    str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@');
+    str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
+    str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
+    return (/^[\],:{}\s]*$/).test(str);
+  }
+
+  function evalJSON(sanitize) {
+    var json = this.unfilterJSON(),
+        cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
+    if (cx.test(json)) {
+      json = json.replace(cx, function (a) {
+        return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+      });
+    }
     try {
       if (!sanitize || json.isJSON()) return eval('(' + json + ')');
     } catch (e) { }
     throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
-  },
-
-  include: function(pattern) {
+  }
+
+  function parseJSON() {
+    var json = this.unfilterJSON();
+    return JSON.parse(json);
+  }
+
+  function include(pattern) {
     return this.indexOf(pattern) > -1;
-  },
-
-  startsWith: function(pattern) {
-    return this.indexOf(pattern) === 0;
-  },
-
-  endsWith: function(pattern) {
+  }
+
+  function startsWith(pattern) {
+    return this.lastIndexOf(pattern, 0) === 0;
+  }
+
+  function endsWith(pattern) {
     var d = this.length - pattern.length;
-    return d >= 0 && this.lastIndexOf(pattern) === d;
-  },
-
-  empty: function() {
+    return d >= 0 && this.indexOf(pattern, d) === d;
+  }
+
+  function empty() {
     return this == '';
-  },
-
-  blank: function() {
+  }
+
+  function blank() {
     return /^\s*$/.test(this);
-  },
-
-  interpolate: function(object, pattern) {
+  }
+
+  function interpolate(object, pattern) {
     return new Template(this, pattern).evaluate(object);
   }
-});
-
-if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
-  escapeHTML: function() {
-    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
-  },
-  unescapeHTML: function() {
-    return this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
-  }
-});
-
-String.prototype.gsub.prepareReplacement = function(replacement) {
-  if (Object.isFunction(replacement)) return replacement;
-  var template = new Template(replacement);
-  return function(match) { return template.evaluate(match) };
-};
-
-String.prototype.parseQuery = String.prototype.toQueryParams;
-
-Object.extend(String.prototype.escapeHTML, {
-  div:  document.createElement('div'),
-  text: document.createTextNode('')
-});
-
-String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);
+
+  return {
+    gsub:           gsub,
+    sub:            sub,
+    scan:           scan,
+    truncate:       truncate,
+    strip:          String.prototype.trim || strip,
+    stripTags:      stripTags,
+    stripScripts:   stripScripts,
+    extractScripts: extractScripts,
+    evalScripts:    evalScripts,
+    escapeHTML:     escapeHTML,
+    unescapeHTML:   unescapeHTML,
+    toQueryParams:  toQueryParams,
+    parseQuery:     toQueryParams,
+    toArray:        toArray,
+    succ:           succ,
+    times:          times,
+    camelize:       camelize,
+    capitalize:     capitalize,
+    underscore:     underscore,
+    dasherize:      dasherize,
+    inspect:        inspect,
+    unfilterJSON:   unfilterJSON,
+    isJSON:         isJSON,
+    evalJSON:       NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON,
+    include:        include,
+    startsWith:     startsWith,
+    endsWith:       endsWith,
+    empty:          empty,
+    blank:          blank,
+    interpolate:    interpolate
+  };
+})());
 
 var Template = Class.create({
   initialize: function(template, pattern) {
@@ -564,22 +786,23 @@
   },
 
   evaluate: function(object) {
-    if (Object.isFunction(object.toTemplateReplacements))
+    if (object && Object.isFunction(object.toTemplateReplacements))
       object = object.toTemplateReplacements();
 
     return this.template.gsub(this.pattern, function(match) {
-      if (object == null) return '';
+      if (object == null) return (match[1] + '');
 
       var before = match[1] || '';
       if (before == '\\') return match[2];
 
-      var ctx = object, expr = match[3];
-      var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+      var ctx = object, expr = match[3],
+          pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+
       match = pattern.exec(expr);
       if (match == null) return before;
 
       while (match != null) {
-        var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
+        var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1];
         ctx = ctx[comp];
         if (null == ctx || '' == match[3]) break;
         expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
@@ -594,8 +817,8 @@
 
 var $break = { };
 
-var Enumerable = {
-  each: function(iterator, context) {
+var Enumerable = (function() {
+  function each(iterator, context) {
     var index = 0;
     try {
       this._each(function(value) {
@@ -605,17 +828,17 @@
       if (e != $break) throw e;
     }
     return this;
-  },
-
-  eachSlice: function(number, iterator, context) {
+  }
+
+  function eachSlice(number, iterator, context) {
     var index = -number, slices = [], array = this.toArray();
     if (number < 1) return array;
     while ((index += number) < array.length)
       slices.push(array.slice(index, index+number));
     return slices.collect(iterator, context);
-  },
-
-  all: function(iterator, context) {
+  }
+
+  function all(iterator, context) {
     iterator = iterator || Prototype.K;
     var result = true;
     this.each(function(value, index) {
@@ -623,9 +846,9 @@
       if (!result) throw $break;
     });
     return result;
-  },
-
-  any: function(iterator, context) {
+  }
+
+  function any(iterator, context) {
     iterator = iterator || Prototype.K;
     var result = false;
     this.each(function(value, index) {
@@ -633,18 +856,18 @@
         throw $break;
     });
     return result;
-  },
-
-  collect: function(iterator, context) {
+  }
+
+  function collect(iterator, context) {
     iterator = iterator || Prototype.K;
     var results = [];
     this.each(function(value, index) {
       results.push(iterator.call(context, value, index));
     });
     return results;
-  },
-
-  detect: function(iterator, context) {
+  }
+
+  function detect(iterator, context) {
     var result;
     this.each(function(value, index) {
       if (iterator.call(context, value, index)) {
@@ -653,32 +876,32 @@
       }
     });
     return result;
-  },
-
-  findAll: function(iterator, context) {
+  }
+
+  function findAll(iterator, context) {
     var results = [];
     this.each(function(value, index) {
       if (iterator.call(context, value, index))
         results.push(value);
     });
     return results;
-  },
-
-  grep: function(filter, iterator, context) {
+  }
+
+  function grep(filter, iterator, context) {
     iterator = iterator || Prototype.K;
     var results = [];
 
     if (Object.isString(filter))
-      filter = new RegExp(filter);
+      filter = new RegExp(RegExp.escape(filter));
 
     this.each(function(value, index) {
       if (filter.match(value))
         results.push(iterator.call(context, value, index));
     });
     return results;
-  },
-
-  include: function(object) {
+  }
+
+  function include(object) {
     if (Object.isFunction(this.indexOf))
       if (this.indexOf(object) != -1) return true;
 
@@ -690,31 +913,31 @@
       }
     });
     return found;
-  },
-
-  inGroupsOf: function(number, fillWith) {
+  }
+
+  function inGroupsOf(number, fillWith) {
     fillWith = Object.isUndefined(fillWith) ? null : fillWith;
     return this.eachSlice(number, function(slice) {
       while(slice.length < number) slice.push(fillWith);
       return slice;
     });
-  },
-
-  inject: function(memo, iterator, context) {
+  }
+
+  function inject(memo, iterator, context) {
     this.each(function(value, index) {
       memo = iterator.call(context, memo, value, index);
     });
     return memo;
-  },
-
-  invoke: function(method) {
+  }
+
+  function invoke(method) {
     var args = $A(arguments).slice(1);
     return this.map(function(value) {
       return value[method].apply(value, args);
     });
-  },
-
-  max: function(iterator, context) {
+  }
+
+  function max(iterator, context) {
     iterator = iterator || Prototype.K;
     var result;
     this.each(function(value, index) {
@@ -723,9 +946,9 @@
         result = value;
     });
     return result;
-  },
-
-  min: function(iterator, context) {
+  }
+
+  function min(iterator, context) {
     iterator = iterator || Prototype.K;
     var result;
     this.each(function(value, index) {
@@ -734,9 +957,9 @@
         result = value;
     });
     return result;
-  },
-
-  partition: function(iterator, context) {
+  }
+
+  function partition(iterator, context) {
     iterator = iterator || Prototype.K;
     var trues = [], falses = [];
     this.each(function(value, index) {
@@ -744,26 +967,26 @@
         trues : falses).push(value);
     });
     return [trues, falses];
-  },
-
-  pluck: function(property) {
+  }
+
+  function pluck(property) {
     var results = [];
     this.each(function(value) {
       results.push(value[property]);
     });
     return results;
-  },
-
-  reject: function(iterator, context) {
+  }
+
+  function reject(iterator, context) {
     var results = [];
     this.each(function(value, index) {
       if (!iterator.call(context, value, index))
         results.push(value);
     });
     return results;
-  },
-
-  sortBy: function(iterator, context) {
+  }
+
+  function sortBy(iterator, context) {
     return this.map(function(value, index) {
       return {
         value: value,
@@ -773,13 +996,13 @@
       var a = left.criteria, b = right.criteria;
       return a < b ? -1 : a > b ? 1 : 0;
     }).pluck('value');
-  },
-
-  toArray: function() {
+  }
+
+  function toArray() {
     return this.map();
-  },
-
-  zip: function() {
+  }
+
+  function zip() {
     var iterator = Prototype.K, args = $A(arguments);
     if (Object.isFunction(args.last()))
       iterator = args.pop();
@@ -788,336 +1011,416 @@
     return this.map(function(value, index) {
       return iterator(collections.pluck(index));
     });
-  },
-
-  size: function() {
+  }
+
+  function size() {
     return this.toArray().length;
-  },
-
-  inspect: function() {
+  }
+
+  function inspect() {
     return '#<Enumerable:' + this.toArray().inspect() + '>';
   }
-};
-
-Object.extend(Enumerable, {
-  map:     Enumerable.collect,
-  find:    Enumerable.detect,
-  select:  Enumerable.findAll,
-  filter:  Enumerable.findAll,
-  member:  Enumerable.include,
-  entries: Enumerable.toArray,
-  every:   Enumerable.all,
-  some:    Enumerable.any
-});
+
+
+
+
+
+
+
+
+
+  return {
+    each:       each,
+    eachSlice:  eachSlice,
+    all:        all,
+    every:      all,
+    any:        any,
+    some:       any,
+    collect:    collect,
+    map:        collect,
+    detect:     detect,
+    findAll:    findAll,
+    select:     findAll,
+    filter:     findAll,
+    grep:       grep,
+    include:    include,
+    member:     include,
+    inGroupsOf: inGroupsOf,
+    inject:     inject,
+    invoke:     invoke,
+    max:        max,
+    min:        min,
+    partition:  partition,
+    pluck:      pluck,
+    reject:     reject,
+    sortBy:     sortBy,
+    toArray:    toArray,
+    entries:    toArray,
+    zip:        zip,
+    size:       size,
+    inspect:    inspect,
+    find:       detect
+  };
+})();
+
 function $A(iterable) {
   if (!iterable) return [];
-  if (iterable.toArray) return iterable.toArray();
+  if ('toArray' in Object(iterable)) return iterable.toArray();
   var length = iterable.length || 0, results = new Array(length);
   while (length--) results[length] = iterable[length];
   return results;
 }
 
-if (Prototype.Browser.WebKit) {
-  $A = function(iterable) {
-    if (!iterable) return [];
-    // In Safari, only use the `toArray` method if it's not a NodeList.
-    // A NodeList is a function, has an function `item` property, and a numeric
-    // `length` property. Adapted from Google Doctype.
-    if (!(typeof iterable === 'function' && typeof iterable.length ===
-        'number' && typeof iterable.item === 'function') && iterable.toArray)
-      return iterable.toArray();
-    var length = iterable.length || 0, results = new Array(length);
-    while (length--) results[length] = iterable[length];
-    return results;
-  };
+
+function $w(string) {
+  if (!Object.isString(string)) return [];
+  string = string.strip();
+  return string ? string.split(/\s+/) : [];
 }
 
 Array.from = $A;
 
-Object.extend(Array.prototype, Enumerable);
-
-if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
-
-Object.extend(Array.prototype, {
-  _each: function(iterator) {
-    for (var i = 0, length = this.length; i < length; i++)
-      iterator(this[i]);
-  },
-
-  clear: function() {
+
+(function() {
+  var arrayProto = Array.prototype,
+      slice = arrayProto.slice,
+      _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available
+
+  function each(iterator, context) {
+    for (var i = 0, length = this.length >>> 0; i < length; i++) {
+      if (i in this) iterator.call(context, this[i], i, this);
+    }
+  }
+  if (!_each) _each = each;
+
+  function clear() {
     this.length = 0;
     return this;
-  },
-
-  first: function() {
+  }
+
+  function first() {
     return this[0];
-  },
-
-  last: function() {
+  }
+
+  function last() {
     return this[this.length - 1];
-  },
-
-  compact: function() {
+  }
+
+  function compact() {
     return this.select(function(value) {
       return value != null;
     });
-  },
-
-  flatten: function() {
+  }
+
+  function flatten() {
     return this.inject([], function(array, value) {
-      return array.concat(Object.isArray(value) ?
-        value.flatten() : [value]);
+      if (Object.isArray(value))
+        return array.concat(value.flatten());
+      array.push(value);
+      return array;
     });
-  },
-
-  without: function() {
-    var values = $A(arguments);
+  }
+
+  function without() {
+    var values = slice.call(arguments, 0);
     return this.select(function(value) {
       return !values.include(value);
     });
-  },
-
-  reverse: function(inline) {
-    return (inline !== false ? this : this.toArray())._reverse();
-  },
-
-  reduce: function() {
-    return this.length > 1 ? this : this[0];
-  },
-
-  uniq: function(sorted) {
+  }
+
+  function reverse(inline) {
+    return (inline === false ? this.toArray() : this)._reverse();
+  }
+
+  function uniq(sorted) {
     return this.inject([], function(array, value, index) {
       if (0 == index || (sorted ? array.last() != value : !array.include(value)))
         array.push(value);
       return array;
     });
-  },
-
-  intersect: function(array) {
+  }
+
+  function intersect(array) {
     return this.uniq().findAll(function(item) {
       return array.detect(function(value) { return item === value });
     });
-  },
-
-  clone: function() {
-    return [].concat(this);
-  },
-
-  size: function() {
+  }
+
+
+  function clone() {
+    return slice.call(this, 0);
+  }
+
+  function size() {
     return this.length;
-  },
-
-  inspect: function() {
+  }
+
+  function inspect() {
     return '[' + this.map(Object.inspect).join(', ') + ']';
-  },
-
-  toJSON: function() {
-    var results = [];
-    this.each(function(object) {
-      var value = Object.toJSON(object);
-      if (!Object.isUndefined(value)) results.push(value);
-    });
-    return '[' + results.join(', ') + ']';
-  }
-});
-
-// use native browser JS 1.6 implementation if available
-if (Object.isFunction(Array.prototype.forEach))
-  Array.prototype._each = Array.prototype.forEach;
-
-if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
-  i || (i = 0);
-  var length = this.length;
-  if (i < 0) i = length + i;
-  for (; i < length; i++)
-    if (this[i] === item) return i;
-  return -1;
-};
-
-if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
-  i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
-  var n = this.slice(0, i).reverse().indexOf(item);
-  return (n < 0) ? n : i - n - 1;
-};
-
-Array.prototype.toArray = Array.prototype.clone;
-
-function $w(string) {
-  if (!Object.isString(string)) return [];
-  string = string.strip();
-  return string ? string.split(/\s+/) : [];
-}
-
-if (Prototype.Browser.Opera){
-  Array.prototype.concat = function() {
-    var array = [];
-    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
+  }
+
+  function indexOf(item, i) {
+    i || (i = 0);
+    var length = this.length;
+    if (i < 0) i = length + i;
+    for (; i < length; i++)
+      if (this[i] === item) return i;
+    return -1;
+  }
+
+  function lastIndexOf(item, i) {
+    i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+    var n = this.slice(0, i).reverse().indexOf(item);
+    return (n < 0) ? n : i - n - 1;
+  }
+
+  function concat() {
+    var array = slice.call(this, 0), item;
     for (var i = 0, length = arguments.length; i < length; i++) {
-      if (Object.isArray(arguments[i])) {
-        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
-          array.push(arguments[i][j]);
+      item = arguments[i];
+      if (Object.isArray(item) && !('callee' in item)) {
+        for (var j = 0, arrayLength = item.length; j < arrayLength; j++)
+          array.push(item[j]);
       } else {
-        array.push(arguments[i]);
+        array.push(item);
       }
     }
     return array;
-  };
-}
-Object.extend(Number.prototype, {
-  toColorPart: function() {
-    return this.toPaddedString(2, 16);
-  },
-
-  succ: function() {
-    return this + 1;
-  },
-
-  times: function(iterator, context) {
-    $R(0, this, true).each(iterator, context);
-    return this;
-  },
-
-  toPaddedString: function(length, radix) {
-    var string = this.toString(radix || 10);
-    return '0'.times(length - string.length) + string;
-  },
-
-  toJSON: function() {
-    return isFinite(this) ? this.toString() : 'null';
-  }
-});
-
-$w('abs round ceil floor').each(function(method){
-  Number.prototype[method] = Math[method].methodize();
-});
+  }
+
+  Object.extend(arrayProto, Enumerable);
+
+  if (!arrayProto._reverse)
+    arrayProto._reverse = arrayProto.reverse;
+
+  Object.extend(arrayProto, {
+    _each:     _each,
+    clear:     clear,
+    first:     first,
+    last:      last,
+    compact:   compact,
+    flatten:   flatten,
+    without:   without,
+    reverse:   reverse,
+    uniq:      uniq,
+    intersect: intersect,
+    clone:     clone,
+    toArray:   clone,
+    size:      size,
+    inspect:   inspect
+  });
+
+  var CONCAT_ARGUMENTS_BUGGY = (function() {
+    return [].concat(arguments)[0][0] !== 1;
+  })(1,2)
+
+  if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat;
+
+  if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;
+  if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf;
+})();
 function $H(object) {
   return new Hash(object);
 };
 
 var Hash = Class.create(Enumerable, (function() {
+  function initialize(object) {
+    this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+  }
+
+
+  function _each(iterator) {
+    for (var key in this._object) {
+      var value = this._object[key], pair = [key, value];
+      pair.key = key;
+      pair.value = value;
+      iterator(pair);
+    }
+  }
+
+  function set(key, value) {
+    return this._object[key] = value;
+  }
+
+  function get(key) {
+    if (this._object[key] !== Object.prototype[key])
+      return this._object[key];
+  }
+
+  function unset(key) {
+    var value = this._object[key];
+    delete this._object[key];
+    return value;
+  }
+
+  function toObject() {
+    return Object.clone(this._object);
+  }
+
+
+
+  function keys() {
+    return this.pluck('key');
+  }
+
+  function values() {
+    return this.pluck('value');
+  }
+
+  function index(value) {
+    var match = this.detect(function(pair) {
+      return pair.value === value;
+    });
+    return match && match.key;
+  }
+
+  function merge(object) {
+    return this.clone().update(object);
+  }
+
+  function update(object) {
+    return new Hash(object).inject(this, function(result, pair) {
+      result.set(pair.key, pair.value);
+      return result;
+    });
+  }
 
   function toQueryPair(key, value) {
     if (Object.isUndefined(value)) return key;
     return key + '=' + encodeURIComponent(String.interpret(value));
   }
 
+  function toQueryString() {
+    return this.inject([], function(results, pair) {
+      var key = encodeURIComponent(pair.key), values = pair.value;
+
+      if (values && typeof values == 'object') {
+        if (Object.isArray(values)) {
+          var queryValues = [];
+          for (var i = 0, len = values.length, value; i < len; i++) {
+            value = values[i];
+            queryValues.push(toQueryPair(key, value));
+          }
+          return results.concat(queryValues);
+        }
+      } else results.push(toQueryPair(key, values));
+      return results;
+    }).join('&');
+  }
+
+  function inspect() {
+    return '#<Hash:{' + this.map(function(pair) {
+      return pair.map(Object.inspect).join(': ');
+    }).join(', ') + '}>';
+  }
+
+  function clone() {
+    return new Hash(this);
+  }
+
   return {
-    initialize: function(object) {
-      this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
-    },
-
-    _each: function(iterator) {
-      for (var key in this._object) {
-        var value = this._object[key], pair = [key, value];
-        pair.key = key;
-        pair.value = value;
-        iterator(pair);
-      }
-    },
-
-    set: function(key, value) {
-      return this._object[key] = value;
-    },
-
-    get: function(key) {
-      // simulating poorly supported hasOwnProperty
-      if (this._object[key] !== Object.prototype[key])
-        return this._object[key];
-    },
-
-    unset: function(key) {
-      var value = this._object[key];
-      delete this._object[key];
-      return value;
-    },
-
-    toObject: function() {
-      return Object.clone(this._object);
-    },
-
-    keys: function() {
-      return this.pluck('key');
-    },
-
-    values: function() {
-      return this.pluck('value');
-    },
-
-    index: function(value) {
-      var match = this.detect(function(pair) {
-        return pair.value === value;
-      });
-      return match && match.key;
-    },
-
-    merge: function(object) {
-      return this.clone().update(object);
-    },
-
-    update: function(object) {
-      return new Hash(object).inject(this, function(result, pair) {
-        result.set(pair.key, pair.value);
-        return result;
-      });
-    },
-
-    toQueryString: function() {
-      return this.inject([], function(results, pair) {
-        var key = encodeURIComponent(pair.key), values = pair.value;
-
-        if (values && typeof values == 'object') {
-          if (Object.isArray(values))
-            return results.concat(values.map(toQueryPair.curry(key)));
-        } else results.push(toQueryPair(key, values));
-        return results;
-      }).join('&');
-    },
-
-    inspect: function() {
-      return '#<Hash:{' + this.map(function(pair) {
-        return pair.map(Object.inspect).join(': ');
-      }).join(', ') + '}>';
-    },
-
-    toJSON: function() {
-      return Object.toJSON(this.toObject());
-    },
-
-    clone: function() {
-      return new Hash(this);
-    }
-  }
+    initialize:             initialize,
+    _each:                  _each,
+    set:                    set,
+    get:                    get,
+    unset:                  unset,
+    toObject:               toObject,
+    toTemplateReplacements: toObject,
+    keys:                   keys,
+    values:                 values,
+    index:                  index,
+    merge:                  merge,
+    update:                 update,
+    toQueryString:          toQueryString,
+    inspect:                inspect,
+    toJSON:                 toObject,
+    clone:                  clone
+  };
 })());
 
-Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
 Hash.from = $H;
-var ObjectRange = Class.create(Enumerable, {
-  initialize: function(start, end, exclusive) {
+Object.extend(Number.prototype, (function() {
+  function toColorPart() {
+    return this.toPaddedString(2, 16);
+  }
+
+  function succ() {
+    return this + 1;
+  }
+
+  function times(iterator, context) {
+    $R(0, this, true).each(iterator, context);
+    return this;
+  }
+
+  function toPaddedString(length, radix) {
+    var string = this.toString(radix || 10);
+    return '0'.times(length - string.length) + string;
+  }
+
+  function abs() {
+    return Math.abs(this);
+  }
+
+  function round() {
+    return Math.round(this);
+  }
+
+  function ceil() {
+    return Math.ceil(this);
+  }
+
+  function floor() {
+    return Math.floor(this);
+  }
+
+  return {
+    toColorPart:    toColorPart,
+    succ:           succ,
+    times:          times,
+    toPaddedString: toPaddedString,
+    abs:            abs,
+    round:          round,
+    ceil:           ceil,
+    floor:          floor
+  };
+})());
+
+function $R(start, end, exclusive) {
+  return new ObjectRange(start, end, exclusive);
+}
+
+var ObjectRange = Class.create(Enumerable, (function() {
+  function initialize(start, end, exclusive) {
     this.start = start;
     this.end = end;
     this.exclusive = exclusive;
-  },
-
-  _each: function(iterator) {
+  }
+
+  function _each(iterator) {
     var value = this.start;
     while (this.include(value)) {
       iterator(value);
       value = value.succ();
     }
-  },
-
-  include: function(value) {
+  }
+
+  function include(value) {
     if (value < this.start)
       return false;
     if (this.exclusive)
       return value < this.end;
     return value <= this.end;
   }
-});
-
-var $R = function(start, end, exclusive) {
-  return new ObjectRange(start, end, exclusive);
-};
+
+  return {
+    initialize: initialize,
+    _each:      _each,
+    include:    include
+  };
+})());
+
+
 
 var Ajax = {
   getTransport: function() {
@@ -1164,7 +1467,6 @@
   onCreate:   function() { Ajax.activeRequestCount++ },
   onComplete: function() { Ajax.activeRequestCount-- }
 });
-
 Ajax.Base = Class.create({
   initialize: function(options) {
     this.options = {
@@ -1180,13 +1482,10 @@
 
     this.options.method = this.options.method.toLowerCase();
 
-    if (Object.isString(this.options.parameters))
-      this.options.parameters = this.options.parameters.toQueryParams();
-    else if (Object.isHash(this.options.parameters))
+    if (Object.isHash(this.options.parameters))
       this.options.parameters = this.options.parameters.toObject();
   }
 });
-
 Ajax.Request = Class.create(Ajax.Base, {
   _complete: false,
 
@@ -1199,24 +1498,21 @@
   request: function(url) {
     this.url = url;
     this.method = this.options.method;
-    var params = Object.clone(this.options.parameters);
+    var params = Object.isString(this.options.parameters) ?
+          this.options.parameters :
+          Object.toQueryString(this.options.parameters);
 
     if (!['get', 'post'].include(this.method)) {
-      // simulate other verbs over post
-      params['_method'] = this.method;
+      params += (params ? '&' : '') + "_method=" + this.method;
       this.method = 'post';
     }
 
-    this.parameters = params;
-
-    if (params = Object.toQueryString(params)) {
-      // when GET, append parameters to URL
-      if (this.method == 'get')
-        this.url += (this.url.include('?') ? '&' : '?') + params;
-      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
-        params += '&_=';
+    if (params && this.method === 'get') {
+      this.url += (this.url.include('?') ? '&' : '?') + params;
     }
 
+    this.parameters = params.toQueryParams();
+
     try {
       var response = new Ajax.Response(this);
       if (this.options.onCreate) this.options.onCreate(response);
@@ -1269,7 +1565,6 @@
             headers['Connection'] = 'close';
     }
 
-    // user-defined headers
     if (typeof this.options.requestHeaders == 'object') {
       var extras = this.options.requestHeaders;
 
@@ -1286,11 +1581,12 @@
 
   success: function() {
     var status = this.getStatus();
-    return !status || (status >= 200 && status < 300);
+    return !status || (status >= 200 && status < 300) || status == 304;
   },
 
   getStatus: function() {
     try {
+      if (this.transport.status === 1223) return 204;
       return this.transport.status || 0;
     } catch (e) { return 0 }
   },
@@ -1323,7 +1619,6 @@
     }
 
     if (state == 'Complete') {
-      // avoid memory leak in MSIE: clean up
       this.transport.onreadystatechange = Prototype.emptyFunction;
     }
   },
@@ -1340,7 +1635,7 @@
   getHeader: function(name) {
     try {
       return this.transport.getResponseHeader(name) || null;
-    } catch (e) { return null }
+    } catch (e) { return null; }
   },
 
   evalResponse: function() {
@@ -1360,20 +1655,27 @@
 Ajax.Request.Events =
   ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
 
+
+
+
+
+
+
+
 Ajax.Response = Class.create({
   initialize: function(request){
     this.request = request;
     var transport  = this.transport  = request.transport,
         readyState = this.readyState = transport.readyState;
 
-    if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+    if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
       this.status       = this.getStatus();
       this.statusText   = this.getStatusText();
       this.responseText = String.interpret(transport.responseText);
       this.headerJSON   = this._getHeaderJSON();
     }
 
-    if(readyState == 4) {
+    if (readyState == 4) {
       var xml = transport.responseXML;
       this.responseXML  = Object.isUndefined(xml) ? null : xml;
       this.responseJSON = this._getResponseJSON();
@@ -1381,6 +1683,7 @@
   },
 
   status:      0,
+
   statusText: '',
 
   getStatus: Ajax.Request.prototype.getStatus,
@@ -1510,6 +1813,8 @@
     this.updater = new Ajax.Updater(this.container, this.url, this.options);
   }
 });
+
+
 function $(element) {
   if (arguments.length > 1) {
     for (var i = 0, elements = [], length = arguments.length; i < length; i++)
@@ -1534,10 +1839,9 @@
 
 /*--------------------------------------------------------------------------*/
 
-if (!window.Node) var Node = { };
+if (!Node) var Node = { };
 
 if (!Node.ELEMENT_NODE) {
-  // DOM level 2 ECMAScript Language Binding
   Object.extend(Node, {
     ELEMENT_NODE: 1,
     ATTRIBUTE_NODE: 2,
@@ -1554,26 +1858,63 @@
   });
 }
 
-(function() {
-  var element = this.Element;
-  this.Element = function(tagName, attributes) {
+
+
+(function(global) {
+  function shouldUseCache(tagName, attributes) {
+    if (tagName === 'select') return false;
+    if ('type' in attributes) return false;
+    return true;
+  }
+
+  var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){
+    try {
+      var el = document.createElement('<input name="x">');
+      return el.tagName.toLowerCase() === 'input' && el.name === 'x';
+    }
+    catch(err) {
+      return false;
+    }
+  })();
+
+  var element = global.Element;
+
+  global.Element = function(tagName, attributes) {
     attributes = attributes || { };
     tagName = tagName.toLowerCase();
     var cache = Element.cache;
-    if (Prototype.Browser.IE && attributes.name) {
+
+    if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) {
       tagName = '<' + tagName + ' name="' + attributes.name + '">';
       delete attributes.name;
       return Element.writeAttribute(document.createElement(tagName), attributes);
     }
+
     if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
-    return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+
+    var node = shouldUseCache(tagName, attributes) ?
+     cache[tagName].cloneNode(false) : document.createElement(tagName);
+
+    return Element.writeAttribute(node, attributes);
   };
-  Object.extend(this.Element, element || { });
-  if (element) this.Element.prototype = element.prototype;
-}).call(window);
-
+
+  Object.extend(global.Element, element || { });
+  if (element) global.Element.prototype = element.prototype;
+
+})(this);
+
+Element.idCounter = 1;
 Element.cache = { };
 
+Element._purgeElement = function(element) {
+  var uid = element._prototypeUID;
+  if (uid) {
+    Element.stopObserving(element);
+    element._prototypeUID = void 0;
+    delete Element.Storage[uid];
+  }
+}
+
 Element.Methods = {
   visible: function(element) {
     return $(element).style.display != 'none';
@@ -1603,15 +1944,116 @@
     return element;
   },
 
-  update: function(element, content) {
-    element = $(element);
-    if (content && content.toElement) content = content.toElement();
-    if (Object.isElement(content)) return element.update().insert(content);
-    content = Object.toHTML(content);
-    element.innerHTML = content.stripScripts();
-    content.evalScripts.bind(content).defer();
-    return element;
-  },
+  update: (function(){
+
+    var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){
+      var el = document.createElement("select"),
+          isBuggy = true;
+      el.innerHTML = "<option value=\"test\">test</option>";
+      if (el.options && el.options[0]) {
+        isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION";
+      }
+      el = null;
+      return isBuggy;
+    })();
+
+    var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){
+      try {
+        var el = document.createElement("table");
+        if (el && el.tBodies) {
+          el.innerHTML = "<tbody><tr><td>test</td></tr></tbody>";
+          var isBuggy = typeof el.tBodies[0] == "undefined";
+          el = null;
+          return isBuggy;
+        }
+      } catch (e) {
+        return true;
+      }
+    })();
+
+    var LINK_ELEMENT_INNERHTML_BUGGY = (function() {
+      try {
+        var el = document.createElement('div');
+        el.innerHTML = "<link>";
+        var isBuggy = (el.childNodes.length === 0);
+        el = null;
+        return isBuggy;
+      } catch(e) {
+        return true;
+      }
+    })();
+
+    var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY ||
+     TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY;
+
+    var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () {
+      var s = document.createElement("script"),
+          isBuggy = false;
+      try {
+        s.appendChild(document.createTextNode(""));
+        isBuggy = !s.firstChild ||
+          s.firstChild && s.firstChild.nodeType !== 3;
+      } catch (e) {
+        isBuggy = true;
+      }
+      s = null;
+      return isBuggy;
+    })();
+
+
+    function update(element, content) {
+      element = $(element);
+      var purgeElement = Element._purgeElement;
+
+      var descendants = element.getElementsByTagName('*'),
+       i = descendants.length;
+      while (i--) purgeElement(descendants[i]);
+
+      if (content && content.toElement)
+        content = content.toElement();
+
+      if (Object.isElement(content))
+        return element.update().insert(content);
+
+      content = Object.toHTML(content);
+
+      var tagName = element.tagName.toUpperCase();
+
+      if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {
+        element.text = content;
+        return element;
+      }
+
+      if (ANY_INNERHTML_BUGGY) {
+        if (tagName in Element._insertionTranslations.tags) {
+          while (element.firstChild) {
+            element.removeChild(element.firstChild);
+          }
+          Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+            .each(function(node) {
+              element.appendChild(node)
+            });
+        } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf('<link') > -1) {
+          while (element.firstChild) {
+            element.removeChild(element.firstChild);
+          }
+          var nodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts(), true);
+          nodes.each(function(node) { element.appendChild(node) });
+        }
+        else {
+          element.innerHTML = content.stripScripts();
+        }
+      }
+      else {
+        element.innerHTML = content.stripScripts();
+      }
+
+      content.evalScripts.bind(content).defer();
+      return element;
+    }
+
+    return update;
+  })(),
 
   replace: function(element, content) {
     element = $(element);
@@ -1679,28 +2121,35 @@
     element = $(element);
     var result = '<' + element.tagName.toLowerCase();
     $H({'id': 'id', 'className': 'class'}).each(function(pair) {
-      var property = pair.first(), attribute = pair.last();
-      var value = (element[property] || '').toString();
+      var property = pair.first(),
+          attribute = pair.last(),
+          value = (element[property] || '').toString();
       if (value) result += ' ' + attribute + '=' + value.inspect(true);
     });
     return result + '>';
   },
 
-  recursivelyCollect: function(element, property) {
+  recursivelyCollect: function(element, property, maximumLength) {
     element = $(element);
+    maximumLength = maximumLength || -1;
     var elements = [];
-    while (element = element[property])
+
+    while (element = element[property]) {
       if (element.nodeType == 1)
         elements.push(Element.extend(element));
+      if (elements.length == maximumLength)
+        break;
+    }
+
     return elements;
   },
 
   ancestors: function(element) {
-    return $(element).recursivelyCollect('parentNode');
+    return Element.recursivelyCollect(element, 'parentNode');
   },
 
   descendants: function(element) {
-    return $(element).select("*");
+    return Element.select(element, "*");
   },
 
   firstDescendant: function(element) {
@@ -1710,78 +2159,96 @@
   },
 
   immediateDescendants: function(element) {
-    if (!(element = $(element).firstChild)) return [];
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    if (element) return [element].concat($(element).nextSiblings());
-    return [];
+    var results = [], child = $(element).firstChild;
+    while (child) {
+      if (child.nodeType === 1) {
+        results.push(Element.extend(child));
+      }
+      child = child.nextSibling;
+    }
+    return results;
   },
 
-  previousSiblings: function(element) {
-    return $(element).recursivelyCollect('previousSibling');
+  previousSiblings: function(element, maximumLength) {
+    return Element.recursivelyCollect(element, 'previousSibling');
   },
 
   nextSiblings: function(element) {
-    return $(element).recursivelyCollect('nextSibling');
+    return Element.recursivelyCollect(element, 'nextSibling');
   },
 
   siblings: function(element) {
     element = $(element);
-    return element.previousSiblings().reverse().concat(element.nextSiblings());
+    return Element.previousSiblings(element).reverse()
+      .concat(Element.nextSiblings(element));
   },
 
   match: function(element, selector) {
+    element = $(element);
     if (Object.isString(selector))
-      selector = new Selector(selector);
-    return selector.match($(element));
+      return Prototype.Selector.match(element, selector);
+    return selector.match(element);
   },
 
   up: function(element, expression, index) {
     element = $(element);
     if (arguments.length == 1) return $(element.parentNode);
-    var ancestors = element.ancestors();
+    var ancestors = Element.ancestors(element);
     return Object.isNumber(expression) ? ancestors[expression] :
-      Selector.findElement(ancestors, expression, index);
+      Prototype.Selector.find(ancestors, expression, index);
   },
 
   down: function(element, expression, index) {
     element = $(element);
-    if (arguments.length == 1) return element.firstDescendant();
-    return Object.isNumber(expression) ? element.descendants()[expression] :
+    if (arguments.length == 1) return Element.firstDescendant(element);
+    return Object.isNumber(expression) ? Element.descendants(element)[expression] :
       Element.select(element, expression)[index || 0];
   },
 
   previous: function(element, expression, index) {
     element = $(element);
-    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
-    var previousSiblings = element.previousSiblings();
-    return Object.isNumber(expression) ? previousSiblings[expression] :
-      Selector.findElement(previousSiblings, expression, index);
+    if (Object.isNumber(expression)) index = expression, expression = false;
+    if (!Object.isNumber(index)) index = 0;
+
+    if (expression) {
+      return Prototype.Selector.find(element.previousSiblings(), expression, index);
+    } else {
+      return element.recursivelyCollect("previousSibling", index + 1)[index];
+    }
   },
 
   next: function(element, expression, index) {
     element = $(element);
-    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
-    var nextSiblings = element.nextSiblings();
-    return Object.isNumber(expression) ? nextSiblings[expression] :
-      Selector.findElement(nextSiblings, expression, index);
+    if (Object.isNumber(expression)) index = expression, expression = false;
+    if (!Object.isNumber(index)) index = 0;
+
+    if (expression) {
+      return Prototype.Selector.find(element.nextSiblings(), expression, index);
+    } else {
+      var maximumLength = Object.isNumber(index) ? index + 1 : 1;
+      return element.recursivelyCollect("nextSibling", index + 1)[index];
+    }
   },
 
-  select: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element, args);
+
+  select: function(element) {
+    element = $(element);
+    var expressions = Array.prototype.slice.call(arguments, 1).join(', ');
+    return Prototype.Selector.select(expressions, element);
   },
 
-  adjacent: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element.parentNode, args).without(element);
+  adjacent: function(element) {
+    element = $(element);
+    var expressions = Array.prototype.slice.call(arguments, 1).join(', ');
+    return Prototype.Selector.select(expressions, element.parentNode).without(element);
   },
 
   identify: function(element) {
     element = $(element);
-    var id = element.readAttribute('id'), self = arguments.callee;
+    var id = Element.readAttribute(element, 'id');
     if (id) return id;
-    do { id = 'anonymous_element_' + self.counter++ } while ($(id));
-    element.writeAttribute('id', id);
+    do { id = 'anonymous_element_' + Element.idCounter++ } while ($(id));
+    Element.writeAttribute(element, 'id', id);
     return id;
   },
 
@@ -1820,11 +2287,11 @@
   },
 
   getHeight: function(element) {
-    return $(element).getDimensions().height;
+    return Element.getDimensions(element).height;
   },
 
   getWidth: function(element) {
-    return $(element).getDimensions().width;
+    return Element.getDimensions(element).width;
   },
 
   classNames: function(element) {
@@ -1840,7 +2307,7 @@
 
   addClassName: function(element, className) {
     if (!(element = $(element))) return;
-    if (!element.hasClassName(className))
+    if (!Element.hasClassName(element, className))
       element.className += (element.className ? ' ' : '') + className;
     return element;
   },
@@ -1854,11 +2321,10 @@
 
   toggleClassName: function(element, className) {
     if (!(element = $(element))) return;
-    return element[element.hasClassName(className) ?
-      'removeClassName' : 'addClassName'](className);
+    return Element[Element.hasClassName(element, className) ?
+      'removeClassName' : 'addClassName'](element, className);
   },
 
-  // removes whitespace-only text node children
   cleanWhitespace: function(element) {
     element = $(element);
     var node = element.firstChild;
@@ -1892,7 +2358,7 @@
 
   scrollTo: function(element) {
     element = $(element);
-    var pos = element.cumulativeOffset();
+    var pos = Element.cumulativeOffset(element);
     window.scrollTo(pos[0], pos[1]);
     return element;
   },
@@ -1938,37 +2404,12 @@
     return element;
   },
 
-  getDimensions: function(element) {
-    element = $(element);
-    var display = element.getStyle('display');
-    if (display != 'none' && display != null) // Safari bug
-      return {width: element.offsetWidth, height: element.offsetHeight};
-
-    // All *Width and *Height properties give 0 on elements with display none,
-    // so enable the element temporarily
-    var els = element.style;
-    var originalVisibility = els.visibility;
-    var originalPosition = els.position;
-    var originalDisplay = els.display;
-    els.visibility = 'hidden';
-    els.position = 'absolute';
-    els.display = 'block';
-    var originalWidth = element.clientWidth;
-    var originalHeight = element.clientHeight;
-    els.display = originalDisplay;
-    els.position = originalPosition;
-    els.visibility = originalVisibility;
-    return {width: originalWidth, height: originalHeight};
-  },
-
   makePositioned: function(element) {
     element = $(element);
     var pos = Element.getStyle(element, 'position');
     if (pos == 'static' || !pos) {
       element._madePositioned = true;
       element.style.position = 'relative';
-      // Opera returns the offset relative to the positioning context, when an
-      // element is position relative but top and left have not been defined
       if (Prototype.Browser.Opera) {
         element.style.top = 0;
         element.style.left = 0;
@@ -2007,117 +2448,6 @@
     return element;
   },
 
-  cumulativeOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  positionedOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-      if (element) {
-        if (element.tagName.toUpperCase() == 'BODY') break;
-        var p = Element.getStyle(element, 'position');
-        if (p !== 'static') break;
-      }
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  absolutize: function(element) {
-    element = $(element);
-    if (element.getStyle('position') == 'absolute') return element;
-    // Position.prepare(); // To be done manually by Scripty when it needs it.
-
-    var offsets = element.positionedOffset();
-    var top     = offsets[1];
-    var left    = offsets[0];
-    var width   = element.clientWidth;
-    var height  = element.clientHeight;
-
-    element._originalLeft   = left - parseFloat(element.style.left  || 0);
-    element._originalTop    = top  - parseFloat(element.style.top || 0);
-    element._originalWidth  = element.style.width;
-    element._originalHeight = element.style.height;
-
-    element.style.position = 'absolute';
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.width  = width + 'px';
-    element.style.height = height + 'px';
-    return element;
-  },
-
-  relativize: function(element) {
-    element = $(element);
-    if (element.getStyle('position') == 'relative') return element;
-    // Position.prepare(); // To be done manually by Scripty when it needs it.
-
-    element.style.position = 'relative';
-    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
-    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.height = element._originalHeight;
-    element.style.width  = element._originalWidth;
-    return element;
-  },
-
-  cumulativeScrollOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.scrollTop  || 0;
-      valueL += element.scrollLeft || 0;
-      element = element.parentNode;
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  getOffsetParent: function(element) {
-    if (element.offsetParent) return $(element.offsetParent);
-    if (element == document.body) return $(element);
-
-    while ((element = element.parentNode) && element != document.body)
-      if (Element.getStyle(element, 'position') != 'static')
-        return $(element);
-
-    return $(document.body);
-  },
-
-  viewportOffset: function(forElement) {
-    var valueT = 0, valueL = 0;
-
-    var element = forElement;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-
-      // Safari fix
-      if (element.offsetParent == document.body &&
-        Element.getStyle(element, 'position') == 'absolute') break;
-
-    } while (element = element.offsetParent);
-
-    element = forElement;
-    do {
-      if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
-        valueT -= element.scrollTop  || 0;
-        valueL -= element.scrollLeft || 0;
-      }
-    } while (element = element.parentNode);
-
-    return Element._returnOffset(valueL, valueT);
-  },
-
   clonePosition: function(element, source) {
     var options = Object.extend({
       setLeft:    true,
@@ -2128,28 +2458,21 @@
       offsetLeft: 0
     }, arguments[2] || { });
 
-    // find page position of source
     source = $(source);
-    var p = source.viewportOffset();
-
-    // find coordinate system to use
+    var p = Element.viewportOffset(source), delta = [0, 0], parent = null;
+
     element = $(element);
-    var delta = [0, 0];
-    var parent = null;
-    // delta [0,0] will do fine with position: fixed elements,
-    // position:absolute needs offsetParent deltas
+
     if (Element.getStyle(element, 'position') == 'absolute') {
-      parent = element.getOffsetParent();
-      delta = parent.viewportOffset();
+      parent = Element.getOffsetParent(element);
+      delta = Element.viewportOffset(parent);
     }
 
-    // correct by body offsets (fixes Safari)
     if (parent == document.body) {
       delta[0] -= document.body.offsetLeft;
       delta[1] -= document.body.offsetTop;
     }
 
-    // set position
     if (options.setLeft)   element.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
     if (options.setTop)    element.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
     if (options.setWidth)  element.style.width = source.offsetWidth + 'px';
@@ -2158,10 +2481,9 @@
   }
 };
 
-Element.Methods.identify.counter = 1;
-
 Object.extend(Element.Methods, {
   getElementsBySelector: Element.Methods.select,
+
   childElements: Element.Methods.immediateDescendants
 });
 
@@ -2179,14 +2501,9 @@
   Element.Methods.getStyle = Element.Methods.getStyle.wrap(
     function(proceed, element, style) {
       switch (style) {
-        case 'left': case 'top': case 'right': case 'bottom':
-          if (proceed(element, 'position') === 'static') return null;
         case 'height': case 'width':
-          // returns '0px' for hidden elements; we want it to return null
           if (!Element.visible(element)) return null;
 
-          // returns the border-box dimensions rather than the content-box
-          // dimensions, so we subtract padding and borders from the value
           var dim = parseInt(proceed(element, style), 10);
 
           if (dim !== element['offset' + style.capitalize()])
@@ -2219,52 +2536,6 @@
 }
 
 else if (Prototype.Browser.IE) {
-  // IE doesn't report offsets correctly for static elements, so we change them
-  // to "relative" to get the values, then change them back.
-  Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
-    function(proceed, element) {
-      element = $(element);
-      // IE throws an error if element is not in document
-      try { element.offsetParent }
-      catch(e) { return $(document.body) }
-      var position = element.getStyle('position');
-      if (position !== 'static') return proceed(element);
-      element.setStyle({ position: 'relative' });
-      var value = proceed(element);
-      element.setStyle({ position: position });
-      return value;
-    }
-  );
-
-  $w('positionedOffset viewportOffset').each(function(method) {
-    Element.Methods[method] = Element.Methods[method].wrap(
-      function(proceed, element) {
-        element = $(element);
-        try { element.offsetParent }
-        catch(e) { return Element._returnOffset(0,0) }
-        var position = element.getStyle('position');
-        if (position !== 'static') return proceed(element);
-        // Trigger hasLayout on the offset parent so that IE6 reports
-        // accurate offsetTop and offsetLeft values for position: fixed.
-        var offsetParent = element.getOffsetParent();
-        if (offsetParent && offsetParent.getStyle('position') === 'fixed')
-          offsetParent.setStyle({ zoom: 1 });
-        element.setStyle({ position: 'relative' });
-        var value = proceed(element);
-        element.setStyle({ position: position });
-        return value;
-      }
-    );
-  });
-
-  Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
-    function(proceed, element) {
-      try { element.offsetParent }
-      catch(e) { return Element._returnOffset(0,0) }
-      return proceed(element);
-    }
-  );
-
   Element.Methods.getStyle = function(element, style) {
     element = $(element);
     style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
@@ -2306,36 +2577,90 @@
     return element;
   };
 
-  Element._attributeTranslations = {
-    read: {
-      names: {
-        'class': 'className',
-        'for':   'htmlFor'
-      },
-      values: {
-        _getAttr: function(element, attribute) {
-          return element.getAttribute(attribute, 2);
+  Element._attributeTranslations = (function(){
+
+    var classProp = 'className',
+        forProp = 'for',
+        el = document.createElement('div');
+
+    el.setAttribute(classProp, 'x');
+
+    if (el.className !== 'x') {
+      el.setAttribute('class', 'x');
+      if (el.className === 'x') {
+        classProp = 'class';
+      }
+    }
+    el = null;
+
+    el = document.createElement('label');
+    el.setAttribute(forProp, 'x');
+    if (el.htmlFor !== 'x') {
+      el.setAttribute('htmlFor', 'x');
+      if (el.htmlFor === 'x') {
+        forProp = 'htmlFor';
+      }
+    }
+    el = null;
+
+    return {
+      read: {
+        names: {
+          'class':      classProp,
+          'className':  classProp,
+          'for':        forProp,
+          'htmlFor':    forProp
         },
-        _getAttrNode: function(element, attribute) {
-          var node = element.getAttributeNode(attribute);
-          return node ? node.value : "";
-        },
-        _getEv: function(element, attribute) {
-          attribute = element.getAttribute(attribute);
-          return attribute ? attribute.toString().slice(23, -2) : null;
-        },
-        _flag: function(element, attribute) {
-          return $(element).hasAttribute(attribute) ? attribute : null;
-        },
-        style: function(element) {
-          return element.style.cssText.toLowerCase();
-        },
-        title: function(element) {
-          return element.title;
+        values: {
+          _getAttr: function(element, attribute) {
+            return element.getAttribute(attribute);
+          },
+          _getAttr2: function(element, attribute) {
+            return element.getAttribute(attribute, 2);
+          },
+          _getAttrNode: function(element, attribute) {
+            var node = element.getAttributeNode(attribute);
+            return node ? node.value : "";
+          },
+          _getEv: (function(){
+
+            var el = document.createElement('div'), f;
+            el.onclick = Prototype.emptyFunction;
+            var value = el.getAttribute('onclick');
+
+            if (String(value).indexOf('{') > -1) {
+              f = function(element, attribute) {
+                attribute = element.getAttribute(attribute);
+                if (!attribute) return null;
+                attribute = attribute.toString();
+                attribute = attribute.split('{')[1];
+                attribute = attribute.split('}')[0];
+                return attribute.strip();
+              };
+            }
+            else if (value === '') {
+              f = function(element, attribute) {
+                attribute = element.getAttribute(attribute);
+                if (!attribute) return null;
+                return attribute.strip();
+              };
+            }
+            el = null;
+            return f;
+          })(),
+          _flag: function(element, attribute) {
+            return $(element).hasAttribute(attribute) ? attribute : null;
+          },
+          style: function(element) {
+            return element.style.cssText.toLowerCase();
+          },
+          title: function(element) {
+            return element.title;
+          }
         }
       }
     }
-  };
+  })();
 
   Element._attributeTranslations.write = {
     names: Object.extend({
@@ -2363,8 +2688,8 @@
 
   (function(v) {
     Object.extend(v, {
-      href:        v._getAttr,
-      src:         v._getAttr,
+      href:        v._getAttr2,
+      src:         v._getAttr2,
       type:        v._getAttr,
       action:      v._getAttrNode,
       disabled:    v._flag,
@@ -2391,6 +2716,26 @@
       onchange:    v._getEv
     });
   })(Element._attributeTranslations.read.values);
+
+  if (Prototype.BrowserFeatures.ElementExtensions) {
+    (function() {
+      function _descendants(element) {
+        var nodes = element.getElementsByTagName('*'), results = [];
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node.tagName !== "!") // Filter out comment nodes.
+            results.push(node);
+        return results;
+      }
+
+      Element.Methods.down = function(element, expression, index) {
+        element = $(element);
+        if (arguments.length == 1) return element.firstDescendant();
+        return Object.isNumber(expression) ? _descendants(element)[expression] :
+          Element.select(element, expression)[index || 0];
+      }
+    })();
+  }
+
 }
 
 else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
@@ -2409,7 +2754,7 @@
       (value < 0.00001) ? 0 : value;
 
     if (value == 1)
-      if(element.tagName.toUpperCase() == 'IMG' && element.width) {
+      if (element.tagName.toUpperCase() == 'IMG' && element.width) {
         element.width++; element.width--;
       } else try {
         var n = document.createTextNode(' ');
@@ -2419,49 +2764,9 @@
 
     return element;
   };
-
-  // Safari returns margins on body which is incorrect if the child is absolutely
-  // positioned.  For performance reasons, redefine Element#cumulativeOffset for
-  // KHTML/WebKit only.
-  Element.Methods.cumulativeOffset = function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      if (element.offsetParent == document.body)
-        if (Element.getStyle(element, 'position') == 'absolute') break;
-
-      element = element.offsetParent;
-    } while (element);
-
-    return Element._returnOffset(valueL, valueT);
-  };
 }
 
-if (Prototype.Browser.IE || Prototype.Browser.Opera) {
-  // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
-  Element.Methods.update = function(element, content) {
-    element = $(element);
-
-    if (content && content.toElement) content = content.toElement();
-    if (Object.isElement(content)) return element.update().insert(content);
-
-    content = Object.toHTML(content);
-    var tagName = element.tagName.toUpperCase();
-
-    if (tagName in Element._insertionTranslations.tags) {
-      $A(element.childNodes).each(function(node) { element.removeChild(node) });
-      Element._getContentFromAnonymousElement(tagName, content.stripScripts())
-        .each(function(node) { element.appendChild(node) });
-    }
-    else element.innerHTML = content.stripScripts();
-
-    content.evalScripts.bind(content).defer();
-    return element;
-  };
-}
-
-if ('outerHTML' in document.createElement('div')) {
+if ('outerHTML' in document.documentElement) {
   Element.Methods.replace = function(element, content) {
     element = $(element);
 
@@ -2475,8 +2780,8 @@
     var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
 
     if (Element._insertionTranslations.tags[tagName]) {
-      var nextSibling = element.next();
-      var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+      var nextSibling = element.next(),
+          fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
       parent.removeChild(element);
       if (nextSibling)
         fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
@@ -2497,12 +2802,27 @@
   return result;
 };
 
-Element._getContentFromAnonymousElement = function(tagName, html) {
-  var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
-  if (t) {
-    div.innerHTML = t[0] + html + t[1];
-    t[2].times(function() { div = div.firstChild });
-  } else div.innerHTML = html;
+Element._getContentFromAnonymousElement = function(tagName, html, force) {
+  var div = new Element('div'),
+      t = Element._insertionTranslations.tags[tagName];
+
+  var workaround = false;
+  if (t) workaround = true;
+  else if (force) {
+    workaround = true;
+    t = ['', '', 0];
+  }
+
+  if (workaround) {
+    div.innerHTML = '&nbsp;' + t[0] + html + t[1];
+    div.removeChild(div.firstChild);
+    for (var i = t[2]; i--; ) {
+      div = div.firstChild;
+    }
+  }
+  else {
+    div.innerHTML = html;
+  }
   return $A(div.childNodes);
 };
 
@@ -2529,12 +2849,13 @@
 };
 
 (function() {
-  Object.extend(this.tags, {
-    THEAD: this.tags.TBODY,
-    TFOOT: this.tags.TBODY,
-    TH:    this.tags.TD
+  var tags = Element._insertionTranslations.tags;
+  Object.extend(tags, {
+    THEAD: tags.TBODY,
+    TFOOT: tags.TBODY,
+    TH:    tags.TD
   });
-}).call(Element._insertionTranslations);
+})();
 
 Element.Methods.Simulated = {
   hasAttribute: function(element, attribute) {
@@ -2548,41 +2869,81 @@
 
 Object.extend(Element, Element.Methods);
 
-if (!Prototype.BrowserFeatures.ElementExtensions &&
-    document.createElement('div')['__proto__']) {
-  window.HTMLElement = { };
-  window.HTMLElement.prototype = document.createElement('div')['__proto__'];
-  Prototype.BrowserFeatures.ElementExtensions = true;
-}
+(function(div) {
+
+  if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {
+    window.HTMLElement = { };
+    window.HTMLElement.prototype = div['__proto__'];
+    Prototype.BrowserFeatures.ElementExtensions = true;
+  }
+
+  div = null;
+
+})(document.createElement('div'));
 
 Element.extend = (function() {
-  if (Prototype.BrowserFeatures.SpecificElementExtensions)
-    return Prototype.K;
-
-  var Methods = { }, ByTag = Element.Methods.ByTag;
-
-  var extend = Object.extend(function(element) {
-    if (!element || element._extendedByPrototype ||
-        element.nodeType != 1 || element == window) return element;
-
-    var methods = Object.clone(Methods),
-      tagName = element.tagName.toUpperCase(), property, value;
-
-    // extend methods for specific tags
-    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
-
-    for (property in methods) {
-      value = methods[property];
+
+  function checkDeficiency(tagName) {
+    if (typeof window.Element != 'undefined') {
+      var proto = window.Element.prototype;
+      if (proto) {
+        var id = '_' + (Math.random()+'').slice(2),
+            el = document.createElement(tagName);
+        proto[id] = 'x';
+        var isBuggy = (el[id] !== 'x');
+        delete proto[id];
+        el = null;
+        return isBuggy;
+      }
+    }
+    return false;
+  }
+
+  function extendElementWith(element, methods) {
+    for (var property in methods) {
+      var value = methods[property];
       if (Object.isFunction(value) && !(property in element))
         element[property] = value.methodize();
     }
+  }
+
+  var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object');
+
+  if (Prototype.BrowserFeatures.SpecificElementExtensions) {
+    if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {
+      return function(element) {
+        if (element && typeof element._extendedByPrototype == 'undefined') {
+          var t = element.tagName;
+          if (t && (/^(?:object|applet|embed)$/i.test(t))) {
+            extendElementWith(element, Element.Methods);
+            extendElementWith(element, Element.Methods.Simulated);
+            extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]);
+          }
+        }
+        return element;
+      }
+    }
+    return Prototype.K;
+  }
+
+  var Methods = { }, ByTag = Element.Methods.ByTag;
+
+  var extend = Object.extend(function(element) {
+    if (!element || typeof element._extendedByPrototype != 'undefined' ||
+        element.nodeType != 1 || element == window) return element;
+
+    var methods = Object.clone(Methods),
+        tagName = element.tagName.toUpperCase();
+
+    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+    extendElementWith(element, methods);
 
     element._extendedByPrototype = Prototype.emptyFunction;
     return element;
 
   }, {
     refresh: function() {
-      // extend methods for all tags (Safari doesn't need this)
       if (!Prototype.BrowserFeatures.ElementExtensions) {
         Object.extend(Methods, Element.Methods);
         Object.extend(Methods, Element.Methods.Simulated);
@@ -2594,10 +2955,14 @@
   return extend;
 })();
 
-Element.hasAttribute = function(element, attribute) {
-  if (element.hasAttribute) return element.hasAttribute(attribute);
-  return Element.Methods.Simulated.hasAttribute(element, attribute);
-};
+if (document.documentElement.hasAttribute) {
+  Element.hasAttribute = function(element, attribute) {
+    return element.hasAttribute(attribute);
+  };
+}
+else {
+  Element.hasAttribute = Element.Methods.Simulated.hasAttribute;
+}
 
 Element.addMethods = function(methods) {
   var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
@@ -2609,7 +2974,8 @@
       "FORM":     Object.clone(Form.Methods),
       "INPUT":    Object.clone(Form.Element.Methods),
       "SELECT":   Object.clone(Form.Element.Methods),
-      "TEXTAREA": Object.clone(Form.Element.Methods)
+      "TEXTAREA": Object.clone(Form.Element.Methods),
+      "BUTTON":   Object.clone(Form.Element.Methods)
     });
   }
 
@@ -2661,14 +3027,19 @@
     klass = 'HTML' + tagName.capitalize() + 'Element';
     if (window[klass]) return window[klass];
 
-    window[klass] = { };
-    window[klass].prototype = document.createElement(tagName)['__proto__'];
-    return window[klass];
-  }
+    var element = document.createElement(tagName),
+        proto = element['__proto__'] || element.constructor.prototype;
+
+    element = null;
+    return proto;
+  }
+
+  var elementPrototype = window.HTMLElement ? HTMLElement.prototype :
+   Element.prototype;
 
   if (F.ElementExtensions) {
-    copy(Element.Methods, HTMLElement.prototype);
-    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+    copy(Element.Methods, elementPrototype);
+    copy(Element.Methods.Simulated, elementPrototype, true);
   }
 
   if (F.SpecificElementExtensions) {
@@ -2686,791 +3057,1947 @@
   Element.cache = { };
 };
 
+
 document.viewport = {
+
   getDimensions: function() {
-    var dimensions = { }, B = Prototype.Browser;
-    $w('width height').each(function(d) {
-      var D = d.capitalize();
-      if (B.WebKit && !document.evaluate) {
-        // Safari <3.0 needs self.innerWidth/Height
-        dimensions[d] = self['inner' + D];
-      } else if (B.Opera && parseFloat(window.opera.version()) < 9.5) {
-        // Opera <9.5 needs document.body.clientWidth/Height
-        dimensions[d] = document.body['client' + D]
-      } else {
-        dimensions[d] = document.documentElement['client' + D];
-      }
-    });
-    return dimensions;
-  },
-
-  getWidth: function() {
-    return this.getDimensions().width;
-  },
-
-  getHeight: function() {
-    return this.getDimensions().height;
+    return { width: this.getWidth(), height: this.getHeight() };
   },
 
   getScrollOffsets: function() {
     return Element._returnOffset(
       window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
-      window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+      window.pageYOffset || document.documentElement.scrollTop  || document.body.scrollTop);
   }
 };
-/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
- * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
- * license.  Please see http://www.yui-ext.com/ for more information. */
-
-var Selector = Class.create({
-  initialize: function(expression) {
-    this.expression = expression.strip();
-
-    if (this.shouldUseSelectorsAPI()) {
-      this.mode = 'selectorsAPI';
-    } else if (this.shouldUseXPath()) {
-      this.mode = 'xpath';
-      this.compileXPathMatcher();
+
+(function(viewport) {
+  var B = Prototype.Browser, doc = document, element, property = {};
+
+  function getRootElement() {
+    if (B.WebKit && !doc.evaluate)
+      return document;
+
+    if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
+      return document.body;
+
+    return document.documentElement;
+  }
+
+  function define(D) {
+    if (!element) element = getRootElement();
+
+    property[D] = 'client' + D;
+
+    viewport['get' + D] = function() { return element[property[D]] };
+    return viewport['get' + D]();
+  }
+
+  viewport.getWidth  = define.curry('Width');
+
+  viewport.getHeight = define.curry('Height');
+})(document.viewport);
+
+
+Element.Storage = {
+  UID: 1
+};
+
+Element.addMethods({
+  getStorage: function(element) {
+    if (!(element = $(element))) return;
+
+    var uid;
+    if (element === window) {
+      uid = 0;
     } else {
-      this.mode = "normal";
-      this.compileMatcher();
+      if (typeof element._prototypeUID === "undefined")
+        element._prototypeUID = Element.Storage.UID++;
+      uid = element._prototypeUID;
     }
 
+    if (!Element.Storage[uid])
+      Element.Storage[uid] = $H();
+
+    return Element.Storage[uid];
   },
 
-  shouldUseXPath: function() {
-    if (!Prototype.BrowserFeatures.XPath) return false;
-
-    var e = this.expression;
-
-    // Safari 3 chokes on :*-of-type and :empty
-    if (Prototype.Browser.WebKit &&
-     (e.include("-of-type") || e.include(":empty")))
-      return false;
-
-    // XPath can't do namespaced attributes, nor can it read
-    // the "checked" property from DOM nodes
-    if ((/(\[[\w-]*?:|:checked)/).test(e))
-      return false;
-
+  store: function(element, key, value) {
+    if (!(element = $(element))) return;
+
+    if (arguments.length === 2) {
+      Element.getStorage(element).update(key);
+    } else {
+      Element.getStorage(element).set(key, value);
+    }
+
+    return element;
+  },
+
+  retrieve: function(element, key, defaultValue) {
+    if (!(element = $(element))) return;
+    var hash = Element.getStorage(element), value = hash.get(key);
+
+    if (Object.isUndefined(value)) {
+      hash.set(key, defaultValue);
+      value = defaultValue;
+    }
+
+    return value;
+  },
+
+  clone: function(element, deep) {
+    if (!(element = $(element))) return;
+    var clone = element.cloneNode(deep);
+    clone._prototypeUID = void 0;
+    if (deep) {
+      var descendants = Element.select(clone, '*'),
+          i = descendants.length;
+      while (i--) {
+        descendants[i]._prototypeUID = void 0;
+      }
+    }
+    return Element.extend(clone);
+  },
+
+  purge: function(element) {
+    if (!(element = $(element))) return;
+    var purgeElement = Element._purgeElement;
+
+    purgeElement(element);
+
+    var descendants = element.getElementsByTagName('*'),
+     i = descendants.length;
+
+    while (i--) purgeElement(descendants[i]);
+
+    return null;
+  }
+});
+
+(function() {
+
+  function toDecimal(pctString) {
+    var match = pctString.match(/^(\d+)%?$/i);
+    if (!match) return null;
+    return (Number(match[1]) / 100);
+  }
+
+  function getPixelValue(value, property, context) {
+    var element = null;
+    if (Object.isElement(value)) {
+      element = value;
+      value = element.getStyle(property);
+    }
+
+    if (value === null) {
+      return null;
+    }
+
+    if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) {
+      return window.parseFloat(value);
+    }
+
+    var isPercentage = value.include('%'), isViewport = (context === document.viewport);
+
+    if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) {
+      var style = element.style.left, rStyle = element.runtimeStyle.left;
+      element.runtimeStyle.left = element.currentStyle.left;
+      element.style.left = value || 0;
+      value = element.style.pixelLeft;
+      element.style.left = style;
+      element.runtimeStyle.left = rStyle;
+
+      return value;
+    }
+
+    if (element && isPercentage) {
+      context = context || element.parentNode;
+      var decimal = toDecimal(value);
+      var whole = null;
+      var position = element.getStyle('position');
+
+      var isHorizontal = property.include('left') || property.include('right') ||
+       property.include('width');
+
+      var isVertical =  property.include('top') || property.include('bottom') ||
+        property.include('height');
+
+      if (context === document.viewport) {
+        if (isHorizontal) {
+          whole = document.viewport.getWidth();
+        } else if (isVertical) {
+          whole = document.viewport.getHeight();
+        }
+      } else {
+        if (isHorizontal) {
+          whole = $(context).measure('width');
+        } else if (isVertical) {
+          whole = $(context).measure('height');
+        }
+      }
+
+      return (whole === null) ? 0 : whole * decimal;
+    }
+
+    return 0;
+  }
+
+  function toCSSPixels(number) {
+    if (Object.isString(number) && number.endsWith('px')) {
+      return number;
+    }
+    return number + 'px';
+  }
+
+  function isDisplayed(element) {
+    var originalElement = element;
+    while (element && element.parentNode) {
+      var display = element.getStyle('display');
+      if (display === 'none') {
+        return false;
+      }
+      element = $(element.parentNode);
+    }
     return true;
-  },
-
-  shouldUseSelectorsAPI: function() {
-    if (!Prototype.BrowserFeatures.SelectorsAPI) return false;
-
-    if (!Selector._div) Selector._div = new Element('div');
-
-    // Make sure the browser treats the selector as valid. Test on an
-    // isolated element to minimize cost of this check.
-    try {
-      Selector._div.querySelector(this.expression);
-    } catch(e) {
-      return false;
+  }
+
+  var hasLayout = Prototype.K;
+  if ('currentStyle' in document.documentElement) {
+    hasLayout = function(element) {
+      if (!element.currentStyle.hasLayout) {
+        element.style.zoom = 1;
+      }
+      return element;
+    };
+  }
+
+  function cssNameFor(key) {
+    if (key.include('border')) key = key + '-width';
+    return key.camelize();
+  }
+
+  Element.Layout = Class.create(Hash, {
+    initialize: function($super, element, preCompute) {
+      $super();
+      this.element = $(element);
+
+      Element.Layout.PROPERTIES.each( function(property) {
+        this._set(property, null);
+      }, this);
+
+      if (preCompute) {
+        this._preComputing = true;
+        this._begin();
+        Element.Layout.PROPERTIES.each( this._compute, this );
+        this._end();
+        this._preComputing = false;
+      }
+    },
+
+    _set: function(property, value) {
+      return Hash.prototype.set.call(this, property, value);
+    },
+
+    set: function(property, value) {
+      throw "Properties of Element.Layout are read-only.";
+    },
+
+    get: function($super, property) {
+      var value = $super(property);
+      return value === null ? this._compute(property) : value;
+    },
+
+    _begin: function() {
+      if (this._prepared) return;
+
+      var element = this.element;
+      if (isDisplayed(element)) {
+        this._prepared = true;
+        return;
+      }
+
+      var originalStyles = {
+        position:   element.style.position   || '',
+        width:      element.style.width      || '',
+        visibility: element.style.visibility || '',
+        display:    element.style.display    || ''
+      };
+
+      element.store('prototype_original_styles', originalStyles);
+
+      var position = element.getStyle('position'),
+       width = element.getStyle('width');
+
+      if (width === "0px" || width === null) {
+        element.style.display = 'block';
+        width = element.getStyle('width');
+      }
+
+      var context = (position === 'fixed') ? document.viewport :
+       element.parentNode;
+
+      element.setStyle({
+        position:   'absolute',
+        visibility: 'hidden',
+        display:    'block'
+      });
+
+      var positionedWidth = element.getStyle('width');
+
+      var newWidth;
+      if (width && (positionedWidth === width)) {
+        newWidth = getPixelValue(element, 'width', context);
+      } else if (position === 'absolute' || position === 'fixed') {
+        newWidth = getPixelValue(element, 'width', context);
+      } else {
+        var parent = element.parentNode, pLayout = $(parent).getLayout();
+
+        newWidth = pLayout.get('width') -
+         this.get('margin-left') -
+         this.get('border-left') -
+         this.get('padding-left') -
+         this.get('padding-right') -
+         this.get('border-right') -
+         this.get('margin-right');
+      }
+
+      element.setStyle({ width: newWidth + 'px' });
+
+      this._prepared = true;
+    },
+
+    _end: function() {
+      var element = this.element;
+      var originalStyles = element.retrieve('prototype_original_styles');
+      element.store('prototype_original_styles', null);
+      element.setStyle(originalStyles);
+      this._prepared = false;
+    },
+
+    _compute: function(property) {
+      var COMPUTATIONS = Element.Layout.COMPUTATIONS;
+      if (!(property in COMPUTATIONS)) {
+        throw "Property not found.";
+      }
+
+      return this._set(property, COMPUTATIONS[property].call(this, this.element));
+    },
+
+    toObject: function() {
+      var args = $A(arguments);
+      var keys = (args.length === 0) ? Element.Layout.PROPERTIES :
+       args.join(' ').split(' ');
+      var obj = {};
+      keys.each( function(key) {
+        if (!Element.Layout.PROPERTIES.include(key)) return;
+        var value = this.get(key);
+        if (value != null) obj[key] = value;
+      }, this);
+      return obj;
+    },
+
+    toHash: function() {
+      var obj = this.toObject.apply(this, arguments);
+      return new Hash(obj);
+    },
+
+    toCSS: function() {
+      var args = $A(arguments);
+      var keys = (args.length === 0) ? Element.Layout.PROPERTIES :
+       args.join(' ').split(' ');
+      var css = {};
+
+      keys.each( function(key) {
+        if (!Element.Layout.PROPERTIES.include(key)) return;
+        if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return;
+
+        var value = this.get(key);
+        if (value != null) css[cssNameFor(key)] = value + 'px';
+      }, this);
+      return css;
+    },
+
+    inspect: function() {
+      return "#<Element.Layout>";
     }
-
-    return true;
-  },
-
-  compileMatcher: function() {
-    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
-        c = Selector.criteria, le, p, m;
-
-    if (Selector._cache[e]) {
-      this.matcher = Selector._cache[e];
-      return;
+  });
+
+  Object.extend(Element.Layout, {
+    PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'),
+
+    COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'),
+
+    COMPUTATIONS: {
+      'height': function(element) {
+        if (!this._preComputing) this._begin();
+
+        var bHeight = this.get('border-box-height');
+        if (bHeight <= 0) {
+          if (!this._preComputing) this._end();
+          return 0;
+        }
+
+        var bTop = this.get('border-top'),
+         bBottom = this.get('border-bottom');
+
+        var pTop = this.get('padding-top'),
+         pBottom = this.get('padding-bottom');
+
+        if (!this._preComputing) this._end();
+
+        return bHeight - bTop - bBottom - pTop - pBottom;
+      },
+
+      'width': function(element) {
+        if (!this._preComputing) this._begin();
+
+        var bWidth = this.get('border-box-width');
+        if (bWidth <= 0) {
+          if (!this._preComputing) this._end();
+          return 0;
+        }
+
+        var bLeft = this.get('border-left'),
+         bRight = this.get('border-right');
+
+        var pLeft = this.get('padding-left'),
+         pRight = this.get('padding-right');
+
+        if (!this._preComputing) this._end();
+
+        return bWidth - bLeft - bRight - pLeft - pRight;
+      },
+
+      'padding-box-height': function(element) {
+        var height = this.get('height'),
+         pTop = this.get('padding-top'),
+         pBottom = this.get('padding-bottom');
+
+        return height + pTop + pBottom;
+      },
+
+      'padding-box-width': function(element) {
+        var width = this.get('width'),
+         pLeft = this.get('padding-left'),
+         pRight = this.get('padding-right');
+
+        return width + pLeft + pRight;
+      },
+
+      'border-box-height': function(element) {
+        if (!this._preComputing) this._begin();
+        var height = element.offsetHeight;
+        if (!this._preComputing) this._end();
+        return height;
+      },
+
+      'border-box-width': function(element) {
+        if (!this._preComputing) this._begin();
+        var width = element.offsetWidth;
+        if (!this._preComputing) this._end();
+        return width;
+      },
+
+      'margin-box-height': function(element) {
+        var bHeight = this.get('border-box-height'),
+         mTop = this.get('margin-top'),
+         mBottom = this.get('margin-bottom');
+
+        if (bHeight <= 0) return 0;
+
+        return bHeight + mTop + mBottom;
+      },
+
+      'margin-box-width': function(element) {
+        var bWidth = this.get('border-box-width'),
+         mLeft = this.get('margin-left'),
+         mRight = this.get('margin-right');
+
+        if (bWidth <= 0) return 0;
+
+        return bWidth + mLeft + mRight;
+      },
+
+      'top': function(element) {
+        var offset = element.positionedOffset();
+        return offset.top;
+      },
+
+      'bottom': function(element) {
+        var offset = element.positionedOffset(),
+         parent = element.getOffsetParent(),
+         pHeight = parent.measure('height');
+
+        var mHeight = this.get('border-box-height');
+
+        return pHeight - mHeight - offset.top;
+      },
+
+      'left': function(element) {
+        var offset = element.positionedOffset();
+        return offset.left;
+      },
+
+      'right': function(element) {
+        var offset = element.positionedOffset(),
+         parent = element.getOffsetParent(),
+         pWidth = parent.measure('width');
+
+        var mWidth = this.get('border-box-width');
+
+        return pWidth - mWidth - offset.left;
+      },
+
+      'padding-top': function(element) {
+        return getPixelValue(element, 'paddingTop');
+      },
+
+      'padding-bottom': function(element) {
+        return getPixelValue(element, 'paddingBottom');
+      },
+
+      'padding-left': function(element) {
+        return getPixelValue(element, 'paddingLeft');
+      },
+
+      'padding-right': function(element) {
+        return getPixelValue(element, 'paddingRight');
+      },
+
+      'border-top': function(element) {
+        return getPixelValue(element, 'borderTopWidth');
+      },
+
+      'border-bottom': function(element) {
+        return getPixelValue(element, 'borderBottomWidth');
+      },
+
+      'border-left': function(element) {
+        return getPixelValue(element, 'borderLeftWidth');
+      },
+
+      'border-right': function(element) {
+        return getPixelValue(element, 'borderRightWidth');
+      },
+
+      'margin-top': function(element) {
+        return getPixelValue(element, 'marginTop');
+      },
+
+      'margin-bottom': function(element) {
+        return getPixelValue(element, 'marginBottom');
+      },
+
+      'margin-left': function(element) {
+        return getPixelValue(element, 'marginLeft');
+      },
+
+      'margin-right': function(element) {
+        return getPixelValue(element, 'marginRight');
+      }
     }
-
-    this.matcher = ["this.matcher = function(root) {",
-                    "var r = root, h = Selector.handlers, c = false, n;"];
-
-    while (e && le != e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        p = ps[i];
-        if (m = e.match(p)) {
-          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
-            new Template(c[i]).evaluate(m));
-          e = e.replace(m[0], '');
+  });
+
+  if ('getBoundingClientRect' in document.documentElement) {
+    Object.extend(Element.Layout.COMPUTATIONS, {
+      'right': function(element) {
+        var parent = hasLayout(element.getOffsetParent());
+        var rect = element.getBoundingClientRect(),
+         pRect = parent.getBoundingClientRect();
+
+        return (pRect.right - rect.right).round();
+      },
+
+      'bottom': function(element) {
+        var parent = hasLayout(element.getOffsetParent());
+        var rect = element.getBoundingClientRect(),
+         pRect = parent.getBoundingClientRect();
+
+        return (pRect.bottom - rect.bottom).round();
+      }
+    });
+  }
+
+  Element.Offset = Class.create({
+    initialize: function(left, top) {
+      this.left = left.round();
+      this.top  = top.round();
+
+      this[0] = this.left;
+      this[1] = this.top;
+    },
+
+    relativeTo: function(offset) {
+      return new Element.Offset(
+        this.left - offset.left,
+        this.top  - offset.top
+      );
+    },
+
+    inspect: function() {
+      return "#<Element.Offset left: #{left} top: #{top}>".interpolate(this);
+    },
+
+    toString: function() {
+      return "[#{left}, #{top}]".interpolate(this);
+    },
+
+    toArray: function() {
+      return [this.left, this.top];
+    }
+  });
+
+  function getLayout(element, preCompute) {
+    return new Element.Layout(element, preCompute);
+  }
+
+  function measure(element, property) {
+    return $(element).getLayout().get(property);
+  }
+
+  function getDimensions(element) {
+    element = $(element);
+    var display = Element.getStyle(element, 'display');
+
+    if (display && display !== 'none') {
+      return { width: element.offsetWidth, height: element.offsetHeight };
+    }
+
+    var style = element.style;
+    var originalStyles = {
+      visibility: style.visibility,
+      position:   style.position,
+      display:    style.display
+    };
+
+    var newStyles = {
+      visibility: 'hidden',
+      display:    'block'
+    };
+
+    if (originalStyles.position !== 'fixed')
+      newStyles.position = 'absolute';
+
+    Element.setStyle(element, newStyles);
+
+    var dimensions = {
+      width:  element.offsetWidth,
+      height: element.offsetHeight
+    };
+
+    Element.setStyle(element, originalStyles);
+
+    return dimensions;
+  }
+
+  function getOffsetParent(element) {
+    element = $(element);
+
+    if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
+      return $(document.body);
+
+    var isInline = (Element.getStyle(element, 'display') === 'inline');
+    if (!isInline && element.offsetParent) return $(element.offsetParent);
+
+    while ((element = element.parentNode) && element !== document.body) {
+      if (Element.getStyle(element, 'position') !== 'static') {
+        return isHtml(element) ? $(document.body) : $(element);
+      }
+    }
+
+    return $(document.body);
+  }
+
+
+  function cumulativeOffset(element) {
+    element = $(element);
+    var valueT = 0, valueL = 0;
+    if (element.parentNode) {
+      do {
+        valueT += element.offsetTop  || 0;
+        valueL += element.offsetLeft || 0;
+        element = element.offsetParent;
+      } while (element);
+    }
+    return new Element.Offset(valueL, valueT);
+  }
+
+  function positionedOffset(element) {
+    element = $(element);
+
+    var layout = element.getLayout();
+
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+      if (element) {
+        if (isBody(element)) break;
+        var p = Element.getStyle(element, 'position');
+        if (p !== 'static') break;
+      }
+    } while (element);
+
+    valueL -= layout.get('margin-top');
+    valueT -= layout.get('margin-left');
+
+    return new Element.Offset(valueL, valueT);
+  }
+
+  function cumulativeScrollOffset(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.scrollTop  || 0;
+      valueL += element.scrollLeft || 0;
+      element = element.parentNode;
+    } while (element);
+    return new Element.Offset(valueL, valueT);
+  }
+
+  function viewportOffset(forElement) {
+    element = $(element);
+    var valueT = 0, valueL = 0, docBody = document.body;
+
+    var element = forElement;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      if (element.offsetParent == docBody &&
+        Element.getStyle(element, 'position') == 'absolute') break;
+    } while (element = element.offsetParent);
+
+    element = forElement;
+    do {
+      if (element != docBody) {
+        valueT -= element.scrollTop  || 0;
+        valueL -= element.scrollLeft || 0;
+      }
+    } while (element = element.parentNode);
+    return new Element.Offset(valueL, valueT);
+  }
+
+  function absolutize(element) {
+    element = $(element);
+
+    if (Element.getStyle(element, 'position') === 'absolute') {
+      return element;
+    }
+
+    var offsetParent = getOffsetParent(element);
+    var eOffset = element.viewportOffset(),
+     pOffset = offsetParent.viewportOffset();
+
+    var offset = eOffset.relativeTo(pOffset);
+    var layout = element.getLayout();
+
+    element.store('prototype_absolutize_original_styles', {
+      left:   element.getStyle('left'),
+      top:    element.getStyle('top'),
+      width:  element.getStyle('width'),
+      height: element.getStyle('height')
+    });
+
+    element.setStyle({
+      position: 'absolute',
+      top:    offset.top + 'px',
+      left:   offset.left + 'px',
+      width:  layout.get('width') + 'px',
+      height: layout.get('height') + 'px'
+    });
+
+    return element;
+  }
+
+  function relativize(element) {
+    element = $(element);
+    if (Element.getStyle(element, 'position') === 'relative') {
+      return element;
+    }
+
+    var originalStyles =
+     element.retrieve('prototype_absolutize_original_styles');
+
+    if (originalStyles) element.setStyle(originalStyles);
+    return element;
+  }
+
+  if (Prototype.Browser.IE) {
+    getOffsetParent = getOffsetParent.wrap(
+      function(proceed, element) {
+        element = $(element);
+
+        if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
+          return $(document.body);
+
+        var position = element.getStyle('position');
+        if (position !== 'static') return proceed(element);
+
+        element.setStyle({ position: 'relative' });
+        var value = proceed(element);
+        element.setStyle({ position: position });
+        return value;
+      }
+    );
+
+    positionedOffset = positionedOffset.wrap(function(proceed, element) {
+      element = $(element);
+      if (!element.parentNode) return new Element.Offset(0, 0);
+      var position = element.getStyle('position');
+      if (position !== 'static') return proceed(element);
+
+      var offsetParent = element.getOffsetParent();
+      if (offsetParent && offsetParent.getStyle('position') === 'fixed')
+        hasLayout(offsetParent);
+
+      element.setStyle({ position: 'relative' });
+      var value = proceed(element);
+      element.setStyle({ position: position });
+      return value;
+    });
+  } else if (Prototype.Browser.Webkit) {
+    cumulativeOffset = function(element) {
+      element = $(element);
+      var valueT = 0, valueL = 0;
+      do {
+        valueT += element.offsetTop  || 0;
+        valueL += element.offsetLeft || 0;
+        if (element.offsetParent == document.body)
+          if (Element.getStyle(element, 'position') == 'absolute') break;
+
+        element = element.offsetParent;
+      } while (element);
+
+      return new Element.Offset(valueL, valueT);
+    };
+  }
+
+
+  Element.addMethods({
+    getLayout:              getLayout,
+    measure:                measure,
+    getDimensions:          getDimensions,
+    getOffsetParent:        getOffsetParent,
+    cumulativeOffset:       cumulativeOffset,
+    positionedOffset:       positionedOffset,
+    cumulativeScrollOffset: cumulativeScrollOffset,
+    viewportOffset:         viewportOffset,
+    absolutize:             absolutize,
+    relativize:             relativize
+  });
+
+  function isBody(element) {
+    return element.nodeName.toUpperCase() === 'BODY';
+  }
+
+  function isHtml(element) {
+    return element.nodeName.toUpperCase() === 'HTML';
+  }
+
+  function isDocument(element) {
+    return element.nodeType === Node.DOCUMENT_NODE;
+  }
+
+  function isDetached(element) {
+    return element !== document.body &&
+     !Element.descendantOf(element, document.body);
+  }
+
+  if ('getBoundingClientRect' in document.documentElement) {
+    Element.addMethods({
+      viewportOffset: function(element) {
+        element = $(element);
+        if (isDetached(element)) return new Element.Offset(0, 0);
+
+        var rect = element.getBoundingClientRect(),
+         docEl = document.documentElement;
+        return new Element.Offset(rect.left - docEl.clientLeft,
+         rect.top - docEl.clientTop);
+      }
+    });
+  }
+})();
+window.$$ = function() {
+  var expression = $A(arguments).join(', ');
+  return Prototype.Selector.select(expression, document);
+};
+
+Prototype.Selector = (function() {
+
+  function select() {
+    throw new Error('Method "Prototype.Selector.select" must be defined.');
+  }
+
+  function match() {
+    throw new Error('Method "Prototype.Selector.match" must be defined.');
+  }
+
+  function find(elements, expression, index) {
+    index = index || 0;
+    var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i;
+
+    for (i = 0; i < length; i++) {
+      if (match(elements[i], expression) && index == matchIndex++) {
+        return Element.extend(elements[i]);
+      }
+    }
+  }
+
+  function extendElements(elements) {
+    for (var i = 0, length = elements.length; i < length; i++) {
+      Element.extend(elements[i]);
+    }
+    return elements;
+  }
+
+
+  var K = Prototype.K;
+
+  return {
+    select: select,
+    match: match,
+    find: find,
+    extendElements: (Element.extend === K) ? K : extendElements,
+    extendElement: Element.extend
+  };
+})();
+Prototype._original_property = window.Sizzle;
+/*!
+ * Sizzle CSS Selector Engine - v1.0
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+  done = 0,
+  toString = Object.prototype.toString,
+  hasDuplicate = false,
+  baseHasDuplicate = true;
+
+[0, 0].sort(function(){
+  baseHasDuplicate = false;
+  return 0;
+});
+
+var Sizzle = function(selector, context, results, seed) {
+  results = results || [];
+  var origContext = context = context || document;
+
+  if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+    return [];
+  }
+
+  if ( !selector || typeof selector !== "string" ) {
+    return results;
+  }
+
+  var parts = [], m, set, checkSet, check, mode, extra, prune = true, contextXML = isXML(context),
+    soFar = selector;
+
+  while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
+    soFar = m[3];
+
+    parts.push( m[1] );
+
+    if ( m[2] ) {
+      extra = m[3];
+      break;
+    }
+  }
+
+  if ( parts.length > 1 && origPOS.exec( selector ) ) {
+    if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+      set = posProcess( parts[0] + parts[1], context );
+    } else {
+      set = Expr.relative[ parts[0] ] ?
+        [ context ] :
+        Sizzle( parts.shift(), context );
+
+      while ( parts.length ) {
+        selector = parts.shift();
+
+        if ( Expr.relative[ selector ] )
+          selector += parts.shift();
+
+        set = posProcess( selector, set );
+      }
+    }
+  } else {
+    if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+        Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+      var ret = Sizzle.find( parts.shift(), context, contextXML );
+      context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
+    }
+
+    if ( context ) {
+      var ret = seed ?
+        { expr: parts.pop(), set: makeArray(seed) } :
+        Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+      set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
+
+      if ( parts.length > 0 ) {
+        checkSet = makeArray(set);
+      } else {
+        prune = false;
+      }
+
+      while ( parts.length ) {
+        var cur = parts.pop(), pop = cur;
+
+        if ( !Expr.relative[ cur ] ) {
+          cur = "";
+        } else {
+          pop = parts.pop();
+        }
+
+        if ( pop == null ) {
+          pop = context;
+        }
+
+        Expr.relative[ cur ]( checkSet, pop, contextXML );
+      }
+    } else {
+      checkSet = parts = [];
+    }
+  }
+
+  if ( !checkSet ) {
+    checkSet = set;
+  }
+
+  if ( !checkSet ) {
+    throw "Syntax error, unrecognized expression: " + (cur || selector);
+  }
+
+  if ( toString.call(checkSet) === "[object Array]" ) {
+    if ( !prune ) {
+      results.push.apply( results, checkSet );
+    } else if ( context && context.nodeType === 1 ) {
+      for ( var i = 0; checkSet[i] != null; i++ ) {
+        if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
+          results.push( set[i] );
+        }
+      }
+    } else {
+      for ( var i = 0; checkSet[i] != null; i++ ) {
+        if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+          results.push( set[i] );
+        }
+      }
+    }
+  } else {
+    makeArray( checkSet, results );
+  }
+
+  if ( extra ) {
+    Sizzle( extra, origContext, results, seed );
+    Sizzle.uniqueSort( results );
+  }
+
+  return results;
+};
+
+Sizzle.uniqueSort = function(results){
+  if ( sortOrder ) {
+    hasDuplicate = baseHasDuplicate;
+    results.sort(sortOrder);
+
+    if ( hasDuplicate ) {
+      for ( var i = 1; i < results.length; i++ ) {
+        if ( results[i] === results[i-1] ) {
+          results.splice(i--, 1);
+        }
+      }
+    }
+  }
+
+  return results;
+};
+
+Sizzle.matches = function(expr, set){
+  return Sizzle(expr, null, null, set);
+};
+
+Sizzle.find = function(expr, context, isXML){
+  var set, match;
+
+  if ( !expr ) {
+    return [];
+  }
+
+  for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+    var type = Expr.order[i], match;
+
+    if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+      var left = match[1];
+      match.splice(1,1);
+
+      if ( left.substr( left.length - 1 ) !== "\\" ) {
+        match[1] = (match[1] || "").replace(/\\/g, "");
+        set = Expr.find[ type ]( match, context, isXML );
+        if ( set != null ) {
+          expr = expr.replace( Expr.match[ type ], "" );
           break;
         }
       }
     }
-
-    this.matcher.push("return h.unique(n);\n}");
-    eval(this.matcher.join('\n'));
-    Selector._cache[this.expression] = this.matcher;
-  },
-
-  compileXPathMatcher: function() {
-    var e = this.expression, ps = Selector.patterns,
-        x = Selector.xpath, le, m;
-
-    if (Selector._cache[e]) {
-      this.xpath = Selector._cache[e]; return;
-    }
-
-    this.matcher = ['.//*'];
-    while (e && le != e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        if (m = e.match(ps[i])) {
-          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
-            new Template(x[i]).evaluate(m));
-          e = e.replace(m[0], '');
+  }
+
+  if ( !set ) {
+    set = context.getElementsByTagName("*");
+  }
+
+  return {set: set, expr: expr};
+};
+
+Sizzle.filter = function(expr, set, inplace, not){
+  var old = expr, result = [], curLoop = set, match, anyFound,
+    isXMLFilter = set && set[0] && isXML(set[0]);
+
+  while ( expr && set.length ) {
+    for ( var type in Expr.filter ) {
+      if ( (match = Expr.match[ type ].exec( expr )) != null ) {
+        var filter = Expr.filter[ type ], found, item;
+        anyFound = false;
+
+        if ( curLoop == result ) {
+          result = [];
+        }
+
+        if ( Expr.preFilter[ type ] ) {
+          match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+          if ( !match ) {
+            anyFound = found = true;
+          } else if ( match === true ) {
+            continue;
+          }
+        }
+
+        if ( match ) {
+          for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+            if ( item ) {
+              found = filter( item, match, i, curLoop );
+              var pass = not ^ !!found;
+
+              if ( inplace && found != null ) {
+                if ( pass ) {
+                  anyFound = true;
+                } else {
+                  curLoop[i] = false;
+                }
+              } else if ( pass ) {
+                result.push( item );
+                anyFound = true;
+              }
+            }
+          }
+        }
+
+        if ( found !== undefined ) {
+          if ( !inplace ) {
+            curLoop = result;
+          }
+
+          expr = expr.replace( Expr.match[ type ], "" );
+
+          if ( !anyFound ) {
+            return [];
+          }
+
           break;
         }
       }
     }
 
-    this.xpath = this.matcher.join('');
-    Selector._cache[this.expression] = this.xpath;
+    if ( expr == old ) {
+      if ( anyFound == null ) {
+        throw "Syntax error, unrecognized expression: " + expr;
+      } else {
+        break;
+      }
+    }
+
+    old = expr;
+  }
+
+  return curLoop;
+};
+
+var Expr = Sizzle.selectors = {
+  order: [ "ID", "NAME", "TAG" ],
+  match: {
+    ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+    CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+    NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
+    ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
+    TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
+    CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
+    POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
+    PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
   },
-
-  findElements: function(root) {
-    root = root || document;
-    var e = this.expression, results;
-
-    switch (this.mode) {
-      case 'selectorsAPI':
-        // querySelectorAll queries document-wide, then filters to descendants
-        // of the context element. That's not what we want.
-        // Add an explicit context to the selector if necessary.
-        if (root !== document) {
-          var oldId = root.id, id = $(root).identify();
-          e = "#" + id + " " + e;
-        }
-
-        results = $A(root.querySelectorAll(e)).map(Element.extend);
-        root.id = oldId;
-
-        return results;
-      case 'xpath':
-        return document._getElementsByXPath(this.xpath, root);
-      default:
-       return this.matcher(root);
+  leftMatch: {},
+  attrMap: {
+    "class": "className",
+    "for": "htmlFor"
+  },
+  attrHandle: {
+    href: function(elem){
+      return elem.getAttribute("href");
     }
   },
-
-  match: function(element) {
-    this.tokens = [];
-
-    var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
-    var le, p, m;
-
-    while (e && le !== e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        p = ps[i];
-        if (m = e.match(p)) {
-          // use the Selector.assertions methods unless the selector
-          // is too complex.
-          if (as[i]) {
-            this.tokens.push([i, Object.clone(m)]);
-            e = e.replace(m[0], '');
-          } else {
-            // reluctantly do a document-wide search
-            // and look for a match in the array
-            return this.findElements(document).include(element);
+  relative: {
+    "+": function(checkSet, part, isXML){
+      var isPartStr = typeof part === "string",
+        isTag = isPartStr && !/\W/.test(part),
+        isPartStrNotTag = isPartStr && !isTag;
+
+      if ( isTag && !isXML ) {
+        part = part.toUpperCase();
+      }
+
+      for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+        if ( (elem = checkSet[i]) ) {
+          while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+          checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
+            elem || false :
+            elem === part;
+        }
+      }
+
+      if ( isPartStrNotTag ) {
+        Sizzle.filter( part, checkSet, true );
+      }
+    },
+    ">": function(checkSet, part, isXML){
+      var isPartStr = typeof part === "string";
+
+      if ( isPartStr && !/\W/.test(part) ) {
+        part = isXML ? part : part.toUpperCase();
+
+        for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+          var elem = checkSet[i];
+          if ( elem ) {
+            var parent = elem.parentNode;
+            checkSet[i] = parent.nodeName === part ? parent : false;
+          }
+        }
+      } else {
+        for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+          var elem = checkSet[i];
+          if ( elem ) {
+            checkSet[i] = isPartStr ?
+              elem.parentNode :
+              elem.parentNode === part;
+          }
+        }
+
+        if ( isPartStr ) {
+          Sizzle.filter( part, checkSet, true );
+        }
+      }
+    },
+    "": function(checkSet, part, isXML){
+      var doneName = done++, checkFn = dirCheck;
+
+      if ( !/\W/.test(part) ) {
+        var nodeCheck = part = isXML ? part : part.toUpperCase();
+        checkFn = dirNodeCheck;
+      }
+
+      checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
+    },
+    "~": function(checkSet, part, isXML){
+      var doneName = done++, checkFn = dirCheck;
+
+      if ( typeof part === "string" && !/\W/.test(part) ) {
+        var nodeCheck = part = isXML ? part : part.toUpperCase();
+        checkFn = dirNodeCheck;
+      }
+
+      checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
+    }
+  },
+  find: {
+    ID: function(match, context, isXML){
+      if ( typeof context.getElementById !== "undefined" && !isXML ) {
+        var m = context.getElementById(match[1]);
+        return m ? [m] : [];
+      }
+    },
+    NAME: function(match, context, isXML){
+      if ( typeof context.getElementsByName !== "undefined" ) {
+        var ret = [], results = context.getElementsByName(match[1]);
+
+        for ( var i = 0, l = results.length; i < l; i++ ) {
+          if ( results[i].getAttribute("name") === match[1] ) {
+            ret.push( results[i] );
+          }
+        }
+
+        return ret.length === 0 ? null : ret;
+      }
+    },
+    TAG: function(match, context){
+      return context.getElementsByTagName(match[1]);
+    }
+  },
+  preFilter: {
+    CLASS: function(match, curLoop, inplace, result, not, isXML){
+      match = " " + match[1].replace(/\\/g, "") + " ";
+
+      if ( isXML ) {
+        return match;
+      }
+
+      for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+        if ( elem ) {
+          if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {
+            if ( !inplace )
+              result.push( elem );
+          } else if ( inplace ) {
+            curLoop[i] = false;
           }
         }
       }
+
+      return false;
+    },
+    ID: function(match){
+      return match[1].replace(/\\/g, "");
+    },
+    TAG: function(match, curLoop){
+      for ( var i = 0; curLoop[i] === false; i++ ){}
+      return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
+    },
+    CHILD: function(match){
+      if ( match[1] == "nth" ) {
+        var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
+          match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
+          !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+        match[2] = (test[1] + (test[2] || 1)) - 0;
+        match[3] = test[3] - 0;
+      }
+
+      match[0] = done++;
+
+      return match;
+    },
+    ATTR: function(match, curLoop, inplace, result, not, isXML){
+      var name = match[1].replace(/\\/g, "");
+
+      if ( !isXML && Expr.attrMap[name] ) {
+        match[1] = Expr.attrMap[name];
+      }
+
+      if ( match[2] === "~=" ) {
+        match[4] = " " + match[4] + " ";
+      }
+
+      return match;
+    },
+    PSEUDO: function(match, curLoop, inplace, result, not){
+      if ( match[1] === "not" ) {
+        if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+          match[3] = Sizzle(match[3], null, null, curLoop);
+        } else {
+          var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+          if ( !inplace ) {
+            result.push.apply( result, ret );
+          }
+          return false;
+        }
+      } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+        return true;
+      }
+
+      return match;
+    },
+    POS: function(match){
+      match.unshift( true );
+      return match;
     }
-
-    var match = true, name, matches;
-    for (var i = 0, token; token = this.tokens[i]; i++) {
-      name = token[0], matches = token[1];
-      if (!Selector.assertions[name](element, matches)) {
-        match = false; break;
+  },
+  filters: {
+    enabled: function(elem){
+      return elem.disabled === false && elem.type !== "hidden";
+    },
+    disabled: function(elem){
+      return elem.disabled === true;
+    },
+    checked: function(elem){
+      return elem.checked === true;
+    },
+    selected: function(elem){
+      elem.parentNode.selectedIndex;
+      return elem.selected === true;
+    },
+    parent: function(elem){
+      return !!elem.firstChild;
+    },
+    empty: function(elem){
+      return !elem.firstChild;
+    },
+    has: function(elem, i, match){
+      return !!Sizzle( match[3], elem ).length;
+    },
+    header: function(elem){
+      return /h\d/i.test( elem.nodeName );
+    },
+    text: function(elem){
+      return "text" === elem.type;
+    },
+    radio: function(elem){
+      return "radio" === elem.type;
+    },
+    checkbox: function(elem){
+      return "checkbox" === elem.type;
+    },
+    file: function(elem){
+      return "file" === elem.type;
+    },
+    password: function(elem){
+      return "password" === elem.type;
+    },
+    submit: function(elem){
+      return "submit" === elem.type;
+    },
+    image: function(elem){
+      return "image" === elem.type;
+    },
+    reset: function(elem){
+      return "reset" === elem.type;
+    },
+    button: function(elem){
+      return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
+    },
+    input: function(elem){
+      return /input|select|textarea|button/i.test(elem.nodeName);
+    }
+  },
+  setFilters: {
+    first: function(elem, i){
+      return i === 0;
+    },
+    last: function(elem, i, match, array){
+      return i === array.length - 1;
+    },
+    even: function(elem, i){
+      return i % 2 === 0;
+    },
+    odd: function(elem, i){
+      return i % 2 === 1;
+    },
+    lt: function(elem, i, match){
+      return i < match[3] - 0;
+    },
+    gt: function(elem, i, match){
+      return i > match[3] - 0;
+    },
+    nth: function(elem, i, match){
+      return match[3] - 0 == i;
+    },
+    eq: function(elem, i, match){
+      return match[3] - 0 == i;
+    }
+  },
+  filter: {
+    PSEUDO: function(elem, match, i, array){
+      var name = match[1], filter = Expr.filters[ name ];
+
+      if ( filter ) {
+        return filter( elem, i, match, array );
+      } else if ( name === "contains" ) {
+        return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
+      } else if ( name === "not" ) {
+        var not = match[3];
+
+        for ( var i = 0, l = not.length; i < l; i++ ) {
+          if ( not[i] === elem ) {
+            return false;
+          }
+        }
+
+        return true;
+      }
+    },
+    CHILD: function(elem, match){
+      var type = match[1], node = elem;
+      switch (type) {
+        case 'only':
+        case 'first':
+          while ( (node = node.previousSibling) )  {
+            if ( node.nodeType === 1 ) return false;
+          }
+          if ( type == 'first') return true;
+          node = elem;
+        case 'last':
+          while ( (node = node.nextSibling) )  {
+            if ( node.nodeType === 1 ) return false;
+          }
+          return true;
+        case 'nth':
+          var first = match[2], last = match[3];
+
+          if ( first == 1 && last == 0 ) {
+            return true;
+          }
+
+          var doneName = match[0],
+            parent = elem.parentNode;
+
+          if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+            var count = 0;
+            for ( node = parent.firstChild; node; node = node.nextSibling ) {
+              if ( node.nodeType === 1 ) {
+                node.nodeIndex = ++count;
+              }
+            }
+            parent.sizcache = doneName;
+          }
+
+          var diff = elem.nodeIndex - last;
+          if ( first == 0 ) {
+            return diff == 0;
+          } else {
+            return ( diff % first == 0 && diff / first >= 0 );
+          }
+      }
+    },
+    ID: function(elem, match){
+      return elem.nodeType === 1 && elem.getAttribute("id") === match;
+    },
+    TAG: function(elem, match){
+      return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
+    },
+    CLASS: function(elem, match){
+      return (" " + (elem.className || elem.getAttribute("class")) + " ")
+        .indexOf( match ) > -1;
+    },
+    ATTR: function(elem, match){
+      var name = match[1],
+        result = Expr.attrHandle[ name ] ?
+          Expr.attrHandle[ name ]( elem ) :
+          elem[ name ] != null ?
+            elem[ name ] :
+            elem.getAttribute( name ),
+        value = result + "",
+        type = match[2],
+        check = match[4];
+
+      return result == null ?
+        type === "!=" :
+        type === "=" ?
+        value === check :
+        type === "*=" ?
+        value.indexOf(check) >= 0 :
+        type === "~=" ?
+        (" " + value + " ").indexOf(check) >= 0 :
+        !check ?
+        value && result !== false :
+        type === "!=" ?
+        value != check :
+        type === "^=" ?
+        value.indexOf(check) === 0 :
+        type === "$=" ?
+        value.substr(value.length - check.length) === check :
+        type === "|=" ?
+        value === check || value.substr(0, check.length + 1) === check + "-" :
+        false;
+    },
+    POS: function(elem, match, i, array){
+      var name = match[2], filter = Expr.setFilters[ name ];
+
+      if ( filter ) {
+        return filter( elem, i, match, array );
       }
     }
-
-    return match;
-  },
-
-  toString: function() {
-    return this.expression;
-  },
-
-  inspect: function() {
-    return "#<Selector:" + this.expression.inspect() + ">";
-  }
-});
-
-Object.extend(Selector, {
-  _cache: { },
-
-  xpath: {
-    descendant:   "//*",
-    child:        "/*",
-    adjacent:     "/following-sibling::*[1]",
-    laterSibling: '/following-sibling::*',
-    tagName:      function(m) {
-      if (m[1] == '*') return '';
-      return "[local-name()='" + m[1].toLowerCase() +
-             "' or local-name()='" + m[1].toUpperCase() + "']";
-    },
-    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
-    id:           "[@id='#{1}']",
-    attrPresence: function(m) {
-      m[1] = m[1].toLowerCase();
-      return new Template("[@#{1}]").evaluate(m);
-    },
-    attr: function(m) {
-      m[1] = m[1].toLowerCase();
-      m[3] = m[5] || m[6];
-      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
-    },
-    pseudo: function(m) {
-      var h = Selector.xpath.pseudos[m[1]];
-      if (!h) return '';
-      if (Object.isFunction(h)) return h(m);
-      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
-    },
-    operators: {
-      '=':  "[@#{1}='#{3}']",
-      '!=': "[@#{1}!='#{3}']",
-      '^=': "[starts-with(@#{1}, '#{3}')]",
-      '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
-      '*=': "[contains(@#{1}, '#{3}')]",
-      '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
-      '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
-    },
-    pseudos: {
-      'first-child': '[not(preceding-sibling::*)]',
-      'last-child':  '[not(following-sibling::*)]',
-      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
-      'empty':       "[count(*) = 0 and (count(text()) = 0)]",
-      'checked':     "[@checked]",
-      'disabled':    "[(@disabled) and (@type!='hidden')]",
-      'enabled':     "[not(@disabled) and (@type!='hidden')]",
-      'not': function(m) {
-        var e = m[6], p = Selector.patterns,
-            x = Selector.xpath, le, v;
-
-        var exclusion = [];
-        while (e && le != e && (/\S/).test(e)) {
-          le = e;
-          for (var i in p) {
-            if (m = e.match(p[i])) {
-              v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
-              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
-              e = e.replace(m[0], '');
-              break;
-            }
-          }
+  }
+};
+
+var origPOS = Expr.match.POS;
+
+for ( var type in Expr.match ) {
+  Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
+  Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source );
+}
+
+var makeArray = function(array, results) {
+  array = Array.prototype.slice.call( array, 0 );
+
+  if ( results ) {
+    results.push.apply( results, array );
+    return results;
+  }
+
+  return array;
+};
+
+try {
+  Array.prototype.slice.call( document.documentElement.childNodes, 0 );
+
+} catch(e){
+  makeArray = function(array, results) {
+    var ret = results || [];
+
+    if ( toString.call(array) === "[object Array]" ) {
+      Array.prototype.push.apply( ret, array );
+    } else {
+      if ( typeof array.length === "number" ) {
+        for ( var i = 0, l = array.length; i < l; i++ ) {
+          ret.push( array[i] );
         }
-        return "[not(" + exclusion.join(" and ") + ")]";
-      },
-      'nth-child':      function(m) {
-        return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
-      },
-      'nth-last-child': function(m) {
-        return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
-      },
-      'nth-of-type':    function(m) {
-        return Selector.xpath.pseudos.nth("position() ", m);
-      },
-      'nth-last-of-type': function(m) {
-        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
-      },
-      'first-of-type':  function(m) {
-        m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
-      },
-      'last-of-type':   function(m) {
-        m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
-      },
-      'only-of-type':   function(m) {
-        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
-      },
-      nth: function(fragment, m) {
-        var mm, formula = m[6], predicate;
-        if (formula == 'even') formula = '2n+0';
-        if (formula == 'odd')  formula = '2n+1';
-        if (mm = formula.match(/^(\d+)$/)) // digit only
-          return '[' + fragment + "= " + mm[1] + ']';
-        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
-          if (mm[1] == "-") mm[1] = -1;
-          var a = mm[1] ? Number(mm[1]) : 1;
-          var b = mm[2] ? Number(mm[2]) : 0;
-          predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
-          "((#{fragment} - #{b}) div #{a} >= 0)]";
-          return new Template(predicate).evaluate({
-            fragment: fragment, a: a, b: b });
+      } else {
+        for ( var i = 0; array[i]; i++ ) {
+          ret.push( array[i] );
         }
       }
     }
-  },
-
-  criteria: {
-    tagName:      'n = h.tagName(n, r, "#{1}", c);      c = false;',
-    className:    'n = h.className(n, r, "#{1}", c);    c = false;',
-    id:           'n = h.id(n, r, "#{1}", c);           c = false;',
-    attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
-    attr: function(m) {
-      m[3] = (m[5] || m[6]);
-      return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
-    },
-    pseudo: function(m) {
-      if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
-      return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
-    },
-    descendant:   'c = "descendant";',
-    child:        'c = "child";',
-    adjacent:     'c = "adjacent";',
-    laterSibling: 'c = "laterSibling";'
-  },
-
-  patterns: {
-    // combinators must be listed first
-    // (and descendant needs to be last combinator)
-    laterSibling: /^\s*~\s*/,
-    child:        /^\s*>\s*/,
-    adjacent:     /^\s*\+\s*/,
-    descendant:   /^\s/,
-
-    // selectors follow
-    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
-    id:           /^#([\w\-\*]+)(\b|$)/,
-    className:    /^\.([\w\-\*]+)(\b|$)/,
-    pseudo:
-/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
-    attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/,
-    attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
-  },
-
-  // for Selector.match and Element#match
-  assertions: {
-    tagName: function(element, matches) {
-      return matches[1].toUpperCase() == element.tagName.toUpperCase();
-    },
-
-    className: function(element, matches) {
-      return Element.hasClassName(element, matches[1]);
-    },
-
-    id: function(element, matches) {
-      return element.id === matches[1];
-    },
-
-    attrPresence: function(element, matches) {
-      return Element.hasAttribute(element, matches[1]);
-    },
-
-    attr: function(element, matches) {
-      var nodeValue = Element.readAttribute(element, matches[1]);
-      return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
+
+    return ret;
+  };
+}
+
+var sortOrder;
+
+if ( document.documentElement.compareDocumentPosition ) {
+  sortOrder = function( a, b ) {
+    if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+      if ( a == b ) {
+        hasDuplicate = true;
+      }
+      return 0;
     }
-  },
-
-  handlers: {
-    // UTILITY FUNCTIONS
-    // joins two collections
-    concat: function(a, b) {
-      for (var i = 0, node; node = b[i]; i++)
-        a.push(node);
-      return a;
-    },
-
-    // marks an array of nodes for counting
-    mark: function(nodes) {
-      var _true = Prototype.emptyFunction;
-      for (var i = 0, node; node = nodes[i]; i++)
-        node._countedByPrototype = _true;
-      return nodes;
-    },
-
-    unmark: function(nodes) {
-      for (var i = 0, node; node = nodes[i]; i++)
-        node._countedByPrototype = undefined;
-      return nodes;
-    },
-
-    // mark each child node with its position (for nth calls)
-    // "ofType" flag indicates whether we're indexing for nth-of-type
-    // rather than nth-child
-    index: function(parentNode, reverse, ofType) {
-      parentNode._countedByPrototype = Prototype.emptyFunction;
-      if (reverse) {
-        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
-          var node = nodes[i];
-          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+
+    var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
+    if ( ret === 0 ) {
+      hasDuplicate = true;
+    }
+    return ret;
+  };
+} else if ( "sourceIndex" in document.documentElement ) {
+  sortOrder = function( a, b ) {
+    if ( !a.sourceIndex || !b.sourceIndex ) {
+      if ( a == b ) {
+        hasDuplicate = true;
+      }
+      return 0;
+    }
+
+    var ret = a.sourceIndex - b.sourceIndex;
+    if ( ret === 0 ) {
+      hasDuplicate = true;
+    }
+    return ret;
+  };
+} else if ( document.createRange ) {
+  sortOrder = function( a, b ) {
+    if ( !a.ownerDocument || !b.ownerDocument ) {
+      if ( a == b ) {
+        hasDuplicate = true;
+      }
+      return 0;
+    }
+
+    var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
+    aRange.setStart(a, 0);
+    aRange.setEnd(a, 0);
+    bRange.setStart(b, 0);
+    bRange.setEnd(b, 0);
+    var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
+    if ( ret === 0 ) {
+      hasDuplicate = true;
+    }
+    return ret;
+  };
+}
+
+(function(){
+  var form = document.createElement("div"),
+    id = "script" + (new Date).getTime();
+  form.innerHTML = "<a name='" + id + "'/>";
+
+  var root = document.documentElement;
+  root.insertBefore( form, root.firstChild );
+
+  if ( !!document.getElementById( id ) ) {
+    Expr.find.ID = function(match, context, isXML){
+      if ( typeof context.getElementById !== "undefined" && !isXML ) {
+        var m = context.getElementById(match[1]);
+        return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
+      }
+    };
+
+    Expr.filter.ID = function(elem, match){
+      var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+      return elem.nodeType === 1 && node && node.nodeValue === match;
+    };
+  }
+
+  root.removeChild( form );
+  root = form = null; // release memory in IE
+})();
+
+(function(){
+
+  var div = document.createElement("div");
+  div.appendChild( document.createComment("") );
+
+  if ( div.getElementsByTagName("*").length > 0 ) {
+    Expr.find.TAG = function(match, context){
+      var results = context.getElementsByTagName(match[1]);
+
+      if ( match[1] === "*" ) {
+        var tmp = [];
+
+        for ( var i = 0; results[i]; i++ ) {
+          if ( results[i].nodeType === 1 ) {
+            tmp.push( results[i] );
+          }
         }
-      } else {
-        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
-          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+
+        results = tmp;
       }
-    },
-
-    // filters out duplicates and extends all nodes
-    unique: function(nodes) {
-      if (nodes.length == 0) return nodes;
-      var results = [], n;
-      for (var i = 0, l = nodes.length; i < l; i++)
-        if (!(n = nodes[i])._countedByPrototype) {
-          n._countedByPrototype = Prototype.emptyFunction;
-          results.push(Element.extend(n));
+
+      return results;
+    };
+  }
+
+  div.innerHTML = "<a href='#'></a>";
+  if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+      div.firstChild.getAttribute("href") !== "#" ) {
+    Expr.attrHandle.href = function(elem){
+      return elem.getAttribute("href", 2);
+    };
+  }
+
+  div = null; // release memory in IE
+})();
+
+if ( document.querySelectorAll ) (function(){
+  var oldSizzle = Sizzle, div = document.createElement("div");
+  div.innerHTML = "<p class='TEST'></p>";
+
+  if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+    return;
+  }
+
+  Sizzle = function(query, context, extra, seed){
+    context = context || document;
+
+    if ( !seed && context.nodeType === 9 && !isXML(context) ) {
+      try {
+        return makeArray( context.querySelectorAll(query), extra );
+      } catch(e){}
+    }
+
+    return oldSizzle(query, context, extra, seed);
+  };
+
+  for ( var prop in oldSizzle ) {
+    Sizzle[ prop ] = oldSizzle[ prop ];
+  }
+
+  div = null; // release memory in IE
+})();
+
+if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
+  var div = document.createElement("div");
+  div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+  if ( div.getElementsByClassName("e").length === 0 )
+    return;
+
+  div.lastChild.className = "e";
+
+  if ( div.getElementsByClassName("e").length === 1 )
+    return;
+
+  Expr.order.splice(1, 0, "CLASS");
+  Expr.find.CLASS = function(match, context, isXML) {
+    if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+      return context.getElementsByClassName(match[1]);
+    }
+  };
+
+  div = null; // release memory in IE
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+  var sibDir = dir == "previousSibling" && !isXML;
+  for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+    var elem = checkSet[i];
+    if ( elem ) {
+      if ( sibDir && elem.nodeType === 1 ){
+        elem.sizcache = doneName;
+        elem.sizset = i;
+      }
+      elem = elem[dir];
+      var match = false;
+
+      while ( elem ) {
+        if ( elem.sizcache === doneName ) {
+          match = checkSet[elem.sizset];
+          break;
         }
-      return Selector.handlers.unmark(results);
-    },
-
-    // COMBINATOR FUNCTIONS
-    descendant: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        h.concat(results, node.getElementsByTagName('*'));
-      return results;
-    },
-
-    child: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        for (var j = 0, child; child = node.childNodes[j]; j++)
-          if (child.nodeType == 1 && child.tagName != '!') results.push(child);
+
+        if ( elem.nodeType === 1 && !isXML ){
+          elem.sizcache = doneName;
+          elem.sizset = i;
+        }
+
+        if ( elem.nodeName === cur ) {
+          match = elem;
+          break;
+        }
+
+        elem = elem[dir];
       }
-      return results;
-    },
-
-    adjacent: function(nodes) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        var next = this.nextElementSibling(node);
-        if (next) results.push(next);
+
+      checkSet[i] = match;
+    }
+  }
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+  var sibDir = dir == "previousSibling" && !isXML;
+  for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+    var elem = checkSet[i];
+    if ( elem ) {
+      if ( sibDir && elem.nodeType === 1 ) {
+        elem.sizcache = doneName;
+        elem.sizset = i;
       }
-      return results;
-    },
-
-    laterSibling: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        h.concat(results, Element.nextSiblings(node));
-      return results;
-    },
-
-    nextElementSibling: function(node) {
-      while (node = node.nextSibling)
-        if (node.nodeType == 1) return node;
-      return null;
-    },
-
-    previousElementSibling: function(node) {
-      while (node = node.previousSibling)
-        if (node.nodeType == 1) return node;
-      return null;
-    },
-
-    // TOKEN FUNCTIONS
-    tagName: function(nodes, root, tagName, combinator) {
-      var uTagName = tagName.toUpperCase();
-      var results = [], h = Selector.handlers;
-      if (nodes) {
-        if (combinator) {
-          // fastlane for ordinary descendant combinators
-          if (combinator == "descendant") {
-            for (var i = 0, node; node = nodes[i]; i++)
-              h.concat(results, node.getElementsByTagName(tagName));
-            return results;
-          } else nodes = this[combinator](nodes);
-          if (tagName == "*") return nodes;
+      elem = elem[dir];
+      var match = false;
+
+      while ( elem ) {
+        if ( elem.sizcache === doneName ) {
+          match = checkSet[elem.sizset];
+          break;
         }
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node.tagName.toUpperCase() === uTagName) results.push(node);
-        return results;
-      } else return root.getElementsByTagName(tagName);
-    },
-
-    id: function(nodes, root, id, combinator) {
-      var targetNode = $(id), h = Selector.handlers;
-      if (!targetNode) return [];
-      if (!nodes && root == document) return [targetNode];
-      if (nodes) {
-        if (combinator) {
-          if (combinator == 'child') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (targetNode.parentNode == node) return [targetNode];
-          } else if (combinator == 'descendant') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (Element.descendantOf(targetNode, node)) return [targetNode];
-          } else if (combinator == 'adjacent') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (Selector.handlers.previousElementSibling(targetNode) == node)
-                return [targetNode];
-          } else nodes = h[combinator](nodes);
+
+        if ( elem.nodeType === 1 ) {
+          if ( !isXML ) {
+            elem.sizcache = doneName;
+            elem.sizset = i;
+          }
+          if ( typeof cur !== "string" ) {
+            if ( elem === cur ) {
+              match = true;
+              break;
+            }
+
+          } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+            match = elem;
+            break;
+          }
         }
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node == targetNode) return [targetNode];
-        return [];
+
+        elem = elem[dir];
       }
-      return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
-    },
-
-    className: function(nodes, root, className, combinator) {
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      return Selector.handlers.byClassName(nodes, root, className);
-    },
-
-    byClassName: function(nodes, root, className) {
-      if (!nodes) nodes = Selector.handlers.descendant([root]);
-      var needle = ' ' + className + ' ';
-      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
-        nodeClassName = node.className;
-        if (nodeClassName.length == 0) continue;
-        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
-          results.push(node);
-      }
-      return results;
-    },
-
-    attrPresence: function(nodes, root, attr, combinator) {
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      var results = [];
-      for (var i = 0, node; node = nodes[i]; i++)
-        if (Element.hasAttribute(node, attr)) results.push(node);
-      return results;
-    },
-
-    attr: function(nodes, root, attr, value, operator, combinator) {
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      var handler = Selector.operators[operator], results = [];
-      for (var i = 0, node; node = nodes[i]; i++) {
-        var nodeValue = Element.readAttribute(node, attr);
-        if (nodeValue === null) continue;
-        if (handler(nodeValue, value)) results.push(node);
-      }
-      return results;
-    },
-
-    pseudo: function(nodes, name, value, root, combinator) {
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      return Selector.pseudos[name](nodes, value, root);
+
+      checkSet[i] = match;
     }
-  },
-
-  pseudos: {
-    'first-child': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        if (Selector.handlers.previousElementSibling(node)) continue;
-          results.push(node);
-      }
-      return results;
-    },
-    'last-child': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        if (Selector.handlers.nextElementSibling(node)) continue;
-          results.push(node);
-      }
-      return results;
-    },
-    'only-child': function(nodes, value, root) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
-          results.push(node);
-      return results;
-    },
-    'nth-child':        function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root);
-    },
-    'nth-last-child':   function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, true);
-    },
-    'nth-of-type':      function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, false, true);
-    },
-    'nth-last-of-type': function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, true, true);
-    },
-    'first-of-type':    function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, "1", root, false, true);
-    },
-    'last-of-type':     function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, "1", root, true, true);
-    },
-    'only-of-type':     function(nodes, formula, root) {
-      var p = Selector.pseudos;
-      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
-    },
-
-    // handles the an+b logic
-    getIndices: function(a, b, total) {
-      if (a == 0) return b > 0 ? [b] : [];
-      return $R(1, total).inject([], function(memo, i) {
-        if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
-        return memo;
-      });
-    },
-
-    // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
-    nth: function(nodes, formula, root, reverse, ofType) {
-      if (nodes.length == 0) return [];
-      if (formula == 'even') formula = '2n+0';
-      if (formula == 'odd')  formula = '2n+1';
-      var h = Selector.handlers, results = [], indexed = [], m;
-      h.mark(nodes);
-      for (var i = 0, node; node = nodes[i]; i++) {
-        if (!node.parentNode._countedByPrototype) {
-          h.index(node.parentNode, reverse, ofType);
-          indexed.push(node.parentNode);
-        }
-      }
-      if (formula.match(/^\d+$/)) { // just a number
-        formula = Number(formula);
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node.nodeIndex == formula) results.push(node);
-      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
-        if (m[1] == "-") m[1] = -1;
-        var a = m[1] ? Number(m[1]) : 1;
-        var b = m[2] ? Number(m[2]) : 0;
-        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
-        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
-          for (var j = 0; j < l; j++)
-            if (node.nodeIndex == indices[j]) results.push(node);
-        }
-      }
-      h.unmark(nodes);
-      h.unmark(indexed);
-      return results;
-    },
-
-    'empty': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        // IE treats comments as element nodes
-        if (node.tagName == '!' || node.firstChild) continue;
-        results.push(node);
-      }
-      return results;
-    },
-
-    'not': function(nodes, selector, root) {
-      var h = Selector.handlers, selectorType, m;
-      var exclusions = new Selector(selector).findElements(root);
-      h.mark(exclusions);
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!node._countedByPrototype) results.push(node);
-      h.unmark(exclusions);
-      return results;
-    },
-
-    'enabled': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!node.disabled && (!node.type || node.type !== 'hidden'))
-          results.push(node);
-      return results;
-    },
-
-    'disabled': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (node.disabled) results.push(node);
-      return results;
-    },
-
-    'checked': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (node.checked) results.push(node);
-      return results;
-    }
-  },
-
-  operators: {
-    '=':  function(nv, v) { return nv == v; },
-    '!=': function(nv, v) { return nv != v; },
-    '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
-    '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
-    '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
-    '$=': function(nv, v) { return nv.endsWith(v); },
-    '*=': function(nv, v) { return nv.include(v); },
-    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
-    '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
-     '-').include('-' + (v || "").toUpperCase() + '-'); }
-  },
-
-  split: function(expression) {
-    var expressions = [];
-    expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
-      expressions.push(m[1].strip());
-    });
-    return expressions;
-  },
-
-  matchElements: function(elements, expression) {
-    var matches = $$(expression), h = Selector.handlers;
-    h.mark(matches);
-    for (var i = 0, results = [], element; element = elements[i]; i++)
-      if (element._countedByPrototype) results.push(element);
-    h.unmark(matches);
-    return results;
-  },
-
-  findElement: function(elements, expression, index) {
-    if (Object.isNumber(expression)) {
-      index = expression; expression = false;
-    }
-    return Selector.matchElements(elements, expression || '*')[index || 0];
-  },
-
-  findChildElements: function(element, expressions) {
-    expressions = Selector.split(expressions.join(','));
-    var results = [], h = Selector.handlers;
-    for (var i = 0, l = expressions.length, selector; i < l; i++) {
-      selector = new Selector(expressions[i].strip());
-      h.concat(results, selector.findElements(element));
-    }
-    return (l > 1) ? h.unique(results) : results;
-  }
-});
-
-if (Prototype.Browser.IE) {
-  Object.extend(Selector.handlers, {
-    // IE returns comment nodes on getElementsByTagName("*").
-    // Filter them out.
-    concat: function(a, b) {
-      for (var i = 0, node; node = b[i]; i++)
-        if (node.tagName !== "!") a.push(node);
-      return a;
-    },
-
-    // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
-    unmark: function(nodes) {
-      for (var i = 0, node; node = nodes[i]; i++)
-        node.removeAttribute('_countedByPrototype');
-      return nodes;
-    }
-  });
+  }
 }
 
-function $$() {
-  return Selector.findChildElements(document, $A(arguments));
-}
+var contains = document.compareDocumentPosition ?  function(a, b){
+  return a.compareDocumentPosition(b) & 16;
+} : function(a, b){
+  return a !== b && (a.contains ? a.contains(b) : true);
+};
+
+var isXML = function(elem){
+  return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
+    !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML";
+};
+
+var posProcess = function(selector, context){
+  var tmpSet = [], later = "", match,
+    root = context.nodeType ? [context] : context;
+
+  while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+    later += match[0];
+    selector = selector.replace( Expr.match.PSEUDO, "" );
+  }
+
+  selector = Expr.relative[selector] ? selector + "*" : selector;
+
+  for ( var i = 0, l = root.length; i < l; i++ ) {
+    Sizzle( selector, root[i], tmpSet );
+  }
+
+  return Sizzle.filter( later, tmpSet );
+};
+
+
+window.Sizzle = Sizzle;
+
+})();
+
+;(function(engine) {
+  var extendElements = Prototype.Selector.extendElements;
+
+  function select(selector, scope) {
+    return extendElements(engine(selector, scope || document));
+  }
+
+  function match(element, selector) {
+    return engine.matches(selector, [element]).length == 1;
+  }
+
+  Prototype.Selector.engine = engine;
+  Prototype.Selector.select = select;
+  Prototype.Selector.match = match;
+})(Sizzle);
+
+window.Sizzle = Prototype._original_property;
+delete Prototype._original_property;
+
 var Form = {
   reset: function(form) {
-    $(form).reset();
+    form = $(form);
+    form.reset();
     return form;
   },
 
   serializeElements: function(elements, options) {
     if (typeof options != 'object') options = { hash: !!options };
     else if (Object.isUndefined(options.hash)) options.hash = true;
-    var key, value, submitted = false, submit = options.submit;
-
-    var data = elements.inject({ }, function(result, element) {
+    var key, value, submitted = false, submit = options.submit, accumulator, initial;
+
+    if (options.hash) {
+      initial = {};
+      accumulator = function(result, key, value) {
+        if (key in result) {
+          if (!Object.isArray(result[key])) result[key] = [result[key]];
+          result[key].push(value);
+        } else result[key] = value;
+        return result;
+      };
+    } else {
+      initial = '';
+      accumulator = function(result, key, value) {
+        return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + encodeURIComponent(value);
+      }
+    }
+
+    return elements.inject(initial, function(result, element) {
       if (!element.disabled && element.name) {
         key = element.name; value = $(element).getValue();
         if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
             submit !== false && (!submit || key == submit) && (submitted = true)))) {
-          if (key in result) {
-            // a key is already present; construct an array of values
-            if (!Object.isArray(result[key])) result[key] = [result[key]];
-            result[key].push(value);
-          }
-          else result[key] = value;
+          result = accumulator(result, key, value);
         }
       }
       return result;
     });
-
-    return options.hash ? data : Object.toQueryString(data);
   }
 };
 
@@ -3480,13 +5007,18 @@
   },
 
   getElements: function(form) {
-    return $A($(form).getElementsByTagName('*')).inject([],
-      function(elements, child) {
-        if (Form.Element.Serializers[child.tagName.toLowerCase()])
-          elements.push(Element.extend(child));
-        return elements;
-      }
-    );
+    var elements = $(form).getElementsByTagName('*'),
+        element,
+        arr = [ ],
+        serializers = Form.Element.Serializers;
+    for (var i = 0; element = elements[i]; i++) {
+      arr.push(element);
+    }
+    return arr.inject([], function(elements, child) {
+      if (serializers[child.tagName.toLowerCase()])
+        elements.push(Element.extend(child));
+      return elements;
+    })
   },
 
   getInputs: function(form, typeName, name) {
@@ -3526,13 +5058,14 @@
     }).sortBy(function(element) { return element.tabIndex }).first();
 
     return firstByIndex ? firstByIndex : elements.find(function(element) {
-      return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+      return /^(?:input|select|textarea)$/i.test(element.tagName);
     });
   },
 
   focusFirstElement: function(form) {
     form = $(form);
-    form.findFirstElement().activate();
+    var element = form.findFirstElement();
+    if (element) element.activate();
     return form;
   },
 
@@ -3557,6 +5090,7 @@
 
 /*--------------------------------------------------------------------------*/
 
+
 Form.Element = {
   focus: function(element) {
     $(element).focus();
@@ -3570,6 +5104,7 @@
 };
 
 Form.Element.Methods = {
+
   serialize: function(element) {
     element = $(element);
     if (!element.disabled && element.name) {
@@ -3610,7 +5145,7 @@
     try {
       element.focus();
       if (element.select && (element.tagName.toLowerCase() != 'input' ||
-          !['button', 'reset', 'submit'].include(element.type)))
+          !(/^(?:button|reset|submit)$/i.test(element.type))))
         element.select();
     } catch (e) { }
     return element;
@@ -3632,75 +5167,86 @@
 /*--------------------------------------------------------------------------*/
 
 var Field = Form.Element;
+
 var $F = Form.Element.Methods.getValue;
 
 /*--------------------------------------------------------------------------*/
 
-Form.Element.Serializers = {
-  input: function(element, value) {
+Form.Element.Serializers = (function() {
+  function input(element, value) {
     switch (element.type.toLowerCase()) {
       case 'checkbox':
       case 'radio':
-        return Form.Element.Serializers.inputSelector(element, value);
+        return inputSelector(element, value);
       default:
-        return Form.Element.Serializers.textarea(element, value);
+        return valueSelector(element, value);
     }
-  },
-
-  inputSelector: function(element, value) {
-    if (Object.isUndefined(value)) return element.checked ? element.value : null;
+  }
+
+  function inputSelector(element, value) {
+    if (Object.isUndefined(value))
+      return element.checked ? element.value : null;
     else element.checked = !!value;
-  },
-
-  textarea: function(element, value) {
+  }
+
+  function valueSelector(element, value) {
     if (Object.isUndefined(value)) return element.value;
     else element.value = value;
-  },
-
-  select: function(element, value) {
+  }
+
+  function select(element, value) {
     if (Object.isUndefined(value))
-      return this[element.type == 'select-one' ?
-        'selectOne' : 'selectMany'](element);
-    else {
-      var opt, currentValue, single = !Object.isArray(value);
-      for (var i = 0, length = element.length; i < length; i++) {
-        opt = element.options[i];
-        currentValue = this.optionValue(opt);
-        if (single) {
-          if (currentValue == value) {
-            opt.selected = true;
-            return;
-          }
+      return (element.type === 'select-one' ? selectOne : selectMany)(element);
+
+    var opt, currentValue, single = !Object.isArray(value);
+    for (var i = 0, length = element.length; i < length; i++) {
+      opt = element.options[i];
+      currentValue = this.optionValue(opt);
+      if (single) {
+        if (currentValue == value) {
+          opt.selected = true;
+          return;
         }
-        else opt.selected = value.include(currentValue);
       }
+      else opt.selected = value.include(currentValue);
     }
-  },
-
-  selectOne: function(element) {
+  }
+
+  function selectOne(element) {
     var index = element.selectedIndex;
-    return index >= 0 ? this.optionValue(element.options[index]) : null;
-  },
-
-  selectMany: function(element) {
+    return index >= 0 ? optionValue(element.options[index]) : null;
+  }
+
+  function selectMany(element) {
     var values, length = element.length;
     if (!length) return null;
 
     for (var i = 0, values = []; i < length; i++) {
       var opt = element.options[i];
-      if (opt.selected) values.push(this.optionValue(opt));
+      if (opt.selected) values.push(optionValue(opt));
     }
     return values;
-  },
-
-  optionValue: function(opt) {
-    // extend element because hasAttribute may not be native
-    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
-  }
-};
+  }
+
+  function optionValue(opt) {
+    return Element.hasAttribute(opt, 'value') ? opt.value : opt.text;
+  }
+
+  return {
+    input:         input,
+    inputSelector: inputSelector,
+    textarea:      valueSelector,
+    select:        select,
+    selectOne:     selectOne,
+    selectMany:    selectMany,
+    optionValue:   optionValue,
+    button:        valueSelector
+  };
+})();
 
 /*--------------------------------------------------------------------------*/
 
+
 Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
   initialize: function($super, element, frequency, callback) {
     $super(callback, frequency);
@@ -3782,354 +5328,527 @@
     return Form.serialize(this.element);
   }
 });
-if (!window.Event) var Event = { };
-
-Object.extend(Event, {
-  KEY_BACKSPACE: 8,
-  KEY_TAB:       9,
-  KEY_RETURN:   13,
-  KEY_ESC:      27,
-  KEY_LEFT:     37,
-  KEY_UP:       38,
-  KEY_RIGHT:    39,
-  KEY_DOWN:     40,
-  KEY_DELETE:   46,
-  KEY_HOME:     36,
-  KEY_END:      35,
-  KEY_PAGEUP:   33,
-  KEY_PAGEDOWN: 34,
-  KEY_INSERT:   45,
-
-  cache: { },
-
-  relatedTarget: function(event) {
-    var element;
-    switch(event.type) {
-      case 'mouseover': element = event.fromElement; break;
-      case 'mouseout':  element = event.toElement;   break;
-      default: return null;
+(function() {
+
+  var Event = {
+    KEY_BACKSPACE: 8,
+    KEY_TAB:       9,
+    KEY_RETURN:   13,
+    KEY_ESC:      27,
+    KEY_LEFT:     37,
+    KEY_UP:       38,
+    KEY_RIGHT:    39,
+    KEY_DOWN:     40,
+    KEY_DELETE:   46,
+    KEY_HOME:     36,
+    KEY_END:      35,
+    KEY_PAGEUP:   33,
+    KEY_PAGEDOWN: 34,
+    KEY_INSERT:   45,
+
+    cache: {}
+  };
+
+  var docEl = document.documentElement;
+  var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl
+    && 'onmouseleave' in docEl;
+
+
+
+  var isIELegacyEvent = function(event) { return false; };
+
+  if (window.attachEvent) {
+    if (window.addEventListener) {
+      isIELegacyEvent = function(event) {
+        return !(event instanceof window.Event);
+      };
+    } else {
+      isIELegacyEvent = function(event) { return true; };
     }
-    return Element.extend(element);
-  }
-});
-
-Event.Methods = (function() {
-  var isButton;
-
-  if (Prototype.Browser.IE) {
-    var buttonMap = { 0: 1, 1: 4, 2: 2 };
-    isButton = function(event, code) {
-      return event.button == buttonMap[code];
-    };
-
+  }
+
+  var _isButton;
+
+  function _isButtonForDOMEvents(event, code) {
+    return event.which ? (event.which === code + 1) : (event.button === code);
+  }
+
+  var legacyButtonMap = { 0: 1, 1: 4, 2: 2 };
+  function _isButtonForLegacyEvents(event, code) {
+    return event.button === legacyButtonMap[code];
+  }
+
+  function _isButtonForWebKit(event, code) {
+    switch (code) {
+      case 0: return event.which == 1 && !event.metaKey;
+      case 1: return event.which == 2 || (event.which == 1 && event.metaKey);
+      case 2: return event.which == 3;
+      default: return false;
+    }
+  }
+
+  if (window.attachEvent) {
+    if (!window.addEventListener) {
+      _isButton = _isButtonForLegacyEvents;
+    } else {
+      _isButton = function(event, code) {
+        return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) :
+         _isButtonForDOMEvents(event, code);
+      }
+    }
   } else if (Prototype.Browser.WebKit) {
-    isButton = function(event, code) {
-      switch (code) {
-        case 0: return event.which == 1 && !event.metaKey;
-        case 1: return event.which == 1 && event.metaKey;
-        default: return false;
+    _isButton = _isButtonForWebKit;
+  } else {
+    _isButton = _isButtonForDOMEvents;
+  }
+
+  function isLeftClick(event)   { return _isButton(event, 0) }
+
+  function isMiddleClick(event) { return _isButton(event, 1) }
+
+  function isRightClick(event)  { return _isButton(event, 2) }
+
+  function element(event) {
+    event = Event.extend(event);
+
+    var node = event.target, type = event.type,
+     currentTarget = event.currentTarget;
+
+    if (currentTarget && currentTarget.tagName) {
+      if (type === 'load' || type === 'error' ||
+        (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
+          && currentTarget.type === 'radio'))
+            node = currentTarget;
+    }
+
+    if (node.nodeType == Node.TEXT_NODE)
+      node = node.parentNode;
+
+    return Element.extend(node);
+  }
+
+  function findElement(event, expression) {
+    var element = Event.element(event);
+
+    if (!expression) return element;
+    while (element) {
+      if (Object.isElement(element) && Prototype.Selector.match(element, expression)) {
+        return Element.extend(element);
       }
-    };
-
-  } else {
-    isButton = function(event, code) {
-      return event.which ? (event.which === code + 1) : (event.button === code);
-    };
-  }
-
-  return {
-    isLeftClick:   function(event) { return isButton(event, 0) },
-    isMiddleClick: function(event) { return isButton(event, 1) },
-    isRightClick:  function(event) { return isButton(event, 2) },
-
-    element: function(event) {
-      event = Event.extend(event);
-
-      var node          = event.target,
-          type          = event.type,
-          currentTarget = event.currentTarget;
-
-      if (currentTarget && currentTarget.tagName) {
-        // Firefox screws up the "click" event when moving between radio buttons
-        // via arrow keys. It also screws up the "load" and "error" events on images,
-        // reporting the document as the target instead of the original image.
-        if (type === 'load' || type === 'error' ||
-          (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
-            && currentTarget.type === 'radio'))
-              node = currentTarget;
-      }
-      if (node.nodeType == Node.TEXT_NODE) node = node.parentNode;
-      return Element.extend(node);
-    },
-
-    findElement: function(event, expression) {
-      var element = Event.element(event);
-      if (!expression) return element;
-      var elements = [element].concat(element.ancestors());
-      return Selector.findElement(elements, expression, 0);
-    },
-
-    pointer: function(event) {
-      var docElement = document.documentElement,
-      body = document.body || { scrollLeft: 0, scrollTop: 0 };
-      return {
-        x: event.pageX || (event.clientX +
-          (docElement.scrollLeft || body.scrollLeft) -
-          (docElement.clientLeft || 0)),
-        y: event.pageY || (event.clientY +
-          (docElement.scrollTop || body.scrollTop) -
-          (docElement.clientTop || 0))
-      };
-    },
-
-    pointerX: function(event) { return Event.pointer(event).x },
-    pointerY: function(event) { return Event.pointer(event).y },
-
-    stop: function(event) {
-      Event.extend(event);
-      event.preventDefault();
-      event.stopPropagation();
-      event.stopped = true;
+      element = element.parentNode;
     }
+  }
+
+  function pointer(event) {
+    return { x: pointerX(event), y: pointerY(event) };
+  }
+
+  function pointerX(event) {
+    var docElement = document.documentElement,
+     body = document.body || { scrollLeft: 0 };
+
+    return event.pageX || (event.clientX +
+      (docElement.scrollLeft || body.scrollLeft) -
+      (docElement.clientLeft || 0));
+  }
+
+  function pointerY(event) {
+    var docElement = document.documentElement,
+     body = document.body || { scrollTop: 0 };
+
+    return  event.pageY || (event.clientY +
+       (docElement.scrollTop || body.scrollTop) -
+       (docElement.clientTop || 0));
+  }
+
+
+  function stop(event) {
+    Event.extend(event);
+    event.preventDefault();
+    event.stopPropagation();
+
+    event.stopped = true;
+  }
+
+
+  Event.Methods = {
+    isLeftClick:   isLeftClick,
+    isMiddleClick: isMiddleClick,
+    isRightClick:  isRightClick,
+
+    element:     element,
+    findElement: findElement,
+
+    pointer:  pointer,
+    pointerX: pointerX,
+    pointerY: pointerY,
+
+    stop: stop
   };
-})();
-
-Event.extend = (function() {
+
   var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
     m[name] = Event.Methods[name].methodize();
     return m;
   });
 
-  if (Prototype.Browser.IE) {
-    Object.extend(methods, {
+  if (window.attachEvent) {
+    function _relatedTarget(event) {
+      var element;
+      switch (event.type) {
+        case 'mouseover':
+        case 'mouseenter':
+          element = event.fromElement;
+          break;
+        case 'mouseout':
+        case 'mouseleave':
+          element = event.toElement;
+          break;
+        default:
+          return null;
+      }
+      return Element.extend(element);
+    }
+
+    var additionalMethods = {
       stopPropagation: function() { this.cancelBubble = true },
       preventDefault:  function() { this.returnValue = false },
-      inspect: function() { return "[object Event]" }
-    });
-
-    return function(event) {
+      inspect: function() { return '[object Event]' }
+    };
+
+    Event.extend = function(event, element) {
       if (!event) return false;
+
+      if (!isIELegacyEvent(event)) return event;
+
       if (event._extendedByPrototype) return event;
-
       event._extendedByPrototype = Prototype.emptyFunction;
+
       var pointer = Event.pointer(event);
+
       Object.extend(event, {
-        target: event.srcElement,
-        relatedTarget: Event.relatedTarget(event),
+        target: event.srcElement || element,
+        relatedTarget: _relatedTarget(event),
         pageX:  pointer.x,
         pageY:  pointer.y
       });
-      return Object.extend(event, methods);
+
+      Object.extend(event, methods);
+      Object.extend(event, additionalMethods);
+
+      return event;
     };
-
   } else {
-    Event.prototype = Event.prototype || document.createEvent("HTMLEvents")['__proto__'];
+    Event.extend = Prototype.K;
+  }
+
+  if (window.addEventListener) {
+    Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__;
     Object.extend(Event.prototype, methods);
-    return Prototype.K;
-  }
+  }
+
+  function _createResponder(element, eventName, handler) {
+    var registry = Element.retrieve(element, 'prototype_event_registry');
+
+    if (Object.isUndefined(registry)) {
+      CACHE.push(element);
+      registry = Element.retrieve(element, 'prototype_event_registry', $H());
+    }
+
+    var respondersForEvent = registry.get(eventName);
+    if (Object.isUndefined(respondersForEvent)) {
+      respondersForEvent = [];
+      registry.set(eventName, respondersForEvent);
+    }
+
+    if (respondersForEvent.pluck('handler').include(handler)) return false;
+
+    var responder;
+    if (eventName.include(":")) {
+      responder = function(event) {
+        if (Object.isUndefined(event.eventName))
+          return false;
+
+        if (event.eventName !== eventName)
+          return false;
+
+        Event.extend(event, element);
+        handler.call(element, event);
+      };
+    } else {
+      if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&
+       (eventName === "mouseenter" || eventName === "mouseleave")) {
+        if (eventName === "mouseenter" || eventName === "mouseleave") {
+          responder = function(event) {
+            Event.extend(event, element);
+
+            var parent = event.relatedTarget;
+            while (parent && parent !== element) {
+              try { parent = parent.parentNode; }
+              catch(e) { parent = element; }
+            }
+
+            if (parent === element) return;
+
+            handler.call(element, event);
+          };
+        }
+      } else {
+        responder = function(event) {
+          Event.extend(event, element);
+          handler.call(element, event);
+        };
+      }
+    }
+
+    responder.handler = handler;
+    respondersForEvent.push(responder);
+    return responder;
+  }
+
+  function _destroyCache() {
+    for (var i = 0, length = CACHE.length; i < length; i++) {
+      Event.stopObserving(CACHE[i]);
+      CACHE[i] = null;
+    }
+  }
+
+  var CACHE = [];
+
+  if (Prototype.Browser.IE)
+    window.attachEvent('onunload', _destroyCache);
+
+  if (Prototype.Browser.WebKit)
+    window.addEventListener('unload', Prototype.emptyFunction, false);
+
+
+  var _getDOMEventName = Prototype.K,
+      translations = { mouseenter: "mouseover", mouseleave: "mouseout" };
+
+  if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {
+    _getDOMEventName = function(eventName) {
+      return (translations[eventName] || eventName);
+    };
+  }
+
+  function observe(element, eventName, handler) {
+    element = $(element);
+
+    var responder = _createResponder(element, eventName, handler);
+
+    if (!responder) return element;
+
+    if (eventName.include(':')) {
+      if (element.addEventListener)
+        element.addEventListener("dataavailable", responder, false);
+      else {
+        element.attachEvent("ondataavailable", responder);
+        element.attachEvent("onlosecapture", responder);
+      }
+    } else {
+      var actualEventName = _getDOMEventName(eventName);
+
+      if (element.addEventListener)
+        element.addEventListener(actualEventName, responder, false);
+      else
+        element.attachEvent("on" + actualEventName, responder);
+    }
+
+    return element;
+  }
+
+  function stopObserving(element, eventName, handler) {
+    element = $(element);
+
+    var registry = Element.retrieve(element, 'prototype_event_registry');
+    if (!registry) return element;
+
+    if (!eventName) {
+      registry.each( function(pair) {
+        var eventName = pair.key;
+        stopObserving(element, eventName);
+      });
+      return element;
+    }
+
+    var responders = registry.get(eventName);
+    if (!responders) return element;
+
+    if (!handler) {
+      responders.each(function(r) {
+        stopObserving(element, eventName, r.handler);
+      });
+      return element;
+    }
+
+    var i = responders.length, responder;
+    while (i--) {
+      if (responders[i].handler === handler) {
+        responder = responders[i];
+        break;
+      }
+    }
+    if (!responder) return element;
+
+    if (eventName.include(':')) {
+      if (element.removeEventListener)
+        element.removeEventListener("dataavailable", responder, false);
+      else {
+        element.detachEvent("ondataavailable", responder);
+        element.detachEvent("onlosecapture", responder);
+      }
+    } else {
+      var actualEventName = _getDOMEventName(eventName);
+      if (element.removeEventListener)
+        element.removeEventListener(actualEventName, responder, false);
+      else
+        element.detachEvent('on' + actualEventName, responder);
+    }
+
+    registry.set(eventName, responders.without(responder));
+
+    return element;
+  }
+
+  function fire(element, eventName, memo, bubble) {
+    element = $(element);
+
+    if (Object.isUndefined(bubble))
+      bubble = true;
+
+    if (element == document && document.createEvent && !element.dispatchEvent)
+      element = document.documentElement;
+
+    var event;
+    if (document.createEvent) {
+      event = document.createEvent('HTMLEvents');
+      event.initEvent('dataavailable', bubble, true);
+    } else {
+      event = document.createEventObject();
+      event.eventType = bubble ? 'ondataavailable' : 'onlosecapture';
+    }
+
+    event.eventName = eventName;
+    event.memo = memo || { };
+
+    if (document.createEvent)
+      element.dispatchEvent(event);
+    else
+      element.fireEvent(event.eventType, event);
+
+    return Event.extend(event);
+  }
+
+  Event.Handler = Class.create({
+    initialize: function(element, eventName, selector, callback) {
+      this.element   = $(element);
+      this.eventName = eventName;
+      this.selector  = selector;
+      this.callback  = callback;
+      this.handler   = this.handleEvent.bind(this);
+    },
+
+    start: function() {
+      Event.observe(this.element, this.eventName, this.handler);
+      return this;
+    },
+
+    stop: function() {
+      Event.stopObserving(this.element, this.eventName, this.handler);
+      return this;
+    },
+
+    handleEvent: function(event) {
+      var element = Event.findElement(event, this.selector);
+      if (element) this.callback.call(this.element, event, element);
+    }
+  });
+
+  function on(element, eventName, selector, callback) {
+    element = $(element);
+    if (Object.isFunction(selector) && Object.isUndefined(callback)) {
+      callback = selector, selector = null;
+    }
+
+    return new Event.Handler(element, eventName, selector, callback).start();
+  }
+
+  Object.extend(Event, Event.Methods);
+
+  Object.extend(Event, {
+    fire:          fire,
+    observe:       observe,
+    stopObserving: stopObserving,
+    on:            on
+  });
+
+  Element.addMethods({
+    fire:          fire,
+
+    observe:       observe,
+
+    stopObserving: stopObserving,
+
+    on:            on
+  });
+
+  Object.extend(document, {
+    fire:          fire.methodize(),
+
+    observe:       observe.methodize(),
+
+    stopObserving: stopObserving.methodize(),
+
+    on:            on.methodize(),
+
+    loaded:        false
+  });
+
+  if (window.Event) Object.extend(window.Event, Event);
+  else window.Event = Event;
 })();
 
-Object.extend(Event, (function() {
-  var cache = Event.cache;
-
-  function getEventID(element) {
-    if (element._prototypeEventID) return element._prototypeEventID[0];
-    arguments.callee.id = arguments.callee.id || 1;
-    return element._prototypeEventID = [++arguments.callee.id];
-  }
-
-  function getDOMEventName(eventName) {
-    if (eventName && eventName.include(':')) return "dataavailable";
-    return eventName;
-  }
-
-  function getCacheForID(id) {
-    return cache[id] = cache[id] || { };
-  }
-
-  function getWrappersForEventName(id, eventName) {
-    var c = getCacheForID(id);
-    return c[eventName] = c[eventName] || [];
-  }
-
-  function createWrapper(element, eventName, handler) {
-    var id = getEventID(element);
-    var c = getWrappersForEventName(id, eventName);
-    if (c.pluck("handler").include(handler)) return false;
-
-    var wrapper = function(event) {
-      if (!Event || !Event.extend ||
-        (event.eventName && event.eventName != eventName))
-          return false;
-
-      Event.extend(event);
-      handler.call(element, event);
-    };
-
-    wrapper.handler = handler;
-    c.push(wrapper);
-    return wrapper;
-  }
-
-  function findWrapper(id, eventName, handler) {
-    var c = getWrappersForEventName(id, eventName);
-    return c.find(function(wrapper) { return wrapper.handler == handler });
-  }
-
-  function destroyWrapper(id, eventName, handler) {
-    var c = getCacheForID(id);
-    if (!c[eventName]) return false;
-    c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
-  }
-
-  function destroyCache() {
-    for (var id in cache)
-      for (var eventName in cache[id])
-        cache[id][eventName] = null;
-  }
-
-
-  // Internet Explorer needs to remove event handlers on page unload
-  // in order to avoid memory leaks.
-  if (window.attachEvent) {
-    window.attachEvent("onunload", destroyCache);
-  }
-
-  // Safari has a dummy event handler on page unload so that it won't
-  // use its bfcache. Safari <= 3.1 has an issue with restoring the "document"
-  // object when page is returned to via the back button using its bfcache.
-  if (Prototype.Browser.WebKit) {
-    window.addEventListener('unload', Prototype.emptyFunction, false);
-  }
-
-  return {
-    observe: function(element, eventName, handler) {
-      element = $(element);
-      var name = getDOMEventName(eventName);
-
-      var wrapper = createWrapper(element, eventName, handler);
-      if (!wrapper) return element;
-
-      if (element.addEventListener) {
-        element.addEventListener(name, wrapper, false);
-      } else {
-        element.attachEvent("on" + name, wrapper);
-      }
-
-      return element;
-    },
-
-    stopObserving: function(element, eventName, handler) {
-      element = $(element);
-      var id = getEventID(element), name = getDOMEventName(eventName);
-
-      if (!handler && eventName) {
-        getWrappersForEventName(id, eventName).each(function(wrapper) {
-          element.stopObserving(eventName, wrapper.handler);
-        });
-        return element;
-
-      } else if (!eventName) {
-        Object.keys(getCacheForID(id)).each(function(eventName) {
-          element.stopObserving(eventName);
-        });
-        return element;
-      }
-
-      var wrapper = findWrapper(id, eventName, handler);
-      if (!wrapper) return element;
-
-      if (element.removeEventListener) {
-        element.removeEventListener(name, wrapper, false);
-      } else {
-        element.detachEvent("on" + name, wrapper);
-      }
-
-      destroyWrapper(id, eventName, handler);
-
-      return element;
-    },
-
-    fire: function(element, eventName, memo) {
-      element = $(element);
-      if (element == document && document.createEvent && !element.dispatchEvent)
-        element = document.documentElement;
-
-      var event;
-      if (document.createEvent) {
-        event = document.createEvent("HTMLEvents");
-        event.initEvent("dataavailable", true, true);
-      } else {
-        event = document.createEventObject();
-        event.eventType = "ondataavailable";
-      }
-
-      event.eventName = eventName;
-      event.memo = memo || { };
-
-      if (document.createEvent) {
-        element.dispatchEvent(event);
-      } else {
-        element.fireEvent(event.eventType, event);
-      }
-
-      return Event.extend(event);
-    }
-  };
-})());
-
-Object.extend(Event, Event.Methods);
-
-Element.addMethods({
-  fire:          Event.fire,
-  observe:       Event.observe,
-  stopObserving: Event.stopObserving
-});
-
-Object.extend(document, {
-  fire:          Element.Methods.fire.methodize(),
-  observe:       Element.Methods.observe.methodize(),
-  stopObserving: Element.Methods.stopObserving.methodize(),
-  loaded:        false
-});
-
 (function() {
   /* Support for the DOMContentLoaded event is based on work by Dan Webb,
-     Matthias Miller, Dean Edwards and John Resig. */
+     Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */
 
   var timer;
 
   function fireContentLoadedEvent() {
     if (document.loaded) return;
-    if (timer) window.clearInterval(timer);
-    document.fire("dom:loaded");
+    if (timer) window.clearTimeout(timer);
     document.loaded = true;
+    document.fire('dom:loaded');
+  }
+
+  function checkReadyState() {
+    if (document.readyState === 'complete') {
+      document.stopObserving('readystatechange', checkReadyState);
+      fireContentLoadedEvent();
+    }
+  }
+
+  function pollDoScroll() {
+    try { document.documentElement.doScroll('left'); }
+    catch(e) {
+      timer = pollDoScroll.defer();
+      return;
+    }
+    fireContentLoadedEvent();
   }
 
   if (document.addEventListener) {
-    if (Prototype.Browser.WebKit) {
-      timer = window.setInterval(function() {
-        if (/loaded|complete/.test(document.readyState))
-          fireContentLoadedEvent();
-      }, 0);
-
-      Event.observe(window, "load", fireContentLoadedEvent);
-
-    } else {
-      document.addEventListener("DOMContentLoaded",
-        fireContentLoadedEvent, false);
-    }
-
+    document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
   } else {
-    document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
-    $("__onDOMContentLoaded").onreadystatechange = function() {
-      if (this.readyState == "complete") {
-        this.onreadystatechange = null;
-        fireContentLoadedEvent();
-      }
-    };
-  }
+    document.observe('readystatechange', checkReadyState);
+    if (window == top)
+      timer = pollDoScroll.defer();
+  }
+
+  Event.observe(window, 'load', fireContentLoadedEvent);
 })();
+
+Element.addMethods();
+
 /*------------------------------- DEPRECATED -------------------------------*/
 
 Hash.toQueryString = Object.toQueryString;
@@ -4158,16 +5877,9 @@
 
 var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
 
-// This should be moved to script.aculo.us; notice the deprecated methods
-// further below, that map to the newer Element methods.
 var Position = {
-  // set to true if needed, warning: firefox performance problems
-  // NOT neeeded for page scrolling, only if draggable contained in
-  // scrollable elements
   includeScrollOffsets: false,
 
-  // must be called before calling withinIncludingScrolloffset, every time the
-  // page is scrolled
   prepare: function() {
     this.deltaX =  window.pageXOffset
                 || document.documentElement.scrollLeft
@@ -4179,7 +5891,6 @@
                 || 0;
   },
 
-  // caches x/y coordinate pair to use with overlap
   within: function(element, x, y) {
     if (this.includeScrollOffsets)
       return this.withinIncludingScrolloffsets(element, x, y);
@@ -4206,7 +5917,6 @@
             this.xcomp <  this.offset[0] + element.offsetWidth);
   },
 
-  // within must be called directly before
   overlap: function(mode, element) {
     if (!mode) return 0;
     if (mode == 'vertical')
@@ -4217,7 +5927,6 @@
         element.offsetWidth;
   },
 
-  // Deprecation layer -- use newer Element methods now (1.5.2).
 
   cumulativeOffset: Element.Methods.cumulativeOffset,
 
@@ -4317,4 +6026,57 @@
 
 /*--------------------------------------------------------------------------*/
 
-Element.addMethods();
\ No newline at end of file
+(function() {
+  window.Selector = Class.create({
+    initialize: function(expression) {
+      this.expression = expression.strip();
+    },
+
+    findElements: function(rootElement) {
+      return Prototype.Selector.select(this.expression, rootElement);
+    },
+
+    match: function(element) {
+      return Prototype.Selector.match(element, this.expression);
+    },
+
+    toString: function() {
+      return this.expression;
+    },
+
+    inspect: function() {
+      return "#<Selector: " + this.expression + ">";
+    }
+  });
+
+  Object.extend(Selector, {
+    matchElements: function(elements, expression) {
+      var match = Prototype.Selector.match,
+          results = [];
+
+      for (var i = 0, length = elements.length; i < length; i++) {
+        var element = elements[i];
+        if (match(element, expression)) {
+          results.push(Element.extend(element));
+        }
+      }
+      return results;
+    },
+
+    findElement: function(elements, expression, index) {
+      index = index || 0;
+      var matchIndex = 0, element;
+      for (var i = 0, length = elements.length; i < length; i++) {
+        element = elements[i];
+        if (Prototype.Selector.match(element, expression) && index === matchIndex++) {
+          return Element.extend(element);
+        }
+      }
+    },
+
+    findChildElements: function(element, expressions) {
+      var selector = expressions.toArray().join(', ');
+      return Prototype.Selector.select(selector, element || document);
+    }
+  });
+})();
--- a/public/javascripts/application.js	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/javascripts/application.js	Mon Jun 06 14:41:04 2011 +0100
@@ -40,6 +40,37 @@
 	}
 }
 
+function collapseAllRowGroups(el) {
+  var tbody = Element.up(el, 'tbody');
+  tbody.childElements('tr').each(function(tr) {
+    if (tr.hasClassName('group')) {
+      tr.removeClassName('open');
+    } else {
+      tr.hide();
+    }
+  })
+}
+
+function expandAllRowGroups(el) {
+  var tbody = Element.up(el, 'tbody');
+  tbody.childElements('tr').each(function(tr) {
+    if (tr.hasClassName('group')) {
+      tr.addClassName('open');
+    } else {
+      tr.show();
+    }
+  })
+}
+
+function toggleAllRowGroups(el) {
+	var tr = Element.up(el, 'tr');
+  if (tr.hasClassName('open')) {
+    collapseAllRowGroups(el);
+  } else {
+    expandAllRowGroups(el);
+  }
+}
+
 function toggleFieldset(el) {
 	var fieldset = Element.up(el, 'fieldset');
 	fieldset.toggleClassName('collapsed');
@@ -299,9 +330,27 @@
 	}
 });
 
-/* shows and hides ajax indicator */
+/* 
+ * 1 - registers a callback which copies the csrf token into the
+ * X-CSRF-Token header with each ajax request.  Necessary to 
+ * work with rails applications which have fixed
+ * CVE-2011-0447
+ * 2 - shows and hides ajax indicator
+ */
 Ajax.Responders.register({
-    onCreate: function(){
+    onCreate: function(request){
+        var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
+
+        if (csrf_meta_tag) {
+            var header = 'X-CSRF-Token',
+                token = csrf_meta_tag.readAttribute('content');
+
+            if (!request.options.requestHeaders) {
+              request.options.requestHeaders = {};
+            }
+            request.options.requestHeaders[header] = token;
+          }
+
         if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
             Element.show('ajax-indicator');
         }
--- a/public/javascripts/calendar/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4903/trunk/public/javascripts/calendar
-END
-calendar-setup.js
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/3252/trunk/public/javascripts/calendar/calendar-setup.js
-END
-calendar.js
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/3822/trunk/public/javascripts/calendar/calendar.js
-END
--- a/public/javascripts/calendar/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/javascripts/calendar/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/javascripts/calendar
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/javascripts/calendar
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 e9be087e31b69f1e6a29ebd09b878486
 2009-12-26T17:17:16.012737Z
 3252
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 a2dccec0bd70984b17a54239caf0d5e0
 2010-06-30T02:54:15.730933Z
 3822
--- a/public/javascripts/calendar/lang/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,263 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4903/trunk/public/javascripts/calendar/lang
-END
-calendar-fi.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/1186/trunk/public/javascripts/calendar/lang/calendar-fi.js
-END
-calendar-bs.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/2629/trunk/public/javascripts/calendar/lang/calendar-bs.js
-END
-calendar-cs.js
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/764/trunk/public/javascripts/calendar/lang/calendar-cs.js
-END
-calendar-mk.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/4049/trunk/public/javascripts/calendar/lang/calendar-mk.js
-END
-calendar-es.js
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/419/trunk/public/javascripts/calendar/lang/calendar-es.js
-END
-calendar-ko.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/2182/trunk/public/javascripts/calendar/lang/calendar-ko.js
-END
-calendar-eu.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/3338/trunk/public/javascripts/calendar/lang/calendar-eu.js
-END
-calendar-no.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/1300/trunk/public/javascripts/calendar/lang/calendar-no.js
-END
-calendar-hu.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/1452/trunk/public/javascripts/calendar/lang/calendar-hu.js
-END
-calendar-sk.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/1998/trunk/public/javascripts/calendar/lang/calendar-sk.js
-END
-calendar-vi.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/2493/trunk/public/javascripts/calendar/lang/calendar-vi.js
-END
-calendar-sr-yu.js
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/4003/trunk/public/javascripts/calendar/lang/calendar-sr-yu.js
-END
-calendar-uk.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/1149/trunk/public/javascripts/calendar/lang/calendar-uk.js
-END
-calendar-ro.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/2630/trunk/public/javascripts/calendar/lang/calendar-ro.js
-END
-calendar-ru.js
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/907/trunk/public/javascripts/calendar/lang/calendar-ru.js
-END
-calendar-id.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/3227/trunk/public/javascripts/calendar/lang/calendar-id.js
-END
-calendar-en.js
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/419/trunk/public/javascripts/calendar/lang/calendar-en.js
-END
-calendar-gl.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/2296/trunk/public/javascripts/calendar/lang/calendar-gl.js
-END
-calendar-fr.js
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/748/trunk/public/javascripts/calendar/lang/calendar-fr.js
-END
-calendar-nl.js
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/539/trunk/public/javascripts/calendar/lang/calendar-nl.js
-END
-calendar-hr.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/3320/trunk/public/javascripts/calendar/lang/calendar-hr.js
-END
-calendar-zh-tw.js
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/1498/trunk/public/javascripts/calendar/lang/calendar-zh-tw.js
-END
-calendar-mn.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/3626/trunk/public/javascripts/calendar/lang/calendar-mn.js
-END
-calendar-pl.js
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/749/trunk/public/javascripts/calendar/lang/calendar-pl.js
-END
-calendar-th.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/1383/trunk/public/javascripts/calendar/lang/calendar-th.js
-END
-calendar-it.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/4003/trunk/public/javascripts/calendar/lang/calendar-it.js
-END
-calendar-sl.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/2340/trunk/public/javascripts/calendar/lang/calendar-sl.js
-END
-calendar-lt.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/1149/trunk/public/javascripts/calendar/lang/calendar-lt.js
-END
-calendar-lv.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/3737/trunk/public/javascripts/calendar/lang/calendar-lv.js
-END
-calendar-zh.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/1498/trunk/public/javascripts/calendar/lang/calendar-zh.js
-END
-calendar-pt.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/1927/trunk/public/javascripts/calendar/lang/calendar-pt.js
-END
-calendar-ca.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/4060/trunk/public/javascripts/calendar/lang/calendar-ca.js
-END
-calendar-pt-br.js
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/1453/trunk/public/javascripts/calendar/lang/calendar-pt-br.js
-END
-calendar-da.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/2292/trunk/public/javascripts/calendar/lang/calendar-da.js
-END
-calendar-sr.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/4003/trunk/public/javascripts/calendar/lang/calendar-sr.js
-END
-calendar-tr.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/1817/trunk/public/javascripts/calendar/lang/calendar-tr.js
-END
-calendar-fa.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/4903/trunk/public/javascripts/calendar/lang/calendar-fa.js
-END
-calendar-bg.js
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/502/trunk/public/javascripts/calendar/lang/calendar-bg.js
-END
-calendar-de.js
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/419/trunk/public/javascripts/calendar/lang/calendar-de.js
-END
-calendar-en-gb.js
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/3809/trunk/public/javascripts/calendar/lang/calendar-en-gb.js
-END
-calendar-sv.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/2290/trunk/public/javascripts/calendar/lang/calendar-sv.js
-END
-calendar-ja.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/1051/trunk/public/javascripts/calendar/lang/calendar-ja.js
-END
-calendar-he.js
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/1478/trunk/public/javascripts/calendar/lang/calendar-he.js
-END
--- a/public/javascripts/calendar/lang/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/javascripts/calendar/lang/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/javascripts/calendar/lang
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/javascripts/calendar/lang
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 d89a932075b18af4121f1941175d33d6
 2008-03-05T08:54:26.865464Z
 1186
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 1f10556f12619006e5cd99bf0e5061cc
 2009-03-24T19:16:02.676125Z
 2629
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 071917d0ae794b3cb057a0b354cd5105
 2007-09-25T16:37:51.755262Z
 764
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 1044fe45dceaa0d72c32aca5c86eea4a
 2010-08-29T12:54:04.302020Z
 4049
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 5728a3665edb05faed6661f0f77c6eab
 2007-04-04T18:20:45.423396Z
 419
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 42ef87b559c68d2db63b109f3cb3f3ed
 2008-12-24T15:48:59.830167Z
 2182
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 3f9bda99497d5c8342d87b4ec6aa44ba
 2010-01-25T15:25:46.560119Z
 3338
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 4ae334472d40209252da8c69f07eabd5
 2008-03-27T19:27:40.125888Z
 1300
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 3c66093b97b7d0bb66f04dbc0be4afb3
 2008-05-25T12:18:49.439996Z
 1452
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c161d1507fbd65ebddd7ada7c495eb89
 2008-11-09T00:29:20.731069Z
 1998
@@ -372,7 +372,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 a85bbd596ff7e03e9434a286edd134fd
 2009-02-21T11:04:50.579477Z
 2493
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c48be791f5e8d236624752ce05cd3ed7
 2010-08-19T15:41:09.090282Z
 4003
@@ -440,7 +440,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 46811ee79796d2345bea2308475d1ec9
 2008-02-15T17:47:19.829750Z
 1149
@@ -474,7 +474,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 7e96487f7e089a48bd61d5e6e8785fe1
 2009-03-24T19:20:53.296475Z
 2630
@@ -508,7 +508,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 8555f3d813ca70ecbd2aaecae826549f
 2007-11-16T21:24:22.091853Z
 907
@@ -542,7 +542,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 f5a05a0d27c2d22fa8a7bf16be345250
 2009-12-23T18:56:03.404741Z
 3227
@@ -576,7 +576,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 46811ee79796d2345bea2308475d1ec9
 2007-04-04T18:20:45.423396Z
 419
@@ -610,7 +610,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c4f74e36f6a3debcf8ec065bc6886f04
 2009-01-23T15:37:59.406714Z
 2296
@@ -644,7 +644,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 0bfaa3ec0b265f9d5a815d9b9b348c96
 2007-09-22T14:12:44.830265Z
 748
@@ -678,7 +678,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c029bd9c4867bb39e86d1d6efada6d58
 2007-05-24T17:29:11.682821Z
 539
@@ -712,7 +712,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 f8d0daa275cf612206c43d4c9be95d08
 2010-01-17T10:33:30.937961Z
 3320
@@ -746,7 +746,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 0bed4c9c046772a12267b4118bf1504a
 2008-06-07T09:03:20.687527Z
 1498
@@ -780,7 +780,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 307341352eee53b3ccd1fbec2a4b27f7
 2010-04-03T10:49:16.109274Z
 3626
@@ -814,7 +814,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 eabf711c28d30bb9474f3f505766f286
 2007-09-22T14:56:09.057923Z
 749
@@ -848,7 +848,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c8c19e66c3e1099c3e0ecae6462f68da
 2008-04-30T08:47:14.770680Z
 1383
@@ -882,7 +882,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 d637b0156da2601e000e16f1ac178768
 2010-08-19T15:41:09.090282Z
 4003
@@ -916,7 +916,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 cbf1a5c6b271835c701031aacaeaa271
 2009-01-31T12:02:37.933490Z
 2340
@@ -950,7 +950,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 33bc41a153fc6fb2aa53069fb0f647d6
 2008-02-15T17:47:19.829750Z
 1149
@@ -984,7 +984,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 b260d88c13c01ebf4e7c94b9cb022930
 2010-05-14T18:15:41.754813Z
 3737
@@ -1018,7 +1018,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 02222471f3e701ac1223096737fa5705
 2008-06-07T09:03:20.687527Z
 1498
@@ -1052,7 +1052,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 2756627844089652700c203ee91ec6f3
 2010-09-05T11:33:08.614151Z
 4060
@@ -1086,7 +1086,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 67f2807b1ee731af4fe16f358a8d9096
 2008-10-06T15:00:56.914741Z
 1927
@@ -1120,7 +1120,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c684331ae98de9a0e03db4de8f985e44
 2008-05-25T12:42:56.738934Z
 1453
@@ -1154,7 +1154,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 0d732eaa10604b943c7d600a15c8a651
 2009-01-20T16:09:07.993954Z
 2292
@@ -1188,7 +1188,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 a26f883ac70499ee0409af2c08156a84
 2010-08-19T15:41:09.090282Z
 4003
@@ -1222,7 +1222,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 8cb3dced137544295b39ef836028433e
 2008-09-13T17:25:01.876743Z
 1817
@@ -1256,7 +1256,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 79e745b797f9148ac63de8ce583e2282
 2011-02-21T10:08:59.720731Z
 4903
@@ -1290,7 +1290,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 df1a74fadb5ce5b1cc53aa70034f578b
 2007-05-02T19:36:00.768529Z
 502
@@ -1324,7 +1324,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 d508459192a856b332d75de94c8d5c6c
 2007-04-04T18:20:45.423396Z
 419
@@ -1358,7 +1358,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 66418d047f243e10172798af0fb4d927
 2010-06-21T19:54:55.180393Z
 3809
@@ -1392,7 +1392,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 7dc0f35efebbe8b0d078d2c847b43b7c
 2009-01-20T15:45:34.332677Z
 2290
@@ -1426,7 +1426,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 eb66ba69ac2233b24fe200060ec67ab7
 2008-01-10T18:34:14.889747Z
 1051
@@ -1460,7 +1460,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 0c77d7dafe8031971e69a7a57b3dc93e
 2008-05-30T15:34:53.673854Z
 1478
--- a/public/javascripts/context_menu.js	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/javascripts/context_menu.js	Mon Jun 06 14:41:04 2011 +0100
@@ -36,7 +36,7 @@
 
   Click: function(e) {
   	this.hideMenu();
-  	if (Event.element(e).tagName == 'A') { return; }
+  	if (Event.element(e).tagName == 'A' || Event.element(e).tagName == 'IMG') { return; }
     if (Event.isLeftClick(e) || (navigator.appVersion.match(/\bMSIE\b/))) {      
       var tr = Event.findElement(e, 'tr');
       if (tr!=null && tr!=document && tr.hasClassName('hascontextmenu')) {
@@ -50,7 +50,7 @@
             tr.removeClassName('context-menu-selection');
           }
         } else {
-          if (e.ctrlKey) {
+          if (e.ctrlKey || e.metaKey) {
             this.toggleSelection(tr);
           } else if (e.shiftKey) {
             if (this.lastSelected != null) {
--- a/public/javascripts/jstoolbar/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4903/trunk/public/javascripts/jstoolbar
-END
-textile.js
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/1955/trunk/public/javascripts/jstoolbar/textile.js
-END
-jstoolbar.js
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/1955/trunk/public/javascripts/jstoolbar/jstoolbar.js
-END
--- a/public/javascripts/jstoolbar/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/javascripts/jstoolbar/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/javascripts/jstoolbar
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/javascripts/jstoolbar
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 277ebc7c66d8c8280bbe729e6cb11529
 2008-10-27T11:08:29.901011Z
 1955
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 2b77f98553b6d5e0d4c405195eebe664
 2008-10-27T11:08:29.901011Z
 1955
--- a/public/javascripts/jstoolbar/lang/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,263 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4903/trunk/public/javascripts/jstoolbar/lang
-END
-jstoolbar-mk.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/4049/trunk/public/javascripts/jstoolbar/lang/jstoolbar-mk.js
-END
-jstoolbar-es.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2033/trunk/public/javascripts/jstoolbar/lang/jstoolbar-es.js
-END
-jstoolbar-ko.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2202/trunk/public/javascripts/jstoolbar/lang/jstoolbar-ko.js
-END
-jstoolbar-eu.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/3338/trunk/public/javascripts/jstoolbar/lang/jstoolbar-eu.js
-END
-jstoolbar-no.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1540/trunk/public/javascripts/jstoolbar/lang/jstoolbar-no.js
-END
-jstoolbar-hu.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-hu.js
-END
-jstoolbar-sk.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1997/trunk/public/javascripts/jstoolbar/lang/jstoolbar-sk.js
-END
-jstoolbar-vi.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2493/trunk/public/javascripts/jstoolbar/lang/jstoolbar-vi.js
-END
-jstoolbar-sr-yu.js
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/4003/trunk/public/javascripts/jstoolbar/lang/jstoolbar-sr-yu.js
-END
-jstoolbar-uk.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-uk.js
-END
-jstoolbar-ro.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2630/trunk/public/javascripts/jstoolbar/lang/jstoolbar-ro.js
-END
-jstoolbar-ru.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2901/trunk/public/javascripts/jstoolbar/lang/jstoolbar-ru.js
-END
-jstoolbar-id.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/3227/trunk/public/javascripts/jstoolbar/lang/jstoolbar-id.js
-END
-jstoolbar-en.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-en.js
-END
-jstoolbar-gl.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2296/trunk/public/javascripts/jstoolbar/lang/jstoolbar-gl.js
-END
-jstoolbar-fr.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-fr.js
-END
-jstoolbar-nl.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2291/trunk/public/javascripts/jstoolbar/lang/jstoolbar-nl.js
-END
-jstoolbar-hr.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/3320/trunk/public/javascripts/jstoolbar/lang/jstoolbar-hr.js
-END
-jstoolbar-zh-tw.js
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/1498/trunk/public/javascripts/jstoolbar/lang/jstoolbar-zh-tw.js
-END
-jstoolbar-mn.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/3626/trunk/public/javascripts/jstoolbar/lang/jstoolbar-mn.js
-END
-jstoolbar-pl.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1928/trunk/public/javascripts/jstoolbar/lang/jstoolbar-pl.js
-END
-jstoolbar-th.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-th.js
-END
-jstoolbar-it.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/4003/trunk/public/javascripts/jstoolbar/lang/jstoolbar-it.js
-END
-jstoolbar-sl.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2340/trunk/public/javascripts/jstoolbar/lang/jstoolbar-sl.js
-END
-jstoolbar-lt.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-lt.js
-END
-jstoolbar-lv.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/3737/trunk/public/javascripts/jstoolbar/lang/jstoolbar-lv.js
-END
-jstoolbar-zh.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1498/trunk/public/javascripts/jstoolbar/lang/jstoolbar-zh.js
-END
-jstoolbar-pt.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1927/trunk/public/javascripts/jstoolbar/lang/jstoolbar-pt.js
-END
-jstoolbar-ca.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1865/trunk/public/javascripts/jstoolbar/lang/jstoolbar-ca.js
-END
-jstoolbar-pt-br.js
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-pt-br.js
-END
-jstoolbar-da.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2921/trunk/public/javascripts/jstoolbar/lang/jstoolbar-da.js
-END
-jstoolbar-sr.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/4003/trunk/public/javascripts/jstoolbar/lang/jstoolbar-sr.js
-END
-jstoolbar-tr.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1817/trunk/public/javascripts/jstoolbar/lang/jstoolbar-tr.js
-END
-jstoolbar-fa.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/4903/trunk/public/javascripts/jstoolbar/lang/jstoolbar-fa.js
-END
-jstoolbar-bg.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-bg.js
-END
-jstoolbar-de.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-de.js
-END
-jstoolbar-en-gb.js
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/3809/trunk/public/javascripts/jstoolbar/lang/jstoolbar-en-gb.js
-END
-jstoolbar-sv.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2298/trunk/public/javascripts/jstoolbar/lang/jstoolbar-sv.js
-END
-jstoolbar-ja.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2901/trunk/public/javascripts/jstoolbar/lang/jstoolbar-ja.js
-END
-jstoolbar-he.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-he.js
-END
-jstoolbar-fi.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-fi.js
-END
-jstoolbar-bs.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/2629/trunk/public/javascripts/jstoolbar/lang/jstoolbar-bs.js
-END
-jstoolbar-cs.js
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-cs.js
-END
--- a/public/javascripts/jstoolbar/lang/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/javascripts/jstoolbar/lang/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/javascripts/jstoolbar/lang
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/javascripts/jstoolbar/lang
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 318952e82ec967a5474a8b8464b66c63
 2010-08-29T12:54:04.302020Z
 4049
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 21ca3fea9a77d127edb7d2e95b33b8f8
 2008-11-14T15:18:13.107466Z
 2033
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 7cbd6179e32e9b8ec12a884c820565ca
 2008-12-29T18:27:27.433290Z
 2202
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 73ba5f511744c07325bc0eae3dce14e6
 2010-01-25T15:25:46.560119Z
 3338
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 b1cfe765b72f2d904756bf60307c97b7
 2008-06-15T09:49:16.794942Z
 1540
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 83762b06ef0b9a9756f858357bf11361
 2008-05-30T16:35:36.510811Z
 1479
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 b27b3e83de7c68c7752703799c0a4cda
 2008-11-08T22:34:41.558925Z
 1997
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 06a6efe1fa0092d534f1cc403529670b
 2009-02-21T11:04:50.579477Z
 2493
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 bf8f49f26dc22319ff3da721c261c593
 2010-08-19T15:41:09.090282Z
 4003
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c49e65f5c02ababbaa0c9a9968424950
 2008-05-30T16:35:36.510811Z
 1479
@@ -372,7 +372,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 de3d5c4af91e93505e939ccb1ef6b27a
 2009-03-24T19:20:53.296475Z
 2630
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 9f461eb7e9ab4460155983bd005c3237
 2009-09-24T15:03:23.893264Z
 2901
@@ -440,7 +440,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 fd6a3f960f0d6e1ce7e6466d592453fe
 2009-12-23T18:56:03.404741Z
 3227
@@ -474,7 +474,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c49e65f5c02ababbaa0c9a9968424950
 2008-05-30T16:35:36.510811Z
 1479
@@ -508,7 +508,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 1114856226e757ddfb08a99ab1cac3eb
 2009-01-23T15:37:59.406714Z
 2296
@@ -542,7 +542,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 9b432fe2e801ed76abf312a10c643fb8
 2008-05-30T16:35:36.510811Z
 1479
@@ -576,7 +576,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 b1bc7a04b7b466073845dd2c81bbbf23
 2009-01-20T15:53:09.750096Z
 2291
@@ -610,7 +610,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 f13f0553753c4b53bd96c294ca6ce15e
 2010-01-17T10:33:30.937961Z
 3320
@@ -644,7 +644,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 be45a6e710f3a07e9fab41d795a64030
 2008-06-07T09:03:20.687527Z
 1498
@@ -678,7 +678,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 e7df0709db363c802a6a5a4913520ac5
 2010-04-03T10:49:16.109274Z
 3626
@@ -712,7 +712,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 1d2b7d7c66953806ca428f91a95d2eaa
 2008-10-07T17:41:16.515762Z
 1928
@@ -746,7 +746,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 3f844a6495d4eebb122b5c7b21696282
 2008-05-30T16:35:36.510811Z
 1479
@@ -780,7 +780,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c7198fe4acf23cf7df996603e68b492b
 2010-08-19T15:41:09.090282Z
 4003
@@ -814,7 +814,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 a85f4ab1ed887a855f03c2cc8efb0107
 2009-01-31T12:02:37.933490Z
 2340
@@ -848,7 +848,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 1fbcdee2a48a3d359fd766880b9b606f
 2008-05-30T16:35:36.510811Z
 1479
@@ -882,7 +882,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 5a44b7a9bd5b7db86d0a7398ee5bc779
 2010-05-14T18:15:41.754813Z
 3737
@@ -916,7 +916,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 fa9b7d27a231a3c85c1a4632f2563ac4
 2008-06-07T09:03:20.687527Z
 1498
@@ -950,7 +950,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 2479961837e503c00632ff7e6997b10d
 2008-10-06T15:00:56.914741Z
 1927
@@ -984,7 +984,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 6aacb53ed49e6e14831baf8c38096662
 2008-09-15T16:07:30.857601Z
 1865
@@ -1018,7 +1018,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 4061b38de5e085dac922f77f94bd254a
 2009-10-11T09:24:45.635758Z
 2921
@@ -1052,7 +1052,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 fb00cc94dfc8f319dda707b957aae8a6
 2010-08-19T15:41:09.090282Z
 4003
@@ -1086,7 +1086,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 37aed8a5fce8e7f2030ac37e3d635068
 2008-05-30T16:35:36.510811Z
 1479
@@ -1120,7 +1120,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c7333a1fd77fe1f7db31810175f8fe8f
 2008-09-13T17:25:01.876743Z
 1817
@@ -1154,7 +1154,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 5fde8ac79f7084911ce37f5cdad2052e
 2011-02-21T10:08:59.720731Z
 4903
@@ -1188,7 +1188,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c49e65f5c02ababbaa0c9a9968424950
 2008-05-30T16:35:36.510811Z
 1479
@@ -1222,7 +1222,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 7c5edef659f90a30330909bc13b0d6fb
 2008-05-30T16:35:36.510811Z
 1479
@@ -1256,7 +1256,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c49e65f5c02ababbaa0c9a9968424950
 2010-06-21T19:54:55.180393Z
 3809
@@ -1290,7 +1290,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 7ec48cf15b3d65b2a0994b50b033b4b8
 2009-01-23T15:46:22.446544Z
 2298
@@ -1324,7 +1324,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 06245b4053c38d6bf3ae61d1bf4c7587
 2009-09-24T15:03:23.893264Z
 2901
@@ -1358,7 +1358,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c49e65f5c02ababbaa0c9a9968424950
 2008-05-30T16:35:36.510811Z
 1479
@@ -1392,7 +1392,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 0377fba91478a1df25844aa70609e204
 2008-05-30T16:35:36.510811Z
 1479
@@ -1426,7 +1426,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 da8e9ced2ea20fedc7bb3204082fc68a
 2009-03-24T19:16:02.676125Z
 2629
@@ -1460,7 +1460,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 8394af79dae7854d27ccdb8b72c3262c
 2008-05-30T16:35:36.510811Z
 1479
--- a/public/javascripts/prototype.js	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/javascripts/prototype.js	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-/*  Prototype JavaScript framework, version 1.6.0.3
- *  (c) 2005-2008 Sam Stephenson
+/*  Prototype JavaScript framework, version 1.7
+ *  (c) 2005-2010 Sam Stephenson
  *
  *  Prototype is freely distributable under the terms of an MIT-style license.
  *  For details, see the Prototype web site: http://www.prototypejs.org/
@@ -7,32 +7,53 @@
  *--------------------------------------------------------------------------*/
 
 var Prototype = {
-  Version: '1.6.0.3',
-
-  Browser: {
-    IE:     !!(window.attachEvent &&
-      navigator.userAgent.indexOf('Opera') === -1),
-    Opera:  navigator.userAgent.indexOf('Opera') > -1,
-    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
-    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 &&
-      navigator.userAgent.indexOf('KHTML') === -1,
-    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
-  },
+
+  Version: '1.7',
+
+  Browser: (function(){
+    var ua = navigator.userAgent;
+    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
+    return {
+      IE:             !!window.attachEvent && !isOpera,
+      Opera:          isOpera,
+      WebKit:         ua.indexOf('AppleWebKit/') > -1,
+      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
+      MobileSafari:   /Apple.*Mobile/.test(ua)
+    }
+  })(),
 
   BrowserFeatures: {
     XPath: !!document.evaluate,
+
     SelectorsAPI: !!document.querySelector,
-    ElementExtensions: !!window.HTMLElement,
-    SpecificElementExtensions:
-      document.createElement('div')['__proto__'] &&
-      document.createElement('div')['__proto__'] !==
-        document.createElement('form')['__proto__']
+
+    ElementExtensions: (function() {
+      var constructor = window.Element || window.HTMLElement;
+      return !!(constructor && constructor.prototype);
+    })(),
+    SpecificElementExtensions: (function() {
+      if (typeof window.HTMLDivElement !== 'undefined')
+        return true;
+
+      var div = document.createElement('div'),
+          form = document.createElement('form'),
+          isSupported = false;
+
+      if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
+        isSupported = true;
+      }
+
+      div = form = null;
+
+      return isSupported;
+    })()
   },
 
   ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
   JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
 
   emptyFunction: function() { },
+
   K: function(x) { return x }
 };
 
@@ -40,232 +61,8 @@
   Prototype.BrowserFeatures.SpecificElementExtensions = false;
 
 
-/* Based on Alex Arnell's inheritance implementation. */
-var Class = {
-  create: function() {
-    var parent = null, properties = $A(arguments);
-    if (Object.isFunction(properties[0]))
-      parent = properties.shift();
-
-    function klass() {
-      this.initialize.apply(this, arguments);
-    }
-
-    Object.extend(klass, Class.Methods);
-    klass.superclass = parent;
-    klass.subclasses = [];
-
-    if (parent) {
-      var subclass = function() { };
-      subclass.prototype = parent.prototype;
-      klass.prototype = new subclass;
-      parent.subclasses.push(klass);
-    }
-
-    for (var i = 0; i < properties.length; i++)
-      klass.addMethods(properties[i]);
-
-    if (!klass.prototype.initialize)
-      klass.prototype.initialize = Prototype.emptyFunction;
-
-    klass.prototype.constructor = klass;
-
-    return klass;
-  }
-};
-
-Class.Methods = {
-  addMethods: function(source) {
-    var ancestor   = this.superclass && this.superclass.prototype;
-    var properties = Object.keys(source);
-
-    if (!Object.keys({ toString: true }).length)
-      properties.push("toString", "valueOf");
-
-    for (var i = 0, length = properties.length; i < length; i++) {
-      var property = properties[i], value = source[property];
-      if (ancestor && Object.isFunction(value) &&
-          value.argumentNames().first() == "$super") {
-        var method = value;
-        value = (function(m) {
-          return function() { return ancestor[m].apply(this, arguments) };
-        })(property).wrap(method);
-
-        value.valueOf = method.valueOf.bind(method);
-        value.toString = method.toString.bind(method);
-      }
-      this.prototype[property] = value;
-    }
-
-    return this;
-  }
-};
-
 var Abstract = { };
 
-Object.extend = function(destination, source) {
-  for (var property in source)
-    destination[property] = source[property];
-  return destination;
-};
-
-Object.extend(Object, {
-  inspect: function(object) {
-    try {
-      if (Object.isUndefined(object)) return 'undefined';
-      if (object === null) return 'null';
-      return object.inspect ? object.inspect() : String(object);
-    } catch (e) {
-      if (e instanceof RangeError) return '...';
-      throw e;
-    }
-  },
-
-  toJSON: function(object) {
-    var type = typeof object;
-    switch (type) {
-      case 'undefined':
-      case 'function':
-      case 'unknown': return;
-      case 'boolean': return object.toString();
-    }
-
-    if (object === null) return 'null';
-    if (object.toJSON) return object.toJSON();
-    if (Object.isElement(object)) return;
-
-    var results = [];
-    for (var property in object) {
-      var value = Object.toJSON(object[property]);
-      if (!Object.isUndefined(value))
-        results.push(property.toJSON() + ': ' + value);
-    }
-
-    return '{' + results.join(', ') + '}';
-  },
-
-  toQueryString: function(object) {
-    return $H(object).toQueryString();
-  },
-
-  toHTML: function(object) {
-    return object && object.toHTML ? object.toHTML() : String.interpret(object);
-  },
-
-  keys: function(object) {
-    var keys = [];
-    for (var property in object)
-      keys.push(property);
-    return keys;
-  },
-
-  values: function(object) {
-    var values = [];
-    for (var property in object)
-      values.push(object[property]);
-    return values;
-  },
-
-  clone: function(object) {
-    return Object.extend({ }, object);
-  },
-
-  isElement: function(object) {
-    return !!(object && object.nodeType == 1);
-  },
-
-  isArray: function(object) {
-    return object != null && typeof object == "object" &&
-      'splice' in object && 'join' in object;
-  },
-
-  isHash: function(object) {
-    return object instanceof Hash;
-  },
-
-  isFunction: function(object) {
-    return typeof object == "function";
-  },
-
-  isString: function(object) {
-    return typeof object == "string";
-  },
-
-  isNumber: function(object) {
-    return typeof object == "number";
-  },
-
-  isUndefined: function(object) {
-    return typeof object == "undefined";
-  }
-});
-
-Object.extend(Function.prototype, {
-  argumentNames: function() {
-    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1]
-      .replace(/\s+/g, '').split(',');
-    return names.length == 1 && !names[0] ? [] : names;
-  },
-
-  bind: function() {
-    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
-    var __method = this, args = $A(arguments), object = args.shift();
-    return function() {
-      return __method.apply(object, args.concat($A(arguments)));
-    }
-  },
-
-  bindAsEventListener: function() {
-    var __method = this, args = $A(arguments), object = args.shift();
-    return function(event) {
-      return __method.apply(object, [event || window.event].concat(args));
-    }
-  },
-
-  curry: function() {
-    if (!arguments.length) return this;
-    var __method = this, args = $A(arguments);
-    return function() {
-      return __method.apply(this, args.concat($A(arguments)));
-    }
-  },
-
-  delay: function() {
-    var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
-    return window.setTimeout(function() {
-      return __method.apply(__method, args);
-    }, timeout);
-  },
-
-  defer: function() {
-    var args = [0.01].concat($A(arguments));
-    return this.delay.apply(this, args);
-  },
-
-  wrap: function(wrapper) {
-    var __method = this;
-    return function() {
-      return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
-    }
-  },
-
-  methodize: function() {
-    if (this._methodized) return this._methodized;
-    var __method = this;
-    return this._methodized = function() {
-      return __method.apply(null, [this].concat($A(arguments)));
-    };
-  }
-});
-
-Date.prototype.toJSON = function() {
-  return '"' + this.getUTCFullYear() + '-' +
-    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
-    this.getUTCDate().toPaddedString(2) + 'T' +
-    this.getUTCHours().toPaddedString(2) + ':' +
-    this.getUTCMinutes().toPaddedString(2) + ':' +
-    this.getUTCSeconds().toPaddedString(2) + 'Z"';
-};
 
 var Try = {
   these: function() {
@@ -283,14 +80,407 @@
   }
 };
 
+/* Based on Alex Arnell's inheritance implementation. */
+
+var Class = (function() {
+
+  var IS_DONTENUM_BUGGY = (function(){
+    for (var p in { toString: 1 }) {
+      if (p === 'toString') return false;
+    }
+    return true;
+  })();
+
+  function subclass() {};
+  function create() {
+    var parent = null, properties = $A(arguments);
+    if (Object.isFunction(properties[0]))
+      parent = properties.shift();
+
+    function klass() {
+      this.initialize.apply(this, arguments);
+    }
+
+    Object.extend(klass, Class.Methods);
+    klass.superclass = parent;
+    klass.subclasses = [];
+
+    if (parent) {
+      subclass.prototype = parent.prototype;
+      klass.prototype = new subclass;
+      parent.subclasses.push(klass);
+    }
+
+    for (var i = 0, length = properties.length; i < length; i++)
+      klass.addMethods(properties[i]);
+
+    if (!klass.prototype.initialize)
+      klass.prototype.initialize = Prototype.emptyFunction;
+
+    klass.prototype.constructor = klass;
+    return klass;
+  }
+
+  function addMethods(source) {
+    var ancestor   = this.superclass && this.superclass.prototype,
+        properties = Object.keys(source);
+
+    if (IS_DONTENUM_BUGGY) {
+      if (source.toString != Object.prototype.toString)
+        properties.push("toString");
+      if (source.valueOf != Object.prototype.valueOf)
+        properties.push("valueOf");
+    }
+
+    for (var i = 0, length = properties.length; i < length; i++) {
+      var property = properties[i], value = source[property];
+      if (ancestor && Object.isFunction(value) &&
+          value.argumentNames()[0] == "$super") {
+        var method = value;
+        value = (function(m) {
+          return function() { return ancestor[m].apply(this, arguments); };
+        })(property).wrap(method);
+
+        value.valueOf = method.valueOf.bind(method);
+        value.toString = method.toString.bind(method);
+      }
+      this.prototype[property] = value;
+    }
+
+    return this;
+  }
+
+  return {
+    create: create,
+    Methods: {
+      addMethods: addMethods
+    }
+  };
+})();
+(function() {
+
+  var _toString = Object.prototype.toString,
+      NULL_TYPE = 'Null',
+      UNDEFINED_TYPE = 'Undefined',
+      BOOLEAN_TYPE = 'Boolean',
+      NUMBER_TYPE = 'Number',
+      STRING_TYPE = 'String',
+      OBJECT_TYPE = 'Object',
+      FUNCTION_CLASS = '[object Function]',
+      BOOLEAN_CLASS = '[object Boolean]',
+      NUMBER_CLASS = '[object Number]',
+      STRING_CLASS = '[object String]',
+      ARRAY_CLASS = '[object Array]',
+      DATE_CLASS = '[object Date]',
+      NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON &&
+        typeof JSON.stringify === 'function' &&
+        JSON.stringify(0) === '0' &&
+        typeof JSON.stringify(Prototype.K) === 'undefined';
+
+  function Type(o) {
+    switch(o) {
+      case null: return NULL_TYPE;
+      case (void 0): return UNDEFINED_TYPE;
+    }
+    var type = typeof o;
+    switch(type) {
+      case 'boolean': return BOOLEAN_TYPE;
+      case 'number':  return NUMBER_TYPE;
+      case 'string':  return STRING_TYPE;
+    }
+    return OBJECT_TYPE;
+  }
+
+  function extend(destination, source) {
+    for (var property in source)
+      destination[property] = source[property];
+    return destination;
+  }
+
+  function inspect(object) {
+    try {
+      if (isUndefined(object)) return 'undefined';
+      if (object === null) return 'null';
+      return object.inspect ? object.inspect() : String(object);
+    } catch (e) {
+      if (e instanceof RangeError) return '...';
+      throw e;
+    }
+  }
+
+  function toJSON(value) {
+    return Str('', { '': value }, []);
+  }
+
+  function Str(key, holder, stack) {
+    var value = holder[key],
+        type = typeof value;
+
+    if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') {
+      value = value.toJSON(key);
+    }
+
+    var _class = _toString.call(value);
+
+    switch (_class) {
+      case NUMBER_CLASS:
+      case BOOLEAN_CLASS:
+      case STRING_CLASS:
+        value = value.valueOf();
+    }
+
+    switch (value) {
+      case null: return 'null';
+      case true: return 'true';
+      case false: return 'false';
+    }
+
+    type = typeof value;
+    switch (type) {
+      case 'string':
+        return value.inspect(true);
+      case 'number':
+        return isFinite(value) ? String(value) : 'null';
+      case 'object':
+
+        for (var i = 0, length = stack.length; i < length; i++) {
+          if (stack[i] === value) { throw new TypeError(); }
+        }
+        stack.push(value);
+
+        var partial = [];
+        if (_class === ARRAY_CLASS) {
+          for (var i = 0, length = value.length; i < length; i++) {
+            var str = Str(i, value, stack);
+            partial.push(typeof str === 'undefined' ? 'null' : str);
+          }
+          partial = '[' + partial.join(',') + ']';
+        } else {
+          var keys = Object.keys(value);
+          for (var i = 0, length = keys.length; i < length; i++) {
+            var key = keys[i], str = Str(key, value, stack);
+            if (typeof str !== "undefined") {
+               partial.push(key.inspect(true)+ ':' + str);
+             }
+          }
+          partial = '{' + partial.join(',') + '}';
+        }
+        stack.pop();
+        return partial;
+    }
+  }
+
+  function stringify(object) {
+    return JSON.stringify(object);
+  }
+
+  function toQueryString(object) {
+    return $H(object).toQueryString();
+  }
+
+  function toHTML(object) {
+    return object && object.toHTML ? object.toHTML() : String.interpret(object);
+  }
+
+  function keys(object) {
+    if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); }
+    var results = [];
+    for (var property in object) {
+      if (object.hasOwnProperty(property)) {
+        results.push(property);
+      }
+    }
+    return results;
+  }
+
+  function values(object) {
+    var results = [];
+    for (var property in object)
+      results.push(object[property]);
+    return results;
+  }
+
+  function clone(object) {
+    return extend({ }, object);
+  }
+
+  function isElement(object) {
+    return !!(object && object.nodeType == 1);
+  }
+
+  function isArray(object) {
+    return _toString.call(object) === ARRAY_CLASS;
+  }
+
+  var hasNativeIsArray = (typeof Array.isArray == 'function')
+    && Array.isArray([]) && !Array.isArray({});
+
+  if (hasNativeIsArray) {
+    isArray = Array.isArray;
+  }
+
+  function isHash(object) {
+    return object instanceof Hash;
+  }
+
+  function isFunction(object) {
+    return _toString.call(object) === FUNCTION_CLASS;
+  }
+
+  function isString(object) {
+    return _toString.call(object) === STRING_CLASS;
+  }
+
+  function isNumber(object) {
+    return _toString.call(object) === NUMBER_CLASS;
+  }
+
+  function isDate(object) {
+    return _toString.call(object) === DATE_CLASS;
+  }
+
+  function isUndefined(object) {
+    return typeof object === "undefined";
+  }
+
+  extend(Object, {
+    extend:        extend,
+    inspect:       inspect,
+    toJSON:        NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON,
+    toQueryString: toQueryString,
+    toHTML:        toHTML,
+    keys:          Object.keys || keys,
+    values:        values,
+    clone:         clone,
+    isElement:     isElement,
+    isArray:       isArray,
+    isHash:        isHash,
+    isFunction:    isFunction,
+    isString:      isString,
+    isNumber:      isNumber,
+    isDate:        isDate,
+    isUndefined:   isUndefined
+  });
+})();
+Object.extend(Function.prototype, (function() {
+  var slice = Array.prototype.slice;
+
+  function update(array, args) {
+    var arrayLength = array.length, length = args.length;
+    while (length--) array[arrayLength + length] = args[length];
+    return array;
+  }
+
+  function merge(array, args) {
+    array = slice.call(array, 0);
+    return update(array, args);
+  }
+
+  function argumentNames() {
+    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
+      .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
+      .replace(/\s+/g, '').split(',');
+    return names.length == 1 && !names[0] ? [] : names;
+  }
+
+  function bind(context) {
+    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
+    var __method = this, args = slice.call(arguments, 1);
+    return function() {
+      var a = merge(args, arguments);
+      return __method.apply(context, a);
+    }
+  }
+
+  function bindAsEventListener(context) {
+    var __method = this, args = slice.call(arguments, 1);
+    return function(event) {
+      var a = update([event || window.event], args);
+      return __method.apply(context, a);
+    }
+  }
+
+  function curry() {
+    if (!arguments.length) return this;
+    var __method = this, args = slice.call(arguments, 0);
+    return function() {
+      var a = merge(args, arguments);
+      return __method.apply(this, a);
+    }
+  }
+
+  function delay(timeout) {
+    var __method = this, args = slice.call(arguments, 1);
+    timeout = timeout * 1000;
+    return window.setTimeout(function() {
+      return __method.apply(__method, args);
+    }, timeout);
+  }
+
+  function defer() {
+    var args = update([0.01], arguments);
+    return this.delay.apply(this, args);
+  }
+
+  function wrap(wrapper) {
+    var __method = this;
+    return function() {
+      var a = update([__method.bind(this)], arguments);
+      return wrapper.apply(this, a);
+    }
+  }
+
+  function methodize() {
+    if (this._methodized) return this._methodized;
+    var __method = this;
+    return this._methodized = function() {
+      var a = update([this], arguments);
+      return __method.apply(null, a);
+    };
+  }
+
+  return {
+    argumentNames:       argumentNames,
+    bind:                bind,
+    bindAsEventListener: bindAsEventListener,
+    curry:               curry,
+    delay:               delay,
+    defer:               defer,
+    wrap:                wrap,
+    methodize:           methodize
+  }
+})());
+
+
+
+(function(proto) {
+
+
+  function toISOString() {
+    return this.getUTCFullYear() + '-' +
+      (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+      this.getUTCDate().toPaddedString(2) + 'T' +
+      this.getUTCHours().toPaddedString(2) + ':' +
+      this.getUTCMinutes().toPaddedString(2) + ':' +
+      this.getUTCSeconds().toPaddedString(2) + 'Z';
+  }
+
+
+  function toJSON() {
+    return this.toISOString();
+  }
+
+  if (!proto.toISOString) proto.toISOString = toISOString;
+  if (!proto.toJSON) proto.toJSON = toJSON;
+
+})(Date.prototype);
+
+
 RegExp.prototype.match = RegExp.prototype.test;
 
 RegExp.escape = function(str) {
   return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
 };
-
-/*--------------------------------------------------------------------------*/
-
 var PeriodicalExecuter = Class.create({
   initialize: function(callback, frequency) {
     this.callback = callback;
@@ -319,8 +509,10 @@
       try {
         this.currentlyExecuting = true;
         this.execute();
-      } finally {
         this.currentlyExecuting = false;
+      } catch(e) {
+        this.currentlyExecuting = false;
+        throw e;
       }
     }
   }
@@ -339,10 +531,28 @@
   }
 });
 
-Object.extend(String.prototype, {
-  gsub: function(pattern, replacement) {
+Object.extend(String.prototype, (function() {
+  var NATIVE_JSON_PARSE_SUPPORT = window.JSON &&
+    typeof JSON.parse === 'function' &&
+    JSON.parse('{"test": true}').test;
+
+  function prepareReplacement(replacement) {
+    if (Object.isFunction(replacement)) return replacement;
+    var template = new Template(replacement);
+    return function(match) { return template.evaluate(match) };
+  }
+
+  function gsub(pattern, replacement) {
     var result = '', source = this, match;
-    replacement = arguments.callee.prepareReplacement(replacement);
+    replacement = prepareReplacement(replacement);
+
+    if (Object.isString(pattern))
+      pattern = RegExp.escape(pattern);
+
+    if (!(pattern.length || pattern.source)) {
+      replacement = replacement('');
+      return replacement + source.split('').join(replacement) + replacement;
+    }
 
     while (source.length > 0) {
       if (match = source.match(pattern)) {
@@ -354,76 +564,72 @@
       }
     }
     return result;
-  },
-
-  sub: function(pattern, replacement, count) {
-    replacement = this.gsub.prepareReplacement(replacement);
+  }
+
+  function sub(pattern, replacement, count) {
+    replacement = prepareReplacement(replacement);
     count = Object.isUndefined(count) ? 1 : count;
 
     return this.gsub(pattern, function(match) {
       if (--count < 0) return match[0];
       return replacement(match);
     });
-  },
-
-  scan: function(pattern, iterator) {
+  }
+
+  function scan(pattern, iterator) {
     this.gsub(pattern, iterator);
     return String(this);
-  },
-
-  truncate: function(length, truncation) {
+  }
+
+  function truncate(length, truncation) {
     length = length || 30;
     truncation = Object.isUndefined(truncation) ? '...' : truncation;
     return this.length > length ?
       this.slice(0, length - truncation.length) + truncation : String(this);
-  },
-
-  strip: function() {
+  }
+
+  function strip() {
     return this.replace(/^\s+/, '').replace(/\s+$/, '');
-  },
-
-  stripTags: function() {
-    return this.replace(/<\/?[^>]+>/gi, '');
-  },
-
-  stripScripts: function() {
+  }
+
+  function stripTags() {
+    return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
+  }
+
+  function stripScripts() {
     return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
-  },
-
-  extractScripts: function() {
-    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
-    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+  }
+
+  function extractScripts() {
+    var matchAll = new RegExp(Prototype.ScriptFragment, 'img'),
+        matchOne = new RegExp(Prototype.ScriptFragment, 'im');
     return (this.match(matchAll) || []).map(function(scriptTag) {
       return (scriptTag.match(matchOne) || ['', ''])[1];
     });
-  },
-
-  evalScripts: function() {
+  }
+
+  function evalScripts() {
     return this.extractScripts().map(function(script) { return eval(script) });
-  },
-
-  escapeHTML: function() {
-    var self = arguments.callee;
-    self.text.data = this;
-    return self.div.innerHTML;
-  },
-
-  unescapeHTML: function() {
-    var div = new Element('div');
-    div.innerHTML = this.stripTags();
-    return div.childNodes[0] ? (div.childNodes.length > 1 ?
-      $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
-      div.childNodes[0].nodeValue) : '';
-  },
-
-  toQueryParams: function(separator) {
+  }
+
+  function escapeHTML() {
+    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+  }
+
+  function unescapeHTML() {
+    return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
+  }
+
+
+  function toQueryParams(separator) {
     var match = this.strip().match(/([^?#]*)(#.*)?$/);
     if (!match) return { };
 
     return match[1].split(separator || '&').inject({ }, function(hash, pair) {
       if ((pair = pair.split('='))[0]) {
-        var key = decodeURIComponent(pair.shift());
-        var value = pair.length > 1 ? pair.join('=') : pair[0];
+        var key = decodeURIComponent(pair.shift()),
+            value = pair.length > 1 ? pair.join('=') : pair[0];
+
         if (value != undefined) value = decodeURIComponent(value);
 
         if (key in hash) {
@@ -434,128 +640,144 @@
       }
       return hash;
     });
-  },
-
-  toArray: function() {
+  }
+
+  function toArray() {
     return this.split('');
-  },
-
-  succ: function() {
+  }
+
+  function succ() {
     return this.slice(0, this.length - 1) +
       String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
-  },
-
-  times: function(count) {
+  }
+
+  function times(count) {
     return count < 1 ? '' : new Array(count + 1).join(this);
-  },
-
-  camelize: function() {
-    var parts = this.split('-'), len = parts.length;
-    if (len == 1) return parts[0];
-
-    var camelized = this.charAt(0) == '-'
-      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
-      : parts[0];
-
-    for (var i = 1; i < len; i++)
-      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
-
-    return camelized;
-  },
-
-  capitalize: function() {
+  }
+
+  function camelize() {
+    return this.replace(/-+(.)?/g, function(match, chr) {
+      return chr ? chr.toUpperCase() : '';
+    });
+  }
+
+  function capitalize() {
     return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
-  },
-
-  underscore: function() {
-    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
-  },
-
-  dasherize: function() {
-    return this.gsub(/_/,'-');
-  },
-
-  inspect: function(useDoubleQuotes) {
-    var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
-      var character = String.specialChar[match[0]];
-      return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
+  }
+
+  function underscore() {
+    return this.replace(/::/g, '/')
+               .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
+               .replace(/([a-z\d])([A-Z])/g, '$1_$2')
+               .replace(/-/g, '_')
+               .toLowerCase();
+  }
+
+  function dasherize() {
+    return this.replace(/_/g, '-');
+  }
+
+  function inspect(useDoubleQuotes) {
+    var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) {
+      if (character in String.specialChar) {
+        return String.specialChar[character];
+      }
+      return '\\u00' + character.charCodeAt().toPaddedString(2, 16);
     });
     if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
     return "'" + escapedString.replace(/'/g, '\\\'') + "'";
-  },
-
-  toJSON: function() {
-    return this.inspect(true);
-  },
-
-  unfilterJSON: function(filter) {
-    return this.sub(filter || Prototype.JSONFilter, '#{1}');
-  },
-
-  isJSON: function() {
+  }
+
+  function unfilterJSON(filter) {
+    return this.replace(filter || Prototype.JSONFilter, '$1');
+  }
+
+  function isJSON() {
     var str = this;
     if (str.blank()) return false;
-    str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
-    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
-  },
-
-  evalJSON: function(sanitize) {
-    var json = this.unfilterJSON();
+    str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@');
+    str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
+    str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
+    return (/^[\],:{}\s]*$/).test(str);
+  }
+
+  function evalJSON(sanitize) {
+    var json = this.unfilterJSON(),
+        cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
+    if (cx.test(json)) {
+      json = json.replace(cx, function (a) {
+        return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+      });
+    }
     try {
       if (!sanitize || json.isJSON()) return eval('(' + json + ')');
     } catch (e) { }
     throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
-  },
-
-  include: function(pattern) {
+  }
+
+  function parseJSON() {
+    var json = this.unfilterJSON();
+    return JSON.parse(json);
+  }
+
+  function include(pattern) {
     return this.indexOf(pattern) > -1;
-  },
-
-  startsWith: function(pattern) {
-    return this.indexOf(pattern) === 0;
-  },
-
-  endsWith: function(pattern) {
+  }
+
+  function startsWith(pattern) {
+    return this.lastIndexOf(pattern, 0) === 0;
+  }
+
+  function endsWith(pattern) {
     var d = this.length - pattern.length;
-    return d >= 0 && this.lastIndexOf(pattern) === d;
-  },
-
-  empty: function() {
+    return d >= 0 && this.indexOf(pattern, d) === d;
+  }
+
+  function empty() {
     return this == '';
-  },
-
-  blank: function() {
+  }
+
+  function blank() {
     return /^\s*$/.test(this);
-  },
-
-  interpolate: function(object, pattern) {
+  }
+
+  function interpolate(object, pattern) {
     return new Template(this, pattern).evaluate(object);
   }
-});
-
-if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
-  escapeHTML: function() {
-    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
-  },
-  unescapeHTML: function() {
-    return this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
-  }
-});
-
-String.prototype.gsub.prepareReplacement = function(replacement) {
-  if (Object.isFunction(replacement)) return replacement;
-  var template = new Template(replacement);
-  return function(match) { return template.evaluate(match) };
-};
-
-String.prototype.parseQuery = String.prototype.toQueryParams;
-
-Object.extend(String.prototype.escapeHTML, {
-  div:  document.createElement('div'),
-  text: document.createTextNode('')
-});
-
-String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);
+
+  return {
+    gsub:           gsub,
+    sub:            sub,
+    scan:           scan,
+    truncate:       truncate,
+    strip:          String.prototype.trim || strip,
+    stripTags:      stripTags,
+    stripScripts:   stripScripts,
+    extractScripts: extractScripts,
+    evalScripts:    evalScripts,
+    escapeHTML:     escapeHTML,
+    unescapeHTML:   unescapeHTML,
+    toQueryParams:  toQueryParams,
+    parseQuery:     toQueryParams,
+    toArray:        toArray,
+    succ:           succ,
+    times:          times,
+    camelize:       camelize,
+    capitalize:     capitalize,
+    underscore:     underscore,
+    dasherize:      dasherize,
+    inspect:        inspect,
+    unfilterJSON:   unfilterJSON,
+    isJSON:         isJSON,
+    evalJSON:       NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON,
+    include:        include,
+    startsWith:     startsWith,
+    endsWith:       endsWith,
+    empty:          empty,
+    blank:          blank,
+    interpolate:    interpolate
+  };
+})());
 
 var Template = Class.create({
   initialize: function(template, pattern) {
@@ -564,22 +786,23 @@
   },
 
   evaluate: function(object) {
-    if (Object.isFunction(object.toTemplateReplacements))
+    if (object && Object.isFunction(object.toTemplateReplacements))
       object = object.toTemplateReplacements();
 
     return this.template.gsub(this.pattern, function(match) {
-      if (object == null) return '';
+      if (object == null) return (match[1] + '');
 
       var before = match[1] || '';
       if (before == '\\') return match[2];
 
-      var ctx = object, expr = match[3];
-      var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+      var ctx = object, expr = match[3],
+          pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+
       match = pattern.exec(expr);
       if (match == null) return before;
 
       while (match != null) {
-        var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
+        var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1];
         ctx = ctx[comp];
         if (null == ctx || '' == match[3]) break;
         expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
@@ -594,8 +817,8 @@
 
 var $break = { };
 
-var Enumerable = {
-  each: function(iterator, context) {
+var Enumerable = (function() {
+  function each(iterator, context) {
     var index = 0;
     try {
       this._each(function(value) {
@@ -605,17 +828,17 @@
       if (e != $break) throw e;
     }
     return this;
-  },
-
-  eachSlice: function(number, iterator, context) {
+  }
+
+  function eachSlice(number, iterator, context) {
     var index = -number, slices = [], array = this.toArray();
     if (number < 1) return array;
     while ((index += number) < array.length)
       slices.push(array.slice(index, index+number));
     return slices.collect(iterator, context);
-  },
-
-  all: function(iterator, context) {
+  }
+
+  function all(iterator, context) {
     iterator = iterator || Prototype.K;
     var result = true;
     this.each(function(value, index) {
@@ -623,9 +846,9 @@
       if (!result) throw $break;
     });
     return result;
-  },
-
-  any: function(iterator, context) {
+  }
+
+  function any(iterator, context) {
     iterator = iterator || Prototype.K;
     var result = false;
     this.each(function(value, index) {
@@ -633,18 +856,18 @@
         throw $break;
     });
     return result;
-  },
-
-  collect: function(iterator, context) {
+  }
+
+  function collect(iterator, context) {
     iterator = iterator || Prototype.K;
     var results = [];
     this.each(function(value, index) {
       results.push(iterator.call(context, value, index));
     });
     return results;
-  },
-
-  detect: function(iterator, context) {
+  }
+
+  function detect(iterator, context) {
     var result;
     this.each(function(value, index) {
       if (iterator.call(context, value, index)) {
@@ -653,32 +876,32 @@
       }
     });
     return result;
-  },
-
-  findAll: function(iterator, context) {
+  }
+
+  function findAll(iterator, context) {
     var results = [];
     this.each(function(value, index) {
       if (iterator.call(context, value, index))
         results.push(value);
     });
     return results;
-  },
-
-  grep: function(filter, iterator, context) {
+  }
+
+  function grep(filter, iterator, context) {
     iterator = iterator || Prototype.K;
     var results = [];
 
     if (Object.isString(filter))
-      filter = new RegExp(filter);
+      filter = new RegExp(RegExp.escape(filter));
 
     this.each(function(value, index) {
       if (filter.match(value))
         results.push(iterator.call(context, value, index));
     });
     return results;
-  },
-
-  include: function(object) {
+  }
+
+  function include(object) {
     if (Object.isFunction(this.indexOf))
       if (this.indexOf(object) != -1) return true;
 
@@ -690,31 +913,31 @@
       }
     });
     return found;
-  },
-
-  inGroupsOf: function(number, fillWith) {
+  }
+
+  function inGroupsOf(number, fillWith) {
     fillWith = Object.isUndefined(fillWith) ? null : fillWith;
     return this.eachSlice(number, function(slice) {
       while(slice.length < number) slice.push(fillWith);
       return slice;
     });
-  },
-
-  inject: function(memo, iterator, context) {
+  }
+
+  function inject(memo, iterator, context) {
     this.each(function(value, index) {
       memo = iterator.call(context, memo, value, index);
     });
     return memo;
-  },
-
-  invoke: function(method) {
+  }
+
+  function invoke(method) {
     var args = $A(arguments).slice(1);
     return this.map(function(value) {
       return value[method].apply(value, args);
     });
-  },
-
-  max: function(iterator, context) {
+  }
+
+  function max(iterator, context) {
     iterator = iterator || Prototype.K;
     var result;
     this.each(function(value, index) {
@@ -723,9 +946,9 @@
         result = value;
     });
     return result;
-  },
-
-  min: function(iterator, context) {
+  }
+
+  function min(iterator, context) {
     iterator = iterator || Prototype.K;
     var result;
     this.each(function(value, index) {
@@ -734,9 +957,9 @@
         result = value;
     });
     return result;
-  },
-
-  partition: function(iterator, context) {
+  }
+
+  function partition(iterator, context) {
     iterator = iterator || Prototype.K;
     var trues = [], falses = [];
     this.each(function(value, index) {
@@ -744,26 +967,26 @@
         trues : falses).push(value);
     });
     return [trues, falses];
-  },
-
-  pluck: function(property) {
+  }
+
+  function pluck(property) {
     var results = [];
     this.each(function(value) {
       results.push(value[property]);
     });
     return results;
-  },
-
-  reject: function(iterator, context) {
+  }
+
+  function reject(iterator, context) {
     var results = [];
     this.each(function(value, index) {
       if (!iterator.call(context, value, index))
         results.push(value);
     });
     return results;
-  },
-
-  sortBy: function(iterator, context) {
+  }
+
+  function sortBy(iterator, context) {
     return this.map(function(value, index) {
       return {
         value: value,
@@ -773,13 +996,13 @@
       var a = left.criteria, b = right.criteria;
       return a < b ? -1 : a > b ? 1 : 0;
     }).pluck('value');
-  },
-
-  toArray: function() {
+  }
+
+  function toArray() {
     return this.map();
-  },
-
-  zip: function() {
+  }
+
+  function zip() {
     var iterator = Prototype.K, args = $A(arguments);
     if (Object.isFunction(args.last()))
       iterator = args.pop();
@@ -788,336 +1011,416 @@
     return this.map(function(value, index) {
       return iterator(collections.pluck(index));
     });
-  },
-
-  size: function() {
+  }
+
+  function size() {
     return this.toArray().length;
-  },
-
-  inspect: function() {
+  }
+
+  function inspect() {
     return '#<Enumerable:' + this.toArray().inspect() + '>';
   }
-};
-
-Object.extend(Enumerable, {
-  map:     Enumerable.collect,
-  find:    Enumerable.detect,
-  select:  Enumerable.findAll,
-  filter:  Enumerable.findAll,
-  member:  Enumerable.include,
-  entries: Enumerable.toArray,
-  every:   Enumerable.all,
-  some:    Enumerable.any
-});
+
+
+
+
+
+
+
+
+
+  return {
+    each:       each,
+    eachSlice:  eachSlice,
+    all:        all,
+    every:      all,
+    any:        any,
+    some:       any,
+    collect:    collect,
+    map:        collect,
+    detect:     detect,
+    findAll:    findAll,
+    select:     findAll,
+    filter:     findAll,
+    grep:       grep,
+    include:    include,
+    member:     include,
+    inGroupsOf: inGroupsOf,
+    inject:     inject,
+    invoke:     invoke,
+    max:        max,
+    min:        min,
+    partition:  partition,
+    pluck:      pluck,
+    reject:     reject,
+    sortBy:     sortBy,
+    toArray:    toArray,
+    entries:    toArray,
+    zip:        zip,
+    size:       size,
+    inspect:    inspect,
+    find:       detect
+  };
+})();
+
 function $A(iterable) {
   if (!iterable) return [];
-  if (iterable.toArray) return iterable.toArray();
+  if ('toArray' in Object(iterable)) return iterable.toArray();
   var length = iterable.length || 0, results = new Array(length);
   while (length--) results[length] = iterable[length];
   return results;
 }
 
-if (Prototype.Browser.WebKit) {
-  $A = function(iterable) {
-    if (!iterable) return [];
-    // In Safari, only use the `toArray` method if it's not a NodeList.
-    // A NodeList is a function, has an function `item` property, and a numeric
-    // `length` property. Adapted from Google Doctype.
-    if (!(typeof iterable === 'function' && typeof iterable.length ===
-        'number' && typeof iterable.item === 'function') && iterable.toArray)
-      return iterable.toArray();
-    var length = iterable.length || 0, results = new Array(length);
-    while (length--) results[length] = iterable[length];
-    return results;
-  };
+
+function $w(string) {
+  if (!Object.isString(string)) return [];
+  string = string.strip();
+  return string ? string.split(/\s+/) : [];
 }
 
 Array.from = $A;
 
-Object.extend(Array.prototype, Enumerable);
-
-if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
-
-Object.extend(Array.prototype, {
-  _each: function(iterator) {
-    for (var i = 0, length = this.length; i < length; i++)
-      iterator(this[i]);
-  },
-
-  clear: function() {
+
+(function() {
+  var arrayProto = Array.prototype,
+      slice = arrayProto.slice,
+      _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available
+
+  function each(iterator, context) {
+    for (var i = 0, length = this.length >>> 0; i < length; i++) {
+      if (i in this) iterator.call(context, this[i], i, this);
+    }
+  }
+  if (!_each) _each = each;
+
+  function clear() {
     this.length = 0;
     return this;
-  },
-
-  first: function() {
+  }
+
+  function first() {
     return this[0];
-  },
-
-  last: function() {
+  }
+
+  function last() {
     return this[this.length - 1];
-  },
-
-  compact: function() {
+  }
+
+  function compact() {
     return this.select(function(value) {
       return value != null;
     });
-  },
-
-  flatten: function() {
+  }
+
+  function flatten() {
     return this.inject([], function(array, value) {
-      return array.concat(Object.isArray(value) ?
-        value.flatten() : [value]);
+      if (Object.isArray(value))
+        return array.concat(value.flatten());
+      array.push(value);
+      return array;
     });
-  },
-
-  without: function() {
-    var values = $A(arguments);
+  }
+
+  function without() {
+    var values = slice.call(arguments, 0);
     return this.select(function(value) {
       return !values.include(value);
     });
-  },
-
-  reverse: function(inline) {
-    return (inline !== false ? this : this.toArray())._reverse();
-  },
-
-  reduce: function() {
-    return this.length > 1 ? this : this[0];
-  },
-
-  uniq: function(sorted) {
+  }
+
+  function reverse(inline) {
+    return (inline === false ? this.toArray() : this)._reverse();
+  }
+
+  function uniq(sorted) {
     return this.inject([], function(array, value, index) {
       if (0 == index || (sorted ? array.last() != value : !array.include(value)))
         array.push(value);
       return array;
     });
-  },
-
-  intersect: function(array) {
+  }
+
+  function intersect(array) {
     return this.uniq().findAll(function(item) {
       return array.detect(function(value) { return item === value });
     });
-  },
-
-  clone: function() {
-    return [].concat(this);
-  },
-
-  size: function() {
+  }
+
+
+  function clone() {
+    return slice.call(this, 0);
+  }
+
+  function size() {
     return this.length;
-  },
-
-  inspect: function() {
+  }
+
+  function inspect() {
     return '[' + this.map(Object.inspect).join(', ') + ']';
-  },
-
-  toJSON: function() {
-    var results = [];
-    this.each(function(object) {
-      var value = Object.toJSON(object);
-      if (!Object.isUndefined(value)) results.push(value);
-    });
-    return '[' + results.join(', ') + ']';
-  }
-});
-
-// use native browser JS 1.6 implementation if available
-if (Object.isFunction(Array.prototype.forEach))
-  Array.prototype._each = Array.prototype.forEach;
-
-if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
-  i || (i = 0);
-  var length = this.length;
-  if (i < 0) i = length + i;
-  for (; i < length; i++)
-    if (this[i] === item) return i;
-  return -1;
-};
-
-if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
-  i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
-  var n = this.slice(0, i).reverse().indexOf(item);
-  return (n < 0) ? n : i - n - 1;
-};
-
-Array.prototype.toArray = Array.prototype.clone;
-
-function $w(string) {
-  if (!Object.isString(string)) return [];
-  string = string.strip();
-  return string ? string.split(/\s+/) : [];
-}
-
-if (Prototype.Browser.Opera){
-  Array.prototype.concat = function() {
-    var array = [];
-    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
+  }
+
+  function indexOf(item, i) {
+    i || (i = 0);
+    var length = this.length;
+    if (i < 0) i = length + i;
+    for (; i < length; i++)
+      if (this[i] === item) return i;
+    return -1;
+  }
+
+  function lastIndexOf(item, i) {
+    i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+    var n = this.slice(0, i).reverse().indexOf(item);
+    return (n < 0) ? n : i - n - 1;
+  }
+
+  function concat() {
+    var array = slice.call(this, 0), item;
     for (var i = 0, length = arguments.length; i < length; i++) {
-      if (Object.isArray(arguments[i])) {
-        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
-          array.push(arguments[i][j]);
+      item = arguments[i];
+      if (Object.isArray(item) && !('callee' in item)) {
+        for (var j = 0, arrayLength = item.length; j < arrayLength; j++)
+          array.push(item[j]);
       } else {
-        array.push(arguments[i]);
+        array.push(item);
       }
     }
     return array;
-  };
-}
-Object.extend(Number.prototype, {
-  toColorPart: function() {
-    return this.toPaddedString(2, 16);
-  },
-
-  succ: function() {
-    return this + 1;
-  },
-
-  times: function(iterator, context) {
-    $R(0, this, true).each(iterator, context);
-    return this;
-  },
-
-  toPaddedString: function(length, radix) {
-    var string = this.toString(radix || 10);
-    return '0'.times(length - string.length) + string;
-  },
-
-  toJSON: function() {
-    return isFinite(this) ? this.toString() : 'null';
-  }
-});
-
-$w('abs round ceil floor').each(function(method){
-  Number.prototype[method] = Math[method].methodize();
-});
+  }
+
+  Object.extend(arrayProto, Enumerable);
+
+  if (!arrayProto._reverse)
+    arrayProto._reverse = arrayProto.reverse;
+
+  Object.extend(arrayProto, {
+    _each:     _each,
+    clear:     clear,
+    first:     first,
+    last:      last,
+    compact:   compact,
+    flatten:   flatten,
+    without:   without,
+    reverse:   reverse,
+    uniq:      uniq,
+    intersect: intersect,
+    clone:     clone,
+    toArray:   clone,
+    size:      size,
+    inspect:   inspect
+  });
+
+  var CONCAT_ARGUMENTS_BUGGY = (function() {
+    return [].concat(arguments)[0][0] !== 1;
+  })(1,2)
+
+  if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat;
+
+  if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;
+  if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf;
+})();
 function $H(object) {
   return new Hash(object);
 };
 
 var Hash = Class.create(Enumerable, (function() {
+  function initialize(object) {
+    this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+  }
+
+
+  function _each(iterator) {
+    for (var key in this._object) {
+      var value = this._object[key], pair = [key, value];
+      pair.key = key;
+      pair.value = value;
+      iterator(pair);
+    }
+  }
+
+  function set(key, value) {
+    return this._object[key] = value;
+  }
+
+  function get(key) {
+    if (this._object[key] !== Object.prototype[key])
+      return this._object[key];
+  }
+
+  function unset(key) {
+    var value = this._object[key];
+    delete this._object[key];
+    return value;
+  }
+
+  function toObject() {
+    return Object.clone(this._object);
+  }
+
+
+
+  function keys() {
+    return this.pluck('key');
+  }
+
+  function values() {
+    return this.pluck('value');
+  }
+
+  function index(value) {
+    var match = this.detect(function(pair) {
+      return pair.value === value;
+    });
+    return match && match.key;
+  }
+
+  function merge(object) {
+    return this.clone().update(object);
+  }
+
+  function update(object) {
+    return new Hash(object).inject(this, function(result, pair) {
+      result.set(pair.key, pair.value);
+      return result;
+    });
+  }
 
   function toQueryPair(key, value) {
     if (Object.isUndefined(value)) return key;
     return key + '=' + encodeURIComponent(String.interpret(value));
   }
 
+  function toQueryString() {
+    return this.inject([], function(results, pair) {
+      var key = encodeURIComponent(pair.key), values = pair.value;
+
+      if (values && typeof values == 'object') {
+        if (Object.isArray(values)) {
+          var queryValues = [];
+          for (var i = 0, len = values.length, value; i < len; i++) {
+            value = values[i];
+            queryValues.push(toQueryPair(key, value));
+          }
+          return results.concat(queryValues);
+        }
+      } else results.push(toQueryPair(key, values));
+      return results;
+    }).join('&');
+  }
+
+  function inspect() {
+    return '#<Hash:{' + this.map(function(pair) {
+      return pair.map(Object.inspect).join(': ');
+    }).join(', ') + '}>';
+  }
+
+  function clone() {
+    return new Hash(this);
+  }
+
   return {
-    initialize: function(object) {
-      this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
-    },
-
-    _each: function(iterator) {
-      for (var key in this._object) {
-        var value = this._object[key], pair = [key, value];
-        pair.key = key;
-        pair.value = value;
-        iterator(pair);
-      }
-    },
-
-    set: function(key, value) {
-      return this._object[key] = value;
-    },
-
-    get: function(key) {
-      // simulating poorly supported hasOwnProperty
-      if (this._object[key] !== Object.prototype[key])
-        return this._object[key];
-    },
-
-    unset: function(key) {
-      var value = this._object[key];
-      delete this._object[key];
-      return value;
-    },
-
-    toObject: function() {
-      return Object.clone(this._object);
-    },
-
-    keys: function() {
-      return this.pluck('key');
-    },
-
-    values: function() {
-      return this.pluck('value');
-    },
-
-    index: function(value) {
-      var match = this.detect(function(pair) {
-        return pair.value === value;
-      });
-      return match && match.key;
-    },
-
-    merge: function(object) {
-      return this.clone().update(object);
-    },
-
-    update: function(object) {
-      return new Hash(object).inject(this, function(result, pair) {
-        result.set(pair.key, pair.value);
-        return result;
-      });
-    },
-
-    toQueryString: function() {
-      return this.inject([], function(results, pair) {
-        var key = encodeURIComponent(pair.key), values = pair.value;
-
-        if (values && typeof values == 'object') {
-          if (Object.isArray(values))
-            return results.concat(values.map(toQueryPair.curry(key)));
-        } else results.push(toQueryPair(key, values));
-        return results;
-      }).join('&');
-    },
-
-    inspect: function() {
-      return '#<Hash:{' + this.map(function(pair) {
-        return pair.map(Object.inspect).join(': ');
-      }).join(', ') + '}>';
-    },
-
-    toJSON: function() {
-      return Object.toJSON(this.toObject());
-    },
-
-    clone: function() {
-      return new Hash(this);
-    }
-  }
+    initialize:             initialize,
+    _each:                  _each,
+    set:                    set,
+    get:                    get,
+    unset:                  unset,
+    toObject:               toObject,
+    toTemplateReplacements: toObject,
+    keys:                   keys,
+    values:                 values,
+    index:                  index,
+    merge:                  merge,
+    update:                 update,
+    toQueryString:          toQueryString,
+    inspect:                inspect,
+    toJSON:                 toObject,
+    clone:                  clone
+  };
 })());
 
-Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
 Hash.from = $H;
-var ObjectRange = Class.create(Enumerable, {
-  initialize: function(start, end, exclusive) {
+Object.extend(Number.prototype, (function() {
+  function toColorPart() {
+    return this.toPaddedString(2, 16);
+  }
+
+  function succ() {
+    return this + 1;
+  }
+
+  function times(iterator, context) {
+    $R(0, this, true).each(iterator, context);
+    return this;
+  }
+
+  function toPaddedString(length, radix) {
+    var string = this.toString(radix || 10);
+    return '0'.times(length - string.length) + string;
+  }
+
+  function abs() {
+    return Math.abs(this);
+  }
+
+  function round() {
+    return Math.round(this);
+  }
+
+  function ceil() {
+    return Math.ceil(this);
+  }
+
+  function floor() {
+    return Math.floor(this);
+  }
+
+  return {
+    toColorPart:    toColorPart,
+    succ:           succ,
+    times:          times,
+    toPaddedString: toPaddedString,
+    abs:            abs,
+    round:          round,
+    ceil:           ceil,
+    floor:          floor
+  };
+})());
+
+function $R(start, end, exclusive) {
+  return new ObjectRange(start, end, exclusive);
+}
+
+var ObjectRange = Class.create(Enumerable, (function() {
+  function initialize(start, end, exclusive) {
     this.start = start;
     this.end = end;
     this.exclusive = exclusive;
-  },
-
-  _each: function(iterator) {
+  }
+
+  function _each(iterator) {
     var value = this.start;
     while (this.include(value)) {
       iterator(value);
       value = value.succ();
     }
-  },
-
-  include: function(value) {
+  }
+
+  function include(value) {
     if (value < this.start)
       return false;
     if (this.exclusive)
       return value < this.end;
     return value <= this.end;
   }
-});
-
-var $R = function(start, end, exclusive) {
-  return new ObjectRange(start, end, exclusive);
-};
+
+  return {
+    initialize: initialize,
+    _each:      _each,
+    include:    include
+  };
+})());
+
+
 
 var Ajax = {
   getTransport: function() {
@@ -1164,7 +1467,6 @@
   onCreate:   function() { Ajax.activeRequestCount++ },
   onComplete: function() { Ajax.activeRequestCount-- }
 });
-
 Ajax.Base = Class.create({
   initialize: function(options) {
     this.options = {
@@ -1180,13 +1482,10 @@
 
     this.options.method = this.options.method.toLowerCase();
 
-    if (Object.isString(this.options.parameters))
-      this.options.parameters = this.options.parameters.toQueryParams();
-    else if (Object.isHash(this.options.parameters))
+    if (Object.isHash(this.options.parameters))
       this.options.parameters = this.options.parameters.toObject();
   }
 });
-
 Ajax.Request = Class.create(Ajax.Base, {
   _complete: false,
 
@@ -1199,24 +1498,21 @@
   request: function(url) {
     this.url = url;
     this.method = this.options.method;
-    var params = Object.clone(this.options.parameters);
+    var params = Object.isString(this.options.parameters) ?
+          this.options.parameters :
+          Object.toQueryString(this.options.parameters);
 
     if (!['get', 'post'].include(this.method)) {
-      // simulate other verbs over post
-      params['_method'] = this.method;
+      params += (params ? '&' : '') + "_method=" + this.method;
       this.method = 'post';
     }
 
-    this.parameters = params;
-
-    if (params = Object.toQueryString(params)) {
-      // when GET, append parameters to URL
-      if (this.method == 'get')
-        this.url += (this.url.include('?') ? '&' : '?') + params;
-      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
-        params += '&_=';
+    if (params && this.method === 'get') {
+      this.url += (this.url.include('?') ? '&' : '?') + params;
     }
 
+    this.parameters = params.toQueryParams();
+
     try {
       var response = new Ajax.Response(this);
       if (this.options.onCreate) this.options.onCreate(response);
@@ -1269,7 +1565,6 @@
             headers['Connection'] = 'close';
     }
 
-    // user-defined headers
     if (typeof this.options.requestHeaders == 'object') {
       var extras = this.options.requestHeaders;
 
@@ -1286,11 +1581,12 @@
 
   success: function() {
     var status = this.getStatus();
-    return !status || (status >= 200 && status < 300);
+    return !status || (status >= 200 && status < 300) || status == 304;
   },
 
   getStatus: function() {
     try {
+      if (this.transport.status === 1223) return 204;
       return this.transport.status || 0;
     } catch (e) { return 0 }
   },
@@ -1323,7 +1619,6 @@
     }
 
     if (state == 'Complete') {
-      // avoid memory leak in MSIE: clean up
       this.transport.onreadystatechange = Prototype.emptyFunction;
     }
   },
@@ -1340,7 +1635,7 @@
   getHeader: function(name) {
     try {
       return this.transport.getResponseHeader(name) || null;
-    } catch (e) { return null }
+    } catch (e) { return null; }
   },
 
   evalResponse: function() {
@@ -1360,20 +1655,27 @@
 Ajax.Request.Events =
   ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
 
+
+
+
+
+
+
+
 Ajax.Response = Class.create({
   initialize: function(request){
     this.request = request;
     var transport  = this.transport  = request.transport,
         readyState = this.readyState = transport.readyState;
 
-    if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+    if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
       this.status       = this.getStatus();
       this.statusText   = this.getStatusText();
       this.responseText = String.interpret(transport.responseText);
       this.headerJSON   = this._getHeaderJSON();
     }
 
-    if(readyState == 4) {
+    if (readyState == 4) {
       var xml = transport.responseXML;
       this.responseXML  = Object.isUndefined(xml) ? null : xml;
       this.responseJSON = this._getResponseJSON();
@@ -1381,6 +1683,7 @@
   },
 
   status:      0,
+
   statusText: '',
 
   getStatus: Ajax.Request.prototype.getStatus,
@@ -1510,6 +1813,8 @@
     this.updater = new Ajax.Updater(this.container, this.url, this.options);
   }
 });
+
+
 function $(element) {
   if (arguments.length > 1) {
     for (var i = 0, elements = [], length = arguments.length; i < length; i++)
@@ -1534,10 +1839,9 @@
 
 /*--------------------------------------------------------------------------*/
 
-if (!window.Node) var Node = { };
+if (!Node) var Node = { };
 
 if (!Node.ELEMENT_NODE) {
-  // DOM level 2 ECMAScript Language Binding
   Object.extend(Node, {
     ELEMENT_NODE: 1,
     ATTRIBUTE_NODE: 2,
@@ -1554,26 +1858,63 @@
   });
 }
 
-(function() {
-  var element = this.Element;
-  this.Element = function(tagName, attributes) {
+
+
+(function(global) {
+  function shouldUseCache(tagName, attributes) {
+    if (tagName === 'select') return false;
+    if ('type' in attributes) return false;
+    return true;
+  }
+
+  var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){
+    try {
+      var el = document.createElement('<input name="x">');
+      return el.tagName.toLowerCase() === 'input' && el.name === 'x';
+    }
+    catch(err) {
+      return false;
+    }
+  })();
+
+  var element = global.Element;
+
+  global.Element = function(tagName, attributes) {
     attributes = attributes || { };
     tagName = tagName.toLowerCase();
     var cache = Element.cache;
-    if (Prototype.Browser.IE && attributes.name) {
+
+    if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) {
       tagName = '<' + tagName + ' name="' + attributes.name + '">';
       delete attributes.name;
       return Element.writeAttribute(document.createElement(tagName), attributes);
     }
+
     if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
-    return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+
+    var node = shouldUseCache(tagName, attributes) ?
+     cache[tagName].cloneNode(false) : document.createElement(tagName);
+
+    return Element.writeAttribute(node, attributes);
   };
-  Object.extend(this.Element, element || { });
-  if (element) this.Element.prototype = element.prototype;
-}).call(window);
-
+
+  Object.extend(global.Element, element || { });
+  if (element) global.Element.prototype = element.prototype;
+
+})(this);
+
+Element.idCounter = 1;
 Element.cache = { };
 
+Element._purgeElement = function(element) {
+  var uid = element._prototypeUID;
+  if (uid) {
+    Element.stopObserving(element);
+    element._prototypeUID = void 0;
+    delete Element.Storage[uid];
+  }
+}
+
 Element.Methods = {
   visible: function(element) {
     return $(element).style.display != 'none';
@@ -1603,15 +1944,116 @@
     return element;
   },
 
-  update: function(element, content) {
-    element = $(element);
-    if (content && content.toElement) content = content.toElement();
-    if (Object.isElement(content)) return element.update().insert(content);
-    content = Object.toHTML(content);
-    element.innerHTML = content.stripScripts();
-    content.evalScripts.bind(content).defer();
-    return element;
-  },
+  update: (function(){
+
+    var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){
+      var el = document.createElement("select"),
+          isBuggy = true;
+      el.innerHTML = "<option value=\"test\">test</option>";
+      if (el.options && el.options[0]) {
+        isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION";
+      }
+      el = null;
+      return isBuggy;
+    })();
+
+    var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){
+      try {
+        var el = document.createElement("table");
+        if (el && el.tBodies) {
+          el.innerHTML = "<tbody><tr><td>test</td></tr></tbody>";
+          var isBuggy = typeof el.tBodies[0] == "undefined";
+          el = null;
+          return isBuggy;
+        }
+      } catch (e) {
+        return true;
+      }
+    })();
+
+    var LINK_ELEMENT_INNERHTML_BUGGY = (function() {
+      try {
+        var el = document.createElement('div');
+        el.innerHTML = "<link>";
+        var isBuggy = (el.childNodes.length === 0);
+        el = null;
+        return isBuggy;
+      } catch(e) {
+        return true;
+      }
+    })();
+
+    var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY ||
+     TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY;
+
+    var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () {
+      var s = document.createElement("script"),
+          isBuggy = false;
+      try {
+        s.appendChild(document.createTextNode(""));
+        isBuggy = !s.firstChild ||
+          s.firstChild && s.firstChild.nodeType !== 3;
+      } catch (e) {
+        isBuggy = true;
+      }
+      s = null;
+      return isBuggy;
+    })();
+
+
+    function update(element, content) {
+      element = $(element);
+      var purgeElement = Element._purgeElement;
+
+      var descendants = element.getElementsByTagName('*'),
+       i = descendants.length;
+      while (i--) purgeElement(descendants[i]);
+
+      if (content && content.toElement)
+        content = content.toElement();
+
+      if (Object.isElement(content))
+        return element.update().insert(content);
+
+      content = Object.toHTML(content);
+
+      var tagName = element.tagName.toUpperCase();
+
+      if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {
+        element.text = content;
+        return element;
+      }
+
+      if (ANY_INNERHTML_BUGGY) {
+        if (tagName in Element._insertionTranslations.tags) {
+          while (element.firstChild) {
+            element.removeChild(element.firstChild);
+          }
+          Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+            .each(function(node) {
+              element.appendChild(node)
+            });
+        } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf('<link') > -1) {
+          while (element.firstChild) {
+            element.removeChild(element.firstChild);
+          }
+          var nodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts(), true);
+          nodes.each(function(node) { element.appendChild(node) });
+        }
+        else {
+          element.innerHTML = content.stripScripts();
+        }
+      }
+      else {
+        element.innerHTML = content.stripScripts();
+      }
+
+      content.evalScripts.bind(content).defer();
+      return element;
+    }
+
+    return update;
+  })(),
 
   replace: function(element, content) {
     element = $(element);
@@ -1679,28 +2121,35 @@
     element = $(element);
     var result = '<' + element.tagName.toLowerCase();
     $H({'id': 'id', 'className': 'class'}).each(function(pair) {
-      var property = pair.first(), attribute = pair.last();
-      var value = (element[property] || '').toString();
+      var property = pair.first(),
+          attribute = pair.last(),
+          value = (element[property] || '').toString();
       if (value) result += ' ' + attribute + '=' + value.inspect(true);
     });
     return result + '>';
   },
 
-  recursivelyCollect: function(element, property) {
+  recursivelyCollect: function(element, property, maximumLength) {
     element = $(element);
+    maximumLength = maximumLength || -1;
     var elements = [];
-    while (element = element[property])
+
+    while (element = element[property]) {
       if (element.nodeType == 1)
         elements.push(Element.extend(element));
+      if (elements.length == maximumLength)
+        break;
+    }
+
     return elements;
   },
 
   ancestors: function(element) {
-    return $(element).recursivelyCollect('parentNode');
+    return Element.recursivelyCollect(element, 'parentNode');
   },
 
   descendants: function(element) {
-    return $(element).select("*");
+    return Element.select(element, "*");
   },
 
   firstDescendant: function(element) {
@@ -1710,78 +2159,96 @@
   },
 
   immediateDescendants: function(element) {
-    if (!(element = $(element).firstChild)) return [];
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    if (element) return [element].concat($(element).nextSiblings());
-    return [];
+    var results = [], child = $(element).firstChild;
+    while (child) {
+      if (child.nodeType === 1) {
+        results.push(Element.extend(child));
+      }
+      child = child.nextSibling;
+    }
+    return results;
   },
 
-  previousSiblings: function(element) {
-    return $(element).recursivelyCollect('previousSibling');
+  previousSiblings: function(element, maximumLength) {
+    return Element.recursivelyCollect(element, 'previousSibling');
   },
 
   nextSiblings: function(element) {
-    return $(element).recursivelyCollect('nextSibling');
+    return Element.recursivelyCollect(element, 'nextSibling');
   },
 
   siblings: function(element) {
     element = $(element);
-    return element.previousSiblings().reverse().concat(element.nextSiblings());
+    return Element.previousSiblings(element).reverse()
+      .concat(Element.nextSiblings(element));
   },
 
   match: function(element, selector) {
+    element = $(element);
     if (Object.isString(selector))
-      selector = new Selector(selector);
-    return selector.match($(element));
+      return Prototype.Selector.match(element, selector);
+    return selector.match(element);
   },
 
   up: function(element, expression, index) {
     element = $(element);
     if (arguments.length == 1) return $(element.parentNode);
-    var ancestors = element.ancestors();
+    var ancestors = Element.ancestors(element);
     return Object.isNumber(expression) ? ancestors[expression] :
-      Selector.findElement(ancestors, expression, index);
+      Prototype.Selector.find(ancestors, expression, index);
   },
 
   down: function(element, expression, index) {
     element = $(element);
-    if (arguments.length == 1) return element.firstDescendant();
-    return Object.isNumber(expression) ? element.descendants()[expression] :
+    if (arguments.length == 1) return Element.firstDescendant(element);
+    return Object.isNumber(expression) ? Element.descendants(element)[expression] :
       Element.select(element, expression)[index || 0];
   },
 
   previous: function(element, expression, index) {
     element = $(element);
-    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
-    var previousSiblings = element.previousSiblings();
-    return Object.isNumber(expression) ? previousSiblings[expression] :
-      Selector.findElement(previousSiblings, expression, index);
+    if (Object.isNumber(expression)) index = expression, expression = false;
+    if (!Object.isNumber(index)) index = 0;
+
+    if (expression) {
+      return Prototype.Selector.find(element.previousSiblings(), expression, index);
+    } else {
+      return element.recursivelyCollect("previousSibling", index + 1)[index];
+    }
   },
 
   next: function(element, expression, index) {
     element = $(element);
-    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
-    var nextSiblings = element.nextSiblings();
-    return Object.isNumber(expression) ? nextSiblings[expression] :
-      Selector.findElement(nextSiblings, expression, index);
+    if (Object.isNumber(expression)) index = expression, expression = false;
+    if (!Object.isNumber(index)) index = 0;
+
+    if (expression) {
+      return Prototype.Selector.find(element.nextSiblings(), expression, index);
+    } else {
+      var maximumLength = Object.isNumber(index) ? index + 1 : 1;
+      return element.recursivelyCollect("nextSibling", index + 1)[index];
+    }
   },
 
-  select: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element, args);
+
+  select: function(element) {
+    element = $(element);
+    var expressions = Array.prototype.slice.call(arguments, 1).join(', ');
+    return Prototype.Selector.select(expressions, element);
   },
 
-  adjacent: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element.parentNode, args).without(element);
+  adjacent: function(element) {
+    element = $(element);
+    var expressions = Array.prototype.slice.call(arguments, 1).join(', ');
+    return Prototype.Selector.select(expressions, element.parentNode).without(element);
   },
 
   identify: function(element) {
     element = $(element);
-    var id = element.readAttribute('id'), self = arguments.callee;
+    var id = Element.readAttribute(element, 'id');
     if (id) return id;
-    do { id = 'anonymous_element_' + self.counter++ } while ($(id));
-    element.writeAttribute('id', id);
+    do { id = 'anonymous_element_' + Element.idCounter++ } while ($(id));
+    Element.writeAttribute(element, 'id', id);
     return id;
   },
 
@@ -1820,11 +2287,11 @@
   },
 
   getHeight: function(element) {
-    return $(element).getDimensions().height;
+    return Element.getDimensions(element).height;
   },
 
   getWidth: function(element) {
-    return $(element).getDimensions().width;
+    return Element.getDimensions(element).width;
   },
 
   classNames: function(element) {
@@ -1840,7 +2307,7 @@
 
   addClassName: function(element, className) {
     if (!(element = $(element))) return;
-    if (!element.hasClassName(className))
+    if (!Element.hasClassName(element, className))
       element.className += (element.className ? ' ' : '') + className;
     return element;
   },
@@ -1854,11 +2321,10 @@
 
   toggleClassName: function(element, className) {
     if (!(element = $(element))) return;
-    return element[element.hasClassName(className) ?
-      'removeClassName' : 'addClassName'](className);
+    return Element[Element.hasClassName(element, className) ?
+      'removeClassName' : 'addClassName'](element, className);
   },
 
-  // removes whitespace-only text node children
   cleanWhitespace: function(element) {
     element = $(element);
     var node = element.firstChild;
@@ -1892,7 +2358,7 @@
 
   scrollTo: function(element) {
     element = $(element);
-    var pos = element.cumulativeOffset();
+    var pos = Element.cumulativeOffset(element);
     window.scrollTo(pos[0], pos[1]);
     return element;
   },
@@ -1938,37 +2404,12 @@
     return element;
   },
 
-  getDimensions: function(element) {
-    element = $(element);
-    var display = element.getStyle('display');
-    if (display != 'none' && display != null) // Safari bug
-      return {width: element.offsetWidth, height: element.offsetHeight};
-
-    // All *Width and *Height properties give 0 on elements with display none,
-    // so enable the element temporarily
-    var els = element.style;
-    var originalVisibility = els.visibility;
-    var originalPosition = els.position;
-    var originalDisplay = els.display;
-    els.visibility = 'hidden';
-    els.position = 'absolute';
-    els.display = 'block';
-    var originalWidth = element.clientWidth;
-    var originalHeight = element.clientHeight;
-    els.display = originalDisplay;
-    els.position = originalPosition;
-    els.visibility = originalVisibility;
-    return {width: originalWidth, height: originalHeight};
-  },
-
   makePositioned: function(element) {
     element = $(element);
     var pos = Element.getStyle(element, 'position');
     if (pos == 'static' || !pos) {
       element._madePositioned = true;
       element.style.position = 'relative';
-      // Opera returns the offset relative to the positioning context, when an
-      // element is position relative but top and left have not been defined
       if (Prototype.Browser.Opera) {
         element.style.top = 0;
         element.style.left = 0;
@@ -2007,117 +2448,6 @@
     return element;
   },
 
-  cumulativeOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  positionedOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-      if (element) {
-        if (element.tagName.toUpperCase() == 'BODY') break;
-        var p = Element.getStyle(element, 'position');
-        if (p !== 'static') break;
-      }
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  absolutize: function(element) {
-    element = $(element);
-    if (element.getStyle('position') == 'absolute') return element;
-    // Position.prepare(); // To be done manually by Scripty when it needs it.
-
-    var offsets = element.positionedOffset();
-    var top     = offsets[1];
-    var left    = offsets[0];
-    var width   = element.clientWidth;
-    var height  = element.clientHeight;
-
-    element._originalLeft   = left - parseFloat(element.style.left  || 0);
-    element._originalTop    = top  - parseFloat(element.style.top || 0);
-    element._originalWidth  = element.style.width;
-    element._originalHeight = element.style.height;
-
-    element.style.position = 'absolute';
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.width  = width + 'px';
-    element.style.height = height + 'px';
-    return element;
-  },
-
-  relativize: function(element) {
-    element = $(element);
-    if (element.getStyle('position') == 'relative') return element;
-    // Position.prepare(); // To be done manually by Scripty when it needs it.
-
-    element.style.position = 'relative';
-    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
-    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.height = element._originalHeight;
-    element.style.width  = element._originalWidth;
-    return element;
-  },
-
-  cumulativeScrollOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.scrollTop  || 0;
-      valueL += element.scrollLeft || 0;
-      element = element.parentNode;
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  getOffsetParent: function(element) {
-    if (element.offsetParent) return $(element.offsetParent);
-    if (element == document.body) return $(element);
-
-    while ((element = element.parentNode) && element != document.body)
-      if (Element.getStyle(element, 'position') != 'static')
-        return $(element);
-
-    return $(document.body);
-  },
-
-  viewportOffset: function(forElement) {
-    var valueT = 0, valueL = 0;
-
-    var element = forElement;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-
-      // Safari fix
-      if (element.offsetParent == document.body &&
-        Element.getStyle(element, 'position') == 'absolute') break;
-
-    } while (element = element.offsetParent);
-
-    element = forElement;
-    do {
-      if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
-        valueT -= element.scrollTop  || 0;
-        valueL -= element.scrollLeft || 0;
-      }
-    } while (element = element.parentNode);
-
-    return Element._returnOffset(valueL, valueT);
-  },
-
   clonePosition: function(element, source) {
     var options = Object.extend({
       setLeft:    true,
@@ -2128,28 +2458,21 @@
       offsetLeft: 0
     }, arguments[2] || { });
 
-    // find page position of source
     source = $(source);
-    var p = source.viewportOffset();
-
-    // find coordinate system to use
+    var p = Element.viewportOffset(source), delta = [0, 0], parent = null;
+
     element = $(element);
-    var delta = [0, 0];
-    var parent = null;
-    // delta [0,0] will do fine with position: fixed elements,
-    // position:absolute needs offsetParent deltas
+
     if (Element.getStyle(element, 'position') == 'absolute') {
-      parent = element.getOffsetParent();
-      delta = parent.viewportOffset();
+      parent = Element.getOffsetParent(element);
+      delta = Element.viewportOffset(parent);
     }
 
-    // correct by body offsets (fixes Safari)
     if (parent == document.body) {
       delta[0] -= document.body.offsetLeft;
       delta[1] -= document.body.offsetTop;
     }
 
-    // set position
     if (options.setLeft)   element.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
     if (options.setTop)    element.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
     if (options.setWidth)  element.style.width = source.offsetWidth + 'px';
@@ -2158,10 +2481,9 @@
   }
 };
 
-Element.Methods.identify.counter = 1;
-
 Object.extend(Element.Methods, {
   getElementsBySelector: Element.Methods.select,
+
   childElements: Element.Methods.immediateDescendants
 });
 
@@ -2179,14 +2501,9 @@
   Element.Methods.getStyle = Element.Methods.getStyle.wrap(
     function(proceed, element, style) {
       switch (style) {
-        case 'left': case 'top': case 'right': case 'bottom':
-          if (proceed(element, 'position') === 'static') return null;
         case 'height': case 'width':
-          // returns '0px' for hidden elements; we want it to return null
           if (!Element.visible(element)) return null;
 
-          // returns the border-box dimensions rather than the content-box
-          // dimensions, so we subtract padding and borders from the value
           var dim = parseInt(proceed(element, style), 10);
 
           if (dim !== element['offset' + style.capitalize()])
@@ -2219,52 +2536,6 @@
 }
 
 else if (Prototype.Browser.IE) {
-  // IE doesn't report offsets correctly for static elements, so we change them
-  // to "relative" to get the values, then change them back.
-  Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
-    function(proceed, element) {
-      element = $(element);
-      // IE throws an error if element is not in document
-      try { element.offsetParent }
-      catch(e) { return $(document.body) }
-      var position = element.getStyle('position');
-      if (position !== 'static') return proceed(element);
-      element.setStyle({ position: 'relative' });
-      var value = proceed(element);
-      element.setStyle({ position: position });
-      return value;
-    }
-  );
-
-  $w('positionedOffset viewportOffset').each(function(method) {
-    Element.Methods[method] = Element.Methods[method].wrap(
-      function(proceed, element) {
-        element = $(element);
-        try { element.offsetParent }
-        catch(e) { return Element._returnOffset(0,0) }
-        var position = element.getStyle('position');
-        if (position !== 'static') return proceed(element);
-        // Trigger hasLayout on the offset parent so that IE6 reports
-        // accurate offsetTop and offsetLeft values for position: fixed.
-        var offsetParent = element.getOffsetParent();
-        if (offsetParent && offsetParent.getStyle('position') === 'fixed')
-          offsetParent.setStyle({ zoom: 1 });
-        element.setStyle({ position: 'relative' });
-        var value = proceed(element);
-        element.setStyle({ position: position });
-        return value;
-      }
-    );
-  });
-
-  Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
-    function(proceed, element) {
-      try { element.offsetParent }
-      catch(e) { return Element._returnOffset(0,0) }
-      return proceed(element);
-    }
-  );
-
   Element.Methods.getStyle = function(element, style) {
     element = $(element);
     style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
@@ -2306,36 +2577,90 @@
     return element;
   };
 
-  Element._attributeTranslations = {
-    read: {
-      names: {
-        'class': 'className',
-        'for':   'htmlFor'
-      },
-      values: {
-        _getAttr: function(element, attribute) {
-          return element.getAttribute(attribute, 2);
+  Element._attributeTranslations = (function(){
+
+    var classProp = 'className',
+        forProp = 'for',
+        el = document.createElement('div');
+
+    el.setAttribute(classProp, 'x');
+
+    if (el.className !== 'x') {
+      el.setAttribute('class', 'x');
+      if (el.className === 'x') {
+        classProp = 'class';
+      }
+    }
+    el = null;
+
+    el = document.createElement('label');
+    el.setAttribute(forProp, 'x');
+    if (el.htmlFor !== 'x') {
+      el.setAttribute('htmlFor', 'x');
+      if (el.htmlFor === 'x') {
+        forProp = 'htmlFor';
+      }
+    }
+    el = null;
+
+    return {
+      read: {
+        names: {
+          'class':      classProp,
+          'className':  classProp,
+          'for':        forProp,
+          'htmlFor':    forProp
         },
-        _getAttrNode: function(element, attribute) {
-          var node = element.getAttributeNode(attribute);
-          return node ? node.value : "";
-        },
-        _getEv: function(element, attribute) {
-          attribute = element.getAttribute(attribute);
-          return attribute ? attribute.toString().slice(23, -2) : null;
-        },
-        _flag: function(element, attribute) {
-          return $(element).hasAttribute(attribute) ? attribute : null;
-        },
-        style: function(element) {
-          return element.style.cssText.toLowerCase();
-        },
-        title: function(element) {
-          return element.title;
+        values: {
+          _getAttr: function(element, attribute) {
+            return element.getAttribute(attribute);
+          },
+          _getAttr2: function(element, attribute) {
+            return element.getAttribute(attribute, 2);
+          },
+          _getAttrNode: function(element, attribute) {
+            var node = element.getAttributeNode(attribute);
+            return node ? node.value : "";
+          },
+          _getEv: (function(){
+
+            var el = document.createElement('div'), f;
+            el.onclick = Prototype.emptyFunction;
+            var value = el.getAttribute('onclick');
+
+            if (String(value).indexOf('{') > -1) {
+              f = function(element, attribute) {
+                attribute = element.getAttribute(attribute);
+                if (!attribute) return null;
+                attribute = attribute.toString();
+                attribute = attribute.split('{')[1];
+                attribute = attribute.split('}')[0];
+                return attribute.strip();
+              };
+            }
+            else if (value === '') {
+              f = function(element, attribute) {
+                attribute = element.getAttribute(attribute);
+                if (!attribute) return null;
+                return attribute.strip();
+              };
+            }
+            el = null;
+            return f;
+          })(),
+          _flag: function(element, attribute) {
+            return $(element).hasAttribute(attribute) ? attribute : null;
+          },
+          style: function(element) {
+            return element.style.cssText.toLowerCase();
+          },
+          title: function(element) {
+            return element.title;
+          }
         }
       }
     }
-  };
+  })();
 
   Element._attributeTranslations.write = {
     names: Object.extend({
@@ -2363,8 +2688,8 @@
 
   (function(v) {
     Object.extend(v, {
-      href:        v._getAttr,
-      src:         v._getAttr,
+      href:        v._getAttr2,
+      src:         v._getAttr2,
       type:        v._getAttr,
       action:      v._getAttrNode,
       disabled:    v._flag,
@@ -2391,6 +2716,26 @@
       onchange:    v._getEv
     });
   })(Element._attributeTranslations.read.values);
+
+  if (Prototype.BrowserFeatures.ElementExtensions) {
+    (function() {
+      function _descendants(element) {
+        var nodes = element.getElementsByTagName('*'), results = [];
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node.tagName !== "!") // Filter out comment nodes.
+            results.push(node);
+        return results;
+      }
+
+      Element.Methods.down = function(element, expression, index) {
+        element = $(element);
+        if (arguments.length == 1) return element.firstDescendant();
+        return Object.isNumber(expression) ? _descendants(element)[expression] :
+          Element.select(element, expression)[index || 0];
+      }
+    })();
+  }
+
 }
 
 else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
@@ -2409,7 +2754,7 @@
       (value < 0.00001) ? 0 : value;
 
     if (value == 1)
-      if(element.tagName.toUpperCase() == 'IMG' && element.width) {
+      if (element.tagName.toUpperCase() == 'IMG' && element.width) {
         element.width++; element.width--;
       } else try {
         var n = document.createTextNode(' ');
@@ -2419,49 +2764,9 @@
 
     return element;
   };
-
-  // Safari returns margins on body which is incorrect if the child is absolutely
-  // positioned.  For performance reasons, redefine Element#cumulativeOffset for
-  // KHTML/WebKit only.
-  Element.Methods.cumulativeOffset = function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      if (element.offsetParent == document.body)
-        if (Element.getStyle(element, 'position') == 'absolute') break;
-
-      element = element.offsetParent;
-    } while (element);
-
-    return Element._returnOffset(valueL, valueT);
-  };
 }
 
-if (Prototype.Browser.IE || Prototype.Browser.Opera) {
-  // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
-  Element.Methods.update = function(element, content) {
-    element = $(element);
-
-    if (content && content.toElement) content = content.toElement();
-    if (Object.isElement(content)) return element.update().insert(content);
-
-    content = Object.toHTML(content);
-    var tagName = element.tagName.toUpperCase();
-
-    if (tagName in Element._insertionTranslations.tags) {
-      $A(element.childNodes).each(function(node) { element.removeChild(node) });
-      Element._getContentFromAnonymousElement(tagName, content.stripScripts())
-        .each(function(node) { element.appendChild(node) });
-    }
-    else element.innerHTML = content.stripScripts();
-
-    content.evalScripts.bind(content).defer();
-    return element;
-  };
-}
-
-if ('outerHTML' in document.createElement('div')) {
+if ('outerHTML' in document.documentElement) {
   Element.Methods.replace = function(element, content) {
     element = $(element);
 
@@ -2475,8 +2780,8 @@
     var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
 
     if (Element._insertionTranslations.tags[tagName]) {
-      var nextSibling = element.next();
-      var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+      var nextSibling = element.next(),
+          fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
       parent.removeChild(element);
       if (nextSibling)
         fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
@@ -2497,12 +2802,27 @@
   return result;
 };
 
-Element._getContentFromAnonymousElement = function(tagName, html) {
-  var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
-  if (t) {
-    div.innerHTML = t[0] + html + t[1];
-    t[2].times(function() { div = div.firstChild });
-  } else div.innerHTML = html;
+Element._getContentFromAnonymousElement = function(tagName, html, force) {
+  var div = new Element('div'),
+      t = Element._insertionTranslations.tags[tagName];
+
+  var workaround = false;
+  if (t) workaround = true;
+  else if (force) {
+    workaround = true;
+    t = ['', '', 0];
+  }
+
+  if (workaround) {
+    div.innerHTML = '&nbsp;' + t[0] + html + t[1];
+    div.removeChild(div.firstChild);
+    for (var i = t[2]; i--; ) {
+      div = div.firstChild;
+    }
+  }
+  else {
+    div.innerHTML = html;
+  }
   return $A(div.childNodes);
 };
 
@@ -2529,12 +2849,13 @@
 };
 
 (function() {
-  Object.extend(this.tags, {
-    THEAD: this.tags.TBODY,
-    TFOOT: this.tags.TBODY,
-    TH:    this.tags.TD
+  var tags = Element._insertionTranslations.tags;
+  Object.extend(tags, {
+    THEAD: tags.TBODY,
+    TFOOT: tags.TBODY,
+    TH:    tags.TD
   });
-}).call(Element._insertionTranslations);
+})();
 
 Element.Methods.Simulated = {
   hasAttribute: function(element, attribute) {
@@ -2548,41 +2869,81 @@
 
 Object.extend(Element, Element.Methods);
 
-if (!Prototype.BrowserFeatures.ElementExtensions &&
-    document.createElement('div')['__proto__']) {
-  window.HTMLElement = { };
-  window.HTMLElement.prototype = document.createElement('div')['__proto__'];
-  Prototype.BrowserFeatures.ElementExtensions = true;
-}
+(function(div) {
+
+  if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {
+    window.HTMLElement = { };
+    window.HTMLElement.prototype = div['__proto__'];
+    Prototype.BrowserFeatures.ElementExtensions = true;
+  }
+
+  div = null;
+
+})(document.createElement('div'));
 
 Element.extend = (function() {
-  if (Prototype.BrowserFeatures.SpecificElementExtensions)
-    return Prototype.K;
-
-  var Methods = { }, ByTag = Element.Methods.ByTag;
-
-  var extend = Object.extend(function(element) {
-    if (!element || element._extendedByPrototype ||
-        element.nodeType != 1 || element == window) return element;
-
-    var methods = Object.clone(Methods),
-      tagName = element.tagName.toUpperCase(), property, value;
-
-    // extend methods for specific tags
-    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
-
-    for (property in methods) {
-      value = methods[property];
+
+  function checkDeficiency(tagName) {
+    if (typeof window.Element != 'undefined') {
+      var proto = window.Element.prototype;
+      if (proto) {
+        var id = '_' + (Math.random()+'').slice(2),
+            el = document.createElement(tagName);
+        proto[id] = 'x';
+        var isBuggy = (el[id] !== 'x');
+        delete proto[id];
+        el = null;
+        return isBuggy;
+      }
+    }
+    return false;
+  }
+
+  function extendElementWith(element, methods) {
+    for (var property in methods) {
+      var value = methods[property];
       if (Object.isFunction(value) && !(property in element))
         element[property] = value.methodize();
     }
+  }
+
+  var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object');
+
+  if (Prototype.BrowserFeatures.SpecificElementExtensions) {
+    if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {
+      return function(element) {
+        if (element && typeof element._extendedByPrototype == 'undefined') {
+          var t = element.tagName;
+          if (t && (/^(?:object|applet|embed)$/i.test(t))) {
+            extendElementWith(element, Element.Methods);
+            extendElementWith(element, Element.Methods.Simulated);
+            extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]);
+          }
+        }
+        return element;
+      }
+    }
+    return Prototype.K;
+  }
+
+  var Methods = { }, ByTag = Element.Methods.ByTag;
+
+  var extend = Object.extend(function(element) {
+    if (!element || typeof element._extendedByPrototype != 'undefined' ||
+        element.nodeType != 1 || element == window) return element;
+
+    var methods = Object.clone(Methods),
+        tagName = element.tagName.toUpperCase();
+
+    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+    extendElementWith(element, methods);
 
     element._extendedByPrototype = Prototype.emptyFunction;
     return element;
 
   }, {
     refresh: function() {
-      // extend methods for all tags (Safari doesn't need this)
       if (!Prototype.BrowserFeatures.ElementExtensions) {
         Object.extend(Methods, Element.Methods);
         Object.extend(Methods, Element.Methods.Simulated);
@@ -2594,10 +2955,14 @@
   return extend;
 })();
 
-Element.hasAttribute = function(element, attribute) {
-  if (element.hasAttribute) return element.hasAttribute(attribute);
-  return Element.Methods.Simulated.hasAttribute(element, attribute);
-};
+if (document.documentElement.hasAttribute) {
+  Element.hasAttribute = function(element, attribute) {
+    return element.hasAttribute(attribute);
+  };
+}
+else {
+  Element.hasAttribute = Element.Methods.Simulated.hasAttribute;
+}
 
 Element.addMethods = function(methods) {
   var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
@@ -2609,7 +2974,8 @@
       "FORM":     Object.clone(Form.Methods),
       "INPUT":    Object.clone(Form.Element.Methods),
       "SELECT":   Object.clone(Form.Element.Methods),
-      "TEXTAREA": Object.clone(Form.Element.Methods)
+      "TEXTAREA": Object.clone(Form.Element.Methods),
+      "BUTTON":   Object.clone(Form.Element.Methods)
     });
   }
 
@@ -2661,14 +3027,19 @@
     klass = 'HTML' + tagName.capitalize() + 'Element';
     if (window[klass]) return window[klass];
 
-    window[klass] = { };
-    window[klass].prototype = document.createElement(tagName)['__proto__'];
-    return window[klass];
-  }
+    var element = document.createElement(tagName),
+        proto = element['__proto__'] || element.constructor.prototype;
+
+    element = null;
+    return proto;
+  }
+
+  var elementPrototype = window.HTMLElement ? HTMLElement.prototype :
+   Element.prototype;
 
   if (F.ElementExtensions) {
-    copy(Element.Methods, HTMLElement.prototype);
-    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+    copy(Element.Methods, elementPrototype);
+    copy(Element.Methods.Simulated, elementPrototype, true);
   }
 
   if (F.SpecificElementExtensions) {
@@ -2686,791 +3057,1947 @@
   Element.cache = { };
 };
 
+
 document.viewport = {
+
   getDimensions: function() {
-    var dimensions = { }, B = Prototype.Browser;
-    $w('width height').each(function(d) {
-      var D = d.capitalize();
-      if (B.WebKit && !document.evaluate) {
-        // Safari <3.0 needs self.innerWidth/Height
-        dimensions[d] = self['inner' + D];
-      } else if (B.Opera && parseFloat(window.opera.version()) < 9.5) {
-        // Opera <9.5 needs document.body.clientWidth/Height
-        dimensions[d] = document.body['client' + D]
-      } else {
-        dimensions[d] = document.documentElement['client' + D];
-      }
-    });
-    return dimensions;
-  },
-
-  getWidth: function() {
-    return this.getDimensions().width;
-  },
-
-  getHeight: function() {
-    return this.getDimensions().height;
+    return { width: this.getWidth(), height: this.getHeight() };
   },
 
   getScrollOffsets: function() {
     return Element._returnOffset(
       window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
-      window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+      window.pageYOffset || document.documentElement.scrollTop  || document.body.scrollTop);
   }
 };
-/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
- * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
- * license.  Please see http://www.yui-ext.com/ for more information. */
-
-var Selector = Class.create({
-  initialize: function(expression) {
-    this.expression = expression.strip();
-
-    if (this.shouldUseSelectorsAPI()) {
-      this.mode = 'selectorsAPI';
-    } else if (this.shouldUseXPath()) {
-      this.mode = 'xpath';
-      this.compileXPathMatcher();
+
+(function(viewport) {
+  var B = Prototype.Browser, doc = document, element, property = {};
+
+  function getRootElement() {
+    if (B.WebKit && !doc.evaluate)
+      return document;
+
+    if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
+      return document.body;
+
+    return document.documentElement;
+  }
+
+  function define(D) {
+    if (!element) element = getRootElement();
+
+    property[D] = 'client' + D;
+
+    viewport['get' + D] = function() { return element[property[D]] };
+    return viewport['get' + D]();
+  }
+
+  viewport.getWidth  = define.curry('Width');
+
+  viewport.getHeight = define.curry('Height');
+})(document.viewport);
+
+
+Element.Storage = {
+  UID: 1
+};
+
+Element.addMethods({
+  getStorage: function(element) {
+    if (!(element = $(element))) return;
+
+    var uid;
+    if (element === window) {
+      uid = 0;
     } else {
-      this.mode = "normal";
-      this.compileMatcher();
+      if (typeof element._prototypeUID === "undefined")
+        element._prototypeUID = Element.Storage.UID++;
+      uid = element._prototypeUID;
     }
 
+    if (!Element.Storage[uid])
+      Element.Storage[uid] = $H();
+
+    return Element.Storage[uid];
   },
 
-  shouldUseXPath: function() {
-    if (!Prototype.BrowserFeatures.XPath) return false;
-
-    var e = this.expression;
-
-    // Safari 3 chokes on :*-of-type and :empty
-    if (Prototype.Browser.WebKit &&
-     (e.include("-of-type") || e.include(":empty")))
-      return false;
-
-    // XPath can't do namespaced attributes, nor can it read
-    // the "checked" property from DOM nodes
-    if ((/(\[[\w-]*?:|:checked)/).test(e))
-      return false;
-
+  store: function(element, key, value) {
+    if (!(element = $(element))) return;
+
+    if (arguments.length === 2) {
+      Element.getStorage(element).update(key);
+    } else {
+      Element.getStorage(element).set(key, value);
+    }
+
+    return element;
+  },
+
+  retrieve: function(element, key, defaultValue) {
+    if (!(element = $(element))) return;
+    var hash = Element.getStorage(element), value = hash.get(key);
+
+    if (Object.isUndefined(value)) {
+      hash.set(key, defaultValue);
+      value = defaultValue;
+    }
+
+    return value;
+  },
+
+  clone: function(element, deep) {
+    if (!(element = $(element))) return;
+    var clone = element.cloneNode(deep);
+    clone._prototypeUID = void 0;
+    if (deep) {
+      var descendants = Element.select(clone, '*'),
+          i = descendants.length;
+      while (i--) {
+        descendants[i]._prototypeUID = void 0;
+      }
+    }
+    return Element.extend(clone);
+  },
+
+  purge: function(element) {
+    if (!(element = $(element))) return;
+    var purgeElement = Element._purgeElement;
+
+    purgeElement(element);
+
+    var descendants = element.getElementsByTagName('*'),
+     i = descendants.length;
+
+    while (i--) purgeElement(descendants[i]);
+
+    return null;
+  }
+});
+
+(function() {
+
+  function toDecimal(pctString) {
+    var match = pctString.match(/^(\d+)%?$/i);
+    if (!match) return null;
+    return (Number(match[1]) / 100);
+  }
+
+  function getPixelValue(value, property, context) {
+    var element = null;
+    if (Object.isElement(value)) {
+      element = value;
+      value = element.getStyle(property);
+    }
+
+    if (value === null) {
+      return null;
+    }
+
+    if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) {
+      return window.parseFloat(value);
+    }
+
+    var isPercentage = value.include('%'), isViewport = (context === document.viewport);
+
+    if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) {
+      var style = element.style.left, rStyle = element.runtimeStyle.left;
+      element.runtimeStyle.left = element.currentStyle.left;
+      element.style.left = value || 0;
+      value = element.style.pixelLeft;
+      element.style.left = style;
+      element.runtimeStyle.left = rStyle;
+
+      return value;
+    }
+
+    if (element && isPercentage) {
+      context = context || element.parentNode;
+      var decimal = toDecimal(value);
+      var whole = null;
+      var position = element.getStyle('position');
+
+      var isHorizontal = property.include('left') || property.include('right') ||
+       property.include('width');
+
+      var isVertical =  property.include('top') || property.include('bottom') ||
+        property.include('height');
+
+      if (context === document.viewport) {
+        if (isHorizontal) {
+          whole = document.viewport.getWidth();
+        } else if (isVertical) {
+          whole = document.viewport.getHeight();
+        }
+      } else {
+        if (isHorizontal) {
+          whole = $(context).measure('width');
+        } else if (isVertical) {
+          whole = $(context).measure('height');
+        }
+      }
+
+      return (whole === null) ? 0 : whole * decimal;
+    }
+
+    return 0;
+  }
+
+  function toCSSPixels(number) {
+    if (Object.isString(number) && number.endsWith('px')) {
+      return number;
+    }
+    return number + 'px';
+  }
+
+  function isDisplayed(element) {
+    var originalElement = element;
+    while (element && element.parentNode) {
+      var display = element.getStyle('display');
+      if (display === 'none') {
+        return false;
+      }
+      element = $(element.parentNode);
+    }
     return true;
-  },
-
-  shouldUseSelectorsAPI: function() {
-    if (!Prototype.BrowserFeatures.SelectorsAPI) return false;
-
-    if (!Selector._div) Selector._div = new Element('div');
-
-    // Make sure the browser treats the selector as valid. Test on an
-    // isolated element to minimize cost of this check.
-    try {
-      Selector._div.querySelector(this.expression);
-    } catch(e) {
-      return false;
+  }
+
+  var hasLayout = Prototype.K;
+  if ('currentStyle' in document.documentElement) {
+    hasLayout = function(element) {
+      if (!element.currentStyle.hasLayout) {
+        element.style.zoom = 1;
+      }
+      return element;
+    };
+  }
+
+  function cssNameFor(key) {
+    if (key.include('border')) key = key + '-width';
+    return key.camelize();
+  }
+
+  Element.Layout = Class.create(Hash, {
+    initialize: function($super, element, preCompute) {
+      $super();
+      this.element = $(element);
+
+      Element.Layout.PROPERTIES.each( function(property) {
+        this._set(property, null);
+      }, this);
+
+      if (preCompute) {
+        this._preComputing = true;
+        this._begin();
+        Element.Layout.PROPERTIES.each( this._compute, this );
+        this._end();
+        this._preComputing = false;
+      }
+    },
+
+    _set: function(property, value) {
+      return Hash.prototype.set.call(this, property, value);
+    },
+
+    set: function(property, value) {
+      throw "Properties of Element.Layout are read-only.";
+    },
+
+    get: function($super, property) {
+      var value = $super(property);
+      return value === null ? this._compute(property) : value;
+    },
+
+    _begin: function() {
+      if (this._prepared) return;
+
+      var element = this.element;
+      if (isDisplayed(element)) {
+        this._prepared = true;
+        return;
+      }
+
+      var originalStyles = {
+        position:   element.style.position   || '',
+        width:      element.style.width      || '',
+        visibility: element.style.visibility || '',
+        display:    element.style.display    || ''
+      };
+
+      element.store('prototype_original_styles', originalStyles);
+
+      var position = element.getStyle('position'),
+       width = element.getStyle('width');
+
+      if (width === "0px" || width === null) {
+        element.style.display = 'block';
+        width = element.getStyle('width');
+      }
+
+      var context = (position === 'fixed') ? document.viewport :
+       element.parentNode;
+
+      element.setStyle({
+        position:   'absolute',
+        visibility: 'hidden',
+        display:    'block'
+      });
+
+      var positionedWidth = element.getStyle('width');
+
+      var newWidth;
+      if (width && (positionedWidth === width)) {
+        newWidth = getPixelValue(element, 'width', context);
+      } else if (position === 'absolute' || position === 'fixed') {
+        newWidth = getPixelValue(element, 'width', context);
+      } else {
+        var parent = element.parentNode, pLayout = $(parent).getLayout();
+
+        newWidth = pLayout.get('width') -
+         this.get('margin-left') -
+         this.get('border-left') -
+         this.get('padding-left') -
+         this.get('padding-right') -
+         this.get('border-right') -
+         this.get('margin-right');
+      }
+
+      element.setStyle({ width: newWidth + 'px' });
+
+      this._prepared = true;
+    },
+
+    _end: function() {
+      var element = this.element;
+      var originalStyles = element.retrieve('prototype_original_styles');
+      element.store('prototype_original_styles', null);
+      element.setStyle(originalStyles);
+      this._prepared = false;
+    },
+
+    _compute: function(property) {
+      var COMPUTATIONS = Element.Layout.COMPUTATIONS;
+      if (!(property in COMPUTATIONS)) {
+        throw "Property not found.";
+      }
+
+      return this._set(property, COMPUTATIONS[property].call(this, this.element));
+    },
+
+    toObject: function() {
+      var args = $A(arguments);
+      var keys = (args.length === 0) ? Element.Layout.PROPERTIES :
+       args.join(' ').split(' ');
+      var obj = {};
+      keys.each( function(key) {
+        if (!Element.Layout.PROPERTIES.include(key)) return;
+        var value = this.get(key);
+        if (value != null) obj[key] = value;
+      }, this);
+      return obj;
+    },
+
+    toHash: function() {
+      var obj = this.toObject.apply(this, arguments);
+      return new Hash(obj);
+    },
+
+    toCSS: function() {
+      var args = $A(arguments);
+      var keys = (args.length === 0) ? Element.Layout.PROPERTIES :
+       args.join(' ').split(' ');
+      var css = {};
+
+      keys.each( function(key) {
+        if (!Element.Layout.PROPERTIES.include(key)) return;
+        if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return;
+
+        var value = this.get(key);
+        if (value != null) css[cssNameFor(key)] = value + 'px';
+      }, this);
+      return css;
+    },
+
+    inspect: function() {
+      return "#<Element.Layout>";
     }
-
-    return true;
-  },
-
-  compileMatcher: function() {
-    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
-        c = Selector.criteria, le, p, m;
-
-    if (Selector._cache[e]) {
-      this.matcher = Selector._cache[e];
-      return;
+  });
+
+  Object.extend(Element.Layout, {
+    PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'),
+
+    COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'),
+
+    COMPUTATIONS: {
+      'height': function(element) {
+        if (!this._preComputing) this._begin();
+
+        var bHeight = this.get('border-box-height');
+        if (bHeight <= 0) {
+          if (!this._preComputing) this._end();
+          return 0;
+        }
+
+        var bTop = this.get('border-top'),
+         bBottom = this.get('border-bottom');
+
+        var pTop = this.get('padding-top'),
+         pBottom = this.get('padding-bottom');
+
+        if (!this._preComputing) this._end();
+
+        return bHeight - bTop - bBottom - pTop - pBottom;
+      },
+
+      'width': function(element) {
+        if (!this._preComputing) this._begin();
+
+        var bWidth = this.get('border-box-width');
+        if (bWidth <= 0) {
+          if (!this._preComputing) this._end();
+          return 0;
+        }
+
+        var bLeft = this.get('border-left'),
+         bRight = this.get('border-right');
+
+        var pLeft = this.get('padding-left'),
+         pRight = this.get('padding-right');
+
+        if (!this._preComputing) this._end();
+
+        return bWidth - bLeft - bRight - pLeft - pRight;
+      },
+
+      'padding-box-height': function(element) {
+        var height = this.get('height'),
+         pTop = this.get('padding-top'),
+         pBottom = this.get('padding-bottom');
+
+        return height + pTop + pBottom;
+      },
+
+      'padding-box-width': function(element) {
+        var width = this.get('width'),
+         pLeft = this.get('padding-left'),
+         pRight = this.get('padding-right');
+
+        return width + pLeft + pRight;
+      },
+
+      'border-box-height': function(element) {
+        if (!this._preComputing) this._begin();
+        var height = element.offsetHeight;
+        if (!this._preComputing) this._end();
+        return height;
+      },
+
+      'border-box-width': function(element) {
+        if (!this._preComputing) this._begin();
+        var width = element.offsetWidth;
+        if (!this._preComputing) this._end();
+        return width;
+      },
+
+      'margin-box-height': function(element) {
+        var bHeight = this.get('border-box-height'),
+         mTop = this.get('margin-top'),
+         mBottom = this.get('margin-bottom');
+
+        if (bHeight <= 0) return 0;
+
+        return bHeight + mTop + mBottom;
+      },
+
+      'margin-box-width': function(element) {
+        var bWidth = this.get('border-box-width'),
+         mLeft = this.get('margin-left'),
+         mRight = this.get('margin-right');
+
+        if (bWidth <= 0) return 0;
+
+        return bWidth + mLeft + mRight;
+      },
+
+      'top': function(element) {
+        var offset = element.positionedOffset();
+        return offset.top;
+      },
+
+      'bottom': function(element) {
+        var offset = element.positionedOffset(),
+         parent = element.getOffsetParent(),
+         pHeight = parent.measure('height');
+
+        var mHeight = this.get('border-box-height');
+
+        return pHeight - mHeight - offset.top;
+      },
+
+      'left': function(element) {
+        var offset = element.positionedOffset();
+        return offset.left;
+      },
+
+      'right': function(element) {
+        var offset = element.positionedOffset(),
+         parent = element.getOffsetParent(),
+         pWidth = parent.measure('width');
+
+        var mWidth = this.get('border-box-width');
+
+        return pWidth - mWidth - offset.left;
+      },
+
+      'padding-top': function(element) {
+        return getPixelValue(element, 'paddingTop');
+      },
+
+      'padding-bottom': function(element) {
+        return getPixelValue(element, 'paddingBottom');
+      },
+
+      'padding-left': function(element) {
+        return getPixelValue(element, 'paddingLeft');
+      },
+
+      'padding-right': function(element) {
+        return getPixelValue(element, 'paddingRight');
+      },
+
+      'border-top': function(element) {
+        return getPixelValue(element, 'borderTopWidth');
+      },
+
+      'border-bottom': function(element) {
+        return getPixelValue(element, 'borderBottomWidth');
+      },
+
+      'border-left': function(element) {
+        return getPixelValue(element, 'borderLeftWidth');
+      },
+
+      'border-right': function(element) {
+        return getPixelValue(element, 'borderRightWidth');
+      },
+
+      'margin-top': function(element) {
+        return getPixelValue(element, 'marginTop');
+      },
+
+      'margin-bottom': function(element) {
+        return getPixelValue(element, 'marginBottom');
+      },
+
+      'margin-left': function(element) {
+        return getPixelValue(element, 'marginLeft');
+      },
+
+      'margin-right': function(element) {
+        return getPixelValue(element, 'marginRight');
+      }
     }
-
-    this.matcher = ["this.matcher = function(root) {",
-                    "var r = root, h = Selector.handlers, c = false, n;"];
-
-    while (e && le != e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        p = ps[i];
-        if (m = e.match(p)) {
-          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
-            new Template(c[i]).evaluate(m));
-          e = e.replace(m[0], '');
+  });
+
+  if ('getBoundingClientRect' in document.documentElement) {
+    Object.extend(Element.Layout.COMPUTATIONS, {
+      'right': function(element) {
+        var parent = hasLayout(element.getOffsetParent());
+        var rect = element.getBoundingClientRect(),
+         pRect = parent.getBoundingClientRect();
+
+        return (pRect.right - rect.right).round();
+      },
+
+      'bottom': function(element) {
+        var parent = hasLayout(element.getOffsetParent());
+        var rect = element.getBoundingClientRect(),
+         pRect = parent.getBoundingClientRect();
+
+        return (pRect.bottom - rect.bottom).round();
+      }
+    });
+  }
+
+  Element.Offset = Class.create({
+    initialize: function(left, top) {
+      this.left = left.round();
+      this.top  = top.round();
+
+      this[0] = this.left;
+      this[1] = this.top;
+    },
+
+    relativeTo: function(offset) {
+      return new Element.Offset(
+        this.left - offset.left,
+        this.top  - offset.top
+      );
+    },
+
+    inspect: function() {
+      return "#<Element.Offset left: #{left} top: #{top}>".interpolate(this);
+    },
+
+    toString: function() {
+      return "[#{left}, #{top}]".interpolate(this);
+    },
+
+    toArray: function() {
+      return [this.left, this.top];
+    }
+  });
+
+  function getLayout(element, preCompute) {
+    return new Element.Layout(element, preCompute);
+  }
+
+  function measure(element, property) {
+    return $(element).getLayout().get(property);
+  }
+
+  function getDimensions(element) {
+    element = $(element);
+    var display = Element.getStyle(element, 'display');
+
+    if (display && display !== 'none') {
+      return { width: element.offsetWidth, height: element.offsetHeight };
+    }
+
+    var style = element.style;
+    var originalStyles = {
+      visibility: style.visibility,
+      position:   style.position,
+      display:    style.display
+    };
+
+    var newStyles = {
+      visibility: 'hidden',
+      display:    'block'
+    };
+
+    if (originalStyles.position !== 'fixed')
+      newStyles.position = 'absolute';
+
+    Element.setStyle(element, newStyles);
+
+    var dimensions = {
+      width:  element.offsetWidth,
+      height: element.offsetHeight
+    };
+
+    Element.setStyle(element, originalStyles);
+
+    return dimensions;
+  }
+
+  function getOffsetParent(element) {
+    element = $(element);
+
+    if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
+      return $(document.body);
+
+    var isInline = (Element.getStyle(element, 'display') === 'inline');
+    if (!isInline && element.offsetParent) return $(element.offsetParent);
+
+    while ((element = element.parentNode) && element !== document.body) {
+      if (Element.getStyle(element, 'position') !== 'static') {
+        return isHtml(element) ? $(document.body) : $(element);
+      }
+    }
+
+    return $(document.body);
+  }
+
+
+  function cumulativeOffset(element) {
+    element = $(element);
+    var valueT = 0, valueL = 0;
+    if (element.parentNode) {
+      do {
+        valueT += element.offsetTop  || 0;
+        valueL += element.offsetLeft || 0;
+        element = element.offsetParent;
+      } while (element);
+    }
+    return new Element.Offset(valueL, valueT);
+  }
+
+  function positionedOffset(element) {
+    element = $(element);
+
+    var layout = element.getLayout();
+
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+      if (element) {
+        if (isBody(element)) break;
+        var p = Element.getStyle(element, 'position');
+        if (p !== 'static') break;
+      }
+    } while (element);
+
+    valueL -= layout.get('margin-top');
+    valueT -= layout.get('margin-left');
+
+    return new Element.Offset(valueL, valueT);
+  }
+
+  function cumulativeScrollOffset(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.scrollTop  || 0;
+      valueL += element.scrollLeft || 0;
+      element = element.parentNode;
+    } while (element);
+    return new Element.Offset(valueL, valueT);
+  }
+
+  function viewportOffset(forElement) {
+    element = $(element);
+    var valueT = 0, valueL = 0, docBody = document.body;
+
+    var element = forElement;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      if (element.offsetParent == docBody &&
+        Element.getStyle(element, 'position') == 'absolute') break;
+    } while (element = element.offsetParent);
+
+    element = forElement;
+    do {
+      if (element != docBody) {
+        valueT -= element.scrollTop  || 0;
+        valueL -= element.scrollLeft || 0;
+      }
+    } while (element = element.parentNode);
+    return new Element.Offset(valueL, valueT);
+  }
+
+  function absolutize(element) {
+    element = $(element);
+
+    if (Element.getStyle(element, 'position') === 'absolute') {
+      return element;
+    }
+
+    var offsetParent = getOffsetParent(element);
+    var eOffset = element.viewportOffset(),
+     pOffset = offsetParent.viewportOffset();
+
+    var offset = eOffset.relativeTo(pOffset);
+    var layout = element.getLayout();
+
+    element.store('prototype_absolutize_original_styles', {
+      left:   element.getStyle('left'),
+      top:    element.getStyle('top'),
+      width:  element.getStyle('width'),
+      height: element.getStyle('height')
+    });
+
+    element.setStyle({
+      position: 'absolute',
+      top:    offset.top + 'px',
+      left:   offset.left + 'px',
+      width:  layout.get('width') + 'px',
+      height: layout.get('height') + 'px'
+    });
+
+    return element;
+  }
+
+  function relativize(element) {
+    element = $(element);
+    if (Element.getStyle(element, 'position') === 'relative') {
+      return element;
+    }
+
+    var originalStyles =
+     element.retrieve('prototype_absolutize_original_styles');
+
+    if (originalStyles) element.setStyle(originalStyles);
+    return element;
+  }
+
+  if (Prototype.Browser.IE) {
+    getOffsetParent = getOffsetParent.wrap(
+      function(proceed, element) {
+        element = $(element);
+
+        if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
+          return $(document.body);
+
+        var position = element.getStyle('position');
+        if (position !== 'static') return proceed(element);
+
+        element.setStyle({ position: 'relative' });
+        var value = proceed(element);
+        element.setStyle({ position: position });
+        return value;
+      }
+    );
+
+    positionedOffset = positionedOffset.wrap(function(proceed, element) {
+      element = $(element);
+      if (!element.parentNode) return new Element.Offset(0, 0);
+      var position = element.getStyle('position');
+      if (position !== 'static') return proceed(element);
+
+      var offsetParent = element.getOffsetParent();
+      if (offsetParent && offsetParent.getStyle('position') === 'fixed')
+        hasLayout(offsetParent);
+
+      element.setStyle({ position: 'relative' });
+      var value = proceed(element);
+      element.setStyle({ position: position });
+      return value;
+    });
+  } else if (Prototype.Browser.Webkit) {
+    cumulativeOffset = function(element) {
+      element = $(element);
+      var valueT = 0, valueL = 0;
+      do {
+        valueT += element.offsetTop  || 0;
+        valueL += element.offsetLeft || 0;
+        if (element.offsetParent == document.body)
+          if (Element.getStyle(element, 'position') == 'absolute') break;
+
+        element = element.offsetParent;
+      } while (element);
+
+      return new Element.Offset(valueL, valueT);
+    };
+  }
+
+
+  Element.addMethods({
+    getLayout:              getLayout,
+    measure:                measure,
+    getDimensions:          getDimensions,
+    getOffsetParent:        getOffsetParent,
+    cumulativeOffset:       cumulativeOffset,
+    positionedOffset:       positionedOffset,
+    cumulativeScrollOffset: cumulativeScrollOffset,
+    viewportOffset:         viewportOffset,
+    absolutize:             absolutize,
+    relativize:             relativize
+  });
+
+  function isBody(element) {
+    return element.nodeName.toUpperCase() === 'BODY';
+  }
+
+  function isHtml(element) {
+    return element.nodeName.toUpperCase() === 'HTML';
+  }
+
+  function isDocument(element) {
+    return element.nodeType === Node.DOCUMENT_NODE;
+  }
+
+  function isDetached(element) {
+    return element !== document.body &&
+     !Element.descendantOf(element, document.body);
+  }
+
+  if ('getBoundingClientRect' in document.documentElement) {
+    Element.addMethods({
+      viewportOffset: function(element) {
+        element = $(element);
+        if (isDetached(element)) return new Element.Offset(0, 0);
+
+        var rect = element.getBoundingClientRect(),
+         docEl = document.documentElement;
+        return new Element.Offset(rect.left - docEl.clientLeft,
+         rect.top - docEl.clientTop);
+      }
+    });
+  }
+})();
+window.$$ = function() {
+  var expression = $A(arguments).join(', ');
+  return Prototype.Selector.select(expression, document);
+};
+
+Prototype.Selector = (function() {
+
+  function select() {
+    throw new Error('Method "Prototype.Selector.select" must be defined.');
+  }
+
+  function match() {
+    throw new Error('Method "Prototype.Selector.match" must be defined.');
+  }
+
+  function find(elements, expression, index) {
+    index = index || 0;
+    var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i;
+
+    for (i = 0; i < length; i++) {
+      if (match(elements[i], expression) && index == matchIndex++) {
+        return Element.extend(elements[i]);
+      }
+    }
+  }
+
+  function extendElements(elements) {
+    for (var i = 0, length = elements.length; i < length; i++) {
+      Element.extend(elements[i]);
+    }
+    return elements;
+  }
+
+
+  var K = Prototype.K;
+
+  return {
+    select: select,
+    match: match,
+    find: find,
+    extendElements: (Element.extend === K) ? K : extendElements,
+    extendElement: Element.extend
+  };
+})();
+Prototype._original_property = window.Sizzle;
+/*!
+ * Sizzle CSS Selector Engine - v1.0
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+  done = 0,
+  toString = Object.prototype.toString,
+  hasDuplicate = false,
+  baseHasDuplicate = true;
+
+[0, 0].sort(function(){
+  baseHasDuplicate = false;
+  return 0;
+});
+
+var Sizzle = function(selector, context, results, seed) {
+  results = results || [];
+  var origContext = context = context || document;
+
+  if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+    return [];
+  }
+
+  if ( !selector || typeof selector !== "string" ) {
+    return results;
+  }
+
+  var parts = [], m, set, checkSet, check, mode, extra, prune = true, contextXML = isXML(context),
+    soFar = selector;
+
+  while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
+    soFar = m[3];
+
+    parts.push( m[1] );
+
+    if ( m[2] ) {
+      extra = m[3];
+      break;
+    }
+  }
+
+  if ( parts.length > 1 && origPOS.exec( selector ) ) {
+    if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+      set = posProcess( parts[0] + parts[1], context );
+    } else {
+      set = Expr.relative[ parts[0] ] ?
+        [ context ] :
+        Sizzle( parts.shift(), context );
+
+      while ( parts.length ) {
+        selector = parts.shift();
+
+        if ( Expr.relative[ selector ] )
+          selector += parts.shift();
+
+        set = posProcess( selector, set );
+      }
+    }
+  } else {
+    if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+        Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+      var ret = Sizzle.find( parts.shift(), context, contextXML );
+      context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
+    }
+
+    if ( context ) {
+      var ret = seed ?
+        { expr: parts.pop(), set: makeArray(seed) } :
+        Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+      set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
+
+      if ( parts.length > 0 ) {
+        checkSet = makeArray(set);
+      } else {
+        prune = false;
+      }
+
+      while ( parts.length ) {
+        var cur = parts.pop(), pop = cur;
+
+        if ( !Expr.relative[ cur ] ) {
+          cur = "";
+        } else {
+          pop = parts.pop();
+        }
+
+        if ( pop == null ) {
+          pop = context;
+        }
+
+        Expr.relative[ cur ]( checkSet, pop, contextXML );
+      }
+    } else {
+      checkSet = parts = [];
+    }
+  }
+
+  if ( !checkSet ) {
+    checkSet = set;
+  }
+
+  if ( !checkSet ) {
+    throw "Syntax error, unrecognized expression: " + (cur || selector);
+  }
+
+  if ( toString.call(checkSet) === "[object Array]" ) {
+    if ( !prune ) {
+      results.push.apply( results, checkSet );
+    } else if ( context && context.nodeType === 1 ) {
+      for ( var i = 0; checkSet[i] != null; i++ ) {
+        if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
+          results.push( set[i] );
+        }
+      }
+    } else {
+      for ( var i = 0; checkSet[i] != null; i++ ) {
+        if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+          results.push( set[i] );
+        }
+      }
+    }
+  } else {
+    makeArray( checkSet, results );
+  }
+
+  if ( extra ) {
+    Sizzle( extra, origContext, results, seed );
+    Sizzle.uniqueSort( results );
+  }
+
+  return results;
+};
+
+Sizzle.uniqueSort = function(results){
+  if ( sortOrder ) {
+    hasDuplicate = baseHasDuplicate;
+    results.sort(sortOrder);
+
+    if ( hasDuplicate ) {
+      for ( var i = 1; i < results.length; i++ ) {
+        if ( results[i] === results[i-1] ) {
+          results.splice(i--, 1);
+        }
+      }
+    }
+  }
+
+  return results;
+};
+
+Sizzle.matches = function(expr, set){
+  return Sizzle(expr, null, null, set);
+};
+
+Sizzle.find = function(expr, context, isXML){
+  var set, match;
+
+  if ( !expr ) {
+    return [];
+  }
+
+  for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+    var type = Expr.order[i], match;
+
+    if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+      var left = match[1];
+      match.splice(1,1);
+
+      if ( left.substr( left.length - 1 ) !== "\\" ) {
+        match[1] = (match[1] || "").replace(/\\/g, "");
+        set = Expr.find[ type ]( match, context, isXML );
+        if ( set != null ) {
+          expr = expr.replace( Expr.match[ type ], "" );
           break;
         }
       }
     }
-
-    this.matcher.push("return h.unique(n);\n}");
-    eval(this.matcher.join('\n'));
-    Selector._cache[this.expression] = this.matcher;
-  },
-
-  compileXPathMatcher: function() {
-    var e = this.expression, ps = Selector.patterns,
-        x = Selector.xpath, le, m;
-
-    if (Selector._cache[e]) {
-      this.xpath = Selector._cache[e]; return;
-    }
-
-    this.matcher = ['.//*'];
-    while (e && le != e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        if (m = e.match(ps[i])) {
-          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
-            new Template(x[i]).evaluate(m));
-          e = e.replace(m[0], '');
+  }
+
+  if ( !set ) {
+    set = context.getElementsByTagName("*");
+  }
+
+  return {set: set, expr: expr};
+};
+
+Sizzle.filter = function(expr, set, inplace, not){
+  var old = expr, result = [], curLoop = set, match, anyFound,
+    isXMLFilter = set && set[0] && isXML(set[0]);
+
+  while ( expr && set.length ) {
+    for ( var type in Expr.filter ) {
+      if ( (match = Expr.match[ type ].exec( expr )) != null ) {
+        var filter = Expr.filter[ type ], found, item;
+        anyFound = false;
+
+        if ( curLoop == result ) {
+          result = [];
+        }
+
+        if ( Expr.preFilter[ type ] ) {
+          match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+          if ( !match ) {
+            anyFound = found = true;
+          } else if ( match === true ) {
+            continue;
+          }
+        }
+
+        if ( match ) {
+          for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+            if ( item ) {
+              found = filter( item, match, i, curLoop );
+              var pass = not ^ !!found;
+
+              if ( inplace && found != null ) {
+                if ( pass ) {
+                  anyFound = true;
+                } else {
+                  curLoop[i] = false;
+                }
+              } else if ( pass ) {
+                result.push( item );
+                anyFound = true;
+              }
+            }
+          }
+        }
+
+        if ( found !== undefined ) {
+          if ( !inplace ) {
+            curLoop = result;
+          }
+
+          expr = expr.replace( Expr.match[ type ], "" );
+
+          if ( !anyFound ) {
+            return [];
+          }
+
           break;
         }
       }
     }
 
-    this.xpath = this.matcher.join('');
-    Selector._cache[this.expression] = this.xpath;
+    if ( expr == old ) {
+      if ( anyFound == null ) {
+        throw "Syntax error, unrecognized expression: " + expr;
+      } else {
+        break;
+      }
+    }
+
+    old = expr;
+  }
+
+  return curLoop;
+};
+
+var Expr = Sizzle.selectors = {
+  order: [ "ID", "NAME", "TAG" ],
+  match: {
+    ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+    CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+    NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
+    ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
+    TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
+    CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
+    POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
+    PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
   },
-
-  findElements: function(root) {
-    root = root || document;
-    var e = this.expression, results;
-
-    switch (this.mode) {
-      case 'selectorsAPI':
-        // querySelectorAll queries document-wide, then filters to descendants
-        // of the context element. That's not what we want.
-        // Add an explicit context to the selector if necessary.
-        if (root !== document) {
-          var oldId = root.id, id = $(root).identify();
-          e = "#" + id + " " + e;
-        }
-
-        results = $A(root.querySelectorAll(e)).map(Element.extend);
-        root.id = oldId;
-
-        return results;
-      case 'xpath':
-        return document._getElementsByXPath(this.xpath, root);
-      default:
-       return this.matcher(root);
+  leftMatch: {},
+  attrMap: {
+    "class": "className",
+    "for": "htmlFor"
+  },
+  attrHandle: {
+    href: function(elem){
+      return elem.getAttribute("href");
     }
   },
-
-  match: function(element) {
-    this.tokens = [];
-
-    var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
-    var le, p, m;
-
-    while (e && le !== e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        p = ps[i];
-        if (m = e.match(p)) {
-          // use the Selector.assertions methods unless the selector
-          // is too complex.
-          if (as[i]) {
-            this.tokens.push([i, Object.clone(m)]);
-            e = e.replace(m[0], '');
-          } else {
-            // reluctantly do a document-wide search
-            // and look for a match in the array
-            return this.findElements(document).include(element);
+  relative: {
+    "+": function(checkSet, part, isXML){
+      var isPartStr = typeof part === "string",
+        isTag = isPartStr && !/\W/.test(part),
+        isPartStrNotTag = isPartStr && !isTag;
+
+      if ( isTag && !isXML ) {
+        part = part.toUpperCase();
+      }
+
+      for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+        if ( (elem = checkSet[i]) ) {
+          while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+          checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
+            elem || false :
+            elem === part;
+        }
+      }
+
+      if ( isPartStrNotTag ) {
+        Sizzle.filter( part, checkSet, true );
+      }
+    },
+    ">": function(checkSet, part, isXML){
+      var isPartStr = typeof part === "string";
+
+      if ( isPartStr && !/\W/.test(part) ) {
+        part = isXML ? part : part.toUpperCase();
+
+        for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+          var elem = checkSet[i];
+          if ( elem ) {
+            var parent = elem.parentNode;
+            checkSet[i] = parent.nodeName === part ? parent : false;
+          }
+        }
+      } else {
+        for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+          var elem = checkSet[i];
+          if ( elem ) {
+            checkSet[i] = isPartStr ?
+              elem.parentNode :
+              elem.parentNode === part;
+          }
+        }
+
+        if ( isPartStr ) {
+          Sizzle.filter( part, checkSet, true );
+        }
+      }
+    },
+    "": function(checkSet, part, isXML){
+      var doneName = done++, checkFn = dirCheck;
+
+      if ( !/\W/.test(part) ) {
+        var nodeCheck = part = isXML ? part : part.toUpperCase();
+        checkFn = dirNodeCheck;
+      }
+
+      checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
+    },
+    "~": function(checkSet, part, isXML){
+      var doneName = done++, checkFn = dirCheck;
+
+      if ( typeof part === "string" && !/\W/.test(part) ) {
+        var nodeCheck = part = isXML ? part : part.toUpperCase();
+        checkFn = dirNodeCheck;
+      }
+
+      checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
+    }
+  },
+  find: {
+    ID: function(match, context, isXML){
+      if ( typeof context.getElementById !== "undefined" && !isXML ) {
+        var m = context.getElementById(match[1]);
+        return m ? [m] : [];
+      }
+    },
+    NAME: function(match, context, isXML){
+      if ( typeof context.getElementsByName !== "undefined" ) {
+        var ret = [], results = context.getElementsByName(match[1]);
+
+        for ( var i = 0, l = results.length; i < l; i++ ) {
+          if ( results[i].getAttribute("name") === match[1] ) {
+            ret.push( results[i] );
+          }
+        }
+
+        return ret.length === 0 ? null : ret;
+      }
+    },
+    TAG: function(match, context){
+      return context.getElementsByTagName(match[1]);
+    }
+  },
+  preFilter: {
+    CLASS: function(match, curLoop, inplace, result, not, isXML){
+      match = " " + match[1].replace(/\\/g, "") + " ";
+
+      if ( isXML ) {
+        return match;
+      }
+
+      for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+        if ( elem ) {
+          if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {
+            if ( !inplace )
+              result.push( elem );
+          } else if ( inplace ) {
+            curLoop[i] = false;
           }
         }
       }
+
+      return false;
+    },
+    ID: function(match){
+      return match[1].replace(/\\/g, "");
+    },
+    TAG: function(match, curLoop){
+      for ( var i = 0; curLoop[i] === false; i++ ){}
+      return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
+    },
+    CHILD: function(match){
+      if ( match[1] == "nth" ) {
+        var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
+          match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
+          !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+        match[2] = (test[1] + (test[2] || 1)) - 0;
+        match[3] = test[3] - 0;
+      }
+
+      match[0] = done++;
+
+      return match;
+    },
+    ATTR: function(match, curLoop, inplace, result, not, isXML){
+      var name = match[1].replace(/\\/g, "");
+
+      if ( !isXML && Expr.attrMap[name] ) {
+        match[1] = Expr.attrMap[name];
+      }
+
+      if ( match[2] === "~=" ) {
+        match[4] = " " + match[4] + " ";
+      }
+
+      return match;
+    },
+    PSEUDO: function(match, curLoop, inplace, result, not){
+      if ( match[1] === "not" ) {
+        if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+          match[3] = Sizzle(match[3], null, null, curLoop);
+        } else {
+          var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+          if ( !inplace ) {
+            result.push.apply( result, ret );
+          }
+          return false;
+        }
+      } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+        return true;
+      }
+
+      return match;
+    },
+    POS: function(match){
+      match.unshift( true );
+      return match;
     }
-
-    var match = true, name, matches;
-    for (var i = 0, token; token = this.tokens[i]; i++) {
-      name = token[0], matches = token[1];
-      if (!Selector.assertions[name](element, matches)) {
-        match = false; break;
+  },
+  filters: {
+    enabled: function(elem){
+      return elem.disabled === false && elem.type !== "hidden";
+    },
+    disabled: function(elem){
+      return elem.disabled === true;
+    },
+    checked: function(elem){
+      return elem.checked === true;
+    },
+    selected: function(elem){
+      elem.parentNode.selectedIndex;
+      return elem.selected === true;
+    },
+    parent: function(elem){
+      return !!elem.firstChild;
+    },
+    empty: function(elem){
+      return !elem.firstChild;
+    },
+    has: function(elem, i, match){
+      return !!Sizzle( match[3], elem ).length;
+    },
+    header: function(elem){
+      return /h\d/i.test( elem.nodeName );
+    },
+    text: function(elem){
+      return "text" === elem.type;
+    },
+    radio: function(elem){
+      return "radio" === elem.type;
+    },
+    checkbox: function(elem){
+      return "checkbox" === elem.type;
+    },
+    file: function(elem){
+      return "file" === elem.type;
+    },
+    password: function(elem){
+      return "password" === elem.type;
+    },
+    submit: function(elem){
+      return "submit" === elem.type;
+    },
+    image: function(elem){
+      return "image" === elem.type;
+    },
+    reset: function(elem){
+      return "reset" === elem.type;
+    },
+    button: function(elem){
+      return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
+    },
+    input: function(elem){
+      return /input|select|textarea|button/i.test(elem.nodeName);
+    }
+  },
+  setFilters: {
+    first: function(elem, i){
+      return i === 0;
+    },
+    last: function(elem, i, match, array){
+      return i === array.length - 1;
+    },
+    even: function(elem, i){
+      return i % 2 === 0;
+    },
+    odd: function(elem, i){
+      return i % 2 === 1;
+    },
+    lt: function(elem, i, match){
+      return i < match[3] - 0;
+    },
+    gt: function(elem, i, match){
+      return i > match[3] - 0;
+    },
+    nth: function(elem, i, match){
+      return match[3] - 0 == i;
+    },
+    eq: function(elem, i, match){
+      return match[3] - 0 == i;
+    }
+  },
+  filter: {
+    PSEUDO: function(elem, match, i, array){
+      var name = match[1], filter = Expr.filters[ name ];
+
+      if ( filter ) {
+        return filter( elem, i, match, array );
+      } else if ( name === "contains" ) {
+        return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
+      } else if ( name === "not" ) {
+        var not = match[3];
+
+        for ( var i = 0, l = not.length; i < l; i++ ) {
+          if ( not[i] === elem ) {
+            return false;
+          }
+        }
+
+        return true;
+      }
+    },
+    CHILD: function(elem, match){
+      var type = match[1], node = elem;
+      switch (type) {
+        case 'only':
+        case 'first':
+          while ( (node = node.previousSibling) )  {
+            if ( node.nodeType === 1 ) return false;
+          }
+          if ( type == 'first') return true;
+          node = elem;
+        case 'last':
+          while ( (node = node.nextSibling) )  {
+            if ( node.nodeType === 1 ) return false;
+          }
+          return true;
+        case 'nth':
+          var first = match[2], last = match[3];
+
+          if ( first == 1 && last == 0 ) {
+            return true;
+          }
+
+          var doneName = match[0],
+            parent = elem.parentNode;
+
+          if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+            var count = 0;
+            for ( node = parent.firstChild; node; node = node.nextSibling ) {
+              if ( node.nodeType === 1 ) {
+                node.nodeIndex = ++count;
+              }
+            }
+            parent.sizcache = doneName;
+          }
+
+          var diff = elem.nodeIndex - last;
+          if ( first == 0 ) {
+            return diff == 0;
+          } else {
+            return ( diff % first == 0 && diff / first >= 0 );
+          }
+      }
+    },
+    ID: function(elem, match){
+      return elem.nodeType === 1 && elem.getAttribute("id") === match;
+    },
+    TAG: function(elem, match){
+      return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
+    },
+    CLASS: function(elem, match){
+      return (" " + (elem.className || elem.getAttribute("class")) + " ")
+        .indexOf( match ) > -1;
+    },
+    ATTR: function(elem, match){
+      var name = match[1],
+        result = Expr.attrHandle[ name ] ?
+          Expr.attrHandle[ name ]( elem ) :
+          elem[ name ] != null ?
+            elem[ name ] :
+            elem.getAttribute( name ),
+        value = result + "",
+        type = match[2],
+        check = match[4];
+
+      return result == null ?
+        type === "!=" :
+        type === "=" ?
+        value === check :
+        type === "*=" ?
+        value.indexOf(check) >= 0 :
+        type === "~=" ?
+        (" " + value + " ").indexOf(check) >= 0 :
+        !check ?
+        value && result !== false :
+        type === "!=" ?
+        value != check :
+        type === "^=" ?
+        value.indexOf(check) === 0 :
+        type === "$=" ?
+        value.substr(value.length - check.length) === check :
+        type === "|=" ?
+        value === check || value.substr(0, check.length + 1) === check + "-" :
+        false;
+    },
+    POS: function(elem, match, i, array){
+      var name = match[2], filter = Expr.setFilters[ name ];
+
+      if ( filter ) {
+        return filter( elem, i, match, array );
       }
     }
-
-    return match;
-  },
-
-  toString: function() {
-    return this.expression;
-  },
-
-  inspect: function() {
-    return "#<Selector:" + this.expression.inspect() + ">";
-  }
-});
-
-Object.extend(Selector, {
-  _cache: { },
-
-  xpath: {
-    descendant:   "//*",
-    child:        "/*",
-    adjacent:     "/following-sibling::*[1]",
-    laterSibling: '/following-sibling::*',
-    tagName:      function(m) {
-      if (m[1] == '*') return '';
-      return "[local-name()='" + m[1].toLowerCase() +
-             "' or local-name()='" + m[1].toUpperCase() + "']";
-    },
-    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
-    id:           "[@id='#{1}']",
-    attrPresence: function(m) {
-      m[1] = m[1].toLowerCase();
-      return new Template("[@#{1}]").evaluate(m);
-    },
-    attr: function(m) {
-      m[1] = m[1].toLowerCase();
-      m[3] = m[5] || m[6];
-      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
-    },
-    pseudo: function(m) {
-      var h = Selector.xpath.pseudos[m[1]];
-      if (!h) return '';
-      if (Object.isFunction(h)) return h(m);
-      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
-    },
-    operators: {
-      '=':  "[@#{1}='#{3}']",
-      '!=': "[@#{1}!='#{3}']",
-      '^=': "[starts-with(@#{1}, '#{3}')]",
-      '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
-      '*=': "[contains(@#{1}, '#{3}')]",
-      '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
-      '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
-    },
-    pseudos: {
-      'first-child': '[not(preceding-sibling::*)]',
-      'last-child':  '[not(following-sibling::*)]',
-      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
-      'empty':       "[count(*) = 0 and (count(text()) = 0)]",
-      'checked':     "[@checked]",
-      'disabled':    "[(@disabled) and (@type!='hidden')]",
-      'enabled':     "[not(@disabled) and (@type!='hidden')]",
-      'not': function(m) {
-        var e = m[6], p = Selector.patterns,
-            x = Selector.xpath, le, v;
-
-        var exclusion = [];
-        while (e && le != e && (/\S/).test(e)) {
-          le = e;
-          for (var i in p) {
-            if (m = e.match(p[i])) {
-              v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
-              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
-              e = e.replace(m[0], '');
-              break;
-            }
-          }
+  }
+};
+
+var origPOS = Expr.match.POS;
+
+for ( var type in Expr.match ) {
+  Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
+  Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source );
+}
+
+var makeArray = function(array, results) {
+  array = Array.prototype.slice.call( array, 0 );
+
+  if ( results ) {
+    results.push.apply( results, array );
+    return results;
+  }
+
+  return array;
+};
+
+try {
+  Array.prototype.slice.call( document.documentElement.childNodes, 0 );
+
+} catch(e){
+  makeArray = function(array, results) {
+    var ret = results || [];
+
+    if ( toString.call(array) === "[object Array]" ) {
+      Array.prototype.push.apply( ret, array );
+    } else {
+      if ( typeof array.length === "number" ) {
+        for ( var i = 0, l = array.length; i < l; i++ ) {
+          ret.push( array[i] );
         }
-        return "[not(" + exclusion.join(" and ") + ")]";
-      },
-      'nth-child':      function(m) {
-        return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
-      },
-      'nth-last-child': function(m) {
-        return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
-      },
-      'nth-of-type':    function(m) {
-        return Selector.xpath.pseudos.nth("position() ", m);
-      },
-      'nth-last-of-type': function(m) {
-        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
-      },
-      'first-of-type':  function(m) {
-        m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
-      },
-      'last-of-type':   function(m) {
-        m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
-      },
-      'only-of-type':   function(m) {
-        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
-      },
-      nth: function(fragment, m) {
-        var mm, formula = m[6], predicate;
-        if (formula == 'even') formula = '2n+0';
-        if (formula == 'odd')  formula = '2n+1';
-        if (mm = formula.match(/^(\d+)$/)) // digit only
-          return '[' + fragment + "= " + mm[1] + ']';
-        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
-          if (mm[1] == "-") mm[1] = -1;
-          var a = mm[1] ? Number(mm[1]) : 1;
-          var b = mm[2] ? Number(mm[2]) : 0;
-          predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
-          "((#{fragment} - #{b}) div #{a} >= 0)]";
-          return new Template(predicate).evaluate({
-            fragment: fragment, a: a, b: b });
+      } else {
+        for ( var i = 0; array[i]; i++ ) {
+          ret.push( array[i] );
         }
       }
     }
-  },
-
-  criteria: {
-    tagName:      'n = h.tagName(n, r, "#{1}", c);      c = false;',
-    className:    'n = h.className(n, r, "#{1}", c);    c = false;',
-    id:           'n = h.id(n, r, "#{1}", c);           c = false;',
-    attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
-    attr: function(m) {
-      m[3] = (m[5] || m[6]);
-      return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
-    },
-    pseudo: function(m) {
-      if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
-      return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
-    },
-    descendant:   'c = "descendant";',
-    child:        'c = "child";',
-    adjacent:     'c = "adjacent";',
-    laterSibling: 'c = "laterSibling";'
-  },
-
-  patterns: {
-    // combinators must be listed first
-    // (and descendant needs to be last combinator)
-    laterSibling: /^\s*~\s*/,
-    child:        /^\s*>\s*/,
-    adjacent:     /^\s*\+\s*/,
-    descendant:   /^\s/,
-
-    // selectors follow
-    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
-    id:           /^#([\w\-\*]+)(\b|$)/,
-    className:    /^\.([\w\-\*]+)(\b|$)/,
-    pseudo:
-/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
-    attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/,
-    attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
-  },
-
-  // for Selector.match and Element#match
-  assertions: {
-    tagName: function(element, matches) {
-      return matches[1].toUpperCase() == element.tagName.toUpperCase();
-    },
-
-    className: function(element, matches) {
-      return Element.hasClassName(element, matches[1]);
-    },
-
-    id: function(element, matches) {
-      return element.id === matches[1];
-    },
-
-    attrPresence: function(element, matches) {
-      return Element.hasAttribute(element, matches[1]);
-    },
-
-    attr: function(element, matches) {
-      var nodeValue = Element.readAttribute(element, matches[1]);
-      return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
+
+    return ret;
+  };
+}
+
+var sortOrder;
+
+if ( document.documentElement.compareDocumentPosition ) {
+  sortOrder = function( a, b ) {
+    if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+      if ( a == b ) {
+        hasDuplicate = true;
+      }
+      return 0;
     }
-  },
-
-  handlers: {
-    // UTILITY FUNCTIONS
-    // joins two collections
-    concat: function(a, b) {
-      for (var i = 0, node; node = b[i]; i++)
-        a.push(node);
-      return a;
-    },
-
-    // marks an array of nodes for counting
-    mark: function(nodes) {
-      var _true = Prototype.emptyFunction;
-      for (var i = 0, node; node = nodes[i]; i++)
-        node._countedByPrototype = _true;
-      return nodes;
-    },
-
-    unmark: function(nodes) {
-      for (var i = 0, node; node = nodes[i]; i++)
-        node._countedByPrototype = undefined;
-      return nodes;
-    },
-
-    // mark each child node with its position (for nth calls)
-    // "ofType" flag indicates whether we're indexing for nth-of-type
-    // rather than nth-child
-    index: function(parentNode, reverse, ofType) {
-      parentNode._countedByPrototype = Prototype.emptyFunction;
-      if (reverse) {
-        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
-          var node = nodes[i];
-          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+
+    var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
+    if ( ret === 0 ) {
+      hasDuplicate = true;
+    }
+    return ret;
+  };
+} else if ( "sourceIndex" in document.documentElement ) {
+  sortOrder = function( a, b ) {
+    if ( !a.sourceIndex || !b.sourceIndex ) {
+      if ( a == b ) {
+        hasDuplicate = true;
+      }
+      return 0;
+    }
+
+    var ret = a.sourceIndex - b.sourceIndex;
+    if ( ret === 0 ) {
+      hasDuplicate = true;
+    }
+    return ret;
+  };
+} else if ( document.createRange ) {
+  sortOrder = function( a, b ) {
+    if ( !a.ownerDocument || !b.ownerDocument ) {
+      if ( a == b ) {
+        hasDuplicate = true;
+      }
+      return 0;
+    }
+
+    var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
+    aRange.setStart(a, 0);
+    aRange.setEnd(a, 0);
+    bRange.setStart(b, 0);
+    bRange.setEnd(b, 0);
+    var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
+    if ( ret === 0 ) {
+      hasDuplicate = true;
+    }
+    return ret;
+  };
+}
+
+(function(){
+  var form = document.createElement("div"),
+    id = "script" + (new Date).getTime();
+  form.innerHTML = "<a name='" + id + "'/>";
+
+  var root = document.documentElement;
+  root.insertBefore( form, root.firstChild );
+
+  if ( !!document.getElementById( id ) ) {
+    Expr.find.ID = function(match, context, isXML){
+      if ( typeof context.getElementById !== "undefined" && !isXML ) {
+        var m = context.getElementById(match[1]);
+        return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
+      }
+    };
+
+    Expr.filter.ID = function(elem, match){
+      var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+      return elem.nodeType === 1 && node && node.nodeValue === match;
+    };
+  }
+
+  root.removeChild( form );
+  root = form = null; // release memory in IE
+})();
+
+(function(){
+
+  var div = document.createElement("div");
+  div.appendChild( document.createComment("") );
+
+  if ( div.getElementsByTagName("*").length > 0 ) {
+    Expr.find.TAG = function(match, context){
+      var results = context.getElementsByTagName(match[1]);
+
+      if ( match[1] === "*" ) {
+        var tmp = [];
+
+        for ( var i = 0; results[i]; i++ ) {
+          if ( results[i].nodeType === 1 ) {
+            tmp.push( results[i] );
+          }
         }
-      } else {
-        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
-          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+
+        results = tmp;
       }
-    },
-
-    // filters out duplicates and extends all nodes
-    unique: function(nodes) {
-      if (nodes.length == 0) return nodes;
-      var results = [], n;
-      for (var i = 0, l = nodes.length; i < l; i++)
-        if (!(n = nodes[i])._countedByPrototype) {
-          n._countedByPrototype = Prototype.emptyFunction;
-          results.push(Element.extend(n));
+
+      return results;
+    };
+  }
+
+  div.innerHTML = "<a href='#'></a>";
+  if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+      div.firstChild.getAttribute("href") !== "#" ) {
+    Expr.attrHandle.href = function(elem){
+      return elem.getAttribute("href", 2);
+    };
+  }
+
+  div = null; // release memory in IE
+})();
+
+if ( document.querySelectorAll ) (function(){
+  var oldSizzle = Sizzle, div = document.createElement("div");
+  div.innerHTML = "<p class='TEST'></p>";
+
+  if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+    return;
+  }
+
+  Sizzle = function(query, context, extra, seed){
+    context = context || document;
+
+    if ( !seed && context.nodeType === 9 && !isXML(context) ) {
+      try {
+        return makeArray( context.querySelectorAll(query), extra );
+      } catch(e){}
+    }
+
+    return oldSizzle(query, context, extra, seed);
+  };
+
+  for ( var prop in oldSizzle ) {
+    Sizzle[ prop ] = oldSizzle[ prop ];
+  }
+
+  div = null; // release memory in IE
+})();
+
+if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
+  var div = document.createElement("div");
+  div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+  if ( div.getElementsByClassName("e").length === 0 )
+    return;
+
+  div.lastChild.className = "e";
+
+  if ( div.getElementsByClassName("e").length === 1 )
+    return;
+
+  Expr.order.splice(1, 0, "CLASS");
+  Expr.find.CLASS = function(match, context, isXML) {
+    if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+      return context.getElementsByClassName(match[1]);
+    }
+  };
+
+  div = null; // release memory in IE
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+  var sibDir = dir == "previousSibling" && !isXML;
+  for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+    var elem = checkSet[i];
+    if ( elem ) {
+      if ( sibDir && elem.nodeType === 1 ){
+        elem.sizcache = doneName;
+        elem.sizset = i;
+      }
+      elem = elem[dir];
+      var match = false;
+
+      while ( elem ) {
+        if ( elem.sizcache === doneName ) {
+          match = checkSet[elem.sizset];
+          break;
         }
-      return Selector.handlers.unmark(results);
-    },
-
-    // COMBINATOR FUNCTIONS
-    descendant: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        h.concat(results, node.getElementsByTagName('*'));
-      return results;
-    },
-
-    child: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        for (var j = 0, child; child = node.childNodes[j]; j++)
-          if (child.nodeType == 1 && child.tagName != '!') results.push(child);
+
+        if ( elem.nodeType === 1 && !isXML ){
+          elem.sizcache = doneName;
+          elem.sizset = i;
+        }
+
+        if ( elem.nodeName === cur ) {
+          match = elem;
+          break;
+        }
+
+        elem = elem[dir];
       }
-      return results;
-    },
-
-    adjacent: function(nodes) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        var next = this.nextElementSibling(node);
-        if (next) results.push(next);
+
+      checkSet[i] = match;
+    }
+  }
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+  var sibDir = dir == "previousSibling" && !isXML;
+  for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+    var elem = checkSet[i];
+    if ( elem ) {
+      if ( sibDir && elem.nodeType === 1 ) {
+        elem.sizcache = doneName;
+        elem.sizset = i;
       }
-      return results;
-    },
-
-    laterSibling: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        h.concat(results, Element.nextSiblings(node));
-      return results;
-    },
-
-    nextElementSibling: function(node) {
-      while (node = node.nextSibling)
-        if (node.nodeType == 1) return node;
-      return null;
-    },
-
-    previousElementSibling: function(node) {
-      while (node = node.previousSibling)
-        if (node.nodeType == 1) return node;
-      return null;
-    },
-
-    // TOKEN FUNCTIONS
-    tagName: function(nodes, root, tagName, combinator) {
-      var uTagName = tagName.toUpperCase();
-      var results = [], h = Selector.handlers;
-      if (nodes) {
-        if (combinator) {
-          // fastlane for ordinary descendant combinators
-          if (combinator == "descendant") {
-            for (var i = 0, node; node = nodes[i]; i++)
-              h.concat(results, node.getElementsByTagName(tagName));
-            return results;
-          } else nodes = this[combinator](nodes);
-          if (tagName == "*") return nodes;
+      elem = elem[dir];
+      var match = false;
+
+      while ( elem ) {
+        if ( elem.sizcache === doneName ) {
+          match = checkSet[elem.sizset];
+          break;
         }
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node.tagName.toUpperCase() === uTagName) results.push(node);
-        return results;
-      } else return root.getElementsByTagName(tagName);
-    },
-
-    id: function(nodes, root, id, combinator) {
-      var targetNode = $(id), h = Selector.handlers;
-      if (!targetNode) return [];
-      if (!nodes && root == document) return [targetNode];
-      if (nodes) {
-        if (combinator) {
-          if (combinator == 'child') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (targetNode.parentNode == node) return [targetNode];
-          } else if (combinator == 'descendant') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (Element.descendantOf(targetNode, node)) return [targetNode];
-          } else if (combinator == 'adjacent') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (Selector.handlers.previousElementSibling(targetNode) == node)
-                return [targetNode];
-          } else nodes = h[combinator](nodes);
+
+        if ( elem.nodeType === 1 ) {
+          if ( !isXML ) {
+            elem.sizcache = doneName;
+            elem.sizset = i;
+          }
+          if ( typeof cur !== "string" ) {
+            if ( elem === cur ) {
+              match = true;
+              break;
+            }
+
+          } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+            match = elem;
+            break;
+          }
         }
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node == targetNode) return [targetNode];
-        return [];
+
+        elem = elem[dir];
       }
-      return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
-    },
-
-    className: function(nodes, root, className, combinator) {
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      return Selector.handlers.byClassName(nodes, root, className);
-    },
-
-    byClassName: function(nodes, root, className) {
-      if (!nodes) nodes = Selector.handlers.descendant([root]);
-      var needle = ' ' + className + ' ';
-      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
-        nodeClassName = node.className;
-        if (nodeClassName.length == 0) continue;
-        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
-          results.push(node);
-      }
-      return results;
-    },
-
-    attrPresence: function(nodes, root, attr, combinator) {
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      var results = [];
-      for (var i = 0, node; node = nodes[i]; i++)
-        if (Element.hasAttribute(node, attr)) results.push(node);
-      return results;
-    },
-
-    attr: function(nodes, root, attr, value, operator, combinator) {
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      var handler = Selector.operators[operator], results = [];
-      for (var i = 0, node; node = nodes[i]; i++) {
-        var nodeValue = Element.readAttribute(node, attr);
-        if (nodeValue === null) continue;
-        if (handler(nodeValue, value)) results.push(node);
-      }
-      return results;
-    },
-
-    pseudo: function(nodes, name, value, root, combinator) {
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      return Selector.pseudos[name](nodes, value, root);
+
+      checkSet[i] = match;
     }
-  },
-
-  pseudos: {
-    'first-child': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        if (Selector.handlers.previousElementSibling(node)) continue;
-          results.push(node);
-      }
-      return results;
-    },
-    'last-child': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        if (Selector.handlers.nextElementSibling(node)) continue;
-          results.push(node);
-      }
-      return results;
-    },
-    'only-child': function(nodes, value, root) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
-          results.push(node);
-      return results;
-    },
-    'nth-child':        function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root);
-    },
-    'nth-last-child':   function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, true);
-    },
-    'nth-of-type':      function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, false, true);
-    },
-    'nth-last-of-type': function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, true, true);
-    },
-    'first-of-type':    function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, "1", root, false, true);
-    },
-    'last-of-type':     function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, "1", root, true, true);
-    },
-    'only-of-type':     function(nodes, formula, root) {
-      var p = Selector.pseudos;
-      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
-    },
-
-    // handles the an+b logic
-    getIndices: function(a, b, total) {
-      if (a == 0) return b > 0 ? [b] : [];
-      return $R(1, total).inject([], function(memo, i) {
-        if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
-        return memo;
-      });
-    },
-
-    // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
-    nth: function(nodes, formula, root, reverse, ofType) {
-      if (nodes.length == 0) return [];
-      if (formula == 'even') formula = '2n+0';
-      if (formula == 'odd')  formula = '2n+1';
-      var h = Selector.handlers, results = [], indexed = [], m;
-      h.mark(nodes);
-      for (var i = 0, node; node = nodes[i]; i++) {
-        if (!node.parentNode._countedByPrototype) {
-          h.index(node.parentNode, reverse, ofType);
-          indexed.push(node.parentNode);
-        }
-      }
-      if (formula.match(/^\d+$/)) { // just a number
-        formula = Number(formula);
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node.nodeIndex == formula) results.push(node);
-      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
-        if (m[1] == "-") m[1] = -1;
-        var a = m[1] ? Number(m[1]) : 1;
-        var b = m[2] ? Number(m[2]) : 0;
-        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
-        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
-          for (var j = 0; j < l; j++)
-            if (node.nodeIndex == indices[j]) results.push(node);
-        }
-      }
-      h.unmark(nodes);
-      h.unmark(indexed);
-      return results;
-    },
-
-    'empty': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        // IE treats comments as element nodes
-        if (node.tagName == '!' || node.firstChild) continue;
-        results.push(node);
-      }
-      return results;
-    },
-
-    'not': function(nodes, selector, root) {
-      var h = Selector.handlers, selectorType, m;
-      var exclusions = new Selector(selector).findElements(root);
-      h.mark(exclusions);
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!node._countedByPrototype) results.push(node);
-      h.unmark(exclusions);
-      return results;
-    },
-
-    'enabled': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!node.disabled && (!node.type || node.type !== 'hidden'))
-          results.push(node);
-      return results;
-    },
-
-    'disabled': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (node.disabled) results.push(node);
-      return results;
-    },
-
-    'checked': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (node.checked) results.push(node);
-      return results;
-    }
-  },
-
-  operators: {
-    '=':  function(nv, v) { return nv == v; },
-    '!=': function(nv, v) { return nv != v; },
-    '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
-    '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
-    '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
-    '$=': function(nv, v) { return nv.endsWith(v); },
-    '*=': function(nv, v) { return nv.include(v); },
-    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
-    '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
-     '-').include('-' + (v || "").toUpperCase() + '-'); }
-  },
-
-  split: function(expression) {
-    var expressions = [];
-    expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
-      expressions.push(m[1].strip());
-    });
-    return expressions;
-  },
-
-  matchElements: function(elements, expression) {
-    var matches = $$(expression), h = Selector.handlers;
-    h.mark(matches);
-    for (var i = 0, results = [], element; element = elements[i]; i++)
-      if (element._countedByPrototype) results.push(element);
-    h.unmark(matches);
-    return results;
-  },
-
-  findElement: function(elements, expression, index) {
-    if (Object.isNumber(expression)) {
-      index = expression; expression = false;
-    }
-    return Selector.matchElements(elements, expression || '*')[index || 0];
-  },
-
-  findChildElements: function(element, expressions) {
-    expressions = Selector.split(expressions.join(','));
-    var results = [], h = Selector.handlers;
-    for (var i = 0, l = expressions.length, selector; i < l; i++) {
-      selector = new Selector(expressions[i].strip());
-      h.concat(results, selector.findElements(element));
-    }
-    return (l > 1) ? h.unique(results) : results;
-  }
-});
-
-if (Prototype.Browser.IE) {
-  Object.extend(Selector.handlers, {
-    // IE returns comment nodes on getElementsByTagName("*").
-    // Filter them out.
-    concat: function(a, b) {
-      for (var i = 0, node; node = b[i]; i++)
-        if (node.tagName !== "!") a.push(node);
-      return a;
-    },
-
-    // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
-    unmark: function(nodes) {
-      for (var i = 0, node; node = nodes[i]; i++)
-        node.removeAttribute('_countedByPrototype');
-      return nodes;
-    }
-  });
+  }
 }
 
-function $$() {
-  return Selector.findChildElements(document, $A(arguments));
-}
+var contains = document.compareDocumentPosition ?  function(a, b){
+  return a.compareDocumentPosition(b) & 16;
+} : function(a, b){
+  return a !== b && (a.contains ? a.contains(b) : true);
+};
+
+var isXML = function(elem){
+  return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
+    !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML";
+};
+
+var posProcess = function(selector, context){
+  var tmpSet = [], later = "", match,
+    root = context.nodeType ? [context] : context;
+
+  while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+    later += match[0];
+    selector = selector.replace( Expr.match.PSEUDO, "" );
+  }
+
+  selector = Expr.relative[selector] ? selector + "*" : selector;
+
+  for ( var i = 0, l = root.length; i < l; i++ ) {
+    Sizzle( selector, root[i], tmpSet );
+  }
+
+  return Sizzle.filter( later, tmpSet );
+};
+
+
+window.Sizzle = Sizzle;
+
+})();
+
+;(function(engine) {
+  var extendElements = Prototype.Selector.extendElements;
+
+  function select(selector, scope) {
+    return extendElements(engine(selector, scope || document));
+  }
+
+  function match(element, selector) {
+    return engine.matches(selector, [element]).length == 1;
+  }
+
+  Prototype.Selector.engine = engine;
+  Prototype.Selector.select = select;
+  Prototype.Selector.match = match;
+})(Sizzle);
+
+window.Sizzle = Prototype._original_property;
+delete Prototype._original_property;
+
 var Form = {
   reset: function(form) {
-    $(form).reset();
+    form = $(form);
+    form.reset();
     return form;
   },
 
   serializeElements: function(elements, options) {
     if (typeof options != 'object') options = { hash: !!options };
     else if (Object.isUndefined(options.hash)) options.hash = true;
-    var key, value, submitted = false, submit = options.submit;
-
-    var data = elements.inject({ }, function(result, element) {
+    var key, value, submitted = false, submit = options.submit, accumulator, initial;
+
+    if (options.hash) {
+      initial = {};
+      accumulator = function(result, key, value) {
+        if (key in result) {
+          if (!Object.isArray(result[key])) result[key] = [result[key]];
+          result[key].push(value);
+        } else result[key] = value;
+        return result;
+      };
+    } else {
+      initial = '';
+      accumulator = function(result, key, value) {
+        return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + encodeURIComponent(value);
+      }
+    }
+
+    return elements.inject(initial, function(result, element) {
       if (!element.disabled && element.name) {
         key = element.name; value = $(element).getValue();
         if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
             submit !== false && (!submit || key == submit) && (submitted = true)))) {
-          if (key in result) {
-            // a key is already present; construct an array of values
-            if (!Object.isArray(result[key])) result[key] = [result[key]];
-            result[key].push(value);
-          }
-          else result[key] = value;
+          result = accumulator(result, key, value);
         }
       }
       return result;
     });
-
-    return options.hash ? data : Object.toQueryString(data);
   }
 };
 
@@ -3480,13 +5007,18 @@
   },
 
   getElements: function(form) {
-    return $A($(form).getElementsByTagName('*')).inject([],
-      function(elements, child) {
-        if (Form.Element.Serializers[child.tagName.toLowerCase()])
-          elements.push(Element.extend(child));
-        return elements;
-      }
-    );
+    var elements = $(form).getElementsByTagName('*'),
+        element,
+        arr = [ ],
+        serializers = Form.Element.Serializers;
+    for (var i = 0; element = elements[i]; i++) {
+      arr.push(element);
+    }
+    return arr.inject([], function(elements, child) {
+      if (serializers[child.tagName.toLowerCase()])
+        elements.push(Element.extend(child));
+      return elements;
+    })
   },
 
   getInputs: function(form, typeName, name) {
@@ -3526,13 +5058,14 @@
     }).sortBy(function(element) { return element.tabIndex }).first();
 
     return firstByIndex ? firstByIndex : elements.find(function(element) {
-      return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+      return /^(?:input|select|textarea)$/i.test(element.tagName);
     });
   },
 
   focusFirstElement: function(form) {
     form = $(form);
-    form.findFirstElement().activate();
+    var element = form.findFirstElement();
+    if (element) element.activate();
     return form;
   },
 
@@ -3557,6 +5090,7 @@
 
 /*--------------------------------------------------------------------------*/
 
+
 Form.Element = {
   focus: function(element) {
     $(element).focus();
@@ -3570,6 +5104,7 @@
 };
 
 Form.Element.Methods = {
+
   serialize: function(element) {
     element = $(element);
     if (!element.disabled && element.name) {
@@ -3610,7 +5145,7 @@
     try {
       element.focus();
       if (element.select && (element.tagName.toLowerCase() != 'input' ||
-          !['button', 'reset', 'submit'].include(element.type)))
+          !(/^(?:button|reset|submit)$/i.test(element.type))))
         element.select();
     } catch (e) { }
     return element;
@@ -3632,75 +5167,86 @@
 /*--------------------------------------------------------------------------*/
 
 var Field = Form.Element;
+
 var $F = Form.Element.Methods.getValue;
 
 /*--------------------------------------------------------------------------*/
 
-Form.Element.Serializers = {
-  input: function(element, value) {
+Form.Element.Serializers = (function() {
+  function input(element, value) {
     switch (element.type.toLowerCase()) {
       case 'checkbox':
       case 'radio':
-        return Form.Element.Serializers.inputSelector(element, value);
+        return inputSelector(element, value);
       default:
-        return Form.Element.Serializers.textarea(element, value);
+        return valueSelector(element, value);
     }
-  },
-
-  inputSelector: function(element, value) {
-    if (Object.isUndefined(value)) return element.checked ? element.value : null;
+  }
+
+  function inputSelector(element, value) {
+    if (Object.isUndefined(value))
+      return element.checked ? element.value : null;
     else element.checked = !!value;
-  },
-
-  textarea: function(element, value) {
+  }
+
+  function valueSelector(element, value) {
     if (Object.isUndefined(value)) return element.value;
     else element.value = value;
-  },
-
-  select: function(element, value) {
+  }
+
+  function select(element, value) {
     if (Object.isUndefined(value))
-      return this[element.type == 'select-one' ?
-        'selectOne' : 'selectMany'](element);
-    else {
-      var opt, currentValue, single = !Object.isArray(value);
-      for (var i = 0, length = element.length; i < length; i++) {
-        opt = element.options[i];
-        currentValue = this.optionValue(opt);
-        if (single) {
-          if (currentValue == value) {
-            opt.selected = true;
-            return;
-          }
+      return (element.type === 'select-one' ? selectOne : selectMany)(element);
+
+    var opt, currentValue, single = !Object.isArray(value);
+    for (var i = 0, length = element.length; i < length; i++) {
+      opt = element.options[i];
+      currentValue = this.optionValue(opt);
+      if (single) {
+        if (currentValue == value) {
+          opt.selected = true;
+          return;
         }
-        else opt.selected = value.include(currentValue);
       }
+      else opt.selected = value.include(currentValue);
     }
-  },
-
-  selectOne: function(element) {
+  }
+
+  function selectOne(element) {
     var index = element.selectedIndex;
-    return index >= 0 ? this.optionValue(element.options[index]) : null;
-  },
-
-  selectMany: function(element) {
+    return index >= 0 ? optionValue(element.options[index]) : null;
+  }
+
+  function selectMany(element) {
     var values, length = element.length;
     if (!length) return null;
 
     for (var i = 0, values = []; i < length; i++) {
       var opt = element.options[i];
-      if (opt.selected) values.push(this.optionValue(opt));
+      if (opt.selected) values.push(optionValue(opt));
     }
     return values;
-  },
-
-  optionValue: function(opt) {
-    // extend element because hasAttribute may not be native
-    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
-  }
-};
+  }
+
+  function optionValue(opt) {
+    return Element.hasAttribute(opt, 'value') ? opt.value : opt.text;
+  }
+
+  return {
+    input:         input,
+    inputSelector: inputSelector,
+    textarea:      valueSelector,
+    select:        select,
+    selectOne:     selectOne,
+    selectMany:    selectMany,
+    optionValue:   optionValue,
+    button:        valueSelector
+  };
+})();
 
 /*--------------------------------------------------------------------------*/
 
+
 Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
   initialize: function($super, element, frequency, callback) {
     $super(callback, frequency);
@@ -3782,354 +5328,527 @@
     return Form.serialize(this.element);
   }
 });
-if (!window.Event) var Event = { };
-
-Object.extend(Event, {
-  KEY_BACKSPACE: 8,
-  KEY_TAB:       9,
-  KEY_RETURN:   13,
-  KEY_ESC:      27,
-  KEY_LEFT:     37,
-  KEY_UP:       38,
-  KEY_RIGHT:    39,
-  KEY_DOWN:     40,
-  KEY_DELETE:   46,
-  KEY_HOME:     36,
-  KEY_END:      35,
-  KEY_PAGEUP:   33,
-  KEY_PAGEDOWN: 34,
-  KEY_INSERT:   45,
-
-  cache: { },
-
-  relatedTarget: function(event) {
-    var element;
-    switch(event.type) {
-      case 'mouseover': element = event.fromElement; break;
-      case 'mouseout':  element = event.toElement;   break;
-      default: return null;
+(function() {
+
+  var Event = {
+    KEY_BACKSPACE: 8,
+    KEY_TAB:       9,
+    KEY_RETURN:   13,
+    KEY_ESC:      27,
+    KEY_LEFT:     37,
+    KEY_UP:       38,
+    KEY_RIGHT:    39,
+    KEY_DOWN:     40,
+    KEY_DELETE:   46,
+    KEY_HOME:     36,
+    KEY_END:      35,
+    KEY_PAGEUP:   33,
+    KEY_PAGEDOWN: 34,
+    KEY_INSERT:   45,
+
+    cache: {}
+  };
+
+  var docEl = document.documentElement;
+  var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl
+    && 'onmouseleave' in docEl;
+
+
+
+  var isIELegacyEvent = function(event) { return false; };
+
+  if (window.attachEvent) {
+    if (window.addEventListener) {
+      isIELegacyEvent = function(event) {
+        return !(event instanceof window.Event);
+      };
+    } else {
+      isIELegacyEvent = function(event) { return true; };
     }
-    return Element.extend(element);
-  }
-});
-
-Event.Methods = (function() {
-  var isButton;
-
-  if (Prototype.Browser.IE) {
-    var buttonMap = { 0: 1, 1: 4, 2: 2 };
-    isButton = function(event, code) {
-      return event.button == buttonMap[code];
-    };
-
+  }
+
+  var _isButton;
+
+  function _isButtonForDOMEvents(event, code) {
+    return event.which ? (event.which === code + 1) : (event.button === code);
+  }
+
+  var legacyButtonMap = { 0: 1, 1: 4, 2: 2 };
+  function _isButtonForLegacyEvents(event, code) {
+    return event.button === legacyButtonMap[code];
+  }
+
+  function _isButtonForWebKit(event, code) {
+    switch (code) {
+      case 0: return event.which == 1 && !event.metaKey;
+      case 1: return event.which == 2 || (event.which == 1 && event.metaKey);
+      case 2: return event.which == 3;
+      default: return false;
+    }
+  }
+
+  if (window.attachEvent) {
+    if (!window.addEventListener) {
+      _isButton = _isButtonForLegacyEvents;
+    } else {
+      _isButton = function(event, code) {
+        return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) :
+         _isButtonForDOMEvents(event, code);
+      }
+    }
   } else if (Prototype.Browser.WebKit) {
-    isButton = function(event, code) {
-      switch (code) {
-        case 0: return event.which == 1 && !event.metaKey;
-        case 1: return event.which == 1 && event.metaKey;
-        default: return false;
+    _isButton = _isButtonForWebKit;
+  } else {
+    _isButton = _isButtonForDOMEvents;
+  }
+
+  function isLeftClick(event)   { return _isButton(event, 0) }
+
+  function isMiddleClick(event) { return _isButton(event, 1) }
+
+  function isRightClick(event)  { return _isButton(event, 2) }
+
+  function element(event) {
+    event = Event.extend(event);
+
+    var node = event.target, type = event.type,
+     currentTarget = event.currentTarget;
+
+    if (currentTarget && currentTarget.tagName) {
+      if (type === 'load' || type === 'error' ||
+        (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
+          && currentTarget.type === 'radio'))
+            node = currentTarget;
+    }
+
+    if (node.nodeType == Node.TEXT_NODE)
+      node = node.parentNode;
+
+    return Element.extend(node);
+  }
+
+  function findElement(event, expression) {
+    var element = Event.element(event);
+
+    if (!expression) return element;
+    while (element) {
+      if (Object.isElement(element) && Prototype.Selector.match(element, expression)) {
+        return Element.extend(element);
       }
-    };
-
-  } else {
-    isButton = function(event, code) {
-      return event.which ? (event.which === code + 1) : (event.button === code);
-    };
-  }
-
-  return {
-    isLeftClick:   function(event) { return isButton(event, 0) },
-    isMiddleClick: function(event) { return isButton(event, 1) },
-    isRightClick:  function(event) { return isButton(event, 2) },
-
-    element: function(event) {
-      event = Event.extend(event);
-
-      var node          = event.target,
-          type          = event.type,
-          currentTarget = event.currentTarget;
-
-      if (currentTarget && currentTarget.tagName) {
-        // Firefox screws up the "click" event when moving between radio buttons
-        // via arrow keys. It also screws up the "load" and "error" events on images,
-        // reporting the document as the target instead of the original image.
-        if (type === 'load' || type === 'error' ||
-          (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
-            && currentTarget.type === 'radio'))
-              node = currentTarget;
-      }
-      if (node.nodeType == Node.TEXT_NODE) node = node.parentNode;
-      return Element.extend(node);
-    },
-
-    findElement: function(event, expression) {
-      var element = Event.element(event);
-      if (!expression) return element;
-      var elements = [element].concat(element.ancestors());
-      return Selector.findElement(elements, expression, 0);
-    },
-
-    pointer: function(event) {
-      var docElement = document.documentElement,
-      body = document.body || { scrollLeft: 0, scrollTop: 0 };
-      return {
-        x: event.pageX || (event.clientX +
-          (docElement.scrollLeft || body.scrollLeft) -
-          (docElement.clientLeft || 0)),
-        y: event.pageY || (event.clientY +
-          (docElement.scrollTop || body.scrollTop) -
-          (docElement.clientTop || 0))
-      };
-    },
-
-    pointerX: function(event) { return Event.pointer(event).x },
-    pointerY: function(event) { return Event.pointer(event).y },
-
-    stop: function(event) {
-      Event.extend(event);
-      event.preventDefault();
-      event.stopPropagation();
-      event.stopped = true;
+      element = element.parentNode;
     }
+  }
+
+  function pointer(event) {
+    return { x: pointerX(event), y: pointerY(event) };
+  }
+
+  function pointerX(event) {
+    var docElement = document.documentElement,
+     body = document.body || { scrollLeft: 0 };
+
+    return event.pageX || (event.clientX +
+      (docElement.scrollLeft || body.scrollLeft) -
+      (docElement.clientLeft || 0));
+  }
+
+  function pointerY(event) {
+    var docElement = document.documentElement,
+     body = document.body || { scrollTop: 0 };
+
+    return  event.pageY || (event.clientY +
+       (docElement.scrollTop || body.scrollTop) -
+       (docElement.clientTop || 0));
+  }
+
+
+  function stop(event) {
+    Event.extend(event);
+    event.preventDefault();
+    event.stopPropagation();
+
+    event.stopped = true;
+  }
+
+
+  Event.Methods = {
+    isLeftClick:   isLeftClick,
+    isMiddleClick: isMiddleClick,
+    isRightClick:  isRightClick,
+
+    element:     element,
+    findElement: findElement,
+
+    pointer:  pointer,
+    pointerX: pointerX,
+    pointerY: pointerY,
+
+    stop: stop
   };
-})();
-
-Event.extend = (function() {
+
   var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
     m[name] = Event.Methods[name].methodize();
     return m;
   });
 
-  if (Prototype.Browser.IE) {
-    Object.extend(methods, {
+  if (window.attachEvent) {
+    function _relatedTarget(event) {
+      var element;
+      switch (event.type) {
+        case 'mouseover':
+        case 'mouseenter':
+          element = event.fromElement;
+          break;
+        case 'mouseout':
+        case 'mouseleave':
+          element = event.toElement;
+          break;
+        default:
+          return null;
+      }
+      return Element.extend(element);
+    }
+
+    var additionalMethods = {
       stopPropagation: function() { this.cancelBubble = true },
       preventDefault:  function() { this.returnValue = false },
-      inspect: function() { return "[object Event]" }
-    });
-
-    return function(event) {
+      inspect: function() { return '[object Event]' }
+    };
+
+    Event.extend = function(event, element) {
       if (!event) return false;
+
+      if (!isIELegacyEvent(event)) return event;
+
       if (event._extendedByPrototype) return event;
-
       event._extendedByPrototype = Prototype.emptyFunction;
+
       var pointer = Event.pointer(event);
+
       Object.extend(event, {
-        target: event.srcElement,
-        relatedTarget: Event.relatedTarget(event),
+        target: event.srcElement || element,
+        relatedTarget: _relatedTarget(event),
         pageX:  pointer.x,
         pageY:  pointer.y
       });
-      return Object.extend(event, methods);
+
+      Object.extend(event, methods);
+      Object.extend(event, additionalMethods);
+
+      return event;
     };
-
   } else {
-    Event.prototype = Event.prototype || document.createEvent("HTMLEvents")['__proto__'];
+    Event.extend = Prototype.K;
+  }
+
+  if (window.addEventListener) {
+    Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__;
     Object.extend(Event.prototype, methods);
-    return Prototype.K;
-  }
+  }
+
+  function _createResponder(element, eventName, handler) {
+    var registry = Element.retrieve(element, 'prototype_event_registry');
+
+    if (Object.isUndefined(registry)) {
+      CACHE.push(element);
+      registry = Element.retrieve(element, 'prototype_event_registry', $H());
+    }
+
+    var respondersForEvent = registry.get(eventName);
+    if (Object.isUndefined(respondersForEvent)) {
+      respondersForEvent = [];
+      registry.set(eventName, respondersForEvent);
+    }
+
+    if (respondersForEvent.pluck('handler').include(handler)) return false;
+
+    var responder;
+    if (eventName.include(":")) {
+      responder = function(event) {
+        if (Object.isUndefined(event.eventName))
+          return false;
+
+        if (event.eventName !== eventName)
+          return false;
+
+        Event.extend(event, element);
+        handler.call(element, event);
+      };
+    } else {
+      if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&
+       (eventName === "mouseenter" || eventName === "mouseleave")) {
+        if (eventName === "mouseenter" || eventName === "mouseleave") {
+          responder = function(event) {
+            Event.extend(event, element);
+
+            var parent = event.relatedTarget;
+            while (parent && parent !== element) {
+              try { parent = parent.parentNode; }
+              catch(e) { parent = element; }
+            }
+
+            if (parent === element) return;
+
+            handler.call(element, event);
+          };
+        }
+      } else {
+        responder = function(event) {
+          Event.extend(event, element);
+          handler.call(element, event);
+        };
+      }
+    }
+
+    responder.handler = handler;
+    respondersForEvent.push(responder);
+    return responder;
+  }
+
+  function _destroyCache() {
+    for (var i = 0, length = CACHE.length; i < length; i++) {
+      Event.stopObserving(CACHE[i]);
+      CACHE[i] = null;
+    }
+  }
+
+  var CACHE = [];
+
+  if (Prototype.Browser.IE)
+    window.attachEvent('onunload', _destroyCache);
+
+  if (Prototype.Browser.WebKit)
+    window.addEventListener('unload', Prototype.emptyFunction, false);
+
+
+  var _getDOMEventName = Prototype.K,
+      translations = { mouseenter: "mouseover", mouseleave: "mouseout" };
+
+  if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {
+    _getDOMEventName = function(eventName) {
+      return (translations[eventName] || eventName);
+    };
+  }
+
+  function observe(element, eventName, handler) {
+    element = $(element);
+
+    var responder = _createResponder(element, eventName, handler);
+
+    if (!responder) return element;
+
+    if (eventName.include(':')) {
+      if (element.addEventListener)
+        element.addEventListener("dataavailable", responder, false);
+      else {
+        element.attachEvent("ondataavailable", responder);
+        element.attachEvent("onlosecapture", responder);
+      }
+    } else {
+      var actualEventName = _getDOMEventName(eventName);
+
+      if (element.addEventListener)
+        element.addEventListener(actualEventName, responder, false);
+      else
+        element.attachEvent("on" + actualEventName, responder);
+    }
+
+    return element;
+  }
+
+  function stopObserving(element, eventName, handler) {
+    element = $(element);
+
+    var registry = Element.retrieve(element, 'prototype_event_registry');
+    if (!registry) return element;
+
+    if (!eventName) {
+      registry.each( function(pair) {
+        var eventName = pair.key;
+        stopObserving(element, eventName);
+      });
+      return element;
+    }
+
+    var responders = registry.get(eventName);
+    if (!responders) return element;
+
+    if (!handler) {
+      responders.each(function(r) {
+        stopObserving(element, eventName, r.handler);
+      });
+      return element;
+    }
+
+    var i = responders.length, responder;
+    while (i--) {
+      if (responders[i].handler === handler) {
+        responder = responders[i];
+        break;
+      }
+    }
+    if (!responder) return element;
+
+    if (eventName.include(':')) {
+      if (element.removeEventListener)
+        element.removeEventListener("dataavailable", responder, false);
+      else {
+        element.detachEvent("ondataavailable", responder);
+        element.detachEvent("onlosecapture", responder);
+      }
+    } else {
+      var actualEventName = _getDOMEventName(eventName);
+      if (element.removeEventListener)
+        element.removeEventListener(actualEventName, responder, false);
+      else
+        element.detachEvent('on' + actualEventName, responder);
+    }
+
+    registry.set(eventName, responders.without(responder));
+
+    return element;
+  }
+
+  function fire(element, eventName, memo, bubble) {
+    element = $(element);
+
+    if (Object.isUndefined(bubble))
+      bubble = true;
+
+    if (element == document && document.createEvent && !element.dispatchEvent)
+      element = document.documentElement;
+
+    var event;
+    if (document.createEvent) {
+      event = document.createEvent('HTMLEvents');
+      event.initEvent('dataavailable', bubble, true);
+    } else {
+      event = document.createEventObject();
+      event.eventType = bubble ? 'ondataavailable' : 'onlosecapture';
+    }
+
+    event.eventName = eventName;
+    event.memo = memo || { };
+
+    if (document.createEvent)
+      element.dispatchEvent(event);
+    else
+      element.fireEvent(event.eventType, event);
+
+    return Event.extend(event);
+  }
+
+  Event.Handler = Class.create({
+    initialize: function(element, eventName, selector, callback) {
+      this.element   = $(element);
+      this.eventName = eventName;
+      this.selector  = selector;
+      this.callback  = callback;
+      this.handler   = this.handleEvent.bind(this);
+    },
+
+    start: function() {
+      Event.observe(this.element, this.eventName, this.handler);
+      return this;
+    },
+
+    stop: function() {
+      Event.stopObserving(this.element, this.eventName, this.handler);
+      return this;
+    },
+
+    handleEvent: function(event) {
+      var element = Event.findElement(event, this.selector);
+      if (element) this.callback.call(this.element, event, element);
+    }
+  });
+
+  function on(element, eventName, selector, callback) {
+    element = $(element);
+    if (Object.isFunction(selector) && Object.isUndefined(callback)) {
+      callback = selector, selector = null;
+    }
+
+    return new Event.Handler(element, eventName, selector, callback).start();
+  }
+
+  Object.extend(Event, Event.Methods);
+
+  Object.extend(Event, {
+    fire:          fire,
+    observe:       observe,
+    stopObserving: stopObserving,
+    on:            on
+  });
+
+  Element.addMethods({
+    fire:          fire,
+
+    observe:       observe,
+
+    stopObserving: stopObserving,
+
+    on:            on
+  });
+
+  Object.extend(document, {
+    fire:          fire.methodize(),
+
+    observe:       observe.methodize(),
+
+    stopObserving: stopObserving.methodize(),
+
+    on:            on.methodize(),
+
+    loaded:        false
+  });
+
+  if (window.Event) Object.extend(window.Event, Event);
+  else window.Event = Event;
 })();
 
-Object.extend(Event, (function() {
-  var cache = Event.cache;
-
-  function getEventID(element) {
-    if (element._prototypeEventID) return element._prototypeEventID[0];
-    arguments.callee.id = arguments.callee.id || 1;
-    return element._prototypeEventID = [++arguments.callee.id];
-  }
-
-  function getDOMEventName(eventName) {
-    if (eventName && eventName.include(':')) return "dataavailable";
-    return eventName;
-  }
-
-  function getCacheForID(id) {
-    return cache[id] = cache[id] || { };
-  }
-
-  function getWrappersForEventName(id, eventName) {
-    var c = getCacheForID(id);
-    return c[eventName] = c[eventName] || [];
-  }
-
-  function createWrapper(element, eventName, handler) {
-    var id = getEventID(element);
-    var c = getWrappersForEventName(id, eventName);
-    if (c.pluck("handler").include(handler)) return false;
-
-    var wrapper = function(event) {
-      if (!Event || !Event.extend ||
-        (event.eventName && event.eventName != eventName))
-          return false;
-
-      Event.extend(event);
-      handler.call(element, event);
-    };
-
-    wrapper.handler = handler;
-    c.push(wrapper);
-    return wrapper;
-  }
-
-  function findWrapper(id, eventName, handler) {
-    var c = getWrappersForEventName(id, eventName);
-    return c.find(function(wrapper) { return wrapper.handler == handler });
-  }
-
-  function destroyWrapper(id, eventName, handler) {
-    var c = getCacheForID(id);
-    if (!c[eventName]) return false;
-    c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
-  }
-
-  function destroyCache() {
-    for (var id in cache)
-      for (var eventName in cache[id])
-        cache[id][eventName] = null;
-  }
-
-
-  // Internet Explorer needs to remove event handlers on page unload
-  // in order to avoid memory leaks.
-  if (window.attachEvent) {
-    window.attachEvent("onunload", destroyCache);
-  }
-
-  // Safari has a dummy event handler on page unload so that it won't
-  // use its bfcache. Safari <= 3.1 has an issue with restoring the "document"
-  // object when page is returned to via the back button using its bfcache.
-  if (Prototype.Browser.WebKit) {
-    window.addEventListener('unload', Prototype.emptyFunction, false);
-  }
-
-  return {
-    observe: function(element, eventName, handler) {
-      element = $(element);
-      var name = getDOMEventName(eventName);
-
-      var wrapper = createWrapper(element, eventName, handler);
-      if (!wrapper) return element;
-
-      if (element.addEventListener) {
-        element.addEventListener(name, wrapper, false);
-      } else {
-        element.attachEvent("on" + name, wrapper);
-      }
-
-      return element;
-    },
-
-    stopObserving: function(element, eventName, handler) {
-      element = $(element);
-      var id = getEventID(element), name = getDOMEventName(eventName);
-
-      if (!handler && eventName) {
-        getWrappersForEventName(id, eventName).each(function(wrapper) {
-          element.stopObserving(eventName, wrapper.handler);
-        });
-        return element;
-
-      } else if (!eventName) {
-        Object.keys(getCacheForID(id)).each(function(eventName) {
-          element.stopObserving(eventName);
-        });
-        return element;
-      }
-
-      var wrapper = findWrapper(id, eventName, handler);
-      if (!wrapper) return element;
-
-      if (element.removeEventListener) {
-        element.removeEventListener(name, wrapper, false);
-      } else {
-        element.detachEvent("on" + name, wrapper);
-      }
-
-      destroyWrapper(id, eventName, handler);
-
-      return element;
-    },
-
-    fire: function(element, eventName, memo) {
-      element = $(element);
-      if (element == document && document.createEvent && !element.dispatchEvent)
-        element = document.documentElement;
-
-      var event;
-      if (document.createEvent) {
-        event = document.createEvent("HTMLEvents");
-        event.initEvent("dataavailable", true, true);
-      } else {
-        event = document.createEventObject();
-        event.eventType = "ondataavailable";
-      }
-
-      event.eventName = eventName;
-      event.memo = memo || { };
-
-      if (document.createEvent) {
-        element.dispatchEvent(event);
-      } else {
-        element.fireEvent(event.eventType, event);
-      }
-
-      return Event.extend(event);
-    }
-  };
-})());
-
-Object.extend(Event, Event.Methods);
-
-Element.addMethods({
-  fire:          Event.fire,
-  observe:       Event.observe,
-  stopObserving: Event.stopObserving
-});
-
-Object.extend(document, {
-  fire:          Element.Methods.fire.methodize(),
-  observe:       Element.Methods.observe.methodize(),
-  stopObserving: Element.Methods.stopObserving.methodize(),
-  loaded:        false
-});
-
 (function() {
   /* Support for the DOMContentLoaded event is based on work by Dan Webb,
-     Matthias Miller, Dean Edwards and John Resig. */
+     Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */
 
   var timer;
 
   function fireContentLoadedEvent() {
     if (document.loaded) return;
-    if (timer) window.clearInterval(timer);
-    document.fire("dom:loaded");
+    if (timer) window.clearTimeout(timer);
     document.loaded = true;
+    document.fire('dom:loaded');
+  }
+
+  function checkReadyState() {
+    if (document.readyState === 'complete') {
+      document.stopObserving('readystatechange', checkReadyState);
+      fireContentLoadedEvent();
+    }
+  }
+
+  function pollDoScroll() {
+    try { document.documentElement.doScroll('left'); }
+    catch(e) {
+      timer = pollDoScroll.defer();
+      return;
+    }
+    fireContentLoadedEvent();
   }
 
   if (document.addEventListener) {
-    if (Prototype.Browser.WebKit) {
-      timer = window.setInterval(function() {
-        if (/loaded|complete/.test(document.readyState))
-          fireContentLoadedEvent();
-      }, 0);
-
-      Event.observe(window, "load", fireContentLoadedEvent);
-
-    } else {
-      document.addEventListener("DOMContentLoaded",
-        fireContentLoadedEvent, false);
-    }
-
+    document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
   } else {
-    document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
-    $("__onDOMContentLoaded").onreadystatechange = function() {
-      if (this.readyState == "complete") {
-        this.onreadystatechange = null;
-        fireContentLoadedEvent();
-      }
-    };
-  }
+    document.observe('readystatechange', checkReadyState);
+    if (window == top)
+      timer = pollDoScroll.defer();
+  }
+
+  Event.observe(window, 'load', fireContentLoadedEvent);
 })();
+
+Element.addMethods();
+
 /*------------------------------- DEPRECATED -------------------------------*/
 
 Hash.toQueryString = Object.toQueryString;
@@ -4158,16 +5877,9 @@
 
 var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
 
-// This should be moved to script.aculo.us; notice the deprecated methods
-// further below, that map to the newer Element methods.
 var Position = {
-  // set to true if needed, warning: firefox performance problems
-  // NOT neeeded for page scrolling, only if draggable contained in
-  // scrollable elements
   includeScrollOffsets: false,
 
-  // must be called before calling withinIncludingScrolloffset, every time the
-  // page is scrolled
   prepare: function() {
     this.deltaX =  window.pageXOffset
                 || document.documentElement.scrollLeft
@@ -4179,7 +5891,6 @@
                 || 0;
   },
 
-  // caches x/y coordinate pair to use with overlap
   within: function(element, x, y) {
     if (this.includeScrollOffsets)
       return this.withinIncludingScrolloffsets(element, x, y);
@@ -4206,7 +5917,6 @@
             this.xcomp <  this.offset[0] + element.offsetWidth);
   },
 
-  // within must be called directly before
   overlap: function(mode, element) {
     if (!mode) return 0;
     if (mode == 'vertical')
@@ -4217,7 +5927,6 @@
         element.offsetWidth;
   },
 
-  // Deprecation layer -- use newer Element methods now (1.5.2).
 
   cumulativeOffset: Element.Methods.cumulativeOffset,
 
@@ -4317,4 +6026,57 @@
 
 /*--------------------------------------------------------------------------*/
 
-Element.addMethods();
\ No newline at end of file
+(function() {
+  window.Selector = Class.create({
+    initialize: function(expression) {
+      this.expression = expression.strip();
+    },
+
+    findElements: function(rootElement) {
+      return Prototype.Selector.select(this.expression, rootElement);
+    },
+
+    match: function(element) {
+      return Prototype.Selector.match(element, this.expression);
+    },
+
+    toString: function() {
+      return this.expression;
+    },
+
+    inspect: function() {
+      return "#<Selector: " + this.expression + ">";
+    }
+  });
+
+  Object.extend(Selector, {
+    matchElements: function(elements, expression) {
+      var match = Prototype.Selector.match,
+          results = [];
+
+      for (var i = 0, length = elements.length; i < length; i++) {
+        var element = elements[i];
+        if (match(element, expression)) {
+          results.push(Element.extend(element));
+        }
+      }
+      return results;
+    },
+
+    findElement: function(elements, expression, index) {
+      index = index || 0;
+      var matchIndex = 0, element;
+      for (var i = 0, length = elements.length; i < length; i++) {
+        element = elements[i];
+        if (Prototype.Selector.match(element, expression) && index === matchIndex++) {
+          return Element.extend(element);
+        }
+      }
+    },
+
+    findChildElements: function(element, expressions) {
+      var selector = expressions.toArray().join(', ');
+      return Prototype.Selector.select(selector, element || document);
+    }
+  });
+})();
--- a/public/stylesheets/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/stylesheets/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,53 +1,29 @@
 K 25
 svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/4954/trunk/public/stylesheets
+V 57
+/svn/!svn/ver/5961/branches/1.2-stable/public/stylesheets
 END
 context_menu.css
 K 25
 svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/3725/trunk/public/stylesheets/context_menu.css
-END
-calendar.css
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/3950/trunk/public/stylesheets/calendar.css
-END
-context_menu_rtl.css
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4014/trunk/public/stylesheets/context_menu_rtl.css
+V 74
+/svn/!svn/ver/5878/branches/1.2-stable/public/stylesheets/context_menu.css
 END
 jstoolbar.css
 K 25
 svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/1872/trunk/public/stylesheets/jstoolbar.css
+V 71
+/svn/!svn/ver/5878/branches/1.2-stable/public/stylesheets/jstoolbar.css
 END
 rtl.css
 K 25
 svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4014/trunk/public/stylesheets/rtl.css
-END
-csshover.htc
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/1024/trunk/public/stylesheets/csshover.htc
-END
-scm.css
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3619/trunk/public/stylesheets/scm.css
+V 65
+/svn/!svn/ver/5878/branches/1.2-stable/public/stylesheets/rtl.css
 END
 application.css
 K 25
 svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4954/trunk/public/stylesheets/application.css
+V 73
+/svn/!svn/ver/5961/branches/1.2-stable/public/stylesheets/application.css
 END
--- a/public/stylesheets/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/stylesheets/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/stylesheets
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/stylesheets
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-27T13:34:41.060565Z
-4954
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-d4e12d14040f9f048ddc696b1c0adf71
-2010-05-01T11:54:40.545656Z
-3725
+2011-06-06T13:20:53.000000Z
+83600fd6715fe2e27e64701b4676cace
+2011-03-28T19:24:02.913317Z
+5237
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-1858
+1827
 
 calendar.css
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 ee22ead851abb7d0733ccd46315ccdc2
 2010-08-19T01:13:50.846630Z
 3950
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 c8ca83463f3cde626ce2e2c3dca08cb2
 2010-08-22T19:12:21.015911Z
 4014
@@ -134,10 +134,10 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-d4a1902945bf7a0faa18be73960030c9
-2008-09-17T17:18:05.938945Z
-1872
+2011-06-06T13:20:53.000000Z
+d18be23290e35cbfee6a73d2b5061672
+2011-03-28T20:12:15.725801Z
+5241
 jplang
 has-props
 
@@ -160,7 +160,7 @@
 
 
 
-1937
+2040
 
 rtl.css
 file
@@ -168,11 +168,11 @@
 
 
 
-2011-03-03T11:05:14.000000Z
-cb7655798f97e931ea4992a9dd1afc4f
-2010-08-22T19:12:21.015911Z
-4014
-edavis10
+2011-06-06T13:20:53.000000Z
+ec93fc52228d7278eebc9310342cce10
+2011-04-30T10:13:02.262352Z
+5609
+tmaruyama
 
 
 
@@ -194,7 +194,7 @@
 
 
 
-1852
+3645
 
 csshover.htc
 file
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 62cab819ebe98bd9fb95415ac7b52e12
 2007-12-28T21:58:33.550772Z
 1024
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 360ffe5ea0cba43a286c7e42756b463f
 2010-03-28T11:30:48.135356Z
 3619
@@ -270,10 +270,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-1c8f6eb0fe9e3708adf095c11bc824bf
-2011-02-27T13:34:41.060565Z
-4954
+2011-06-06T13:20:53.000000Z
+8114c67302c257608646dc89d3166a8e
+2011-05-29T12:06:05.086159Z
+5961
 jplang
 has-props
 
@@ -296,5 +296,5 @@
 
 
 
-35897
+37363
 
--- a/public/stylesheets/.svn/text-base/application.css.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/stylesheets/.svn/text-base/application.css.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -107,7 +107,8 @@
 table.list th {  background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
 table.list td { vertical-align: top; }
 table.list td.id { width: 2%; text-align: center;}
-table.list td.checkbox { width: 15px; padding: 0px;}
+table.list td.checkbox { width: 15px; padding: 2px 0 0 0; }
+table.list td.checkbox input {padding:0px;}
 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
 table.list td.buttons a { padding-right: 0.6em; }
 table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
@@ -126,7 +127,7 @@
 tr.project.idnt-9 td.name {padding-left: 12.5em;}
 
 tr.issue { text-align: center; white-space: nowrap; }
-tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
+tr.issue td.subject, tr.issue td.category, td.assigned_to, tr.issue td.string, tr.issue td.text { white-space: normal; }
 tr.issue td.subject { text-align: left; }
 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
 
@@ -144,10 +145,12 @@
 tr.entry { border: 1px solid #f8f8f8; }
 tr.entry td { white-space: nowrap; }
 tr.entry td.filename { width: 30%; }
+tr.entry td.filename_no_report { width: 70%; }
 tr.entry td.size { text-align: right; font-size: 90%; }
 tr.entry td.revision, tr.entry td.author { text-align: center; }
 tr.entry td.age { text-align: right; }
 tr.entry.file td.filename a { margin-left: 16px; }
+tr.entry.file td.filename_no_report a { margin-left: 16px; }
 
 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
@@ -171,7 +174,7 @@
 tr.version.closed, tr.version.closed a { color: #999; }
 tr.version td.name { padding-left: 20px; }
 tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; }
-tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; }
+tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; white-space:nowrap; }
 
 tr.user td { width:13%; }
 tr.user td.email { width:18%; }
@@ -194,6 +197,9 @@
 
 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
 table.list tbody tr.group span.count { color: #aaa; font-size: 80%; }
+tr.group a.toggle-all { color: #aaa; font-size: 80%; font-weight: normal; display:none;}
+tr.group:hover a.toggle-all { display:inline;}
+a.toggle-all:hover {text-decoration:none;}
 
 table.list tbody tr:hover { background-color:#ffffdd; }
 table.list tbody tr.group:hover { background-color:inherit; }
@@ -274,9 +280,11 @@
 div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;}
 div.issue div.subject>div>p { margin-top: 0.5em; }
 div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;}
+div.issue span.private { position:relative; bottom: 2px; text-transform: uppercase; background: #d22; color: #fff; font-weight:bold; padding: 0px 2px 0px 2px; font-size: 60%; margin-right: 2px; border-radius: 2px; -moz-border-radius: 2px;}
 
-#issue_tree table.issues { border: 0; }
-#issue_tree td.checkbox {display:none;}
+#issue_tree table.issues, #relations table.issues { border: 0; }
+#issue_tree td.checkbox, #relations td.checkbox {display:none;}
+#relations td.buttons {padding:0;}
 
 fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
 fieldset.collapsible legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
@@ -330,6 +338,7 @@
 div#roadmap .wiki h1:first-child { display: none; }
 div#roadmap .wiki h1 { font-size: 120%; }
 div#roadmap .wiki h2 { font-size: 110%; }
+body.controller-versions.action-show div#roadmap .related-issues {width:auto;}
 
 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
 div#version-summary fieldset { margin-bottom: 1em; }
@@ -343,7 +352,9 @@
 
 form .attributes { margin-bottom: 8px; }
 form .attributes p { padding-top: 1px; padding-bottom: 2px; }
-form .attributes select { min-width: 50%; }
+form .attributes select { width: 60%; }
+input#issue_subject { width: 99%; }
+select#issue_done_ratio { width: 95px; }
 
 ul.projects { margin: 0; padding-left: 1em; }
 ul.projects.root { margin: 0;  padding: 0; }
@@ -364,10 +375,12 @@
 .total-hours span.hours-int { font-size: 120%; }
 
 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
-#user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
+#user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select { width: 90%; }
 
 #workflow_copy_form select { width: 200px; }
 
+textarea#custom_field_possible_values {width: 99%} 
+
 .pagination {font-size: 90%}
 p.pagination {margin-top:8px;}
 
@@ -421,8 +434,12 @@
 .tabular.settings label{ margin-left: -300px; width: 295px; }
 .tabular.settings textarea { width: 99%; }
 
+.tabular.settings.enabled_scm table {width:100%}
+.tabular.settings.enabled_scm td.scm_name{ font-weight: bold; }
+.tabular.settings.enabled_scm p.scm_config{ padding-left: 8px; font-style:italic;}
+
 fieldset.settings label { display: block; }
-.parent { padding-left: 20px; }
+fieldset#notified_events .parent { padding-left: 20px; }
 
 .required {color: #bb0000;}
 .summary {font-style: italic;}
@@ -492,6 +509,8 @@
 	color: #A6750C;
 }
 
+span.error {padding-left:20px; background:url(../images/exclamation.png) no-repeat 0 50%;}
+
 #errorExplanation ul { font-size: 0.9em;}
 #errorExplanation h2, #errorExplanation p { display: none; }
 
@@ -670,7 +689,9 @@
 
 /***** Diff *****/
 .diff_out { background: #fcc; }
+.diff_out span { background: #faa; }
 .diff_in { background: #cfc; }
+.diff_in span { background: #afa; }
 
 .text-diff {
 padding: 1em;
@@ -790,7 +811,7 @@
 }
 
 .gantt_subjects { font-size: 0.8em; }
-.gantt_subjects div { line-height:1.2em;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; }
+.gantt_subjects div { line-height:16px;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; }
 
 .task {
   position: absolute;
@@ -799,7 +820,7 @@
   color:#888;
   padding:0;
   margin:0;
-  line-height:0.8em;
+  line-height:16px;
   white-space:nowrap;
 }
 
@@ -956,4 +977,7 @@
   #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
 	#wiki_add_attachment { display:none; }
   .hide-when-print { display: none; }
+	.autoscroll {overflow-x: visible;}
+	table.list {margin-top:0.5em;}
+	table.list th, table.list td {border: 1px solid #aaa;}
 }
--- a/public/stylesheets/.svn/text-base/context_menu.css.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/stylesheets/.svn/text-base/context_menu.css.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -21,6 +21,7 @@
 	position:relative;
 	padding:1px;
 	z-index:39;
+	border:1px solid white;
 }
 #context-menu li.folder ul { position:absolute; left:168px; /* IE6 */ top:-2px; max-height:300px; overflow:hidden; overflow-y: auto; }
 #context-menu li.folder>ul { left:148px; }
@@ -30,7 +31,6 @@
 #context-menu.reverse-x li.folder>ul { right:148px; }
 
 #context-menu a {
-	border:1px solid white;
 	text-decoration:none !important;
 	background-repeat: no-repeat;
 	background-position: 1px 50%;
@@ -40,8 +40,8 @@
 #context-menu li>a { width:auto; } /* others */
 #context-menu a.disabled, #context-menu a.disabled:hover {color: #ccc;}
 #context-menu li a.submenu { background:url("../images/bullet_arrow_right.png") right no-repeat; }
-#context-menu a:hover { border-color:gray; background-color:#eee; color:#2A5685; }
-#context-menu li.folder a:hover { background-color:#eee; }	
+#context-menu li:hover { border:1px solid gray; background-color:#eee; }
+#context-menu a:hover {color:#2A5685;}
 #context-menu li.folder:hover { z-index:40; }		
 #context-menu ul ul, #context-menu  li:hover ul ul { display:none; }
 #context-menu li:hover ul, #context-menu li:hover li:hover ul {	display:block; }
--- a/public/stylesheets/.svn/text-base/jstoolbar.css.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/stylesheets/.svn/text-base/jstoolbar.css.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -44,7 +44,8 @@
 	margin-right: 4px;
 }
 
-.jstElements .help { float: right; margin-right: 1em; padding-top: 8px; font-size: 0.9em; }
+.jstElements .help { float: right; margin-right: 0.5em; padding-top: 8px; font-size: 0.9em; }
+.jstElements .help a {padding: 2px 0 2px 20px; background: url(../images/help.png) no-repeat 0 50%;}
 
 /* Buttons
 -------------------------------------------------------- */
--- a/public/stylesheets/.svn/text-base/rtl.css.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/stylesheets/.svn/text-base/rtl.css.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -56,7 +56,39 @@
 .changeset-changes { direction: ltr; padding-left: 2em }
 .changesets { direction: ltr; }
 div#issue-changesets { float: left; margin-right: 1em; margin-left: 0 }
+div#issue-changesets div.wiki { direction: ltr; padding-left: 2em }
 #activity dt, .journal { clear: right; }
 .journal-link { float: left; }
 div.wiki pre { direction: ltr; }
 
+ul.projects { padding-right: 1em; padding-left: 0; }
+ul.projects ul.projects { border-right: 3px solid #e0e0e0; border-left: 0; }
+.my-project { padding-right: 18px; padding-left: 0; background-position: 100% 50%; }
+
+#admin-menu a { background-position: 100% 40%; padding-right: 20px; padding-left: 0;}
+input#openid_url { background-position: 100% 50%; padding-right: 18px; padding-left: 0; }
+
+tr.project.idnt td.name span { background: url(../images/bullet_arrow_left.png) no-repeat 100% 50%; padding-right: 16px; padding-left: 0; }
+tr.project.idnt-1 td.name { padding-right: 0.5em; }
+tr.project.idnt-2 td.name { padding-right: 2em; }
+tr.project.idnt-3 td.name { padding-right: 3.5em; }
+tr.project.idnt-4 td.name { padding-right: 5em; }
+tr.project.idnt-5 td.name { padding-right: 6.5em; }
+tr.project.idnt-6 td.name { padding-right: 8em; }
+tr.project.idnt-7 td.name { padding-right: 9.5em; }
+tr.project.idnt-8 td.name { padding-right: 11em; }
+tr.project.idnt-9 td.name { padding-right: 12.5em; }
+
+tr.issue.idnt td.subject a { background: url(../images/bullet_arrow_left.png) no-repeat 100% 50%; padding-right: 16px; padding-left: 0; }
+tr.issue.idnt-1 td.subject { padding-right: 0.5em; }
+tr.issue.idnt-2 td.subject { padding-right: 2em; }
+tr.issue.idnt-3 td.subject { padding-right: 3.5em; }
+tr.issue.idnt-4 td.subject { padding-right: 5em; }
+tr.issue.idnt-5 td.subject { padding-right: 6.5em; }
+tr.issue.idnt-6 td.subject { padding-right: 8em; }
+tr.issue.idnt-7 td.subject { padding-right: 9.5em; }
+tr.issue.idnt-8 td.subject { padding-right: 11em; }
+tr.issue.idnt-9 td.subject { padding-right: 12.5em; }
+
+div.wiki ul.toc { margin-right: 0; margin-left: 12px; }
+div.wiki ul.toc li li { margin-right: 1.5em; margin-left: 0; }
--- a/public/stylesheets/application.css	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/stylesheets/application.css	Mon Jun 06 14:41:04 2011 +0100
@@ -109,7 +109,8 @@
 table.list th {  background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
 table.list td { vertical-align: top; }
 table.list td.id { width: 2%; text-align: center;}
-table.list td.checkbox { width: 15px; padding: 0px;}
+table.list td.checkbox { width: 15px; padding: 2px 0 0 0; }
+table.list td.checkbox input {padding:0px;}
 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
 table.list td.buttons a { padding-right: 0.6em; }
 table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
@@ -128,7 +129,7 @@
 tr.project.idnt-9 td.name {padding-left: 12.5em;}
 
 tr.issue { text-align: center; white-space: nowrap; }
-tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
+tr.issue td.subject, tr.issue td.category, td.assigned_to, tr.issue td.string, tr.issue td.text { white-space: normal; }
 tr.issue td.subject { text-align: left; }
 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
 
@@ -146,10 +147,12 @@
 tr.entry { border: 1px solid #f8f8f8; }
 tr.entry td { white-space: nowrap; }
 tr.entry td.filename { width: 30%; }
+tr.entry td.filename_no_report { width: 70%; }
 tr.entry td.size { text-align: right; font-size: 90%; }
 tr.entry td.revision, tr.entry td.author { text-align: center; }
 tr.entry td.age { text-align: right; }
 tr.entry.file td.filename a { margin-left: 16px; }
+tr.entry.file td.filename_no_report a { margin-left: 16px; }
 
 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
@@ -173,7 +176,7 @@
 tr.version.closed, tr.version.closed a { color: #999; }
 tr.version td.name { padding-left: 20px; }
 tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; }
-tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; }
+tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; white-space:nowrap; }
 
 tr.user td { width:13%; }
 tr.user td.email { width:18%; }
@@ -196,6 +199,9 @@
 
 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
 table.list tbody tr.group span.count { color: #aaa; font-size: 80%; }
+tr.group a.toggle-all { color: #aaa; font-size: 80%; font-weight: normal; display:none;}
+tr.group:hover a.toggle-all { display:inline;}
+a.toggle-all:hover {text-decoration:none;}
 
 table.list tbody tr:hover { background-color:#ffffdd; }
 table.list tbody tr.group:hover { background-color:inherit; }
@@ -276,9 +282,11 @@
 div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;}
 div.issue div.subject>div>p { margin-top: 0.5em; }
 div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;}
+div.issue span.private { position:relative; bottom: 2px; text-transform: uppercase; background: #d22; color: #fff; font-weight:bold; padding: 0px 2px 0px 2px; font-size: 60%; margin-right: 2px; border-radius: 2px; -moz-border-radius: 2px;}
 
-#issue_tree table.issues { border: 0; }
-#issue_tree td.checkbox {display:none;}
+#issue_tree table.issues, #relations table.issues { border: 0; }
+#issue_tree td.checkbox, #relations td.checkbox {display:none;}
+#relations td.buttons {padding:0;}
 
 fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
 fieldset.collapsible legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
@@ -332,6 +340,7 @@
 div#roadmap .wiki h1:first-child { display: none; }
 div#roadmap .wiki h1 { font-size: 120%; }
 div#roadmap .wiki h2 { font-size: 110%; }
+body.controller-versions.action-show div#roadmap .related-issues {width:auto;}
 
 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
 div#version-summary fieldset { margin-bottom: 1em; }
@@ -345,7 +354,9 @@
 
 form .attributes { margin-bottom: 8px; }
 form .attributes p { padding-top: 1px; padding-bottom: 2px; }
-form .attributes select { min-width: 50%; }
+form .attributes select { width: 60%; }
+input#issue_subject { width: 99%; }
+select#issue_done_ratio { width: 95px; }
 
 ul.projects { margin: 0; padding-left: 1em; }
 ul.projects.root { margin: 0;  padding: 0; }
@@ -365,10 +376,12 @@
 .total-hours span.hours-int { font-size: 120%; }
 
 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
-#user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
+#user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select { width: 90%; }
 
 #workflow_copy_form select { width: 200px; }
 
+textarea#custom_field_possible_values {width: 99%} 
+
 .pagination {font-size: 90%}
 p.pagination {margin-top:8px;}
 
@@ -422,8 +435,12 @@
 .tabular.settings label{ margin-left: -300px; width: 295px; }
 .tabular.settings textarea { width: 99%; }
 
+.tabular.settings.enabled_scm table {width:100%}
+.tabular.settings.enabled_scm td.scm_name{ font-weight: bold; }
+.tabular.settings.enabled_scm p.scm_config{ padding-left: 8px; font-style:italic;}
+
 fieldset.settings label { display: block; }
-.parent { padding-left: 20px; }
+fieldset#notified_events .parent { padding-left: 20px; }
 
 .required {color: #bb0000;}
 .summary {font-style: italic;}
@@ -493,6 +510,8 @@
 	color: #A6750C;
 }
 
+span.error {padding-left:20px; background:url(../images/exclamation.png) no-repeat 0 50%;}
+
 #errorExplanation ul { font-size: 0.9em;}
 #errorExplanation h2, #errorExplanation p { display: none; }
 
@@ -671,7 +690,9 @@
 
 /***** Diff *****/
 .diff_out { background: #fcc; }
+.diff_out span { background: #faa; }
 .diff_in { background: #cfc; }
+.diff_in span { background: #afa; }
 
 .text-diff {
 padding: 1em;
@@ -791,7 +812,7 @@
 }
 
 .gantt_subjects { font-size: 0.8em; }
-.gantt_subjects div { line-height:1.2em;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; }
+.gantt_subjects div { line-height:16px;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; }
 
 .task {
   position: absolute;
@@ -800,7 +821,7 @@
   color:#888;
   padding:0;
   margin:0;
-  line-height:0.8em;
+  line-height:16px;
   white-space:nowrap;
 }
 
@@ -957,4 +978,7 @@
   #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
 	#wiki_add_attachment { display:none; }
   .hide-when-print { display: none; }
+	.autoscroll {overflow-x: visible;}
+	table.list {margin-top:0.5em;}
+	table.list th, table.list td {border: 1px solid #aaa;}
 }
--- a/public/stylesheets/context_menu.css	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/stylesheets/context_menu.css	Mon Jun 06 14:41:04 2011 +0100
@@ -21,6 +21,7 @@
 	position:relative;
 	padding:1px;
 	z-index:39;
+	border:1px solid white;
 }
 #context-menu li.folder ul { position:absolute; left:168px; /* IE6 */ top:-2px; max-height:300px; overflow:hidden; overflow-y: auto; }
 #context-menu li.folder>ul { left:148px; }
@@ -30,7 +31,6 @@
 #context-menu.reverse-x li.folder>ul { right:148px; }
 
 #context-menu a {
-	border:1px solid white;
 	text-decoration:none !important;
 	background-repeat: no-repeat;
 	background-position: 1px 50%;
@@ -40,8 +40,8 @@
 #context-menu li>a { width:auto; } /* others */
 #context-menu a.disabled, #context-menu a.disabled:hover {color: #ccc;}
 #context-menu li a.submenu { background:url("../images/bullet_arrow_right.png") right no-repeat; }
-#context-menu a:hover { border-color:gray; background-color:#eee; color:#2A5685; }
-#context-menu li.folder a:hover { background-color:#eee; }	
+#context-menu li:hover { border:1px solid gray; background-color:#eee; }
+#context-menu a:hover {color:#2A5685;}
 #context-menu li.folder:hover { z-index:40; }		
 #context-menu ul ul, #context-menu  li:hover ul ul { display:none; }
 #context-menu li:hover ul, #context-menu li:hover li:hover ul {	display:block; }
--- a/public/stylesheets/jstoolbar.css	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/stylesheets/jstoolbar.css	Mon Jun 06 14:41:04 2011 +0100
@@ -44,7 +44,8 @@
 	margin-right: 4px;
 }
 
-.jstElements .help { float: right; margin-right: 1em; padding-top: 8px; font-size: 0.9em; }
+.jstElements .help { float: right; margin-right: 0.5em; padding-top: 8px; font-size: 0.9em; }
+.jstElements .help a {padding: 2px 0 2px 20px; background: url(../images/help.png) no-repeat 0 50%;}
 
 /* Buttons
 -------------------------------------------------------- */
--- a/public/stylesheets/rtl.css	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/stylesheets/rtl.css	Mon Jun 06 14:41:04 2011 +0100
@@ -56,7 +56,39 @@
 .changeset-changes { direction: ltr; padding-left: 2em }
 .changesets { direction: ltr; }
 div#issue-changesets { float: left; margin-right: 1em; margin-left: 0 }
+div#issue-changesets div.wiki { direction: ltr; padding-left: 2em }
 #activity dt, .journal { clear: right; }
 .journal-link { float: left; }
 div.wiki pre { direction: ltr; }
 
+ul.projects { padding-right: 1em; padding-left: 0; }
+ul.projects ul.projects { border-right: 3px solid #e0e0e0; border-left: 0; }
+.my-project { padding-right: 18px; padding-left: 0; background-position: 100% 50%; }
+
+#admin-menu a { background-position: 100% 40%; padding-right: 20px; padding-left: 0;}
+input#openid_url { background-position: 100% 50%; padding-right: 18px; padding-left: 0; }
+
+tr.project.idnt td.name span { background: url(../images/bullet_arrow_left.png) no-repeat 100% 50%; padding-right: 16px; padding-left: 0; }
+tr.project.idnt-1 td.name { padding-right: 0.5em; }
+tr.project.idnt-2 td.name { padding-right: 2em; }
+tr.project.idnt-3 td.name { padding-right: 3.5em; }
+tr.project.idnt-4 td.name { padding-right: 5em; }
+tr.project.idnt-5 td.name { padding-right: 6.5em; }
+tr.project.idnt-6 td.name { padding-right: 8em; }
+tr.project.idnt-7 td.name { padding-right: 9.5em; }
+tr.project.idnt-8 td.name { padding-right: 11em; }
+tr.project.idnt-9 td.name { padding-right: 12.5em; }
+
+tr.issue.idnt td.subject a { background: url(../images/bullet_arrow_left.png) no-repeat 100% 50%; padding-right: 16px; padding-left: 0; }
+tr.issue.idnt-1 td.subject { padding-right: 0.5em; }
+tr.issue.idnt-2 td.subject { padding-right: 2em; }
+tr.issue.idnt-3 td.subject { padding-right: 3.5em; }
+tr.issue.idnt-4 td.subject { padding-right: 5em; }
+tr.issue.idnt-5 td.subject { padding-right: 6.5em; }
+tr.issue.idnt-6 td.subject { padding-right: 8em; }
+tr.issue.idnt-7 td.subject { padding-right: 9.5em; }
+tr.issue.idnt-8 td.subject { padding-right: 11em; }
+tr.issue.idnt-9 td.subject { padding-right: 12.5em; }
+
+div.wiki ul.toc { margin-right: 0; margin-left: 12px; }
+div.wiki ul.toc li li { margin-right: 1.5em; margin-left: 0; }
--- a/public/themes/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/themes/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/themes
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/themes
 http://redmine.rubyforge.org/svn
 
 
@@ -38,7 +38,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 5b7a0352b95a67871b90c5a90a226123
 2007-10-10T17:17:37.630066Z
 818
--- a/public/themes/alternate/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/themes/alternate/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/themes/alternate
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/themes/alternate
 http://redmine.rubyforge.org/svn
 
 
--- a/public/themes/alternate/stylesheets/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/themes/alternate/stylesheets/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/themes/alternate/stylesheets
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/themes/alternate/stylesheets
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 8a47fb469dca292ea631422810927fe3
 2009-11-15T21:15:31.339604Z
 3069
--- a/public/themes/classic/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/themes/classic/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/themes/classic
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/themes/classic
 http://redmine.rubyforge.org/svn
 
 
--- a/public/themes/classic/images/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/themes/classic/images/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/themes/classic/images
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/themes/classic/images
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 a137eb4441860564ce1655357af26de8
 2009-12-18T14:10:26.630799Z
 3183
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 99bea32e1990e011e870f6c562e87a6a
 2009-12-18T14:10:26.630799Z
 3183
--- a/public/themes/classic/stylesheets/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/public/themes/classic/stylesheets/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/public/themes/classic/stylesheets
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/public/themes/classic/stylesheets
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:14.000000Z
+2011-06-06T13:15:00.000000Z
 1bfaedd3f6b62419367da41a7a9310b2
 2009-12-18T14:10:26.630799Z
 3183
--- a/script/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/script/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/script
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/script
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 623b2f8265970f73bdb3489872d00eb6
 2010-11-02T00:20:21.419252Z
 4359
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 2ac529bf7a654b9b91b2fea2275aa44e
 2010-11-02T00:20:21.419252Z
 4359
@@ -103,7 +103,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 ff97a702418dbc85fec089b97506281f
 2010-11-02T00:20:21.419252Z
 4359
@@ -137,7 +137,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 1fd5fa2d4aeee5b4111a40f62ae85446
 2010-11-02T00:20:21.419252Z
 4359
@@ -171,7 +171,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 95866cb3b894816b540afd282b952618
 2010-11-02T00:20:21.419252Z
 4359
@@ -205,7 +205,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 0cccc4eabf129ebd7b571d3eceda8893
 2010-11-02T00:20:21.419252Z
 4359
@@ -239,7 +239,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 b0aeca2e257a2226502c570e671e1b76
 2010-11-02T00:20:21.419252Z
 4359
@@ -273,7 +273,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 fb51df9bca94c25a928f40468354700f
 2010-11-02T00:20:21.419252Z
 4359
@@ -310,7 +310,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 db0dd437d39c21fe52e1fc05a0680163
 2010-11-02T00:20:21.419252Z
 4359
--- a/script/performance/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/script/performance/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/script/performance
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/script/performance
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 33063b7a3d4dbef12ac8bcb55a5e6e3e
 2010-11-02T00:20:21.419252Z
 4359
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 9d3b872769337c49e648b9fe47e4e280
 2010-11-02T00:20:21.419252Z
 4359
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 b6500710f6029724e44cbd25f80eaaf1
 2010-11-02T00:20:21.419252Z
 4359
--- a/script/process/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/script/process/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/script/process
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/script/process
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 47bf41d8d2c97d220d9f70916e94c651
 2010-11-02T00:20:21.419252Z
 4359
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 9137857ebdaf61d57a3496f7e61fede3
 2010-11-02T00:20:21.419252Z
 4359
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 99af2666610d48d13e2eeceacf487d16
 2010-11-02T00:20:21.419252Z
 4359
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 64b5316e88e7555bf827ad04edbce4a6
 2010-11-02T00:20:21.419252Z
 4359
--- a/test/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,23 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 29
-/svn/!svn/ver/4991/trunk/test
+V 43
+/svn/!svn/ver/5947/branches/1.2-stable/test
 END
-object_daddy_helpers.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4078/trunk/test/object_daddy_helpers.rb
-END
-test_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4603/trunk/test/test_helper.rb
-END
-helper_testcase.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/2887/trunk/test/helper_testcase.rb
-END
--- a/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-03T03:35:13.139305Z
-4991
-tmaruyama
+2011-05-29T07:47:25.955545Z
+5947
+jplang
 
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 bec9d26a7ae75350529040e7bca36bfa
 2010-09-10T19:44:45.405792Z
 4078
@@ -72,10 +72,10 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-07898564890be4ff9e6c039fa6aa9d41
-2011-01-01T12:24:18.924489Z
-4603
+2011-06-06T13:18:33.000000Z
+f3caf6aac8f26ebe59945f9d81a84889
+2011-03-27T15:41:05.619509Z
+5227
 jplang
 has-props
 
@@ -98,7 +98,7 @@
 
 
 
-16997
+17224
 
 functional
 dir
@@ -118,7 +118,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 29604d905b321f5bf19b86f7b9797394
 2009-09-13T17:14:35.707881Z
 2887
--- a/test/.svn/text-base/test_helper.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/.svn/text-base/test_helper.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -87,6 +87,7 @@
     saved_settings = options.keys.inject({}) {|h, k| h[k] = Setting[k].dup; h}
     options.each {|k, v| Setting[k] = v}
     yield
+  ensure
     saved_settings.each {|k, v| Setting[k] = v}
   end
 
@@ -109,6 +110,13 @@
     File.join(RAILS_ROOT.gsub(%r{config\/\.\.}, ''), "/tmp/test/#{vendor.downcase}_repository")
   end
   
+  # Returns the url of the subversion test repository
+  def self.subversion_repository_url
+    path = repository_path('subversion')
+    path = '/' + path unless path.starts_with?('/')
+    "file://#{path}"
+  end
+  
   # Returns true if the +vendor+ test repository is configured
   def self.repository_configured?(vendor)
     File.directory?(repository_path(vendor))
@@ -416,7 +424,7 @@
   # Checks that the response is a valid JSON string
   def self.should_be_a_valid_json_string
     should "be a valid JSON string (or empty)" do
-      assert (response.body.blank? || ActiveSupport::JSON.decode(response.body))
+      assert(response.body.blank? || ActiveSupport::JSON.decode(response.body))
     end
   end
 
--- a/test/exemplars/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/exemplars/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/exemplars
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/exemplars
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 26c766235d2f79490fa33a7ec9c154ae
 2010-01-27T18:29:03.119133Z
 3340
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 62261c71ec828fa443bd44e055602e3d
 2010-01-27T18:29:03.119133Z
 3340
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 0da51e5e074d641e056e5011545571b8
 2010-01-27T18:29:03.119133Z
 3340
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 5b8b8763d7419d535d1d14d7bfb4f343
 2010-01-27T18:29:03.119133Z
 3340
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 13a55da47c4b6a61a3dbfd73eea41049
 2010-08-19T22:24:42.251508Z
 4010
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 26c91af771947fc671b87a08282608b3
 2010-04-13T05:57:27.803435Z
 3670
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 acf3ae00213d45112f6e13ecce212af1
 2010-01-28T19:05:21.831741Z
 3342
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 662be883bd5a43d964b868caaf34b276
 2010-01-27T18:29:03.119133Z
 3340
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 2dc494eb57aee9ee3c3ca5324f61e707
 2010-01-27T18:29:03.119133Z
 3340
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 06cec6b1adf323a00a75e5c008f73c57
 2010-01-27T18:29:03.119133Z
 3340
@@ -372,7 +372,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 e51316252a08488be9aa2878c00c4959
 2010-01-27T18:29:03.119133Z
 3340
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 e5f24c612cf3bcc7b17aeeafeae0697d
 2009-10-20T00:36:51.144135Z
 2937
@@ -440,7 +440,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 9be3a10325013fa24b00903db30d1ca3
 2010-11-14T16:24:21.989522Z
 4406
@@ -474,7 +474,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 24d00671cf3c2137d957ee6dac273517
 2010-01-28T19:05:21.831741Z
 3342
@@ -508,7 +508,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 1f7deb35b057dce8eb5dbc41d9a29019
 2010-01-28T19:05:21.831741Z
 3342
@@ -542,7 +542,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 575c5f91f698576ec8f6cc88bbcd31d8
 2010-01-27T18:29:03.119133Z
 3340
@@ -576,7 +576,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 fd5cfe62b2a92441a7cdb5035c4c4897
 2009-10-18T22:25:00.956502Z
 2930
@@ -610,7 +610,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 faf4bf5a3a3662c361ce668c20c293a4
 2010-01-27T18:29:03.119133Z
 3340
@@ -644,7 +644,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 91f000c1e57fb0edc16bf90ea8efc6fa
 2010-01-28T19:05:21.831741Z
 3342
@@ -678,7 +678,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 3b871be1550b1a964324a18f868dabae
 2009-12-06T10:28:20.099964Z
 3123
@@ -712,7 +712,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 dfe8cbec2ef3bcffe6b9352e3a3d807c
 2009-10-18T22:25:00.956502Z
 2930
@@ -746,7 +746,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 a9ebd14814e0885fc096d0702745f30d
 2010-01-27T18:29:03.119133Z
 3340
@@ -780,7 +780,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 d1bdf1810c216ecde56d0750f78bea10
 2010-01-27T18:29:03.119133Z
 3340
@@ -814,7 +814,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 92ac53d6b3a2e00ae1a9e0e4bc5d548b
 2010-02-08T18:53:12.750770Z
 3398
@@ -848,7 +848,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 94aed9cd40bd95ab8d8c2f51bfc097cf
 2009-10-18T22:25:00.956502Z
 2930
@@ -882,7 +882,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 d17dfd87c9c081965089712a4ce42a6d
 2009-10-18T22:25:00.956502Z
 2930
@@ -916,7 +916,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 74f5207a054732dd9be1b3184340ca77
 2009-10-18T22:25:00.956502Z
 2930
@@ -950,7 +950,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 908d8689f3ff469978b8af8bb55084b4
 2010-01-27T18:29:03.119133Z
 3340
@@ -984,7 +984,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 9c97ca570fa9b00ab1ecebd226f52f66
 2009-10-18T22:25:00.956502Z
 2930
@@ -1018,7 +1018,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 c01820cc719616bb5a0895cfddb40798
 2010-01-27T18:29:03.119133Z
 3340
@@ -1052,7 +1052,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 27218d998d6798365d0cc47ae8d8bb87
 2010-01-28T19:05:21.831741Z
 3342
@@ -1086,7 +1086,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 0b05f7ce166d5bb3695d2fad7e56fc7f
 2010-01-27T18:29:03.119133Z
 3340
@@ -1120,7 +1120,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 2a6254ddbc381a97b49b17936c25ef78
 2010-01-28T19:05:21.831741Z
 3342
@@ -1154,7 +1154,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 d60529466c1df6db1edcdac71fa1a9d7
 2010-04-13T05:57:27.803435Z
 3670
@@ -1188,7 +1188,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 44278bb3b28eed2566aab063777becf7
 2010-09-28T18:22:10.512346Z
 4218
@@ -1222,7 +1222,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 0a69ac358346b15717ccb6b0cddba4be
 2010-01-27T18:29:03.119133Z
 3340
@@ -1256,7 +1256,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 19471f6afbec20925ddd6824c1290526
 2010-01-27T18:29:03.119133Z
 3340
--- a/test/fixtures/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,251 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/4964/trunk/test/fixtures
-END
-journal_details.yml
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4954/trunk/test/fixtures/journal_details.yml
-END
-issue_statuses.yml
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4895/trunk/test/fixtures/issue_statuses.yml
-END
-changesets.yml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4470/trunk/test/fixtures/changesets.yml
-END
-roles.yml
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/4645/trunk/test/fixtures/roles.yml
-END
-wikis.yml
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/2895/trunk/test/fixtures/wikis.yml
-END
-projects_trackers.yml
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/2196/trunk/test/fixtures/projects_trackers.yml
-END
-repositories.yml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/2895/trunk/test/fixtures/repositories.yml
-END
-time_entries.yml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/2950/trunk/test/fixtures/time_entries.yml
-END
-projects.yml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/2895/trunk/test/fixtures/projects.yml
-END
-custom_values.yml
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/4488/trunk/test/fixtures/custom_values.yml
-END
-issue_categories.yml
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/2895/trunk/test/fixtures/issue_categories.yml
-END
-custom_fields_trackers.yml
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/2895/trunk/test/fixtures/custom_fields_trackers.yml
-END
-user_preferences.yml
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/3194/trunk/test/fixtures/user_preferences.yml
-END
-groups_users.yml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3250/trunk/test/fixtures/groups_users.yml
-END
-documents.yml
 K 25
 svn:wc:ra_dav:version-url
 V 52
-/svn/!svn/ver/3099/trunk/test/fixtures/documents.yml
+/svn/!svn/ver/5947/branches/1.2-stable/test/fixtures
 END
-tokens.yml
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/2895/trunk/test/fixtures/tokens.yml
-END
-changes.yml
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/2895/trunk/test/fixtures/changes.yml
-END
-custom_fields_projects.yml
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/3278/trunk/test/fixtures/custom_fields_projects.yml
-END
-enumerations.yml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3573/trunk/test/fixtures/enumerations.yml
-END
-member_roles.yml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3250/trunk/test/fixtures/member_roles.yml
-END
-issues.yml
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4482/trunk/test/fixtures/issues.yml
-END
-queries.yml
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/3071/trunk/test/fixtures/queries.yml
-END
-watchers.yml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/2456/trunk/test/fixtures/watchers.yml
-END
-wiki_contents.yml
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/4681/trunk/test/fixtures/wiki_contents.yml
-END
-enabled_modules.yml
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4505/trunk/test/fixtures/enabled_modules.yml
-END
-wiki_pages.yml
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4680/trunk/test/fixtures/wiki_pages.yml
-END
-wiki_content_versions.yml
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/2895/trunk/test/fixtures/wiki_content_versions.yml
-END
-comments.yml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/2895/trunk/test/fixtures/comments.yml
-END
-members.yml
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/3250/trunk/test/fixtures/members.yml
-END
-workflows.yml
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/2895/trunk/test/fixtures/workflows.yml
-END
-journals.yml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3123/trunk/test/fixtures/journals.yml
-END
-custom_fields.yml
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/3313/trunk/test/fixtures/custom_fields.yml
-END
-users.yml
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/4936/trunk/test/fixtures/users.yml
-END
-auth_sources.yml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3490/trunk/test/fixtures/auth_sources.yml
-END
-messages.yml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3167/trunk/test/fixtures/messages.yml
-END
-issue_relations.yml
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/3013/trunk/test/fixtures/issue_relations.yml
-END
-versions.yml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3123/trunk/test/fixtures/versions.yml
-END
-boards.yml
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/2976/trunk/test/fixtures/boards.yml
-END
-attachments.yml
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4604/trunk/test/fixtures/attachments.yml
-END
-news.yml
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/4505/trunk/test/fixtures/news.yml
-END
-trackers.yml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/2895/trunk/test/fixtures/trackers.yml
-END
--- a/test/fixtures/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/fixtures
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/fixtures
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-28T14:12:47.115180Z
-4964
-tmaruyama
+2011-05-29T07:47:25.955545Z
+5947
+jplang
 
 
 
@@ -35,10 +35,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-c85ec633618360a62da10b17100bbf56
-2011-02-27T13:34:41.060565Z
-4954
+2011-06-06T13:18:33.000000Z
+bcf3bf528dfe95311b20ced8289530d7
+2011-03-06T16:04:35.458860Z
+5021
 jplang
 has-props
 
@@ -61,7 +61,7 @@
 
 
 
-547
+663
 
 ldap
 dir
@@ -72,7 +72,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 2d31c6b69ca13da5466d1600bae9a2fd
 2011-02-20T15:38:07.840581Z
 4895
@@ -106,7 +106,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 d3a777560e5a963bc848b30547a65d4b
 2010-12-05T11:45:09.061840Z
 4470
@@ -140,10 +140,10 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-15f318dd68723b4c4dab1e1ca66dd044
-2011-01-06T20:36:31.826591Z
-4645
+2011-06-06T13:18:33.000000Z
+453992812e9c1005a7f66f8b5b2ceaa5
+2011-04-15T13:23:13.506236Z
+5466
 jplang
 has-props
 
@@ -166,7 +166,7 @@
 
 
 
-3721
+3862
 
 encoding
 dir
@@ -177,7 +177,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 a519d5e75a6d1ac1516064c882aa773c
 2009-09-20T14:06:57.257282Z
 2895
@@ -211,11 +211,11 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-5259028ece10055ea04cb1baddadd334
-2009-10-21T22:34:52.412718Z
-2950
-edavis10
+2011-06-06T13:18:33.000000Z
+58e9c8e21bec44031167bbf2da75d428
+2011-04-04T11:54:22.596314Z
+5315
+tmaruyama
 has-props
 
 
@@ -237,7 +237,7 @@
 
 
 
-1074
+1357
 
 projects_trackers.yml
 file
@@ -245,7 +245,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 b7264b0f4d285dc38ba7139feaabafe2
 2008-12-29T12:40:56.716698Z
 2196
@@ -279,7 +279,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 e9853df4a04648bcb9389127748b24c4
 2009-09-20T14:06:57.257282Z
 2895
@@ -313,7 +313,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 342c09046e9942f00cced7e066066202
 2010-12-11T10:47:00.859736Z
 4488
@@ -347,7 +347,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 b72e570a19a6a6297fd0e78a0c15d9a6
 2009-09-20T14:06:57.257282Z
 2895
@@ -381,7 +381,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 e6b2256ffe56fa2baa64e474f5c920d6
 2009-09-20T14:06:57.257282Z
 2895
@@ -415,7 +415,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 7e42308ab41cac587386d54899cfcef5
 2009-09-20T14:06:57.257282Z
 2895
@@ -449,7 +449,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 ad513155b260eb8a8739d4d13c2823a8
 2009-12-19T13:32:21.556847Z
 3194
@@ -483,7 +483,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 1cdfea6614ecba6cddecb3d4524c38ba
 2009-12-26T16:14:55.591181Z
 3250
@@ -517,7 +517,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 159394b420966c9e2f5ab0e31cb93b41
 2009-11-27T20:32:28.228739Z
 3099
@@ -554,7 +554,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 e5a26332fd48dac7e33a963622f49994
 2009-09-20T14:06:57.257282Z
 2895
@@ -591,7 +591,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 909e55408711ba1774e1c071b162962f
 2009-09-20T14:06:57.257282Z
 2895
@@ -619,13 +619,50 @@
 
 377
 
+mailer
+dir
+
+enumerations.yml
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+bafbddc194242dbdcac1f2bfc550c27b
+2010-03-13T14:56:49.379682Z
+3573
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1391
+
 custom_fields_projects.yml
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 c6789a99aba9f28cf1d31a36b36224c8
 2010-01-03T11:18:09.741250Z
 3278
@@ -653,16 +690,16 @@
 
 71
 
-enumerations.yml
+issues.yml
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
-bafbddc194242dbdcac1f2bfc550c27b
-2010-03-13T14:56:49.379682Z
-3573
+2011-06-06T13:18:33.000000Z
+c8502c21d9daf58cafee84d3f2afc34f
+2011-04-15T13:23:13.506236Z
+5466
 jplang
 has-props
 
@@ -685,10 +722,7 @@
 
 
 
-1391
-
-mailer
-dir
+6047
 
 member_roles.yml
 file
@@ -696,7 +730,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 86387d627355e1debc04c364c29efe81
 2009-12-26T16:14:55.591181Z
 3250
@@ -724,47 +758,13 @@
 
 692
 
-issues.yml
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-a8c37ca171bb5f39ffbc6cd3ffcf0c52
-2010-12-10T11:06:21.419457Z
-4482
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5656
-
 queries.yml
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 b5bafc332d23c9efcc2ef648a9a393b9
 2009-11-16T18:07:30.910440Z
 3071
@@ -792,13 +792,47 @@
 
 2345
 
+watchers.yml
+file
+
+
+
+
+2011-06-06T13:15:00.000000Z
+9dbcd982c4227d919ea750ce4fde79a7
+2009-02-12T17:35:57.542817Z
+2456
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+219
+
 wiki_contents.yml
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 595d0f0964e3c3f8ce7edb4b07941ffa
 2011-01-10T19:45:20.108166Z
 4681
@@ -826,47 +860,13 @@
 
 1953
 
-watchers.yml
-file
-
-
-
-
-2011-03-03T11:05:09.000000Z
-9dbcd982c4227d919ea750ce4fde79a7
-2009-02-12T17:35:57.542817Z
-2456
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-219
-
 wiki_pages.yml
 file
 
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 8d80a417fe13f7041cdec04f3206169e
 2011-01-10T18:32:04.408692Z
 4680
@@ -900,7 +900,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 c1fe3d9f5bbcbf5cf73c684b744d0c7a
 2010-12-12T17:00:52.100205Z
 4505
@@ -934,7 +934,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 0cb04e10717d1de94f328dd92f2e9f8c
 2009-09-20T14:06:57.257282Z
 2895
@@ -968,7 +968,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 fcf009196cf46bc9d64e947e8275e51f
 2009-09-20T14:06:57.257282Z
 2895
@@ -1005,7 +1005,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 a12098ae3dcc7df2fffdc5aabc036445
 2009-12-26T16:14:55.591181Z
 3250
@@ -1042,10 +1042,10 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-0f791723030addfd84aeb8e8478b4373
-2009-12-06T10:28:20.099964Z
-3123
+2011-06-06T13:18:33.000000Z
+5933321a4383a85ec30cd79c9d4b43ec
+2011-05-29T07:47:25.955545Z
+5947
 jplang
 has-props
 
@@ -1068,7 +1068,7 @@
 
 
 
-707
+881
 
 workflows.yml
 file
@@ -1076,7 +1076,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 be9ed58ec8ae1a4d2e1608c712c480be
 2009-09-20T14:06:57.257282Z
 2895
@@ -1110,11 +1110,11 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-28c83450d87eb6a49fe3d920f05e16b7
-2010-01-14T20:00:17.463579Z
-3313
-jplang
+2011-06-06T13:18:33.000000Z
+15024790a20150217f862dc606c93bee
+2011-04-04T11:54:22.596314Z
+5315
+tmaruyama
 has-props
 
 
@@ -1136,7 +1136,7 @@
 
 
 
-2373
+2632
 
 users.yml
 file
@@ -1144,7 +1144,7 @@
 
 
 
-2011-03-03T11:40:18.000000Z
+2011-06-06T13:15:00.000000Z
 4bc8168f868eb01690365ddcb82e8841
 2011-02-23T17:27:31.762248Z
 4936
@@ -1178,7 +1178,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 f299e9e4f8b4310d276f3cc0bd4573a2
 2010-02-26T08:42:40.283735Z
 3490
@@ -1212,7 +1212,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 f41152c0bbe67b30733fb44c847c0c28
 2009-12-13T12:39:22.716082Z
 3167
@@ -1246,7 +1246,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 14b2db45f35ee3e6f8c2a8a05b94c82b
 2009-11-07T08:44:56.035544Z
 3013
@@ -1280,7 +1280,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 0670d0dee081a5f922aa2d3ff7af9764
 2009-12-06T10:28:20.099964Z
 3123
@@ -1314,7 +1314,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 c3c2ab815b9af7fb01ccafc5fc881f87
 2009-10-25T11:23:46.266302Z
 2976
@@ -1348,10 +1348,10 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-c91798950ab5d71a04f10a60ad9e5259
-2011-01-01T13:40:36.520874Z
-4604
+2011-06-06T13:18:33.000000Z
+62356b9a34eea342c180d6ddf5c83ce8
+2011-04-15T13:23:13.506236Z
+5466
 jplang
 has-props
 
@@ -1374,7 +1374,7 @@
 
 
 
-4320
+4669
 
 news.yml
 file
@@ -1382,7 +1382,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 3106fd060b768ea17e35b5ea975e0aca
 2010-12-12T17:00:52.100205Z
 4505
@@ -1416,7 +1416,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 644bd85c22127195b9f31217cce0595e
 2009-09-20T14:06:57.257282Z
 2895
--- a/test/fixtures/.svn/text-base/attachments.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/.svn/text-base/attachments.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -169,3 +169,16 @@
   filename: changeset_utf8.diff
   author_id: 2
   content_type: text/x-diff
+attachments_015: 
+  id: 15
+  created_on: 2010-07-19 21:07:27 +02:00
+  container_type: Issue
+  container_id: 14
+  downloads: 0
+  disk_filename: 060719210727_changeset_utf8.diff
+  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+  filesize: 687
+  filename: private.diff
+  author_id: 2
+  content_type: text/x-diff
+  description: attachement of a private issue
--- a/test/fixtures/.svn/text-base/custom_fields.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/.svn/text-base/custom_fields.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -129,3 +129,17 @@
   field_format: date
   default_value: ""
   editable: true
+custom_fields_010: 
+  name: Overtime
+  min_length: 0
+  regexp: ""
+  is_for_all: false
+  is_filter: false
+  type: TimeEntryCustomField
+  max_length: 0
+  possible_values: ""
+  id: 10
+  is_required: false
+  field_format: bool
+  default_value: 0
+  editable: true
--- a/test/fixtures/.svn/text-base/issues.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/.svn/text-base/issues.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -244,3 +244,21 @@
   root_id: 13
   lft: 1
   rgt: 2
+issues_014:
+  id: 14
+  created_on: <%= 15.days.ago.to_date.to_s(:db) %>
+  project_id: 3
+  updated_on: <%= 15.days.ago.to_date.to_s(:db) %>
+  priority_id: 5
+  subject: Private issue on public project
+  fixed_version_id: 
+  category_id: 
+  description: This is a private issue
+  tracker_id: 1
+  assigned_to_id: 
+  author_id: 2
+  status_id: 1
+  is_private: true
+  root_id: 14
+  lft: 1
+  rgt: 2
--- a/test/fixtures/.svn/text-base/journal_details.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/.svn/text-base/journal_details.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -27,3 +27,10 @@
   value: "This word was and an other was added"
   prop_key: description
   journal_id: 3
+journal_details_005:
+  old_value: Old value
+  property: cf
+  id: 5
+  value: New value
+  prop_key: 2
+  journal_id: 3
--- a/test/fixtures/.svn/text-base/journals.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/.svn/text-base/journals.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -27,3 +27,10 @@
   journalized_type: Issue
   user_id: 1
   journalized_id: 6
+journals_005: 
+  id: 5
+  created_on: <%= 1.days.ago.to_date.to_s(:db) %>
+  notes: "A comment on a private issue."
+  user_id: 2
+  journalized_type: Issue
+  journalized_id: 14
--- a/test/fixtures/.svn/text-base/roles.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/.svn/text-base/roles.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -3,6 +3,7 @@
   name: Manager
   id: 1
   builtin: 0
+  issues_visibility: all
   permissions: |
     --- 
     - :add_project
@@ -58,6 +59,7 @@
   name: Developer
   id: 2
   builtin: 0
+  issues_visibility: default
   permissions: |
     --- 
     - :edit_project
@@ -102,6 +104,7 @@
   name: Reporter
   id: 3
   builtin: 0
+  issues_visibility: default
   permissions: |
     --- 
     - :edit_project
@@ -140,6 +143,7 @@
   name: Non member
   id: 4
   builtin: 1
+  issues_visibility: default
   permissions: |
     --- 
     - :view_issues
@@ -170,6 +174,7 @@
   name: Anonymous
   id: 5
   builtin: 2
+  issues_visibility: default
   permissions: |
     --- 
     - :view_issues
--- a/test/fixtures/.svn/text-base/time_entries.yml.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/.svn/text-base/time_entries.yml.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -55,4 +55,18 @@
   hours: 7.65
   user_id: 1
   tyear: 2007
+time_entries_005: 
+  created_on: 2011-03-22 12:20:48 +02:00
+  tweek: 12
+  tmonth: 3
+  project_id: 5
+  comments: Time spent on a subproject
+  updated_on: 2011-03-22 12:20:48 +02:00
+  activity_id: 10
+  spent_on: 2011-03-22
+  issue_id: 
+  id: 5
+  hours: 7.65
+  user_id: 1
+  tyear: 2011
   
--- a/test/fixtures/attachments.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/attachments.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -169,3 +169,16 @@
   filename: changeset_utf8.diff
   author_id: 2
   content_type: text/x-diff
+attachments_015: 
+  id: 15
+  created_on: 2010-07-19 21:07:27 +02:00
+  container_type: Issue
+  container_id: 14
+  downloads: 0
+  disk_filename: 060719210727_changeset_utf8.diff
+  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+  filesize: 687
+  filename: private.diff
+  author_id: 2
+  content_type: text/x-diff
+  description: attachement of a private issue
--- a/test/fixtures/configuration/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4752/trunk/test/fixtures/configuration
-END
-no_default.yml
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4752/trunk/test/fixtures/configuration/no_default.yml
-END
-overrides.yml
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/4752/trunk/test/fixtures/configuration/overrides.yml
-END
-default.yml
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4752/trunk/test/fixtures/configuration/default.yml
-END
-empty.yml
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4752/trunk/test/fixtures/configuration/empty.yml
-END
--- a/test/fixtures/configuration/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/configuration/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/fixtures/configuration
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/fixtures/configuration
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 3c3b944decf7592dd335fc1d536985e7
 2011-01-23T10:22:00.456857Z
 4752
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 0b2286bdf8e49e063fb511553d63d73b
 2011-01-23T10:22:00.456857Z
 4752
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 8f9245a8cde919ad5693021c5eb8e67e
 2011-01-23T10:22:00.456857Z
 4752
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 f807b10f3b740dafc7ebfd848048a587
 2011-01-23T10:22:00.456857Z
 4752
--- a/test/fixtures/custom_fields.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/custom_fields.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -129,3 +129,17 @@
   field_format: date
   default_value: ""
   editable: true
+custom_fields_010: 
+  name: Overtime
+  min_length: 0
+  regexp: ""
+  is_for_all: false
+  is_filter: false
+  type: TimeEntryCustomField
+  max_length: 0
+  possible_values: ""
+  id: 10
+  is_required: false
+  field_format: bool
+  default_value: 0
+  editable: true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/diffs/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svn/!svn/ver/5878/branches/1.2-stable/test/fixtures/diffs
+END
--- a/test/fixtures/diffs/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/diffs/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/fixtures/diffs
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/fixtures/diffs
 http://redmine.rubyforge.org/svn
 
 
 
-2008-12-07T15:21:40.165860Z
-2112
+2011-03-11T20:23:29.177962Z
+5094
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 64527b211202fbff696792d538e2b14e
 2008-12-07T15:21:40.165860Z
 2112
@@ -60,3 +60,37 @@
 
 2741
 
+partials.diff
+file
+
+
+
+
+2011-06-06T13:18:33.000000Z
+a29e9abd0152a553dcaa1b1ed2afbea1
+2011-03-11T20:23:29.177962Z
+5094
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1801
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/diffs/partials.diff	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,46 @@
+--- partials.txt	Wed Jan 19 12:06:17 2011
++++ partials.1.txt	Wed Jan 19 12:06:10 2011
+@@ -1,31 +1,31 @@
+-Lorem ipsum dolor sit amet, consectetur adipiscing elit
++Lorem ipsum dolor sit amet, consectetur adipiscing xx
+ Praesent et sagittis dui. Vivamus ac diam diam
+-Ut sed auctor justo
++xxx auctor justo
+ Suspendisse venenatis sollicitudin magna quis suscipit
+-Sed blandit gravida odio ac ultrices
++Sed blandit gxxxxa odio ac ultrices
+ Morbi rhoncus est ut est aliquam tempus
+-Morbi id nisi vel felis tincidunt tempus
++Morbi id nisi vel felis xx tempus
+ Mauris auctor sagittis ante eu luctus
+-Fusce commodo felis sed ligula congue molestie
++Fusce commodo felis sed ligula congue
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit
+-Praesent et sagittis dui. Vivamus ac diam diam
++et sagittis dui. Vivamus ac diam diam
+ Ut sed auctor justo
+ Suspendisse venenatis sollicitudin magna quis suscipit
+ Sed blandit gravida odio ac ultrices
+ 
+-Lorem ipsum dolor sit amet, consectetur adipiscing elit
+-Praesent et sagittis dui. Vivamus ac diam diam
++Lorem ipsum dolor sit amet, xxxx adipiscing elit
+ Ut sed auctor justo
+ Suspendisse venenatis sollicitudin magna quis suscipit
+ Sed blandit gravida odio ac ultrices
+-Morbi rhoncus est ut est aliquam tempus
++Morbi rhoncus est ut est xxxx tempus
++New line
+ Morbi id nisi vel felis tincidunt tempus
+ Mauris auctor sagittis ante eu luctus
+ Fusce commodo felis sed ligula congue molestie
+ 
+-Lorem ipsum dolor sit amet, consectetur adipiscing elit
+-Praesent et sagittis dui. Vivamus ac diam diam
+-Ut sed auctor justo
++Lorem ipsum dolor sit amet, xxxxtetur adipiscing elit
++Praesent et xxxxx. Vivamus ac diam diam
++Ut sed auctor
+ Suspendisse venenatis sollicitudin magna quis suscipit
+ Sed blandit gravida odio ac ultrices
+ Morbi rhoncus est ut est aliquam tempus
--- a/test/fixtures/encoding/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/encoding/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/fixtures/encoding
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/fixtures/encoding
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 eee83cf374737071543358b83f85f75b
 2010-02-20T11:24:41.988635Z
 3466
--- a/test/fixtures/files/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4604/trunk/test/fixtures/files
-END
-060719210727_changeset_iso8859-1.diff
-K 25
-svn:wc:ra_dav:version-url
-V 82
-/svn/!svn/ver/4604/trunk/test/fixtures/files/060719210727_changeset_iso8859-1.diff
-END
-060719210727_changeset_utf8.diff
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/4604/trunk/test/fixtures/files/060719210727_changeset_utf8.diff
-END
-060719210727_archive.zip
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/1520/trunk/test/fixtures/files/060719210727_archive.zip
-END
-060719210727_source.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/1520/trunk/test/fixtures/files/060719210727_source.rb
-END
-testfile.txt
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/2085/trunk/test/fixtures/files/testfile.txt
-END
--- a/test/fixtures/files/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/files/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/fixtures/files
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/fixtures/files
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 8ab69915b7f66c8199e6d137073d9ffe
 2011-01-01T13:40:36.520874Z
 4604
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 69b7e1bc8546406b1ddc3719d879254c
 2011-01-01T13:40:36.520874Z
 4604
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 8b4167c6b87869174dd17db0694ef2e1
 2008-06-09T18:40:59.518583Z
 1520
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 c72c8a9a0de99c39f9e6d712c13b7624
 2008-06-09T18:40:59.518583Z
 1520
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 1478adae0d4eb06d35897518540e25d6
 2008-12-02T17:57:13.240321Z
 2085
--- a/test/fixtures/issues.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/issues.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -244,3 +244,21 @@
   root_id: 13
   lft: 1
   rgt: 2
+issues_014:
+  id: 14
+  created_on: <%= 15.days.ago.to_date.to_s(:db) %>
+  project_id: 3
+  updated_on: <%= 15.days.ago.to_date.to_s(:db) %>
+  priority_id: 5
+  subject: Private issue on public project
+  fixed_version_id: 
+  category_id: 
+  description: This is a private issue
+  tracker_id: 1
+  assigned_to_id: 
+  author_id: 2
+  status_id: 1
+  is_private: true
+  root_id: 14
+  lft: 1
+  rgt: 2
--- a/test/fixtures/journal_details.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/journal_details.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -27,3 +27,10 @@
   value: "This word was and an other was added"
   prop_key: description
   journal_id: 3
+journal_details_005:
+  old_value: Old value
+  property: cf
+  id: 5
+  value: New value
+  prop_key: 2
+  journal_id: 3
--- a/test/fixtures/journals.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/journals.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -27,3 +27,10 @@
   journalized_type: Issue
   user_id: 1
   journalized_id: 6
+journals_005: 
+  id: 5
+  created_on: <%= 1.days.ago.to_date.to_s(:db) %>
+  notes: "A comment on a private issue."
+  user_id: 2
+  journalized_type: Issue
+  journalized_id: 14
--- a/test/fixtures/ldap/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/ldap/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/fixtures/ldap
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/fixtures/ldap
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 acbef41cb6cf252c83489cc3344e2604
 2010-02-26T08:31:36.418866Z
 3489
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 f1b10e6d96dd658e563d4ba74d52e87b
 2010-02-26T08:31:36.418866Z
 3489
--- a/test/fixtures/mail_handler/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/mail_handler/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/fixtures/mail_handler
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/fixtures/mail_handler
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 5e24af78a4534798611158a3d81efb34
 2008-12-14T17:10:16.292262Z
 2136
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 09130a1100cb410ed07fdff5564b2993
 2009-01-21T18:22:30.765588Z
 2294
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 ef4c0db9f76d81792292785d2ae9cb6a
 2010-11-02T19:00:31.177706Z
 4361
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 8ac895d880e6f19fc21333c4003babaf
 2010-11-12T12:29:35.878777Z
 4395
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 4fbec91f5454b84077ae1290fba0bc8e
 2009-08-13T16:57:36.259313Z
 2838
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 ed7adca07ce64c4d15f3e638a222e38d
 2010-06-20T16:22:36.211973Z
 3801
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 0c3b0545575d405416f585f8d5910bcb
 2009-11-08T13:51:53.384956Z
 3022
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 40927905de0187dc52a9adb3e4a2c252
 2008-11-30T16:00:45.142894Z
 2077
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 d276c2037b0bf277b66f921379695c35
 2008-07-06T16:26:25.352975Z
 1643
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 1fc46fd2b0b8dcdaf67dfde24d0e8b89
 2010-01-17T11:00:54.196987Z
 3322
@@ -372,7 +372,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 4d85674ea94930e7f1c8e288f03a57b8
 2008-06-22T10:45:03.753412Z
 1568
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 9dbf54ce4376f62447ef0696fe9b3a79
 2010-06-19T19:24:17.380627Z
 3783
@@ -440,7 +440,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 0979c01baf02b924bd8a6db3980c59c9
 2009-06-14T14:48:34.287541Z
 2789
@@ -474,7 +474,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 605f28e31469b6897f33cf34bbc1ad0a
 2010-11-14T13:48:01.671461Z
 4404
@@ -508,7 +508,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 f1b76e664d73fd54d9e346c2329d94a9
 2010-12-29T17:36:01.998670Z
 4575
@@ -542,7 +542,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 af7f3e5f9caddc2cad5fba0ba9d73882
 2010-11-12T11:34:53.754717Z
 4394
@@ -576,7 +576,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 977375e727ce2d63ce878f877d692c62
 2010-11-02T19:00:31.177706Z
 4361
@@ -610,7 +610,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 4ef77e6337f95c7a8362c4a51c09d0af
 2008-12-30T14:57:33.008940Z
 2211
@@ -644,7 +644,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 4bd4decc00f83404fdd1a835809e4552
 2009-01-19T18:29:07.726757Z
 2288
@@ -678,7 +678,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 c174d0c5bbb339ef9361c45aab58b2bb
 2009-01-19T19:03:53.393843Z
 2289
@@ -712,7 +712,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 7bc2d83ee5c078a264dd66ec75f35c77
 2009-03-06T18:25:19.434505Z
 2553
--- a/test/fixtures/mailer/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/mailer/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/fixtures/mailer
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/fixtures/mailer
 http://redmine.rubyforge.org/svn
 
 
--- a/test/fixtures/repositories/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/repositories/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,47 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4964/trunk/test/fixtures/repositories
+V 65
+/svn/!svn/ver/5878/branches/1.2-stable/test/fixtures/repositories
 END
-darcs_repository.tar.gz
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/1236/trunk/test/fixtures/repositories/darcs_repository.tar.gz
-END
-mercurial_repository.hg
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/4676/trunk/test/fixtures/repositories/mercurial_repository.hg
-END
-subversion_repository.dump.gz
-K 25
-svn:wc:ra_dav:version-url
-V 81
-/svn/!svn/ver/3800/trunk/test/fixtures/repositories/subversion_repository.dump.gz
-END
-bazaar_repository.tar.gz
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/951/trunk/test/fixtures/repositories/bazaar_repository.tar.gz
-END
-git_repository.tar.gz
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/4964/trunk/test/fixtures/repositories/git_repository.tar.gz
-END
-filesystem_repository.tar.gz
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/1508/trunk/test/fixtures/repositories/filesystem_repository.tar.gz
-END
-cvs_repository.tar.gz
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/987/trunk/test/fixtures/repositories/cvs_repository.tar.gz
-END
--- a/test/fixtures/repositories/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/repositories/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/fixtures/repositories
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/fixtures/repositories
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-28T14:12:47.115180Z
-4964
+2011-04-14T05:03:36.225948Z
+5451
 tmaruyama
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 0553391b55404e8ff509358b388f085b
 2008-03-12T20:28:49.748698Z
 1236
@@ -66,11 +66,11 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-2436fc3d3aefeb07b291d5660396ca8d
-2011-01-10T17:43:01.353336Z
-4676
-jplang
+2011-06-06T13:18:33.000000Z
+b59035d53b650bd73e00f7cc4c0a4402
+2011-03-08T10:35:48.810741Z
+5059
+tmaruyama
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-7104
+10130
 
 subversion_repository.dump.gz
 file
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 bd13c11517bf083e83846aeccff745f1
 2010-06-20T16:08:26.745839Z
 3800
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 fa70d4aeca5639d750d94281ad664957
 2007-12-03T19:19:36.156779Z
 951
@@ -168,10 +168,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-a520f027eaf4a4548dfbc85e8d7e71c5
-2011-02-28T14:12:47.115180Z
-4964
+2011-06-06T13:18:33.000000Z
+103ef2761bf0d8d21c2c71ce8d69c4b4
+2011-04-06T07:15:35.553063Z
+5348
 tmaruyama
 has-props
 
@@ -194,7 +194,7 @@
 
 
 
-15432
+18538
 
 filesystem_repository.tar.gz
 file
@@ -202,11 +202,11 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-9fbee7c5669de84f0767597eb41af9f7
-2008-06-08T15:40:24.603157Z
-1508
-jplang
+2011-06-06T13:18:33.000000Z
+02ad2468b72927c36805b0d6763395cc
+2011-03-22T23:49:48.318288Z
+5211
+tmaruyama
 has-props
 
 
@@ -228,7 +228,7 @@
 
 
 
-265
+479
 
 cvs_repository.tar.gz
 file
@@ -236,11 +236,11 @@
 
 
 
-2011-03-03T11:05:09.000000Z
-0c4730bd5eb192e094531f218b7a3119
-2007-12-13T18:52:09.073829Z
-987
-jplang
+2011-06-06T13:18:33.000000Z
+636c2e1836099016bcf2cb70a4e2940d
+2011-04-14T05:03:36.225948Z
+5451
+tmaruyama
 has-props
 
 
@@ -262,5 +262,5 @@
 
 
 
-12248
+12206
 
Binary file test/fixtures/repositories/.svn/text-base/cvs_repository.tar.gz.svn-base has changed
Binary file test/fixtures/repositories/.svn/text-base/filesystem_repository.tar.gz.svn-base has changed
Binary file test/fixtures/repositories/.svn/text-base/git_repository.tar.gz.svn-base has changed
Binary file test/fixtures/repositories/.svn/text-base/mercurial_repository.hg.svn-base has changed
Binary file test/fixtures/repositories/cvs_repository.tar.gz has changed
Binary file test/fixtures/repositories/filesystem_repository.tar.gz has changed
Binary file test/fixtures/repositories/git_repository.tar.gz has changed
Binary file test/fixtures/repositories/mercurial_repository.hg has changed
--- a/test/fixtures/roles.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/roles.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -3,6 +3,7 @@
   name: Manager
   id: 1
   builtin: 0
+  issues_visibility: all
   permissions: |
     --- 
     - :add_project
@@ -58,6 +59,7 @@
   name: Developer
   id: 2
   builtin: 0
+  issues_visibility: default
   permissions: |
     --- 
     - :edit_project
@@ -102,6 +104,7 @@
   name: Reporter
   id: 3
   builtin: 0
+  issues_visibility: default
   permissions: |
     --- 
     - :edit_project
@@ -140,6 +143,7 @@
   name: Non member
   id: 4
   builtin: 1
+  issues_visibility: default
   permissions: |
     --- 
     - :view_issues
@@ -170,6 +174,7 @@
   name: Anonymous
   id: 5
   builtin: 2
+  issues_visibility: default
   permissions: |
     --- 
     - :view_issues
--- a/test/fixtures/time_entries.yml	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/fixtures/time_entries.yml	Mon Jun 06 14:41:04 2011 +0100
@@ -55,4 +55,18 @@
   hours: 7.65
   user_id: 1
   tyear: 2007
+time_entries_005: 
+  created_on: 2011-03-22 12:20:48 +02:00
+  tweek: 12
+  tmonth: 3
+  project_id: 5
+  comments: Time spent on a subproject
+  updated_on: 2011-03-22 12:20:48 +02:00
+  activity_id: 10
+  spent_on: 2011-03-22
+  issue_id: 
+  id: 5
+  hours: 7.65
+  user_id: 1
+  tyear: 2011
   
--- a/test/functional/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,341 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 40
-/svn/!svn/ver/4982/trunk/test/functional
+V 54
+/svn/!svn/ver/5878/branches/1.2-stable/test/functional
 END
-issues_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/4530/trunk/test/functional/issues_controller_test.rb
-END
-news_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4509/trunk/test/functional/news_controller_test.rb
-END
-queries_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4509/trunk/test/functional/queries_controller_test.rb
-END
-trackers_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4509/trunk/test/functional/trackers_controller_test.rb
-END
-mail_handler_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/4509/trunk/test/functional/mail_handler_controller_test.rb
-END
-auto_completes_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/4509/trunk/test/functional/auto_completes_controller_test.rb
-END
-roles_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4509/trunk/test/functional/roles_controller_test.rb
-END
-my_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4509/trunk/test/functional/my_controller_test.rb
-END
-comments_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4509/trunk/test/functional/comments_controller_test.rb
-END
-wikis_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4509/trunk/test/functional/wikis_controller_test.rb
-END
-admin_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4509/trunk/test/functional/admin_controller_test.rb
-END
-context_menus_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/4673/trunk/test/functional/context_menus_controller_test.rb
-END
-welcome_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4900/trunk/test/functional/welcome_controller_test.rb
-END
-account_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4509/trunk/test/functional/account_controller_test.rb
-END
-calendars_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/4509/trunk/test/functional/calendars_controller_test.rb
-END
-journals_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4954/trunk/test/functional/journals_controller_test.rb
-END
-time_entry_reports_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/4509/trunk/test/functional/time_entry_reports_controller_test.rb
-END
-workflows_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/4895/trunk/test/functional/workflows_controller_test.rb
-END
-project_enumerations_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/4600/trunk/test/functional/project_enumerations_controller_test.rb
-END
-gantts_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/4509/trunk/test/functional/gantts_controller_test.rb
-END
-issue_moves_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/4509/trunk/test/functional/issue_moves_controller_test.rb
-END
-users_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4729/trunk/test/functional/users_controller_test.rb
-END
-repositories_cvs_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/4982/trunk/test/functional/repositories_cvs_controller_test.rb
-END
-application_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/4571/trunk/test/functional/application_controller_test.rb
-END
-activities_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/4509/trunk/test/functional/activities_controller_test.rb
-END
-ldap_auth_sources_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/3744/trunk/test/functional/ldap_auth_sources_controller.rb
-END
-search_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/4509/trunk/test/functional/search_controller_test.rb
-END
-messages_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4509/trunk/test/functional/messages_controller_test.rb
-END
-repositories_bazaar_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4982/trunk/test/functional/repositories_bazaar_controller_test.rb
-END
-attachments_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/4604/trunk/test/functional/attachments_controller_test.rb
-END
-sys_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4509/trunk/test/functional/sys_controller_test.rb
-END
-groups_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/4509/trunk/test/functional/groups_controller_test.rb
-END
-issues_controller_transaction_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/4509/trunk/test/functional/issues_controller_transaction_test.rb
-END
-watchers_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4509/trunk/test/functional/watchers_controller_test.rb
-END
-issue_statuses_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/4509/trunk/test/functional/issue_statuses_controller_test.rb
-END
-repositories_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/4509/trunk/test/functional/repositories_controller_test.rb
-END
-projects_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4647/trunk/test/functional/projects_controller_test.rb
-END
-members_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4509/trunk/test/functional/members_controller_test.rb
-END
-repositories_git_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/4734/trunk/test/functional/repositories_git_controller_test.rb
-END
-repositories_mercurial_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 82
-/svn/!svn/ver/4855/trunk/test/functional/repositories_mercurial_controller_test.rb
-END
-issue_categories_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/4509/trunk/test/functional/issue_categories_controller_test.rb
-END
-reports_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4509/trunk/test/functional/reports_controller_test.rb
-END
-custom_fields_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/4509/trunk/test/functional/custom_fields_controller_test.rb
-END
-settings_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4509/trunk/test/functional/settings_controller_test.rb
-END
-timelog_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4511/trunk/test/functional/timelog_controller_test.rb
-END
-documents_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/4509/trunk/test/functional/documents_controller_test.rb
-END
-files_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4509/trunk/test/functional/files_controller_test.rb
-END
-repositories_darcs_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/4982/trunk/test/functional/repositories_darcs_controller_test.rb
-END
-wiki_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4509/trunk/test/functional/wiki_controller_test.rb
-END
-previews_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4509/trunk/test/functional/previews_controller_test.rb
-END
-auth_sources_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/4509/trunk/test/functional/auth_sources_controller_test.rb
-END
-repositories_subversion_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 83
-/svn/!svn/ver/4896/trunk/test/functional/repositories_subversion_controller_test.rb
-END
-issue_relations_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/4764/trunk/test/functional/issue_relations_controller_test.rb
-END
-versions_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4509/trunk/test/functional/versions_controller_test.rb
-END
-enumerations_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/4509/trunk/test/functional/enumerations_controller_test.rb
-END
-boards_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/4509/trunk/test/functional/boards_controller_test.rb
-END
--- a/test/functional/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/functional
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/functional
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-01T10:27:30.170724Z
-4982
+2011-05-21T01:00:24.653455Z
+5861
 tmaruyama
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-1831ada3aea1c4ecb568cb55a718eec9
-2010-12-18T13:40:50.641112Z
-4530
-jplang
+2011-06-06T13:18:32.000000Z
+f9760e4e596205234a7d6ad553f365b4
+2011-05-16T03:48:18.735385Z
+5797
+tmaruyama
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-47451
+51523
 
 news_controller_test.rb
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 b42af2a4997da321fbe322b3d4ef47da
 2010-12-12T23:24:34.194336Z
 4509
@@ -100,11 +100,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-60c22807824b3989da92a03d4be0a1e6
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+56bf9f06ece9d17304f1dce23cd32b30
+2011-04-03T14:31:32.940784Z
+5304
+jplang
 has-props
 
 
@@ -126,7 +126,7 @@
 
 
 
-10568
+10548
 
 trackers_controller_test.rb
 file
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 f7c1328f2c586830c64233c2db054f0a
 2010-12-12T23:24:34.194336Z
 4509
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 e6efbfdb394b5a3d4c8f5430c202a5b0
 2010-12-12T23:24:34.194336Z
 4509
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 145c16cdb388cc98a1223c6f6dd6fb17
 2010-12-12T23:24:34.194336Z
 4509
@@ -236,11 +236,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-69809abf0a26741f5ca07db44aa223c0
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+be828f7a56284b5aa08c5ac0cd139a41
+2011-05-01T23:14:28.754192Z
+5610
+tmaruyama
 has-props
 
 
@@ -262,7 +262,7 @@
 
 
 
-6094
+6104
 
 my_controller_test.rb
 file
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 cc837387e8b85884334a89e8bf935118
 2010-12-12T23:24:34.194336Z
 4509
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 b68039337f934e7e49f4a06cda5e2b12
 2010-12-12T23:24:34.194336Z
 4509
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 0798c1198c6db7754d04c79144c449c0
 2010-12-12T23:24:34.194336Z
 4509
@@ -372,7 +372,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 744fc8a1d2a4cdf6e8aa3ad0caa0fe4a
 2010-12-12T23:24:34.194336Z
 4509
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 d3363951aa9a6c2a59c32d83d2483226
 2011-01-09T21:01:40.583303Z
 4673
@@ -440,7 +440,7 @@
 
 
 
-2011-03-03T11:40:17.000000Z
+2011-06-06T13:15:00.000000Z
 99cada623881a6be69cdf13119cc1de7
 2011-02-21T09:53:29.844413Z
 4900
@@ -474,7 +474,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 f6ad0bbad8d30d8ea41eb0b7ecaf32b6
 2010-12-12T23:24:34.194336Z
 4509
@@ -508,7 +508,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 a7eb2ff041caaed4c7c09ad8f9fe3719
 2010-12-12T23:24:34.194336Z
 4509
@@ -536,81 +536,13 @@
 
 2390
 
-journals_controller_test.rb
-file
-
-
-
-
-2011-03-03T11:40:17.000000Z
-aa7254e0715b3701554945deb5d98998
-2011-02-27T13:34:41.060565Z
-4954
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3099
-
-time_entry_reports_controller_test.rb
-file
-
-
-
-
-2011-03-03T11:05:08.000000Z
-e21197e1c3590e65b300103bf8e16efe
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5424
-
 workflows_controller_test.rb
 file
 
 
 
 
-2011-03-03T11:40:17.000000Z
+2011-06-06T13:15:00.000000Z
 843e1eb3b5d05f3cb16580fe88d1baf5
 2011-02-20T15:38:07.840581Z
 4895
@@ -638,13 +570,81 @@
 
 7860
 
+time_entry_reports_controller_test.rb
+file
+
+
+
+
+2011-06-06T13:18:32.000000Z
+0fa21d7fd3b396b5aac58660c4ce8a05
+2011-04-03T11:55:24.787027Z
+5297
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5786
+
+journals_controller_test.rb
+file
+
+
+
+
+2011-06-06T13:18:32.000000Z
+71c27003da3e73bb3aab9eac315c58f9
+2011-05-16T22:55:14.834640Z
+5800
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3183
+
 project_enumerations_controller_test.rb
 file
 
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 11b0d808c1b8f003db130d54022dbab0
 2010-12-31T15:45:35.200558Z
 4600
@@ -678,7 +678,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 b1aac6fc8fdaa84c3e3652849721bfa5
 2010-12-12T23:24:34.194336Z
 4509
@@ -706,73 +706,73 @@
 
 2663
 
+users_controller_test.rb
+file
+
+
+
+
+2011-06-06T13:18:32.000000Z
+21df39099606c3e86c66cec944d54982
+2011-03-16T18:20:08.852280Z
+5150
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9321
+
 issue_moves_controller_test.rb
 file
 
 
 
 
-2011-03-03T11:05:08.000000Z
-539d0852190ec556b2284bfe678e8523
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5131
-
-users_controller_test.rb
-file
-
-
-
-
-2011-03-03T11:05:08.000000Z
-067fe08ee66949066dd0db8fa2741f5e
-2011-01-16T15:23:11.666065Z
-4729
+2011-06-06T13:18:32.000000Z
+85a9afab2e94633e94e59961a16f0973
+2011-04-29T13:27:50.025194Z
+5602
 jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-9068
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5726
 
 repositories_cvs_controller_test.rb
 file
@@ -780,10 +780,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-1802113ecf354a24583d7c5a8db750b6
-2011-03-01T10:27:30.170724Z
-4982
+2011-06-06T13:18:32.000000Z
+13e387badc4a524e1811d5b77713a6b6
+2011-05-08T05:11:22.834995Z
+5706
 tmaruyama
 has-props
 
@@ -806,7 +806,7 @@
 
 
 
-8336
+8003
 
 application_controller_test.rb
 file
@@ -814,7 +814,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 278a104110d269c64def6c487219db07
 2010-12-23T13:33:01.454946Z
 4571
@@ -848,33 +848,67 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-10667cf5e4dc66eea96b196643c93a42
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2700
+2011-06-06T13:18:32.000000Z
+2789d358c792d41598295ec5c4510b1d
+2011-05-16T00:09:58.438036Z
+5796
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2658
+
+search_controller_test.rb
+file
+
+
+
+
+2011-06-06T13:18:32.000000Z
+e6c2c3283ba6e92ebc3fb6df37236920
+2011-05-16T22:56:25.865905Z
+5803
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4636
 
 ldap_auth_sources_controller.rb
 file
@@ -882,7 +916,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 d6759c42ae866d7210c7006911e82a42
 2010-05-23T03:16:31.304135Z
 3744
@@ -910,17 +944,17 @@
 
 491
 
-search_controller_test.rb
+repositories_bazaar_controller_test.rb
 file
 
 
 
 
-2011-03-03T11:05:08.000000Z
-ce03a18446664d9bc073791097735811
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+cf2e7aa3633de87398b51f28a196cddd
+2011-03-12T12:06:58.214696Z
+5095
+jplang
 has-props
 
 
@@ -942,7 +976,7 @@
 
 
 
-4680
+5191
 
 messages_controller_test.rb
 file
@@ -950,7 +984,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 887437d272f8b8eba93dbf8bd5645868
 2010-12-12T23:24:34.194336Z
 4509
@@ -978,16 +1012,16 @@
 
 5047
 
-repositories_bazaar_controller_test.rb
+attachments_controller_test.rb
 file
 
 
 
 
-2011-03-03T11:40:17.000000Z
-138b8dc8d1e30b2a8f5eda76b0f905b6
-2011-03-01T10:27:30.170724Z
-4982
+2011-06-06T13:18:32.000000Z
+21ff1a4b6add63acc2dec52e50b37897
+2011-05-07T06:47:05.551645Z
+5684
 tmaruyama
 has-props
 
@@ -1010,41 +1044,7 @@
 
 
 
-5177
-
-attachments_controller_test.rb
-file
-
-
-
-
-2011-03-03T11:05:08.000000Z
-00941bda584b7f5b7b636e48635d83dd
-2011-01-01T13:40:36.520874Z
-4604
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5027
+5351
 
 sys_controller_test.rb
 file
@@ -1052,11 +1052,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-893a5cfefe3652680d241de9a657652c
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+7fe6bb33358a95e18862d2c4fc908492
+2011-03-16T20:31:01.183370Z
+5156
+jplang
 has-props
 
 
@@ -1078,7 +1078,7 @@
 
 
 
-2976
+3172
 
 groups_controller_test.rb
 file
@@ -1086,11 +1086,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-39db66894beef1baa1696d6aee75f45d
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+2f5861dadf87169de565a5d3480e0bfd
+2011-04-01T16:47:30.350690Z
+5284
+jplang
 has-props
 
 
@@ -1112,7 +1112,7 @@
 
 
 
-3022
+3278
 
 issues_controller_transaction_test.rb
 file
@@ -1120,7 +1120,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 c8fa245738b58d9f87afc40fc1b71f94
 2010-12-12T23:24:34.194336Z
 4509
@@ -1154,11 +1154,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-d50a042e5cc7e5d43cbb9be02b82aaf6
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+b2a76458be297be39d84d51dbb3ceb24
+2011-04-05T12:09:15.508559Z
+5320
+jplang
 has-props
 
 
@@ -1180,7 +1180,7 @@
 
 
 
-4032
+3223
 
 issue_statuses_controller_test.rb
 file
@@ -1188,7 +1188,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 3ed28603b2a3697d060e06d90dd7b118
 2010-12-12T23:24:34.194336Z
 4509
@@ -1222,11 +1222,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-f5552cd43c853f04daaadb5d6c7bf159
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+602f46d14ecf45a33fc0f1371a37b8ad
+2011-03-22T07:48:04.265918Z
+5194
+tmaruyama
 has-props
 
 
@@ -1248,7 +1248,7 @@
 
 
 
-4575
+4697
 
 projects_controller_test.rb
 file
@@ -1256,11 +1256,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-dbbc4feeecbff202aa7569d4a17beaa1
-2011-01-06T20:57:17.003359Z
-4647
-jplang
+2011-06-06T13:18:32.000000Z
+0b0900ad27a276c181f55775cdfdd771
+2011-05-16T22:55:41.426983Z
+5801
+tmaruyama
 has-props
 
 
@@ -1282,7 +1282,7 @@
 
 
 
-17590
+18910
 
 members_controller_test.rb
 file
@@ -1290,7 +1290,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 7cdb2ab302fb93f982b33fb6460d48c3
 2010-12-12T23:24:34.194336Z
 4509
@@ -1324,10 +1324,10 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-0852f4a59ed3301126f2b2a95fee40ef
-2011-01-21T13:22:28.782688Z
-4734
+2011-06-06T13:18:32.000000Z
+75341d3b53f64393fe346aa74040e8ae
+2011-05-08T02:39:36.502832Z
+5699
 tmaruyama
 has-props
 
@@ -1350,7 +1350,7 @@
 
 
 
-8148
+12616
 
 repositories_mercurial_controller_test.rb
 file
@@ -1358,10 +1358,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-c737d31340fe167746054c6975d86b18
-2011-02-16T11:18:18.909794Z
-4855
+2011-06-06T13:18:32.000000Z
+ab3477d468edc7246afd63f15ffe4b5a
+2011-05-07T14:22:42.976557Z
+5692
 tmaruyama
 has-props
 
@@ -1384,7 +1384,41 @@
 
 
 
-7919
+15134
+
+repositories_filesystem_controller_test.rb
+file
+
+
+
+
+2011-06-06T13:18:32.000000Z
+a3ef67025ad8d9f4fd13131ffff31a6c
+2011-05-21T01:00:24.653455Z
+5861
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4833
 
 issue_categories_controller_test.rb
 file
@@ -1392,7 +1426,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 eff59ff8c4c616a1773223454b960363
 2010-12-12T23:24:34.194336Z
 4509
@@ -1426,7 +1460,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 d91b8b56b5bd1fd602e96842dfabab72
 2010-12-12T23:24:34.194336Z
 4509
@@ -1460,11 +1494,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-df6f548bb7fbdaeb235c5e8d3c1be576
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+4742c5d377d46c8579c08783dda09c64
+2011-04-01T13:44:58.700463Z
+5272
+jplang
 has-props
 
 
@@ -1486,7 +1520,7 @@
 
 
 
-2570
+3149
 
 settings_controller_test.rb
 file
@@ -1494,11 +1528,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-f3101a3b1343baa274ce471911aa0e96
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+3915a9e16a6858febb4222e7f6007b11
+2011-05-18T11:37:31.678425Z
+5852
+tmaruyama
 has-props
 
 
@@ -1520,7 +1554,7 @@
 
 
 
-2127
+2117
 
 timelog_controller_test.rb
 file
@@ -1528,10 +1562,10 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-00f79a248e4bf77814823526e38ee630
-2010-12-14T18:29:24.891563Z
-4511
+2011-06-06T13:18:32.000000Z
+bcb4e311086427dc58d17412d83872f2
+2011-04-05T11:40:31.058665Z
+5319
 jplang
 has-props
 
@@ -1554,7 +1588,7 @@
 
 
 
-9325
+12560
 
 documents_controller_test.rb
 file
@@ -1562,11 +1596,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-8c664ac03cac7930264318af932f46e0
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+2cde0102968408e5f0c19645feb7070f
+2011-05-18T07:53:16.916658Z
+5843
+tmaruyama
 has-props
 
 
@@ -1588,7 +1622,7 @@
 
 
 
-4677
+4630
 
 files_controller_test.rb
 file
@@ -1596,7 +1630,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 190cbeea6f926cc615d6d2918a50e909
 2010-12-12T23:24:34.194336Z
 4509
@@ -1630,10 +1664,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-a05a557c98b400ffe59662be78e31270
-2011-03-01T10:27:30.170724Z
-4982
+2011-06-06T13:18:32.000000Z
+f7d5f324711885578c0fbd74725a13c3
+2011-03-22T10:46:02.095478Z
+5199
 tmaruyama
 has-props
 
@@ -1656,7 +1690,7 @@
 
 
 
-4268
+4009
 
 wiki_controller_test.rb
 file
@@ -1664,11 +1698,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-33e64585bc7591ba6089135bbadb817e
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+cb0dea9c83a8bbd233560ddcea5d3b2a
+2011-05-16T22:56:04.186216Z
+5802
+tmaruyama
 has-props
 
 
@@ -1690,7 +1724,7 @@
 
 
 
-17903
+19609
 
 previews_controller_test.rb
 file
@@ -1698,33 +1732,33 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-c262b8203846b82045458a273da221fc
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1106
+2011-06-06T13:18:32.000000Z
+482b408daa29362a2b2cfb5197b5b878
+2011-03-28T21:45:30.892324Z
+5246
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2185
 
 auth_sources_controller_test.rb
 file
@@ -1732,33 +1766,33 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-017010de8f7353d064e6b866e9dbb0c3
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1961
+2011-06-06T13:18:32.000000Z
+f724feb876c1ea988b47bc97e7078e1b
+2011-03-16T19:52:16.800403Z
+5155
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2256
 
 repositories_subversion_controller_test.rb
 file
@@ -1766,10 +1800,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-d6a450e274753a0903a76b51c16eae7b
-2011-02-21T03:59:30.193463Z
-4896
+2011-06-06T13:18:32.000000Z
+7cb4a3e5a123b78da37c7f51da9182a1
+2011-05-08T05:08:05.312632Z
+5701
 tmaruyama
 has-props
 
@@ -1792,7 +1826,7 @@
 
 
 
-11247
+11177
 
 issue_relations_controller_test.rb
 file
@@ -1800,7 +1834,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 ac7b05267cda86408af77321975d9099
 2011-01-27T21:38:47.430923Z
 4764
@@ -1834,11 +1868,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-2e73f89630c087f8170f62f3f79079c0
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+aaf9c582cdd8f730a50fb5d474a2d05c
+2011-03-20T21:06:30.302982Z
+5179
+jplang
 has-props
 
 
@@ -1860,7 +1894,7 @@
 
 
 
-5343
+5527
 
 enumerations_controller_test.rb
 file
@@ -1868,7 +1902,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 4194cdc2f733e6e1a38bedb7a6af05c8
 2010-12-12T23:24:34.194336Z
 4509
@@ -1902,7 +1936,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 770100e7a7049e202c8a1ea476659a30
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/functional/.svn/text-base/activities_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/activities_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -8,8 +8,8 @@
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:events_by_day)
-    
-    assert_tag :tag => "h3", 
+
+    assert_tag :tag => "h3",
                :content => /#{2.days.ago.to_date.day}/,
                :sibling => { :tag => "dl",
                  :child => { :tag => "dt",
@@ -20,14 +20,14 @@
                  }
                }
   end
-  
+
   def test_previous_project_index
     get :index, :id => 1, :from => 3.days.ago.to_date
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:events_by_day)
-               
-    assert_tag :tag => "h3", 
+
+    assert_tag :tag => "h3",
                :content => /#{3.day.ago.to_date.day}/,
                :sibling => { :tag => "dl",
                  :child => { :tag => "dt",
@@ -38,14 +38,14 @@
                  }
                }
   end
-  
+
   def test_global_index
     get :index
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:events_by_day)
-    
-    assert_tag :tag => "h3", 
+
+    assert_tag :tag => "h3",
                :content => /#{5.day.ago.to_date.day}/,
                :sibling => { :tag => "dl",
                  :child => { :tag => "dt",
@@ -56,14 +56,14 @@
                  }
                }
   end
-  
+
   def test_user_index
     get :index, :user_id => 2
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:events_by_day)
-    
-    assert_tag :tag => "h3", 
+
+    assert_tag :tag => "h3",
                :content => /#{3.day.ago.to_date.day}/,
                :sibling => { :tag => "dl",
                  :child => { :tag => "dt",
@@ -74,7 +74,7 @@
                  }
                }
   end
-  
+
   def test_index_atom_feed
     get :index, :format => 'atom'
     assert_response :success
@@ -83,5 +83,4 @@
       :tag => 'link',
       :attributes => {:href => 'http://test.host/issues/11'}}
   end
-  
 end
--- a/test/functional/.svn/text-base/attachments_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/attachments_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -7,12 +7,12 @@
 # modify it under the terms of the 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.
@@ -27,7 +27,7 @@
 class AttachmentsControllerTest < ActionController::TestCase
   fixtures :users, :projects, :roles, :members, :member_roles, :enabled_modules, :issues, :trackers, :attachments,
            :versions, :wiki_pages, :wikis, :documents
-  
+
   def setup
     @controller = AttachmentsController.new
     @request    = ActionController::TestRequest.new
@@ -35,13 +35,13 @@
     Attachment.storage_path = "#{RAILS_ROOT}/test/fixtures/files"
     User.current = nil
   end
-  
+
   def test_show_diff
     get :show, :id => 14 # 060719210727_changeset_utf8.diff
     assert_response :success
     assert_template 'diff'
     assert_equal 'text/html', @response.content_type
-    
+
     assert_tag 'th',
       :attributes => {:class => /filename/},
       :content => /issues_controller.rb\t\(révision 1484\)/
@@ -49,13 +49,13 @@
       :attributes => {:class => /line-code/},
       :content => /Demande créée avec succès/
   end
-  
+
   def test_show_diff_should_strip_non_utf8_content
     get :show, :id => 5 # 060719210727_changeset_iso8859-1.diff
     assert_response :success
     assert_template 'diff'
     assert_equal 'text/html', @response.content_type
-    
+
     assert_tag 'th',
       :attributes => {:class => /filename/},
       :content => /issues_controller.rb\t\(rvision 1484\)/
@@ -63,57 +63,69 @@
       :attributes => {:class => /line-code/},
       :content => /Demande cre avec succs/
   end
-  
+
   def test_show_text_file
     get :show, :id => 4
     assert_response :success
     assert_template 'file'
     assert_equal 'text/html', @response.content_type
   end
-  
+
   def test_show_text_file_should_send_if_too_big
     Setting.file_max_size_displayed = 512
     Attachment.find(4).update_attribute :filesize, 754.kilobyte
-    
+
     get :show, :id => 4
     assert_response :success
     assert_equal 'application/x-ruby', @response.content_type
   end
-  
+
   def test_show_other
     get :show, :id => 6
     assert_response :success
     assert_equal 'application/octet-stream', @response.content_type
   end
-  
+
+  def test_show_file_from_private_issue_without_permission
+    get :show, :id => 15
+    assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Fattachments%2F15'
+  end
+
+  def test_show_file_from_private_issue_with_permission
+    @request.session[:user_id] = 2
+    get :show, :id => 15
+    assert_response :success
+    assert_tag 'h2', :content => /private.diff/
+  end
+
   def test_download_text_file
     get :download, :id => 4
     assert_response :success
     assert_equal 'application/x-ruby', @response.content_type
   end
-  
+
   def test_download_should_assign_content_type_if_blank
     Attachment.find(4).update_attribute(:content_type, '')
-    
+
     get :download, :id => 4
     assert_response :success
     assert_equal 'text/x-ruby', @response.content_type
   end
-  
+
   def test_download_missing_file
     get :download, :id => 2
     assert_response 404
   end
-  
+
   def test_anonymous_on_private_private
     get :download, :id => 7
     assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Fattachments%2Fdownload%2F7'
   end
-  
+
   def test_destroy_issue_attachment
     issue = Issue.find(3)
     @request.session[:user_id] = 2
-    
+
     assert_difference 'issue.attachments.count', -1 do
       post :destroy, :id => 1
     end
@@ -125,7 +137,7 @@
     assert_equal '1', j.details.first.prop_key
     assert_equal 'error281.txt', j.details.first.old_value
   end
-  
+
   def test_destroy_wiki_page_attachment
     @request.session[:user_id] = 2
     assert_difference 'Attachment.count', -1 do
@@ -133,7 +145,7 @@
       assert_response 302
     end
   end
-  
+
   def test_destroy_project_attachment
     @request.session[:user_id] = 2
     assert_difference 'Attachment.count', -1 do
@@ -141,7 +153,7 @@
       assert_response 302
     end
   end
-  
+
   def test_destroy_version_attachment
     @request.session[:user_id] = 2
     assert_difference 'Attachment.count', -1 do
@@ -149,7 +161,7 @@
       assert_response 302
     end
   end
-  
+
   def test_destroy_without_permission
     post :destroy, :id => 3
     assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Fattachments%2Fdestroy%2F3'
--- a/test/functional/.svn/text-base/auth_sources_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/auth_sources_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -66,18 +66,30 @@
   end
 
   context "post :destroy" do
+    setup do
+      @auth_source = AuthSource.generate!(:name => 'TestEdit')
+    end
+    
     context "without users" do
       setup do
-        @auth_source = AuthSource.generate!(:name => 'TestEdit')
         post :destroy, :id => @auth_source.id
       end
 
       should_respond_with :redirect
       should_redirect_to("index") {{:action => 'index'}}
       should_set_the_flash_to /deletion/i
-
     end
     
-    should "be tested with users"
+    context "with users" do
+      setup do
+        User.generate!(:auth_source => @auth_source)
+        post :destroy, :id => @auth_source.id
+      end
+      
+      should_respond_with :redirect
+      should "not destroy the AuthSource" do
+        assert AuthSource.find(@auth_source.id)
+      end
+    end
   end
 end
--- a/test/functional/.svn/text-base/custom_fields_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/custom_fields_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -31,6 +31,31 @@
     @request.session[:user_id] = 1
   end
   
+  def test_get_new_issue_custom_field
+    get :new, :type => 'IssueCustomField'
+    assert_response :success
+    assert_template 'new'
+    assert_tag :select,
+      :attributes => {:name => 'custom_field[field_format]'},
+      :child => {
+        :tag => 'option',
+        :attributes => {:value => 'user'},
+        :content => 'User'
+      }
+    assert_tag :select,
+      :attributes => {:name => 'custom_field[field_format]'},
+      :child => {
+        :tag => 'option',
+        :attributes => {:value => 'version'},
+        :content => 'Version'
+      }
+  end
+  
+  def test_get_new_with_invalid_custom_field_class_should_redirect_to_list
+    get :new, :type => 'UnknownCustomField'
+    assert_redirected_to '/custom_fields'
+  end
+  
   def test_post_new_list_custom_field
     assert_difference 'CustomField.count' do
       post :new, :type => "IssueCustomField",
@@ -53,9 +78,4 @@
     assert_equal ["0.1", "0.2"], field.possible_values
     assert_equal 1, field.trackers.size
   end
-  
-  def test_invalid_custom_field_class_should_redirect_to_list
-    get :new, :type => 'UnknownCustomField'
-    assert_redirected_to '/custom_fields'
-  end
 end
--- a/test/functional/.svn/text-base/documents_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/documents_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -23,30 +23,30 @@
 
 class DocumentsControllerTest < ActionController::TestCase
   fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :documents, :enumerations
-  
+
   def setup
     @controller = DocumentsController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
   end
-  
+
   def test_index
     # Sets a default category
     e = Enumeration.find_by_name('Technical documentation')
     e.update_attributes(:is_default => true)
-    
+
     get :index, :project_id => 'ecookbook'
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:grouped)
-    
+
     # Default category selected in the new document form
     assert_tag :select, :attributes => {:name => 'document[category_id]'},
                         :child => {:tag => 'option', :attributes => {:selected => 'selected'},
                                                      :content => 'Technical documentation'}
   end
-  
+
   def test_index_with_long_description
     # adds a long description to the first document
     doc = documents(:documents_001)
@@ -55,7 +55,7 @@
 
 Vestibulum non velit mi. Aliquam scelerisque libero ut nulla fringilla a sollicitudin magna rhoncus.  Praesent a nunc lorem, ac porttitor eros. Sed ac diam nec neque interdum adipiscing quis quis justo. Donec arcu nunc, fringilla eu dictum at, venenatis ac sem. Vestibulum quis elit urna, ac mattis sapien. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
 LOREM
-    
+
     get :index, :project_id => 'ecookbook'
     assert_response :success
     assert_template 'index'
@@ -64,21 +64,21 @@
     assert_select '.wiki p', :text => (doc.description.split("\n").first + '...')
     assert_select '.wiki p', :text => Regexp.new(Regexp.escape("EndOfLineHere..."))
   end
-  
+
   def test_new_with_one_attachment
     ActionMailer::Base.deliveries.clear
     Setting.notified_events << 'document_added'
     @request.session[:user_id] = 2
     set_tmp_attachments_directory
-    
+
     post :new, :project_id => 'ecookbook',
                :document => { :title => 'DocumentsControllerTest#test_post_new',
                               :description => 'This is a new document',
                               :category_id => 2},
                :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
-               
+
     assert_redirected_to '/projects/ecookbook/documents'
-    
+
     document = Document.find_by_title('DocumentsControllerTest#test_post_new')
     assert_not_nil document
     assert_equal Enumeration.find(2), document.category
@@ -86,7 +86,7 @@
     assert_equal 'testfile.txt', document.attachments.first.filename
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_destroy
     @request.session[:user_id] = 2
     post :destroy, :id => 1
--- a/test/functional/.svn/text-base/groups_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/groups_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -104,4 +104,13 @@
       post :destroy_membership, :id => 10, :membership_id => 6
     end
   end
+  
+  def test_autocomplete_for_user
+    get :autocomplete_for_user, :id => 10, :q => 'mis'
+    assert_response :success
+    users = assigns(:users)
+    assert_not_nil users
+    assert users.any?
+    assert !users.include?(Group.find(10).users.first)
+  end
 end
--- a/test/functional/.svn/text-base/issue_moves_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/issue_moves_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -112,6 +112,19 @@
         assert_equal '2009-12-31', issue.due_date.to_s, "Due date is incorrect"
       end
     end
+
+    should "allow adding a note when copying" do
+      @request.session[:user_id] = 2
+      assert_difference 'Issue.count', 1 do
+        post :create, :ids => [1], :copy_options => {:copy => '1'}, :notes => 'Copying one issue', :new_tracker_id => '', :assigned_to_id => 4, :status_id => 3, :start_date => '2009-12-01', :due_date => '2009-12-31'
+      end
+      
+      issue = Issue.first(:order => 'id DESC')
+      assert_equal 1, issue.journals.size
+      journal = issue.journals.first
+      assert_equal 0, journal.details.size
+      assert_equal 'Copying one issue', journal.notes
+    end
   end
   
   def test_copy_to_another_project_should_follow_when_needed
--- a/test/functional/.svn/text-base/issues_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/issues_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -45,17 +45,17 @@
            :journals,
            :journal_details,
            :queries
-  
+
   def setup
     @controller = IssuesController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
   end
-  
+
   def test_index
     Setting.default_language = 'en'
-    
+
     get :index
     assert_response :success
     assert_template 'index.rhtml'
@@ -69,7 +69,7 @@
     # project column
     assert_tag :tag => 'th', :content => /Project/
   end
-  
+
   def test_index_should_not_list_issues_when_module_disabled
     EnabledModule.delete_all("name = 'issue_tracking' AND project_id = 1")
     get :index
@@ -91,7 +91,14 @@
     assert_no_tag :tag => 'a', :content => /Can't print recipes/
     assert_tag :tag => 'a', :content => /Subproject issue/
   end
-  
+
+  def test_index_should_list_visible_issues_only
+    get :index, :per_page => 100
+    assert_response :success
+    assert_not_nil assigns(:issues)
+    assert_nil assigns(:issues).detect {|issue| !issue.visible?}
+  end
+
   def test_index_with_project
     Setting.display_subprojects_issues = 0
     get :index, :project_id => 1
@@ -101,7 +108,7 @@
     assert_tag :tag => 'a', :content => /Can't print recipes/
     assert_no_tag :tag => 'a', :content => /Subproject issue/
   end
-  
+
   def test_index_with_project_and_subprojects
     Setting.display_subprojects_issues = 1
     get :index, :project_id => 1
@@ -112,7 +119,7 @@
     assert_tag :tag => 'a', :content => /Subproject issue/
     assert_no_tag :tag => 'a', :content => /Issue of a private subproject/
   end
-  
+
   def test_index_with_project_and_subprojects_should_show_private_subprojects
     @request.session[:user_id] = 2
     Setting.display_subprojects_issues = 1
@@ -124,45 +131,45 @@
     assert_tag :tag => 'a', :content => /Subproject issue/
     assert_tag :tag => 'a', :content => /Issue of a private subproject/
   end
-  
+
   def test_index_with_project_and_default_filter
     get :index, :project_id => 1, :set_filter => 1
     assert_response :success
     assert_template 'index.rhtml'
     assert_not_nil assigns(:issues)
-    
+
     query = assigns(:query)
     assert_not_nil query
     # default filter
     assert_equal({'status_id' => {:operator => 'o', :values => ['']}}, query.filters)
   end
-  
+
   def test_index_with_project_and_filter
-    get :index, :project_id => 1, :set_filter => 1, 
-      :fields => ['tracker_id'],
-      :operators => {'tracker_id' => '='},
-      :values => {'tracker_id' => ['1']} 
+    get :index, :project_id => 1, :set_filter => 1,
+      :f => ['tracker_id'],
+      :op => {'tracker_id' => '='},
+      :v => {'tracker_id' => ['1']}
     assert_response :success
     assert_template 'index.rhtml'
     assert_not_nil assigns(:issues)
-    
+
     query = assigns(:query)
     assert_not_nil query
     assert_equal({'tracker_id' => {:operator => '=', :values => ['1']}}, query.filters)
   end
-  
+
   def test_index_with_project_and_empty_filters
     get :index, :project_id => 1, :set_filter => 1, :fields => ['']
     assert_response :success
     assert_template 'index.rhtml'
     assert_not_nil assigns(:issues)
-    
+
     query = assigns(:query)
     assert_not_nil query
     # no filter
     assert_equal({}, query.filters)
   end
-  
+
   def test_index_with_query
     get :index, :project_id => 1, :query_id => 5
     assert_response :success
@@ -170,7 +177,7 @@
     assert_not_nil assigns(:issues)
     assert_nil assigns(:issue_count_by_group)
   end
-  
+
   def test_index_with_query_grouped_by_tracker
     get :index, :project_id => 1, :query_id => 6
     assert_response :success
@@ -178,7 +185,7 @@
     assert_not_nil assigns(:issues)
     assert_not_nil assigns(:issue_count_by_group)
   end
-  
+
   def test_index_with_query_grouped_by_list_custom_field
     get :index, :project_id => 1, :query_id => 9
     assert_response :success
@@ -186,15 +193,15 @@
     assert_not_nil assigns(:issues)
     assert_not_nil assigns(:issue_count_by_group)
   end
-  
+
   def test_index_sort_by_field_not_included_in_columns
     Setting.issue_list_default_columns = %w(subject author)
     get :index, :sort => 'tracker'
   end
-  
+
   def test_index_csv_with_project
     Setting.default_language = 'en'
-    
+
     get :index, :format => 'csv'
     assert_response :success
     assert_not_nil assigns(:issues)
@@ -206,24 +213,24 @@
     assert_not_nil assigns(:issues)
     assert_equal 'text/csv', @response.content_type
   end
-  
+
   def test_index_pdf
     get :index, :format => 'pdf'
     assert_response :success
     assert_not_nil assigns(:issues)
     assert_equal 'application/pdf', @response.content_type
-    
+
     get :index, :project_id => 1, :format => 'pdf'
     assert_response :success
     assert_not_nil assigns(:issues)
     assert_equal 'application/pdf', @response.content_type
-    
+
     get :index, :project_id => 1, :query_id => 6, :format => 'pdf'
     assert_response :success
     assert_not_nil assigns(:issues)
     assert_equal 'application/pdf', @response.content_type
   end
-  
+
   def test_index_pdf_with_query_grouped_by_list_custom_field
     get :index, :project_id => 1, :query_id => 9, :format => 'pdf'
     assert_response :success
@@ -231,106 +238,163 @@
     assert_not_nil assigns(:issue_count_by_group)
     assert_equal 'application/pdf', @response.content_type
   end
-  
+
   def test_index_sort
     get :index, :sort => 'tracker,id:desc'
     assert_response :success
-    
+
     sort_params = @request.session['issues_index_sort']
     assert sort_params.is_a?(String)
     assert_equal 'tracker,id:desc', sort_params
-    
+
     issues = assigns(:issues)
     assert_not_nil issues
     assert !issues.empty?
     assert_equal issues.sort {|a,b| a.tracker == b.tracker ? b.id <=> a.id : a.tracker <=> b.tracker }.collect(&:id), issues.collect(&:id)
   end
-  
+
   def test_index_with_columns
     columns = ['tracker', 'subject', 'assigned_to']
-    get :index, :set_filter => 1, :query => { 'column_names' => columns}
+    get :index, :set_filter => 1, :c => columns
     assert_response :success
-    
+
     # query should use specified columns
     query = assigns(:query)
     assert_kind_of Query, query
     assert_equal columns, query.column_names.map(&:to_s)
-    
+
     # columns should be stored in session
     assert_kind_of Hash, session[:query]
     assert_kind_of Array, session[:query][:column_names]
     assert_equal columns, session[:query][:column_names].map(&:to_s)
   end
 
+  def test_index_with_custom_field_column
+    columns = %w(tracker subject cf_2)
+    get :index, :set_filter => 1, :c => columns
+    assert_response :success
+
+    # query should use specified columns
+    query = assigns(:query)
+    assert_kind_of Query, query
+    assert_equal columns, query.column_names.map(&:to_s)
+
+    assert_tag :td,
+      :attributes => {:class => 'cf_2 string'},
+      :ancestor => {:tag => 'table', :attributes => {:class => /issues/}}
+  end
+
   def test_show_by_anonymous
     get :show, :id => 1
     assert_response :success
     assert_template 'show.rhtml'
     assert_not_nil assigns(:issue)
     assert_equal Issue.find(1), assigns(:issue)
-    
+
     # anonymous role is allowed to add a note
     assert_tag :tag => 'form',
                :descendant => { :tag => 'fieldset',
-                                :child => { :tag => 'legend', 
+                                :child => { :tag => 'legend',
                                             :content => /Notes/ } }
   end
-  
+
   def test_show_by_manager
     @request.session[:user_id] = 2
     get :show, :id => 1
     assert_response :success
-    
+
     assert_tag :tag => 'a',
       :content => /Quote/
-    
+
     assert_tag :tag => 'form',
                :descendant => { :tag => 'fieldset',
-                                :child => { :tag => 'legend', 
+                                :child => { :tag => 'legend',
                                             :content => /Change properties/ } },
                :descendant => { :tag => 'fieldset',
-                                :child => { :tag => 'legend', 
+                                :child => { :tag => 'legend',
                                             :content => /Log time/ } },
                :descendant => { :tag => 'fieldset',
-                                :child => { :tag => 'legend', 
+                                :child => { :tag => 'legend',
                                             :content => /Notes/ } }
   end
-  
+
   def test_show_should_deny_anonymous_access_without_permission
     Role.anonymous.remove_permission!(:view_issues)
     get :show, :id => 1
     assert_response :redirect
   end
-  
+
+  def test_show_should_deny_anonymous_access_to_private_issue
+    Issue.update_all(["is_private = ?", true], "id = 1")
+    get :show, :id => 1
+    assert_response :redirect
+  end
+
   def test_show_should_deny_non_member_access_without_permission
     Role.non_member.remove_permission!(:view_issues)
     @request.session[:user_id] = 9
     get :show, :id => 1
     assert_response 403
   end
-  
+
+  def test_show_should_deny_non_member_access_to_private_issue
+    Issue.update_all(["is_private = ?", true], "id = 1")
+    @request.session[:user_id] = 9
+    get :show, :id => 1
+    assert_response 403
+  end
+
   def test_show_should_deny_member_access_without_permission
     Role.find(1).remove_permission!(:view_issues)
     @request.session[:user_id] = 2
     get :show, :id => 1
     assert_response 403
   end
-  
+
+  def test_show_should_deny_member_access_to_private_issue_without_permission
+    Issue.update_all(["is_private = ?", true], "id = 1")
+    @request.session[:user_id] = 3
+    get :show, :id => 1
+    assert_response 403
+  end
+
+  def test_show_should_allow_author_access_to_private_issue
+    Issue.update_all(["is_private = ?, author_id = 3", true], "id = 1")
+    @request.session[:user_id] = 3
+    get :show, :id => 1
+    assert_response :success
+  end
+
+  def test_show_should_allow_assignee_access_to_private_issue
+    Issue.update_all(["is_private = ?, assigned_to_id = 3", true], "id = 1")
+    @request.session[:user_id] = 3
+    get :show, :id => 1
+    assert_response :success
+  end
+
+  def test_show_should_allow_member_access_to_private_issue_with_permission
+    Issue.update_all(["is_private = ?", true], "id = 1")
+    User.find(3).roles_for_project(Project.find(1)).first.update_attribute :issues_visibility, 'all'
+    @request.session[:user_id] = 3
+    get :show, :id => 1
+    assert_response :success
+  end
+
   def test_show_should_not_disclose_relations_to_invisible_issues
     Setting.cross_project_issue_relations = '1'
     IssueRelation.create!(:issue_from => Issue.find(1), :issue_to => Issue.find(2), :relation_type => 'relates')
     # Relation to a private project issue
     IssueRelation.create!(:issue_from => Issue.find(1), :issue_to => Issue.find(4), :relation_type => 'relates')
-    
+
     get :show, :id => 1
     assert_response :success
-    
+
     assert_tag :div, :attributes => { :id => 'relations' },
                      :descendant => { :tag => 'a', :content => /#2$/ }
     assert_no_tag :div, :attributes => { :id => 'relations' },
                         :descendant => { :tag => 'a', :content => /#4$/ }
   end
-  
+
   def test_show_atom
     get :show, :id => 2, :format => 'atom'
     assert_response :success
@@ -338,7 +402,7 @@
     # Inline image
     assert_select 'content', :text => Regexp.new(Regexp.quote('http://test.host/attachments/download/10'))
   end
-  
+
   def test_show_export_to_pdf
     get :show, :id => 3, :format => 'pdf'
     assert_response :success
@@ -352,7 +416,7 @@
     get :new, :project_id => 1, :tracker_id => 1
     assert_response :success
     assert_template 'new'
-    
+
     assert_tag :tag => 'input', :attributes => { :name => 'issue[custom_field_values][2]',
                                                  :value => 'Default string' }
   end
@@ -362,51 +426,51 @@
     get :new, :project_id => 1
     assert_response :success
     assert_template 'new'
-    
+
     issue = assigns(:issue)
     assert_not_nil issue
     assert_equal Project.find(1).trackers.first, issue.tracker
   end
-  
+
   def test_get_new_with_no_default_status_should_display_an_error
     @request.session[:user_id] = 2
     IssueStatus.delete_all
-    
+
     get :new, :project_id => 1
     assert_response 500
     assert_error_tag :content => /No default issue/
   end
-  
+
   def test_get_new_with_no_tracker_should_display_an_error
     @request.session[:user_id] = 2
     Tracker.delete_all
-    
+
     get :new, :project_id => 1
     assert_response 500
     assert_error_tag :content => /No tracker/
   end
-  
+
   def test_update_new_form
     @request.session[:user_id] = 2
     xhr :post, :new, :project_id => 1,
-                     :issue => {:tracker_id => 2, 
+                     :issue => {:tracker_id => 2,
                                 :subject => 'This is the test_new issue',
                                 :description => 'This is the description',
                                 :priority_id => 5}
     assert_response :success
     assert_template 'attributes'
-    
+
     issue = assigns(:issue)
     assert_kind_of Issue, issue
     assert_equal 1, issue.project_id
     assert_equal 2, issue.tracker_id
     assert_equal 'This is the test_new issue', issue.subject
   end
-  
+
   def test_post_create
     @request.session[:user_id] = 2
     assert_difference 'Issue.count' do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 3,
                             :status_id => 2,
                             :subject => 'This is the test_new issue',
@@ -417,7 +481,7 @@
                             :custom_field_values => {'2' => 'Value for field 2'}}
     end
     assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
-    
+
     issue = Issue.find_by_subject('This is the test_new issue')
     assert_not_nil issue
     assert_equal 2, issue.author_id
@@ -429,11 +493,11 @@
     assert_not_nil v
     assert_equal 'Value for field 2', v.value
   end
-  
+
   def test_post_create_without_start_date
     @request.session[:user_id] = 2
     assert_difference 'Issue.count' do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 3,
                             :status_id => 2,
                             :subject => 'This is the test_new issue',
@@ -444,15 +508,15 @@
                             :custom_field_values => {'2' => 'Value for field 2'}}
     end
     assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
-    
+
     issue = Issue.find_by_subject('This is the test_new issue')
     assert_not_nil issue
     assert_nil issue.start_date
   end
-  
+
   def test_post_create_and_continue
     @request.session[:user_id] = 2
-    post :create, :project_id => 1, 
+    post :create, :project_id => 1,
                :issue => {:tracker_id => 3,
                           :subject => 'This is first issue',
                           :priority_id => 5},
@@ -460,11 +524,11 @@
     assert_redirected_to :controller => 'issues', :action => 'new', :project_id => 'ecookbook',
                          :issue => {:tracker_id => 3}
   end
-  
+
   def test_post_create_without_custom_fields_param
     @request.session[:user_id] = 2
     assert_difference 'Issue.count' do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 1,
                             :subject => 'This is the test_new issue',
                             :description => 'This is the description',
@@ -478,7 +542,7 @@
     field.update_attribute(:is_required, true)
 
     @request.session[:user_id] = 2
-    post :create, :project_id => 1, 
+    post :create, :project_id => 1,
                :issue => {:tracker_id => 1,
                           :subject => 'This is the test_new issue',
                           :description => 'This is the description',
@@ -489,13 +553,13 @@
     assert_not_nil issue
     assert_equal I18n.translate('activerecord.errors.messages.invalid'), issue.errors.on(:custom_values)
   end
-  
+
   def test_post_create_with_watchers
     @request.session[:user_id] = 2
     ActionMailer::Base.deliveries.clear
-    
+
     assert_difference 'Watcher.count', 2 do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 1,
                             :subject => 'This is a new issue with watchers',
                             :description => 'This is the description',
@@ -505,7 +569,7 @@
     issue = Issue.find_by_subject('This is a new issue with watchers')
     assert_not_nil issue
     assert_redirected_to :controller => 'issues', :action => 'show', :id => issue
-    
+
     # Watchers added
     assert_equal [2, 3], issue.watcher_user_ids.sort
     assert issue.watched_by?(User.find(3))
@@ -514,12 +578,12 @@
     assert_kind_of TMail::Mail, mail
     assert [mail.bcc, mail.cc].flatten.include?(User.find(3).mail)
   end
-  
+
   def test_post_create_subissue
     @request.session[:user_id] = 2
-    
+
     assert_difference 'Issue.count' do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 1,
                             :subject => 'This is a child issue',
                             :parent_issue_id => 2}
@@ -531,9 +595,9 @@
 
   def test_post_create_subissue_with_non_numeric_parent_id
     @request.session[:user_id] = 2
-    
+
     assert_difference 'Issue.count' do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 1,
                             :subject => 'This is a child issue',
                             :parent_issue_id => 'ABC'}
@@ -542,12 +606,12 @@
     assert_not_nil issue
     assert_nil issue.parent
   end
-  
+
   def test_post_create_should_send_a_notification
     ActionMailer::Base.deliveries.clear
     @request.session[:user_id] = 2
     assert_difference 'Issue.count' do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 3,
                             :subject => 'This is the test_new issue',
                             :description => 'This is the description',
@@ -556,13 +620,13 @@
                             :custom_field_values => {'2' => 'Value for field 2'}}
     end
     assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
-    
+
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_post_create_should_preserve_fields_values_on_validation_failure
     @request.session[:user_id] = 2
-    post :create, :project_id => 1, 
+    post :create, :project_id => 1,
                :issue => {:tracker_id => 1,
                           # empty subject
                           :subject => '',
@@ -571,35 +635,35 @@
                           :custom_field_values => {'1' => 'Oracle', '2' => 'Value for field 2'}}
     assert_response :success
     assert_template 'new'
-    
+
     assert_tag :textarea, :attributes => { :name => 'issue[description]' },
                           :content => 'This is a description'
     assert_tag :select, :attributes => { :name => 'issue[priority_id]' },
                         :child => { :tag => 'option', :attributes => { :selected => 'selected',
                                                                        :value => '6' },
-                                                      :content => 'High' }  
+                                                      :content => 'High' }
     # Custom fields
     assert_tag :select, :attributes => { :name => 'issue[custom_field_values][1]' },
                         :child => { :tag => 'option', :attributes => { :selected => 'selected',
                                                                        :value => 'Oracle' },
-                                                      :content => 'Oracle' }  
+                                                      :content => 'Oracle' }
     assert_tag :input, :attributes => { :name => 'issue[custom_field_values][2]',
                                         :value => 'Value for field 2'}
   end
-  
+
   def test_post_create_should_ignore_non_safe_attributes
     @request.session[:user_id] = 2
     assert_nothing_raised do
       post :create, :project_id => 1, :issue => { :tracker => "A param can not be a Tracker" }
     end
   end
-  
+
   context "without workflow privilege" do
     setup do
       Workflow.delete_all(["role_id = ?", Role.anonymous.id])
       Role.anonymous.add_permission! :add_issues, :add_issue_notes
     end
-    
+
     context "#new" do
       should "propose default status only" do
         get :new, :project_id => 1
@@ -610,10 +674,10 @@
           :children => {:count => 1},
           :child => {:tag => 'option', :attributes => {:value => IssueStatus.default.id.to_s}}
       end
-      
+
       should "accept default status" do
         assert_difference 'Issue.count' do
-          post :create, :project_id => 1, 
+          post :create, :project_id => 1,
                      :issue => {:tracker_id => 1,
                                 :subject => 'This is an issue',
                                 :status_id => 1}
@@ -621,21 +685,10 @@
         issue = Issue.last(:order => 'id')
         assert_equal IssueStatus.default, issue.status
       end
-      
-      should "accept default status" do
-        assert_difference 'Issue.count' do
-          post :create, :project_id => 1, 
-                     :issue => {:tracker_id => 1,
-                                :subject => 'This is an issue',
-                                :status_id => 1}
-        end
-        issue = Issue.last(:order => 'id')
-        assert_equal IssueStatus.default, issue.status
-      end
-      
+
       should "ignore unauthorized status" do
         assert_difference 'Issue.count' do
-          post :create, :project_id => 1, 
+          post :create, :project_id => 1,
                      :issue => {:tracker_id => 1,
                                 :subject => 'This is an issue',
                                 :status_id => 3}
@@ -644,7 +697,7 @@
         assert_equal IssueStatus.default, issue.status
       end
     end
-    
+
     context "#update" do
       should "ignore status change" do
         assert_difference 'Journal.count' do
@@ -652,7 +705,7 @@
         end
         assert_equal 1, Issue.find(1).status_id
       end
-      
+
       should "ignore attributes changes" do
         assert_difference 'Journal.count' do
           put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2}
@@ -663,7 +716,7 @@
       end
     end
   end
-  
+
   context "with workflow privilege" do
     setup do
       Workflow.delete_all(["role_id = ?", Role.anonymous.id])
@@ -671,7 +724,7 @@
       Workflow.create!(:role => Role.anonymous, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4)
       Role.anonymous.add_permission! :add_issues, :add_issue_notes
     end
-    
+
     context "#update" do
       should "accept authorized status" do
         assert_difference 'Journal.count' do
@@ -679,14 +732,14 @@
         end
         assert_equal 3, Issue.find(1).status_id
       end
-      
+
       should "ignore unauthorized status" do
         assert_difference 'Journal.count' do
           put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2}
         end
         assert_equal 1, Issue.find(1).status_id
       end
-      
+
       should "accept authorized attributes changes" do
         assert_difference 'Journal.count' do
           put :update, :id => 1, :notes => 'just trying', :issue => {:assigned_to_id => 2}
@@ -694,7 +747,7 @@
         issue = Issue.find(1)
         assert_equal 2, issue.assigned_to_id
       end
-      
+
       should "ignore unauthorized attributes changes" do
         assert_difference 'Journal.count' do
           put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed'}
@@ -703,7 +756,7 @@
         assert_equal "Can't print recipes", issue.subject
       end
     end
-    
+
     context "and :edit_issues permission" do
       setup do
         Role.anonymous.add_permission! :add_issues, :edit_issues
@@ -715,14 +768,14 @@
         end
         assert_equal 3, Issue.find(1).status_id
       end
-      
+
       should "ignore unauthorized status" do
         assert_difference 'Journal.count' do
           put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2}
         end
         assert_equal 1, Issue.find(1).status_id
       end
-      
+
       should "accept authorized attributes changes" do
         assert_difference 'Journal.count' do
           put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2}
@@ -733,7 +786,7 @@
       end
     end
   end
-  
+
   def test_copy_issue
     @request.session[:user_id] = 2
     get :new, :project_id => 1, :copy_from => 1
@@ -742,7 +795,7 @@
     orig = Issue.find(1)
     assert_equal orig.subject, assigns(:issue).subject
   end
-  
+
   def test_get_edit
     @request.session[:user_id] = 2
     get :edit, :id => 1
@@ -751,26 +804,26 @@
     assert_not_nil assigns(:issue)
     assert_equal Issue.find(1), assigns(:issue)
   end
-  
+
   def test_get_edit_with_params
     @request.session[:user_id] = 2
     get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 },
         :time_entry => { :hours => '2.5', :comments => 'test_get_edit_with_params', :activity_id => TimeEntryActivity.first.id }
     assert_response :success
     assert_template 'edit'
-    
+
     issue = assigns(:issue)
     assert_not_nil issue
-    
+
     assert_equal 5, issue.status_id
     assert_tag :select, :attributes => { :name => 'issue[status_id]' },
-                        :child => { :tag => 'option', 
+                        :child => { :tag => 'option',
                                     :content => 'Closed',
                                     :attributes => { :selected => 'selected' } }
-                                    
+
     assert_equal 7, issue.priority_id
     assert_tag :select, :attributes => { :name => 'issue[priority_id]' },
-                        :child => { :tag => 'option', 
+                        :child => { :tag => 'option',
                                     :content => 'Urgent',
                                     :attributes => { :selected => 'selected' } }
 
@@ -785,13 +838,13 @@
     @request.session[:user_id] = 2
     xhr :post, :new, :project_id => 1,
                              :id => 1,
-                             :issue => {:tracker_id => 2, 
+                             :issue => {:tracker_id => 2,
                                         :subject => 'This is the test_new issue',
                                         :description => 'This is the description',
                                         :priority_id => 5}
     assert_response :success
     assert_template 'attributes'
-    
+
     issue = assigns(:issue)
     assert_kind_of Issue, issue
     assert_equal 1, issue.id
@@ -799,7 +852,7 @@
     assert_equal 2, issue.tracker_id
     assert_equal 'This is the test_new issue', issue.subject
   end
-  
+
   def test_update_using_invalid_http_verbs
     @request.session[:user_id] = 2
     subject = 'Updated by an invalid http verb'
@@ -817,12 +870,12 @@
   def test_put_update_without_custom_fields_param
     @request.session[:user_id] = 2
     ActionMailer::Base.deliveries.clear
-    
+
     issue = Issue.find(1)
     assert_equal '125', issue.custom_value_for(2).value
     old_subject = issue.subject
     new_subject = 'Subject modified by IssuesControllerTest#test_post_edit'
-    
+
     assert_difference('Journal.count') do
       assert_difference('JournalDetail.count', 2) do
         put :update, :id => 1, :issue => {:subject => new_subject,
@@ -836,18 +889,18 @@
     assert_equal new_subject, issue.subject
     # Make sure custom fields were not cleared
     assert_equal '125', issue.custom_value_for(2).value
-    
+
     mail = ActionMailer::Base.deliveries.last
     assert_kind_of TMail::Mail, mail
     assert mail.subject.starts_with?("[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}]")
     assert mail.body.include?("Subject changed from #{old_subject} to #{new_subject}")
   end
-  
+
   def test_put_update_with_custom_field_change
     @request.session[:user_id] = 2
     issue = Issue.find(1)
     assert_equal '125', issue.custom_value_for(2).value
-    
+
     assert_difference('Journal.count') do
       assert_difference('JournalDetail.count', 3) do
         put :update, :id => 1, :issue => {:subject => 'Custom field change',
@@ -860,12 +913,12 @@
     assert_redirected_to :action => 'show', :id => '1'
     issue.reload
     assert_equal 'New custom value', issue.custom_value_for(2).value
-    
+
     mail = ActionMailer::Base.deliveries.last
     assert_kind_of TMail::Mail, mail
     assert mail.body.include?("Searchable field changed from 125 to New custom value")
   end
-  
+
   def test_put_update_with_status_and_assignee_change
     issue = Issue.find(1)
     assert_equal 1, issue.status_id
@@ -883,13 +936,13 @@
     j = Journal.find(:first, :order => 'id DESC')
     assert_equal 'Assigned to dlopper', j.notes
     assert_equal 2, j.details.size
-    
+
     mail = ActionMailer::Base.deliveries.last
     assert mail.body.include?("Status changed from New to Assigned")
     # subject should contain the new status
     assert mail.subject.include?("(#{ IssueStatus.find(2).name })")
   end
-  
+
   def test_put_update_with_note_only
     notes = 'Note added by IssuesControllerTest#test_update_with_note_only'
     # anonymous user
@@ -901,11 +954,11 @@
     assert_equal notes, j.notes
     assert_equal 0, j.details.size
     assert_equal User.anonymous, j.user
-    
+
     mail = ActionMailer::Base.deliveries.last
     assert mail.body.include?(notes)
   end
-  
+
   def test_put_update_with_note_and_spent_time
     @request.session[:user_id] = 2
     spent_hours_before = Issue.find(1).spent_hours
@@ -916,22 +969,22 @@
            :time_entry => { :hours => '2.5', :comments => 'test_put_update_with_note_and_spent_time', :activity_id => TimeEntryActivity.first.id }
     end
     assert_redirected_to :action => 'show', :id => '1'
-    
+
     issue = Issue.find(1)
-    
+
     j = Journal.find(:first, :order => 'id DESC')
     assert_equal '2.5 hours added', j.notes
     assert_equal 0, j.details.size
-    
+
     t = issue.time_entries.find_by_comments('test_put_update_with_note_and_spent_time')
     assert_not_nil t
     assert_equal 2.5, t.hours
     assert_equal spent_hours_before + 2.5, issue.spent_hours
   end
-  
+
   def test_put_update_with_attachment_only
     set_tmp_attachments_directory
-    
+
     # Delete all fixtured journals, a race condition can occur causing the wrong
     # journal to get fetched in the next find.
     Journal.delete_all
@@ -947,21 +1000,21 @@
     assert_equal 1, j.details.size
     assert_equal 'testfile.txt', j.details.first.value
     assert_equal User.anonymous, j.user
-    
+
     mail = ActionMailer::Base.deliveries.last
     assert mail.body.include?('testfile.txt')
   end
 
   def test_put_update_with_attachment_that_fails_to_save
     set_tmp_attachments_directory
-    
+
     # Delete all fixtured journals, a race condition can occur causing the wrong
     # journal to get fetched in the next find.
     Journal.delete_all
 
     # Mock out the unsaved attachment
     Attachment.any_instance.stubs(:create).returns(Attachment.new)
-    
+
     # anonymous user
     put :update,
          :id => 1,
@@ -976,12 +1029,12 @@
     issue = Issue.find(1)
     issue.journals.clear
     ActionMailer::Base.deliveries.clear
-    
+
     put :update,
          :id => 1,
          :notes => ''
     assert_redirected_to :action => 'show', :id => '1'
-    
+
     issue.reload
     assert issue.journals.empty?
     # No email should be sent
@@ -994,18 +1047,18 @@
     issue = Issue.find(1)
     old_subject = issue.subject
     new_subject = 'Subject modified by IssuesControllerTest#test_post_edit'
-    
+
     put :update, :id => 1, :issue => {:subject => new_subject,
                                      :priority_id => '6',
                                      :category_id => '1' # no change
                                     }
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
-  def test_put_update_with_invalid_spent_time
+
+  def test_put_update_with_invalid_spent_time_hours_only
     @request.session[:user_id] = 2
     notes = 'Note added by IssuesControllerTest#test_post_edit_with_invalid_spent_time'
-    
+
     assert_no_difference('Journal.count') do
       put :update,
            :id => 1,
@@ -1014,12 +1067,31 @@
     end
     assert_response :success
     assert_template 'edit'
-    
-    assert_tag :textarea, :attributes => { :name => 'notes' },
-                          :content => notes
+
+    assert_error_tag :descendant => {:content => /Activity can't be blank/}
+    assert_tag :textarea, :attributes => { :name => 'notes' }, :content => notes
     assert_tag :input, :attributes => { :name => 'time_entry[hours]', :value => "2z" }
   end
-  
+
+  def test_put_update_with_invalid_spent_time_comments_only
+    @request.session[:user_id] = 2
+    notes = 'Note added by IssuesControllerTest#test_post_edit_with_invalid_spent_time'
+
+    assert_no_difference('Journal.count') do
+      put :update,
+           :id => 1,
+           :notes => notes,
+           :time_entry => {"comments"=>"this is my comment", "activity_id"=>"", "hours"=>""}
+    end
+    assert_response :success
+    assert_template 'edit'
+
+    assert_error_tag :descendant => {:content => /Activity can't be blank/}
+    assert_error_tag :descendant => {:content => /Hours can't be blank/}
+    assert_tag :textarea, :attributes => { :name => 'notes' }, :content => notes
+    assert_tag :input, :attributes => { :name => 'time_entry[comments]', :value => "this is my comment" }
+  end
+
   def test_put_update_should_allow_fixed_version_to_be_set_to_a_subproject
     issue = Issue.find(2)
     @request.session[:user_id] = 2
@@ -1050,7 +1122,7 @@
     assert_response :redirect
     assert_redirected_to '/issues'
   end
-  
+
   def test_put_update_should_not_redirect_back_using_the_back_url_parameter_off_the_host
     issue = Issue.find(2)
     @request.session[:user_id] = 2
@@ -1065,19 +1137,21 @@
     assert_response :redirect
     assert_redirected_to :controller => 'issues', :action => 'show', :id => issue.id
   end
-  
+
   def test_get_bulk_edit
     @request.session[:user_id] = 2
     get :bulk_edit, :ids => [1, 2]
     assert_response :success
     assert_template 'bulk_edit'
-    
+
+    assert_tag :input, :attributes => {:name => 'issue[parent_issue_id]'}
+
     # Project specific custom field, date type
     field = CustomField.find(9)
     assert !field.is_for_all?
     assert_equal 'date', field.field_format
     assert_tag :input, :attributes => {:name => 'issue[custom_field_values][9]'}
-    
+
     # System wide custom field
     assert CustomField.find(1).is_for_all?
     assert_tag :select, :attributes => {:name => 'issue[custom_field_values][1]'}
@@ -1088,7 +1162,10 @@
     get :bulk_edit, :ids => [1, 2, 6]
     assert_response :success
     assert_template 'bulk_edit'
-    
+
+    # Can not set issues from different projects as children of an issue
+    assert_no_tag :input, :attributes => {:name => 'issue[parent_issue_id]'}
+
     # Project specific custom field, date type
     field = CustomField.find(9)
     assert !field.is_for_all?
@@ -1096,6 +1173,38 @@
     assert_no_tag :input, :attributes => {:name => 'issue[custom_field_values][9]'}
   end
 
+  def test_get_bulk_edit_with_user_custom_field
+    field = IssueCustomField.create!(:name => 'Tester', :field_format => 'user', :is_for_all => true)
+
+    @request.session[:user_id] = 2
+    get :bulk_edit, :ids => [1, 2]
+    assert_response :success
+    assert_template 'bulk_edit'
+
+    assert_tag :select,
+      :attributes => {:name => "issue[custom_field_values][#{field.id}]"},
+      :children => {
+        :only => {:tag => 'option'},
+        :count => Project.find(1).users.count + 1
+      }
+  end
+
+  def test_get_bulk_edit_with_version_custom_field
+    field = IssueCustomField.create!(:name => 'Affected version', :field_format => 'version', :is_for_all => true)
+
+    @request.session[:user_id] = 2
+    get :bulk_edit, :ids => [1, 2]
+    assert_response :success
+    assert_template 'bulk_edit'
+
+    assert_tag :select,
+      :attributes => {:name => "issue[custom_field_values][#{field.id}]"},
+      :children => {
+        :only => {:tag => 'option'},
+        :count => Project.find(1).versions.count + 1
+      }
+  end
+
   def test_bulk_update
     @request.session[:user_id] = 2
     # update issues priority
@@ -1103,11 +1212,11 @@
                                      :issue => {:priority_id => 7,
                                                 :assigned_to_id => '',
                                                 :custom_field_values => {'2' => ''}}
-                                     
+
     assert_response 302
     # check that the issues were updated
     assert_equal [7, 7], Issue.find_all_by_id([1, 2]).collect {|i| i.priority.id}
-    
+
     issue = Issue.find(1)
     journal = issue.journals.find(:first, :order => 'created_on DESC')
     assert_equal '125', issue.custom_value_for(2).value
@@ -1122,11 +1231,11 @@
                                      :issue => {:priority_id => 7,
                                                 :assigned_to_id => '',
                                                 :custom_field_values => {'2' => ''}}
-    
+
     assert_response 302
     # check that the issues were updated
     assert_equal [7, 7, 7], Issue.find([1,2,6]).map(&:priority_id)
-    
+
     issue = Issue.find(1)
     journal = issue.journals.find(:first, :order => 'created_on DESC')
     assert_equal '125', issue.custom_value_for(2).value
@@ -1147,7 +1256,7 @@
     assert_response 403
     assert_not_equal "Bulk should fail", Journal.last.notes
   end
-    
+
   def test_bullk_update_should_send_a_notification
     @request.session[:user_id] = 2
     ActionMailer::Base.deliveries.clear
@@ -1173,12 +1282,25 @@
                                      :issue => {:priority_id => '',
                                                 :assigned_to_id => '',
                                                 :status_id => '5'}
-                                     
+
     assert_response 302
     issue = Issue.find(1)
     assert issue.closed?
   end
 
+  def test_bulk_update_parent_id
+    @request.session[:user_id] = 2
+    post :bulk_update, :ids => [1, 3],
+      :notes => 'Bulk editing parent',
+      :issue => {:priority_id => '', :assigned_to_id => '', :status_id => '', :parent_issue_id => '2'}
+
+    assert_response 302
+    parent = Issue.find(2)
+    assert_equal parent.id, Issue.find(1).parent_id
+    assert_equal parent.id, Issue.find(3).parent_id
+    assert_equal [1, 3], parent.children.collect(&:id).sort
+  end
+
   def test_bulk_update_custom_field
     @request.session[:user_id] = 2
     # update issues priority
@@ -1186,9 +1308,9 @@
                                      :issue => {:priority_id => '',
                                                 :assigned_to_id => '',
                                                 :custom_field_values => {'2' => '777'}}
-                                     
+
     assert_response 302
-    
+
     issue = Issue.find(1)
     journal = issue.journals.find(:first, :order => 'created_on DESC')
     assert_equal '777', issue.custom_value_for(2).value
@@ -1206,7 +1328,7 @@
     # check that the issues were updated
     assert_nil Issue.find(2).assigned_to
   end
-  
+
   def test_post_bulk_update_should_allow_fixed_version_to_be_set_to_a_subproject
     @request.session[:user_id] = 2
 
@@ -1235,7 +1357,7 @@
     assert_response :redirect
     assert_redirected_to :controller => 'issues', :action => 'index', :project_id => Project.find(1).identifier
   end
-  
+
   def test_destroy_issue_with_no_time_entries
     assert_nil TimeEntry.find_by_issue_id(2)
     @request.session[:user_id] = 2
@@ -1269,7 +1391,7 @@
     assert_nil TimeEntry.find(1).issue_id
     assert_nil TimeEntry.find(2).issue_id
   end
-  
+
   def test_destroy_issues_and_reassign_time_entries_to_another_issue
     @request.session[:user_id] = 2
     post :destroy, :ids => [1, 3], :todo => 'reassign', :reassign_to_id => 2
@@ -1278,14 +1400,26 @@
     assert_equal 2, TimeEntry.find(1).issue_id
     assert_equal 2, TimeEntry.find(2).issue_id
   end
-  
+
   def test_destroy_issues_from_different_projects
     @request.session[:user_id] = 2
     post :destroy, :ids => [1, 2, 6], :todo => 'destroy'
     assert_redirected_to :controller => 'issues', :action => 'index'
     assert !(Issue.find_by_id(1) || Issue.find_by_id(2) || Issue.find_by_id(6))
   end
-  
+
+  def test_destroy_parent_and_child_issues
+    parent = Issue.generate!(:project_id => 1, :tracker_id => 1)
+    child = Issue.generate!(:project_id => 1, :tracker_id => 1, :parent_issue_id => parent.id)
+    assert child.is_descendant_of?(parent.reload)
+
+    @request.session[:user_id] = 2
+    assert_difference 'Issue.count', -2 do
+      post :destroy, :ids => [parent.id, child.id], :todo => 'destroy'
+    end
+    assert_response 302
+  end
+
   def test_default_search_scope
     get :index
     assert_tag :div, :attributes => {:id => 'quick-search'},
--- a/test/functional/.svn/text-base/journals_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/journals_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -5,12 +5,12 @@
 # modify it under the terms of the 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.
@@ -22,27 +22,28 @@
 class JournalsController; def rescue_action(e) raise e end; end
 
 class JournalsControllerTest < ActionController::TestCase
-  fixtures :projects, :users, :members, :member_roles, :roles, :issues, :journals, :journal_details, :enabled_modules
-  
+  fixtures :projects, :users, :members, :member_roles, :roles, :issues, :journals, :journal_details, :enabled_modules,
+    :trackers, :issue_statuses, :enumerations, :custom_fields, :custom_values, :custom_fields_projects
+
   def setup
     @controller = JournalsController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
   end
-  
+
   def test_index
     get :index, :project_id => 1
     assert_response :success
     assert_not_nil assigns(:journals)
     assert_equal 'application/atom+xml', @response.content_type
   end
-  
+
   def test_diff
     get :diff, :id => 3, :detail_id => 4
     assert_response :success
     assert_template 'diff'
-    
+
     assert_tag 'span',
       :attributes => {:class => 'diff_out'},
       :content => /removed/
@@ -50,14 +51,14 @@
       :attributes => {:class => 'diff_in'},
       :content => /added/
   end
-  
+
   def test_reply_to_issue
     @request.session[:user_id] = 2
     get :new, :id => 6
     assert_response :success
     assert_select_rjs :show, "update"
   end
-  
+
   def test_reply_to_issue_without_permission
     @request.session[:user_id] = 7
     get :new, :id => 6
@@ -80,7 +81,7 @@
       assert_select 'textarea'
     end
   end
-  
+
   def test_post_edit
     @request.session[:user_id] = 1
     xhr :post, :edit, :id => 2, :notes => 'Updated notes'
@@ -88,7 +89,7 @@
     assert_select_rjs :replace, 'journal-2-notes'
     assert_equal 'Updated notes', Journal.find(2).notes
   end
-  
+
   def test_post_edit_with_empty_notes
     @request.session[:user_id] = 1
     xhr :post, :edit, :id => 2, :notes => ''
--- a/test/functional/.svn/text-base/previews_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/previews_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,3 +1,20 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
 require File.expand_path('../../test_helper', __FILE__)
 
 class PreviewsControllerTest < ActionController::TestCase
@@ -18,6 +35,15 @@
     assert_template 'preview'
     assert_not_nil assigns(:notes)
   end
+  
+  def test_preview_journal_notes_for_update
+    @request.session[:user_id] = 2
+    post :issue, :project_id => '1', :id => 1, :notes => 'Foo'
+    assert_response :success
+    assert_template 'preview'
+    assert_not_nil assigns(:notes)
+    assert_tag :p, :content => 'Foo'
+  end
 
   def test_news
     get :news, :project_id => 1,
--- a/test/functional/.svn/text-base/projects_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/projects_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -33,13 +33,13 @@
     @request.session[:user_id] = nil
     Setting.default_language = 'en'
   end
-  
+
   def test_index
     get :index
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:projects)
-    
+
     assert_tag :ul, :child => {:tag => 'li',
                                :descendant => {:tag => 'a', :content => 'eCookbook'},
                                :child => { :tag => 'ul',
@@ -48,18 +48,18 @@
                                                            }
                                           }
                                }
-                               
+
     assert_no_tag :a, :content => /Private child of eCookbook/
   end
-  
+
   def test_index_atom
     get :index, :format => 'atom'
     assert_response :success
     assert_template 'common/feed.atom.rxml'
     assert_select 'feed>title', :text => 'Redmine: Latest projects'
-    assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_by(User.current))
+    assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_condition(User.current))
   end
-  
+
   context "#index" do
     context "by non-admin user with view_time_entries permission" do
       setup do
@@ -71,7 +71,7 @@
         assert_tag :a, :attributes => {:href => '/time_entries'}
       end
     end
-    
+
     context "by non-admin user without view_time_entries permission" do
       setup do
         Role.find(2).remove_permission! :view_time_entries
@@ -84,15 +84,15 @@
         assert_template 'index'
         assert_no_tag :a, :attributes => {:href => '/time_entries'}
       end
-    end 
+    end
   end
-  
+
   context "#new" do
     context "by admin user" do
       setup do
         @request.session[:user_id] = 1
       end
-      
+
       should "accept get" do
         get :new
         assert_response :success
@@ -121,7 +121,7 @@
         Role.find(1).add_permission! :add_subprojects
         @request.session[:user_id] = 2
       end
-      
+
       should "accept get" do
         get :new, :parent_id => 'ecookbook'
         assert_response :success
@@ -134,7 +134,7 @@
                                :child => {:tag => 'option', :attributes => {:value => ''}}
       end
     end
-    
+
   end
 
   context "POST :create" do
@@ -142,11 +142,11 @@
       setup do
         @request.session[:user_id] = 1
       end
-      
+
       should "create a new project" do
         post :create,
           :project => {
-            :name => "blog", 
+            :name => "blog",
             :description => "weblog",
             :homepage => 'http://weblog',
             :identifier => "blog",
@@ -158,11 +158,11 @@
             :enabled_module_names => ['issue_tracking', 'news', 'repository']
           }
         assert_redirected_to '/projects/blog/settings'
-        
+
         project = Project.find_by_name('blog')
         assert_kind_of Project, project
         assert project.active?
-        assert_equal 'weblog', project.description 
+        assert_equal 'weblog', project.description
         assert_equal 'http://weblog', project.homepage
         assert_equal true, project.is_public?
         assert_nil project.parent
@@ -171,9 +171,9 @@
         assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort
         assert project.issue_custom_fields.include?(IssueCustomField.find(9))
       end
-      
+
       should "create a new subproject" do
-        post :create, :project => { :name => "blog", 
+        post :create, :project => { :name => "blog",
                                  :description => "weblog",
                                  :identifier => "blog",
                                  :is_public => 1,
@@ -181,21 +181,21 @@
                                  :parent_id => 1
                                 }
         assert_redirected_to '/projects/blog/settings'
-        
+
         project = Project.find_by_name('blog')
         assert_kind_of Project, project
         assert_equal Project.find(1), project.parent
       end
     end
-    
+
     context "by non-admin user with add_project permission" do
       setup do
         Role.non_member.add_permission! :add_project
         @request.session[:user_id] = 9
       end
-      
+
       should "accept create a Project" do
-        post :create, :project => { :name => "blog", 
+        post :create, :project => { :name => "blog",
                                  :description => "weblog",
                                  :identifier => "blog",
                                  :is_public => 1,
@@ -203,24 +203,24 @@
                                  :tracker_ids => ['1', '3'],
                                  :enabled_module_names => ['issue_tracking', 'news', 'repository']
                                 }
-        
+
         assert_redirected_to '/projects/blog/settings'
-        
+
         project = Project.find_by_name('blog')
         assert_kind_of Project, project
-        assert_equal 'weblog', project.description 
+        assert_equal 'weblog', project.description
         assert_equal true, project.is_public?
         assert_equal [1, 3], project.trackers.map(&:id).sort
         assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort
-        
+
         # User should be added as a project member
         assert User.find(9).member_of?(project)
         assert_equal 1, project.members.size
       end
-      
+
       should "fail with parent_id" do
         assert_no_difference 'Project.count' do
-          post :create, :project => { :name => "blog", 
+          post :create, :project => { :name => "blog",
                                    :description => "weblog",
                                    :identifier => "blog",
                                    :is_public => 1,
@@ -234,16 +234,16 @@
         assert_not_nil project.errors.on(:parent_id)
       end
     end
-    
+
     context "by non-admin user with add_subprojects permission" do
       setup do
         Role.find(1).remove_permission! :add_project
         Role.find(1).add_permission! :add_subprojects
         @request.session[:user_id] = 2
       end
-      
+
       should "create a project with a parent_id" do
-        post :create, :project => { :name => "blog", 
+        post :create, :project => { :name => "blog",
                                  :description => "weblog",
                                  :identifier => "blog",
                                  :is_public => 1,
@@ -253,10 +253,10 @@
         assert_redirected_to '/projects/blog/settings'
         project = Project.find_by_name('blog')
       end
-      
+
       should "fail without parent_id" do
         assert_no_difference 'Project.count' do
-          post :create, :project => { :name => "blog", 
+          post :create, :project => { :name => "blog",
                                    :description => "weblog",
                                    :identifier => "blog",
                                    :is_public => 1,
@@ -268,11 +268,11 @@
         assert_kind_of Project, project
         assert_not_nil project.errors.on(:parent_id)
       end
-      
+
       should "fail with unauthorized parent_id" do
         assert !User.find(2).member_of?(Project.find(6))
         assert_no_difference 'Project.count' do
-          post :create, :project => { :name => "blog", 
+          post :create, :project => { :name => "blog",
                                    :description => "weblog",
                                    :identifier => "blog",
                                    :is_public => 1,
@@ -287,13 +287,29 @@
       end
     end
   end
-  
+
+  def test_create_should_preserve_modules_on_validation_failure
+    with_settings :default_projects_modules => ['issue_tracking', 'repository'] do
+      @request.session[:user_id] = 1
+      assert_no_difference 'Project.count' do
+        post :create, :project => {
+          :name => "blog",
+          :identifier => "",
+          :enabled_module_names => %w(issue_tracking news)
+        }
+      end
+      assert_response :success
+      project = assigns(:project)
+      assert_equal %w(issue_tracking news), project.enabled_module_names.sort
+    end
+  end
+
   def test_create_should_not_accept_get
     @request.session[:user_id] = 1
     get :create
     assert_response :method_not_allowed
   end
-  
+
   def test_show_by_id
     get :show, :id => 1
     assert_response :success
@@ -307,7 +323,7 @@
     assert_template 'show'
     assert_not_nil assigns(:project)
     assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
-    
+
     assert_tag 'li', :content => /Development status/
   end
 
@@ -317,10 +333,10 @@
     assert_response :success
     assert_template 'show'
     assert_not_nil assigns(:project)
-    
+
     assert_no_tag 'li', :content => /Development status/
   end
-  
+
   def test_show_should_not_fail_when_custom_values_are_nil
     project = Project.find_by_identifier('ecookbook')
     project.custom_values.first.update_attribute(:value, nil)
@@ -330,17 +346,17 @@
     assert_not_nil assigns(:project)
     assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
   end
-  
+
   def show_archived_project_should_be_denied
     project = Project.find_by_identifier('ecookbook')
     project.archive!
-    
+
     get :show, :id => 'ecookbook'
     assert_response 403
     assert_nil assigns(:project)
     assert_tag :tag => 'p', :content => /archived/
   end
-  
+
   def test_private_subprojects_hidden
     get :show, :id => 'ecookbook'
     assert_response :success
@@ -355,14 +371,14 @@
     assert_template 'show'
     assert_tag :tag => 'a', :content => /Private child/
   end
-  
+
   def test_settings
     @request.session[:user_id] = 2 # manager
     get :settings, :id => 1
     assert_response :success
     assert_template 'settings'
   end
-  
+
   def test_update
     @request.session[:user_id] = 2 # manager
     post :update, :id => 1, :project => {:name => 'Test changed name',
@@ -375,7 +391,7 @@
   def test_modules
     @request.session[:user_id] = 2
     Project.find(1).enabled_module_names = ['issue_tracking', 'news']
-    
+
     post :modules, :id => 1, :enabled_module_names => ['issue_tracking', 'repository', 'documents']
     assert_redirected_to '/projects/ecookbook/settings/modules'
     assert_equal ['documents', 'issue_tracking', 'repository'], Project.find(1).enabled_module_names.sort
@@ -386,7 +402,7 @@
     get :modules, :id => 1
     assert_response :method_not_allowed
   end
-  
+
   def test_get_destroy
     @request.session[:user_id] = 1 # admin
     get :destroy, :id => 1
@@ -401,14 +417,14 @@
     assert_redirected_to '/admin/projects'
     assert_nil Project.find_by_id(1)
   end
-  
+
   def test_archive
     @request.session[:user_id] = 1 # admin
     post :archive, :id => 1
     assert_redirected_to '/admin/projects'
     assert !Project.find(1).active?
   end
-  
+
   def test_unarchive
     @request.session[:user_id] = 1 # admin
     Project.find(1).archive
@@ -416,7 +432,7 @@
     assert_redirected_to '/admin/projects'
     assert Project.find(1).active?
   end
-  
+
   def test_project_breadcrumbs_should_be_limited_to_3_ancestors
     CustomField.delete_all
     parent = nil
@@ -427,12 +443,12 @@
       assert_tag :h1, :parent => { :attributes => {:id => 'header'}},
                       :children => { :count => [i, 3].min,
                                      :only => { :tag => 'a' } }
-                                     
+
       parent = p
     end
   end
 
-  def test_copy_with_project
+  def test_get_copy
     @request.session[:user_id] = 1 # admin
     get :copy, :id => 1
     assert_response :success
@@ -440,37 +456,61 @@
     assert assigns(:project)
     assert_equal Project.find(1).description, assigns(:project).description
     assert_nil assigns(:project).id
+
+    assert_tag :tag => 'input',
+      :attributes => {:name => 'project[enabled_module_names][]', :value => 'issue_tracking'}
   end
 
-  def test_copy_without_project
+  def test_get_copy_without_project
     @request.session[:user_id] = 1 # admin
     get :copy
     assert_response :redirect
     assert_redirected_to :controller => 'admin', :action => 'projects'
   end
 
-  context "POST :copy" do
-    should "TODO: test the rest of the method"
+  def test_post_copy_should_copy_requested_items
+    @request.session[:user_id] = 1 # admin
+    CustomField.delete_all
 
-    should "redirect to the project settings when successful" do
-      @request.session[:user_id] = 1 # admin
-      post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'}
-      assert_response :redirect
-      assert_redirected_to :controller => 'projects', :action => 'settings', :id => 'unique-copy'
+    assert_difference 'Project.count' do
+      post :copy, :id => 1,
+        :project => {
+          :name => 'Copy',
+          :identifier => 'unique-copy',
+          :tracker_ids => ['1', '2', '3', ''],
+          :enabled_module_names => %w(issue_tracking time_tracking)
+        },
+        :only => %w(issues versions)
     end
+    project = Project.find('unique-copy')
+    source = Project.find(1)
+    assert_equal %w(issue_tracking time_tracking), project.enabled_module_names.sort
+
+    assert_equal source.versions.count, project.versions.count, "All versions were not copied"
+    # issues assigned to a closed version won't be copied
+    assert_equal source.issues.select {|i| i.fixed_version.nil? || i.fixed_version.open?}.size,
+                 project.issues.count, "All issues were not copied"
+    assert_equal 0, project.members.count
+  end
+
+  def test_post_copy_should_redirect_to_settings_when_successful
+    @request.session[:user_id] = 1 # admin
+    post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'}
+    assert_response :redirect
+    assert_redirected_to :controller => 'projects', :action => 'settings', :id => 'unique-copy'
   end
 
   def test_jump_should_redirect_to_active_tab
     get :show, :id => 1, :jump => 'issues'
     assert_redirected_to '/projects/ecookbook/issues'
   end
-  
+
   def test_jump_should_not_redirect_to_inactive_tab
     get :show, :id => 3, :jump => 'documents'
     assert_response :success
     assert_template 'show'
   end
-  
+
   def test_jump_should_not_redirect_to_unknown_tab
     get :show, :id => 3, :jump => 'foobar'
     assert_response :success
@@ -486,13 +526,13 @@
   end
   # Don't use this hook now
   Redmine::Hook.clear_listeners
-  
+
   def test_hook_response
     Redmine::Hook.add_listener(ProjectBasedTemplate)
     get :show, :id => 1
     assert_tag :tag => 'link', :attributes => {:href => '/stylesheets/ecookbook.css'},
                                :parent => {:tag => 'head'}
-    
+
     Redmine::Hook.clear_listeners
   end
 end
--- a/test/functional/.svn/text-base/queries_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/queries_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -64,9 +64,9 @@
          :project_id => 'ecookbook', 
          :confirm => '1',
          :default_columns => '1',
-         :fields => ["status_id", "assigned_to_id"],
-         :operators => {"assigned_to_id" => "=", "status_id" => "o"},
-         :values => { "assigned_to_id" => ["1"], "status_id" => ["1"]},
+         :f => ["status_id", "assigned_to_id"],
+         :op => {"assigned_to_id" => "=", "status_id" => "o"},
+         :v => { "assigned_to_id" => ["1"], "status_id" => ["1"]},
          :query => {"name" => "test_new_project_public_query", "is_public" => "1"}
          
     q = Query.find_by_name('test_new_project_public_query')
@@ -101,7 +101,8 @@
          :fields => ["status_id", "assigned_to_id"],
          :operators => {"assigned_to_id" => "=", "status_id" => "o"},
          :values => { "assigned_to_id" => ["me"], "status_id" => ["1"]},
-         :query => {"name" => "test_new_global_private_query", "is_public" => "1", "column_names" => ["", "tracker", "subject", "priority", "category"]}
+         :query => {"name" => "test_new_global_private_query", "is_public" => "1"},
+         :c => ["", "tracker", "subject", "priority", "category"]
          
     q = Query.find_by_name('test_new_global_private_query')
     assert_redirected_to :controller => 'issues', :action => 'index', :project_id => nil, :query_id => q
--- a/test/functional/.svn/text-base/repositories_bazaar_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/repositories_bazaar_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -116,12 +116,12 @@
       get :diff, :id => 3, :rev => 3
       assert_response :success
       assert_template 'diff'
-      # Line 22 removed
+      # Line 11 removed
       assert_tag :tag => 'th',
-                 :content => /2/,
+                 :content => /11/,
                  :sibling => { :tag => 'td', 
-                               :attributes => { :class => /diff_in/ },
-                               :content => /Main purpose/ }
+                               :attributes => { :class => /diff_out/ },
+                               :content => /Display more information/ }
     end
     
     def test_annotate
--- a/test/functional/.svn/text-base/repositories_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/repositories_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -22,15 +22,17 @@
 class RepositoriesController; def rescue_action(e) raise e end; end
 
 class RepositoriesControllerTest < ActionController::TestCase
-  fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
-  
+  fixtures :projects, :users, :roles, :members, :member_roles,
+           :repositories, :issues, :issue_statuses, :changesets, :changes,
+           :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
+
   def setup
     @controller = RepositoriesController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
   end
-  
+
   def test_revisions
     get :revisions, :id => 1
     assert_response :success
@@ -44,7 +46,7 @@
     assert_not_nil assigns(:changeset)
     assert_equal "1", assigns(:changeset).revision
   end
-  
+
   def test_revision_with_before_nil_and_afer_normal
     get :revision, {:id => 1, :rev => 1}
     assert_response :success
@@ -56,24 +58,30 @@
         :child => { :tag => "a", :attributes => { :href => '/projects/ecookbook/repository/revisions/2'}
     }
   end
-  
+
   def test_graph_commits_per_month
     get :graph, :id => 1, :graph => 'commits_per_month'
     assert_response :success
     assert_equal 'image/svg+xml', @response.content_type
   end
-  
+
   def test_graph_commits_per_author
     get :graph, :id => 1, :graph => 'commits_per_author'
     assert_response :success
     assert_equal 'image/svg+xml', @response.content_type
   end
-  
+
   def test_committers
     @request.session[:user_id] = 2
     # add a commit with an unknown user
-    Changeset.create!(:repository => Project.find(1).repository, :committer => 'foo', :committed_on => Time.now, :revision => 100, :comments => 'Committed by foo.')
-    
+    Changeset.create!(
+        :repository => Project.find(1).repository,
+        :committer  => 'foo',
+        :committed_on => Time.now,
+        :revision => 100,
+        :comments => 'Committed by foo.'
+     )
+
     get :committers, :id => 1
     assert_response :success
     assert_template 'committers'
@@ -94,8 +102,13 @@
   def test_map_committers
     @request.session[:user_id] = 2
     # add a commit with an unknown user
-    c = Changeset.create!(:repository => Project.find(1).repository, :committer => 'foo', :committed_on => Time.now, :revision => 100, :comments => 'Committed by foo.')
-    
+    c = Changeset.create!(
+            :repository => Project.find(1).repository,
+            :committer  => 'foo',
+            :committed_on => Time.now,
+            :revision => 100,
+            :comments => 'Committed by foo.'
+          )
     assert_no_difference "Changeset.count(:conditions => 'user_id = 3')" do
       post :committers, :id => 1, :committers => { '0' => ['foo', '2'], '1' => ['dlopper', '3']}
       assert_redirected_to '/projects/ecookbook/repository/committers'
--- a/test/functional/.svn/text-base/repositories_cvs_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/repositories_cvs_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -39,24 +39,14 @@
     User.current = nil
 
     @project = Project.find(PRJ_ID)
-    @repository  = Repository::Cvs.create(:project => Project.find(PRJ_ID),
-                                          :root_url => REPOSITORY_PATH,
-                                          :url => MODULE_NAME,
+    @repository  = Repository::Cvs.create(:project      => Project.find(PRJ_ID),
+                                          :root_url     => REPOSITORY_PATH,
+                                          :url          => MODULE_NAME,
                                           :log_encoding => 'UTF-8')
     assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)
-    def test_show
-      @repository.fetch_changesets
-      @repository.reload
-      get :show, :id => PRJ_ID
-      assert_response :success
-      assert_template 'show'
-      assert_not_nil assigns(:entries)
-      assert_not_nil assigns(:changesets)
-    end
-    
     def test_browse_root
       @repository.fetch_changesets
       @repository.reload
@@ -65,14 +55,17 @@
       assert_template 'show'
       assert_not_nil assigns(:entries)
       assert_equal 3, assigns(:entries).size
-      
+
       entry = assigns(:entries).detect {|e| e.name == 'images'}
       assert_equal 'dir', entry.kind
 
       entry = assigns(:entries).detect {|e| e.name == 'README'}
       assert_equal 'file', entry.kind
+
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
     end
-    
+
     def test_browse_directory
       @repository.fetch_changesets
       @repository.reload
@@ -86,7 +79,7 @@
       assert_equal 'file', entry.kind
       assert_equal 'images/edit.png', entry.path
     end
-    
+
     def test_browse_at_given_revision
       @repository.fetch_changesets
       @repository.reload
@@ -96,17 +89,18 @@
       assert_not_nil assigns(:entries)
       assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
     end
-  
+
     def test_entry
       @repository.fetch_changesets
       @repository.reload
       get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'entry'
-      assert_no_tag :tag => 'td', :attributes => { :class => /line-code/},
-                                  :content => /before_filter/
+      assert_no_tag :tag => 'td',
+                    :attributes => { :class => /line-code/},
+                    :content => /before_filter/
     end
-    
+
     def test_entry_at_given_revision
       # changesets must be loaded
       @repository.fetch_changesets
@@ -115,18 +109,20 @@
       assert_response :success
       assert_template 'entry'
       # this line was removed in r3
-      assert_tag :tag => 'td', :attributes => { :class => /line-code/},
-                               :content => /before_filter/
+      assert_tag :tag => 'td',
+                 :attributes => { :class => /line-code/},
+                 :content => /before_filter/
     end
-    
+
     def test_entry_not_found
       @repository.fetch_changesets
       @repository.reload
       get :entry, :id => PRJ_ID, :path => ['sources', 'zzz.c']
-      assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
-                                :content => /The entry or revision was not found in the repository/
+      assert_tag :tag => 'p',
+                 :attributes => { :id => /errorExplanation/ },
+                 :content => /The entry or revision was not found in the repository/
     end
-  
+
     def test_entry_download
       @repository.fetch_changesets
       @repository.reload
@@ -143,7 +139,7 @@
       assert_not_nil assigns(:entry)
       assert_equal 'sources', assigns(:entry).name
     end
-    
+
     def test_diff
       @repository.fetch_changesets
       @repository.reload
@@ -151,11 +147,11 @@
       assert_response :success
       assert_template 'diff'
       assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_out' },
-                               :content => /watched.remove_watcher/
+                               :content => /before_filter :require_login/
       assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
-                               :content => /watched.remove_all_watcher/
+                               :content => /with one change/
     end
-                               
+
     def test_diff_new_files
       @repository.fetch_changesets
       @repository.reload
@@ -171,7 +167,7 @@
       assert_tag :tag => 'th', :attributes => { :class => 'filename' },
                                :content => /test\/images\/edit.png/
       assert_tag :tag => 'th', :attributes => { :class => 'filename' },
-                               :content => /test\/sources\/watchers_controller.rb/                        
+                               :content => /test\/sources\/watchers_controller.rb/
     end
 
     def test_annotate
@@ -181,23 +177,33 @@
       assert_response :success
       assert_template 'annotate'
       # 1.1 line
-      assert_tag :tag => 'th', :attributes => { :class => 'line-num' },
-                               :content => '18',
-                               :sibling => { :tag => 'td', :attributes => { :class => 'revision' },
-                                             :content => /1.1/,
-                                             :sibling => { :tag => 'td', :attributes => { :class => 'author' },
-                                                           :content => /LANG/
-                                           }
-                               }
+      assert_tag :tag => 'th',
+                 :attributes => { :class => 'line-num' },
+                 :content => '18',
+                 :sibling => {
+                   :tag => 'td',
+                   :attributes => { :class => 'revision' },
+                   :content => /1.1/,
+                   :sibling => {
+                      :tag => 'td',
+                      :attributes => { :class => 'author' },
+                      :content => /LANG/
+                        }
+                   }
       # 1.2 line
-      assert_tag :tag => 'th', :attributes => { :class => 'line-num' },
-                               :content => '32',
-                               :sibling => { :tag => 'td', :attributes => { :class => 'revision' },
-                                             :content => /1.2/,
-                                             :sibling => { :tag => 'td', :attributes => { :class => 'author' },
-                                                           :content => /LANG/
-                                           }
-                               }
+      assert_tag :tag => 'th',
+                 :attributes => { :class => 'line-num' },
+                 :content => '32',
+                 :sibling => {
+                     :tag => 'td',
+                     :attributes => { :class => 'revision' },
+                     :content => /1.2/,
+                     :sibling => {
+                        :tag => 'td',
+                        :attributes => { :class => 'author' },
+                        :content => /LANG/
+                        }
+                   }
     end
   else
     puts "CVS test repository NOT FOUND. Skipping functional tests !!!"
--- a/test/functional/.svn/text-base/repositories_darcs_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/repositories_darcs_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -41,16 +41,6 @@
   end
 
   if File.directory?(REPOSITORY_PATH)
-    def test_show
-      @repository.fetch_changesets
-      @repository.reload
-      get :show, :id => PRJ_ID
-      assert_response :success
-      assert_template 'show'
-      assert_not_nil assigns(:entries)
-      assert_not_nil assigns(:changesets)
-    end
-
     def test_browse_root
       @repository.fetch_changesets
       @repository.reload
--- a/test/functional/.svn/text-base/repositories_git_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/repositories_git_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -27,27 +27,34 @@
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
   REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
+  PRJ_ID     = 3
+  CHAR_1_HEX = "\xc3\x9c"
 
   def setup
+    @ruby19_non_utf8_pass =
+      (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
+
     @controller = RepositoriesController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
-    @repository = Repository::Git.create(:project => Project.find(3), :url => REPOSITORY_PATH)
+    @repository = Repository::Git.create(
+                      :project => Project.find(3),
+                      :url     => REPOSITORY_PATH,
+                      :path_encoding => 'ISO-8859-1'
+                      )
     assert @repository
+    @char_1        = CHAR_1_HEX.dup
+    if @char_1.respond_to?(:force_encoding)
+      @char_1.force_encoding('UTF-8')
+    end
   end
 
   if File.directory?(REPOSITORY_PATH)
-    def test_show
-      get :show, :id => 3
-      assert_response :success
-      assert_template 'show'
-      assert_not_nil assigns(:entries)
-      assert_not_nil assigns(:changesets)
-    end
-    
     def test_browse_root
-      get :show, :id => 3
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -61,10 +68,14 @@
       assert assigns(:entries).detect {|e| e.name == 'renamed_test.txt' && e.kind == 'file'}
       assert assigns(:entries).detect {|e| e.name == 'filemane with spaces.txt' && e.kind == 'file'}
       assert assigns(:entries).detect {|e| e.name == ' filename with a leading space.txt ' && e.kind == 'file'}
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
     end
 
     def test_browse_branch
-      get :show, :id => 3, :rev => 'test_branch'
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :rev => 'test_branch'
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -73,10 +84,31 @@
       assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
       assert assigns(:entries).detect {|e| e.name == 'test.txt' && e.kind == 'file'}
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
+    end
+
+    def test_browse_tag
+      @repository.fetch_changesets
+      @repository.reload
+       [
+        "tag00.lightweight",
+        "tag01.annotated",
+       ].each do |t1|
+        get :show, :id => PRJ_ID, :rev => t1
+        assert_response :success
+        assert_template 'show'
+        assert_not_nil assigns(:entries)
+        assigns(:entries).size > 0
+        assert_not_nil assigns(:changesets)
+        assigns(:changesets).size > 0
+      end
     end
 
     def test_browse_directory
-      get :show, :id => 3, :path => ['images']
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -85,43 +117,71 @@
       assert_not_nil entry
       assert_equal 'file', entry.kind
       assert_equal 'images/edit.png', entry.path
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
     end
-    
+
     def test_browse_at_given_revision
-      get :show, :id => 3, :path => ['images'], :rev => '7234cb2750b63f47bff735edc50a1c0a433c2518'
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images'],
+          :rev => '7234cb2750b63f47bff735edc50a1c0a433c2518'
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
       assert_equal ['delete.png'], assigns(:entries).collect(&:name)
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
     end
 
     def test_changes
-      get :changes, :id => 3, :path => ['images', 'edit.png']
+      get :changes, :id => PRJ_ID, :path => ['images', 'edit.png']
       assert_response :success
       assert_template 'changes'
       assert_tag :tag => 'h2', :content => 'edit.png'
     end
-    
+
     def test_entry_show
-      get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb']
+      get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'entry'
       # Line 19
       assert_tag :tag => 'th',
-                 :content => /11/,
-                 :attributes => { :class => /line-num/ },
+                 :content => '11',
+                 :attributes => { :class => 'line-num' },
                  :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
     end
-    
+
+    def test_entry_show_latin_1
+      if @ruby19_non_utf8_pass
+        puts_ruby19_non_utf8_pass()
+      else
+        with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+          ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1|
+            get :entry, :id => PRJ_ID,
+                :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
+            assert_response :success
+            assert_template 'entry'
+            assert_tag :tag => 'th',
+                   :content => '1',
+                   :attributes => { :class => 'line-num' },
+                   :sibling => { :tag => 'td',
+                                 :content => /test-#{@char_1}.txt/ }
+          end
+        end
+      end
+    end
+
     def test_entry_download
-      get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
+      get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'],
+          :format => 'raw'
       assert_response :success
       # File content
       assert @response.body.include?('WITHOUT ANY WARRANTY')
     end
-  
+
     def test_directory_entry
-      get :entry, :id => 3, :path => ['sources']
+      get :entry, :id => PRJ_ID, :path => ['sources']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entry)
@@ -131,15 +191,14 @@
     def test_diff
       @repository.fetch_changesets
       @repository.reload
-
       # Full diff of changeset 2f9c0091
-      get :diff, :id => 3, :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
+      get :diff, :id => PRJ_ID, :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
       assert_response :success
       assert_template 'diff'
       # Line 22 removed
       assert_tag :tag => 'th',
                  :content => /22/,
-                 :sibling => { :tag => 'td', 
+                 :sibling => { :tag => 'td',
                                :attributes => { :class => /diff_out/ },
                                :content => /def remove/ }
       assert_tag :tag => 'h2', :content => /2f9c0091/
@@ -148,49 +207,109 @@
     def test_diff_two_revs
       @repository.fetch_changesets
       @repository.reload
-
-      get :diff, :id => 3, :rev    => '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
-                           :rev_to => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
+      get :diff, :id => PRJ_ID,
+          :rev    => '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
+          :rev_to => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
       assert_response :success
       assert_template 'diff'
-
       diff = assigns(:diff)
       assert_not_nil diff
       assert_tag :tag => 'h2', :content => /2f9c0091:61b685fb/
     end
 
+    def test_diff_latin_1
+      if @ruby19_non_utf8_pass
+        puts_ruby19_non_utf8_pass()
+      else
+        with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+          ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1|
+            get :diff, :id => PRJ_ID, :rev => r1
+            assert_response :success
+            assert_template 'diff'
+            assert_tag :tag => 'thead',
+                       :descendant => {
+                         :tag => 'th',
+                         :attributes => { :class => 'filename' } ,
+                         :content => /latin-1-dir\/test-#{@char_1}.txt/ ,
+                        },
+                       :sibling => {
+                         :tag => 'tbody',
+                         :descendant => {
+                            :tag => 'td',
+                            :attributes => { :class => /diff_in/ },
+                            :content => /test-#{@char_1}.txt/
+                         }
+                       }
+          end
+        end
+      end
+    end
+
     def test_annotate
-      get :annotate, :id => 3, :path => ['sources', 'watchers_controller.rb']
+      get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'annotate'
       # Line 23, changeset 2f9c0091
-      assert_tag :tag => 'th', :content => /24/,
-                 :sibling => { :tag => 'td', :child => { :tag => 'a', :content => /2f9c0091/ } },
-                 :sibling => { :tag => 'td', :content => /jsmith/ },
+      assert_tag :tag => 'th', :content => '24',
+                 :sibling => {
+                    :tag => 'td',
+                    :child => {
+                       :tag => 'a',
+                       :content => /2f9c0091c754a91af7a9c478e36556b4bde8dcf7/
+                       }
+                    },
+                 :sibling => { :tag => 'td', :content => /jsmith/ }
+      assert_tag :tag => 'th', :content => '24',
+                 :sibling => {
+                    :tag => 'td',
+                    :child => {
+                       :tag => 'a',
+                       :content => /2f9c0091c754a91af7a9c478e36556b4bde8dcf7/
+                       }
+                    },
                  :sibling => { :tag => 'td', :content => /watcher =/ }
     end
 
     def test_annotate_at_given_revision
       @repository.fetch_changesets
       @repository.reload
-      get :annotate, :id => 3, :rev => 'deff7', :path => ['sources', 'watchers_controller.rb']
+      get :annotate, :id => PRJ_ID, :rev => 'deff7',
+          :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'annotate'
       assert_tag :tag => 'h2', :content => /@ deff712f/
     end
 
     def test_annotate_binary_file
-      get :annotate, :id => 3, :path => ['images', 'edit.png']
+      get :annotate, :id => PRJ_ID, :path => ['images', 'edit.png']
       assert_response 500
       assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
-                                :content => /can not be annotated/
+                              :content => /cannot be annotated/
+    end
+
+    def test_annotate_latin_1
+      if @ruby19_non_utf8_pass
+        puts_ruby19_non_utf8_pass()
+      else
+        with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+          ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1|
+            get :annotate, :id => PRJ_ID,
+                :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
+            assert_tag :tag => 'th',
+                       :content => '1',
+                       :attributes => { :class => 'line-num' },
+                       :sibling => { :tag => 'td',
+                                     :content => /test-#{@char_1}.txt/ }
+          end
+        end
+      end
     end
 
     def test_revision
       @repository.fetch_changesets
       @repository.reload
       ['61b685fbe55ab05b5ac68402d5720c1a6ac973d1', '61b685f'].each do |r|
-        get :revision, :id => 3, :rev => r
+        get :revision, :id => PRJ_ID, :rev => r
         assert_response :success
         assert_template 'revision'
       end
@@ -200,11 +319,19 @@
       @repository.fetch_changesets
       @repository.reload
       ['', ' ', nil].each do |r|
-        get :revision, :id => 3, :rev => r
+        get :revision, :id => PRJ_ID, :rev => r
         assert_response 404
         assert_error_tag :content => /was not found/
       end
     end
+
+    private
+
+    def puts_ruby19_non_utf8_pass
+      puts "TODO: This test fails in Ruby 1.9 " +
+           "and Encoding.default_external is not UTF-8. " +
+           "Current value is '#{Encoding.default_external.to_s}'"
+    end
   else
     puts "Git test repository NOT FOUND. Skipping functional tests !!!"
     def test_fake; assert true end
--- a/test/functional/.svn/text-base/repositories_mercurial_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/repositories_mercurial_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -25,29 +25,48 @@
   fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
 
   # No '..' in the repository path
-  REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
+  REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') +
+                       '/tmp/test/mercurial_repository'
+  CHAR_1_HEX = "\xc3\x9c"
+  PRJ_ID     = 3
+
+  ruby19_non_utf8_pass =
+     (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
 
   def setup
     @controller = RepositoriesController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
-    @repository = Repository::Mercurial.create(:project => Project.find(3), :url => REPOSITORY_PATH)
+    @repository = Repository::Mercurial.create(
+                      :project => Project.find(PRJ_ID),
+                      :url     => REPOSITORY_PATH,
+                      :path_encoding => 'ISO-8859-1'
+                      )
     assert @repository
     @diff_c_support = true
+    @char_1        = CHAR_1_HEX.dup
+    @tag_char_1    = "tag-#{CHAR_1_HEX}-00"
+    @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
+    @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
+    if @char_1.respond_to?(:force_encoding)
+      @char_1.force_encoding('UTF-8')
+      @tag_char_1.force_encoding('UTF-8')
+      @branch_char_0.force_encoding('UTF-8')
+      @branch_char_1.force_encoding('UTF-8')
+    end
   end
 
-  if File.directory?(REPOSITORY_PATH)
-    def test_show
-      get :show, :id => 3
-      assert_response :success
-      assert_template 'show'
-      assert_not_nil assigns(:entries)
-      assert_not_nil assigns(:changesets)
-    end
-
+  if ruby19_non_utf8_pass
+    puts "TODO: Mercurial functional test fails in Ruby 1.9 " +
+         "and Encoding.default_external is not UTF-8. " +
+         "Current value is '#{Encoding.default_external.to_s}'"
+    def test_fake; assert true end
+  elsif File.directory?(REPOSITORY_PATH)
     def test_show_root
-      get :show, :id => 3
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -55,10 +74,14 @@
       assert assigns(:entries).detect {|e| e.name == 'images'  && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'README'  && e.kind == 'file'}
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
     end
 
     def test_show_directory
-      get :show, :id => 3, :path => ['images']
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -67,43 +90,110 @@
       assert_not_nil entry
       assert_equal 'file', entry.kind
       assert_equal 'images/edit.png', entry.path
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
     end
 
     def test_show_at_given_revision
+      @repository.fetch_changesets
+      @repository.reload
       [0, '0', '0885933ad4f6'].each do |r1|
-        get :show, :id => 3, :path => ['images'], :rev => r1
+        get :show, :id => PRJ_ID, :path => ['images'], :rev => r1
         assert_response :success
         assert_template 'show'
         assert_not_nil assigns(:entries)
         assert_equal ['delete.png'], assigns(:entries).collect(&:name)
+        assert_not_nil assigns(:changesets)
+        assigns(:changesets).size > 0
       end
     end
 
     def test_show_directory_sql_escape_percent
+      @repository.fetch_changesets
+      @repository.reload
       [13, '13', '3a330eb32958'].each do |r1|
-        get :show, :id => 3, :path => ['sql_escape', 'percent%dir'], :rev => r1
+        get :show, :id => PRJ_ID, :path => ['sql_escape', 'percent%dir'],
+            :rev => r1
         assert_response :success
         assert_template 'show'
 
         assert_not_nil assigns(:entries)
-        assert_equal ['percent%file1.txt', 'percentfile1.txt'], assigns(:entries).collect(&:name)
+        assert_equal ['percent%file1.txt', 'percentfile1.txt'],
+                     assigns(:entries).collect(&:name)
         changesets = assigns(:changesets)
+        assert_not_nil changesets
+        assigns(:changesets).size > 0
+        assert_equal %w(13 11 10 9), changesets.collect(&:revision)
+      end
+    end
 
-        ## This is not yet implemented.
-        # assert_not_nil changesets
-        # assert_equal %w(13 11 10 9), changesets.collect(&:revision)
+    def test_show_directory_latin_1_path
+      @repository.fetch_changesets
+      @repository.reload
+      [21, '21', 'adf805632193'].each do |r1|
+        get :show, :id => PRJ_ID, :path => ['latin-1-dir'], :rev => r1
+        assert_response :success
+        assert_template 'show'
+
+        assert_not_nil assigns(:entries)
+        assert_equal ["make-latin-1-file.rb",
+                      "test-#{@char_1}-1.txt",
+                      "test-#{@char_1}-2.txt",
+                      "test-#{@char_1}.txt"], assigns(:entries).collect(&:name)
+        changesets = assigns(:changesets)
+        assert_not_nil changesets
+        assert_equal %w(21 20 19 18 17), changesets.collect(&:revision)
+      end
+    end
+
+    def test_show_branch
+      @repository.fetch_changesets
+      @repository.reload
+       [
+          'default',
+          @branch_char_1,
+          'branch (1)[2]&,%.-3_4',
+          @branch_char_0,
+          'test_branch.latin-1',
+          'test-branch-00',
+      ].each do |bra|
+        get :show, :id => PRJ_ID, :rev => bra
+        assert_response :success
+        assert_template 'show'
+        assert_not_nil assigns(:entries)
+        assert assigns(:entries).size > 0
+        assert_not_nil assigns(:changesets)
+        assigns(:changesets).size > 0
+      end
+    end
+
+    def test_show_tag
+      @repository.fetch_changesets
+      @repository.reload
+       [
+        @tag_char_1,
+        'tag_test.00',
+        'tag-init-revision'
+      ].each do |tag|
+        get :show, :id => PRJ_ID, :rev => tag
+        assert_response :success
+        assert_template 'show'
+        assert_not_nil assigns(:entries)
+        assert assigns(:entries).size > 0
+        assert_not_nil assigns(:changesets)
+        assigns(:changesets).size > 0
       end
     end
 
     def test_changes
-      get :changes, :id => 3, :path => ['images', 'edit.png']
+      get :changes, :id => PRJ_ID, :path => ['images', 'edit.png']
       assert_response :success
       assert_template 'changes'
       assert_tag :tag => 'h2', :content => 'edit.png'
     end
-    
+
     def test_entry_show
-      get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb']
+      get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'entry'
       # Line 10
@@ -112,37 +202,72 @@
                  :attributes => { :class => 'line-num' },
                  :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
     end
-    
+
+    def test_entry_show_latin_1_path
+      [21, '21', 'adf805632193'].each do |r1|
+        get :entry, :id => PRJ_ID,
+            :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
+        assert_response :success
+        assert_template 'entry'
+        assert_tag :tag => 'th',
+                 :content => '1',
+                 :attributes => { :class => 'line-num' },
+                 :sibling => { :tag => 'td',
+                               :content => /Mercurial is a distributed version control system/ }
+      end
+    end
+
+    def test_entry_show_latin_1_contents
+      with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+        [27, '27', '7bbf4c738e71'].each do |r1|
+          get :entry, :id => PRJ_ID,
+              :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
+          assert_response :success
+          assert_template 'entry'
+          assert_tag :tag => 'th',
+                 :content => '1',
+                 :attributes => { :class => 'line-num' },
+                 :sibling => { :tag => 'td',
+                               :content => /test-#{@char_1}.txt/ }
+        end
+      end
+    end
+
     def test_entry_download
-      get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
+      get :entry, :id => PRJ_ID,
+          :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
       assert_response :success
       # File content
       assert @response.body.include?('WITHOUT ANY WARRANTY')
     end
 
+    def test_entry_binary_force_download
+      get :entry, :id => PRJ_ID, :rev => 1, :path => ['images', 'edit.png']
+      assert_response :success
+      assert_equal 'image/png', @response.content_type
+    end
+
     def test_directory_entry
-      get :entry, :id => 3, :path => ['sources']
+      get :entry, :id => PRJ_ID, :path => ['sources']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entry)
       assert_equal 'sources', assigns(:entry).name
     end
-    
+
     def test_diff
       @repository.fetch_changesets
       @repository.reload
-
       [4, '4', 'def6d2f1254a'].each do |r1|
         # Full diff of changeset 4
-        get :diff, :id => 3, :rev => r1
+        get :diff, :id => PRJ_ID, :rev => r1
         assert_response :success
         assert_template 'diff'
-
         if @diff_c_support
           # Line 22 removed
           assert_tag :tag => 'th',
                      :content => '22',
-                     :sibling => { :tag => 'td', 
+                     :sibling => { :tag => 'td',
                                    :attributes => { :class => /diff_out/ },
                                    :content => /def remove/ }
           assert_tag :tag => 'h2', :content => /4:def6d2f1254a/
@@ -153,11 +278,10 @@
     def test_diff_two_revs
       @repository.fetch_changesets
       @repository.reload
-
       [2, '400bb8672109', '400', 400].each do |r1|
         [4, 'def6d2f1254a'].each do |r2|
-          get :diff, :id => 3, :rev    => r1,
-                               :rev_to => r2
+          get :diff, :id => PRJ_ID, :rev    => r1,
+                                    :rev_to => r2
           assert_response :success
           assert_template 'diff'
 
@@ -168,8 +292,32 @@
       end
     end
 
+    def test_diff_latin_1_path
+      with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+        [21, 'adf805632193'].each do |r1|
+          get :diff, :id => PRJ_ID, :rev => r1
+          assert_response :success
+          assert_template 'diff'
+          assert_tag :tag => 'thead',
+                     :descendant => {
+                       :tag => 'th',
+                       :attributes => { :class => 'filename' } ,
+                       :content => /latin-1-dir\/test-#{@char_1}-2.txt/ ,
+                      },
+                     :sibling => {
+                       :tag => 'tbody',
+                       :descendant => {
+                          :tag => 'td',
+                          :attributes => { :class => /diff_in/ },
+                          :content => /It is written in Python/
+                       }
+                     }
+        end
+      end
+    end
+
     def test_annotate
-      get :annotate, :id => 3, :path => ['sources', 'watchers_controller.rb']
+      get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'annotate'
       # Line 23, revision 4:def6d2f1254a
@@ -201,18 +349,66 @@
       @repository.fetch_changesets
       @repository.reload
       [2, '400bb8672109', '400', 400].each do |r1|
-        get :annotate, :id => 3, :rev => r1, :path => ['sources', 'watchers_controller.rb']
+        get :annotate, :id => PRJ_ID, :rev => r1,
+            :path => ['sources', 'watchers_controller.rb']
         assert_response :success
         assert_template 'annotate'
         assert_tag :tag => 'h2', :content => /@ 2:400bb8672109/
       end
     end
 
+    def test_annotate_latin_1_path
+      [21, '21', 'adf805632193'].each do |r1|
+        get :annotate, :id => PRJ_ID,
+            :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
+        assert_response :success
+        assert_template 'annotate'
+        assert_tag :tag => 'th',
+                 :content => '1',
+                 :attributes => { :class => 'line-num' },
+                 :sibling =>
+                       {
+                         :tag => 'td',
+                         :attributes => { :class => 'revision' },
+                         :child => { :tag => 'a', :content => '20:709858aafd1b' }
+                       }
+        assert_tag :tag => 'th',
+                 :content => '1',
+                 :attributes => { :class => 'line-num' },
+                 :sibling =>
+                       {
+                          :tag     => 'td'    ,
+                          :content => 'jsmith' ,
+                          :attributes => { :class   => 'author' },
+                        }
+        assert_tag :tag => 'th',
+                 :content => '1',
+                 :attributes => { :class => 'line-num' },
+                 :sibling => { :tag => 'td',
+                               :content => /Mercurial is a distributed version control system/ }
+
+      end
+    end
+
+    def test_annotate_latin_1_contents
+      with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+        [27, '7bbf4c738e71'].each do |r1|
+          get :annotate, :id => PRJ_ID,
+              :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
+          assert_tag :tag => 'th',
+                     :content => '1',
+                     :attributes => { :class => 'line-num' },
+                     :sibling => { :tag => 'td',
+                                   :content => /test-#{@char_1}.txt/ }
+        end
+      end
+    end
+
     def test_empty_revision
       @repository.fetch_changesets
       @repository.reload
       ['', ' ', nil].each do |r|
-        get :revision, :id => 3, :rev => r
+        get :revision, :id => PRJ_ID, :rev => r
         assert_response 404
         assert_error_tag :content => /was not found/
       end
--- a/test/functional/.svn/text-base/repositories_subversion_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/repositories_subversion_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -37,7 +37,7 @@
 
     @project = Project.find(PRJ_ID)
     @repository = Repository::Subversion.create(:project => @project,
-               :url => "file://#{self.class.repository_path('subversion')}")
+               :url => self.class.subversion_repository_url)
     assert @repository
   end
 
@@ -51,7 +51,7 @@
       assert_not_nil assigns(:entries)
       assert_not_nil assigns(:changesets)
     end
-    
+
     def test_browse_root
       @repository.fetch_changesets
       @repository.reload
@@ -62,7 +62,7 @@
       entry = assigns(:entries).detect {|e| e.name == 'subversion_test'}
       assert_equal 'dir', entry.kind
     end
-    
+
     def test_browse_directory
       @repository.fetch_changesets
       @repository.reload
@@ -70,7 +70,8 @@
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
-      assert_equal ['[folder_with_brackets]', 'folder', '.project', 'helloworld.c', 'textfile.txt'], assigns(:entries).collect(&:name)
+      assert_equal ['[folder_with_brackets]', 'folder', '.project', 'helloworld.c', 'textfile.txt'],
+                   assigns(:entries).collect(&:name)
       entry = assigns(:entries).detect {|e| e.name == 'helloworld.c'}
       assert_equal 'file', entry.kind
       assert_equal 'subversion_test/helloworld.c', entry.path
@@ -84,20 +85,21 @@
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
-      assert_equal ['folder', '.project', 'helloworld.c', 'helloworld.rb', 'textfile.txt'], assigns(:entries).collect(&:name)
+      assert_equal ['folder', '.project', 'helloworld.c', 'helloworld.rb', 'textfile.txt'],
+                   assigns(:entries).collect(&:name)
     end
-    
+
     def test_file_changes
       @repository.fetch_changesets
       @repository.reload
       get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder', 'helloworld.rb' ]
       assert_response :success
       assert_template 'changes'
-      
+
       changesets = assigns(:changesets)
       assert_not_nil changesets
       assert_equal %w(6 3 2), changesets.collect(&:revision)
-      
+
       # svn properties displayed with svn >= 1.5 only
       if Redmine::Scm::Adapters::SubversionAdapter.client_version_above?([1, 5, 0])
         assert_not_nil assigns(:properties)
@@ -115,12 +117,12 @@
       get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder' ]
       assert_response :success
       assert_template 'changes'
-      
+
       changesets = assigns(:changesets)
       assert_not_nil changesets
       assert_equal %w(10 9 7 6 5 2), changesets.collect(&:revision)
     end
-      
+
     def test_entry
       @repository.fetch_changesets
       @repository.reload
@@ -128,7 +130,7 @@
       assert_response :success
       assert_template 'entry'
     end
-      
+
     def test_entry_should_send_if_too_big
       @repository.fetch_changesets
       @repository.reload
@@ -140,7 +142,7 @@
         assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition']
       end
     end
-    
+
     def test_entry_at_given_revision
       @repository.fetch_changesets
       @repository.reload
@@ -151,7 +153,7 @@
       assert_tag :tag => 'td', :attributes => { :class => /line-code/},
                                :content => /Here's the code/
     end
-    
+
     def test_entry_not_found
       @repository.fetch_changesets
       @repository.reload
@@ -159,7 +161,7 @@
       assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
                                 :content => /The entry or revision was not found in the repository/
     end
-  
+
     def test_entry_download
       @repository.fetch_changesets
       @repository.reload
@@ -168,7 +170,7 @@
       assert_template ''
       assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition']
     end
-    
+
     def test_directory_entry
       @repository.fetch_changesets
       @repository.reload
@@ -178,7 +180,7 @@
       assert_not_nil assigns(:entry)
       assert_equal 'folder', assigns(:entry).name
     end
-    
+
     # TODO: this test needs fixtures.
     def test_revision
       @repository.fetch_changesets
@@ -189,17 +191,17 @@
       assert_tag :tag => 'ul',
                  :child => { :tag => 'li',
                              # link to the entry at rev 2
-                             :child => { :tag => 'a', 
+                             :child => { :tag => 'a',
                                          :attributes => {:href => '/projects/ecookbook/repository/revisions/2/entry/test/some/path/in/the/repo'},
                                          :content => 'repo',
                                          # link to partial diff
-                                         :sibling =>  { :tag => 'a', 
-                                                        :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/test/some/path/in/the/repo' } 
+                                         :sibling =>  { :tag => 'a',
+                                                        :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/test/some/path/in/the/repo' }
                                                        }
                                         }
                             }
     end
-    
+
     def test_invalid_revision
       @repository.fetch_changesets
       @repository.reload
@@ -229,24 +231,24 @@
       r = Project.find(1).repository
       # Changes repository url to a subdirectory
       r.update_attribute :url, (r.url + '/test/some')
-      
+
       get :revision, :id => 1, :rev => 2
       assert_response :success
       assert_template 'revision'
       assert_tag :tag => 'ul',
                  :child => { :tag => 'li',
                              # link to the entry at rev 2
-                             :child => { :tag => 'a', 
+                             :child => { :tag => 'a',
                                          :attributes => {:href => '/projects/ecookbook/repository/revisions/2/entry/path/in/the/repo'},
                                          :content => 'repo',
                                          # link to partial diff
-                                         :sibling =>  { :tag => 'a', 
-                                                        :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/path/in/the/repo' } 
+                                         :sibling =>  { :tag => 'a',
+                                                        :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/path/in/the/repo' }
                                                        }
                                         }
                             }
     end
-    
+
     def test_revision_diff
       @repository.fetch_changesets
       @repository.reload
@@ -263,7 +265,7 @@
       get :diff, :id => PRJ_ID, :rev => 6, :rev_to => 2, :path => ['subversion_test', 'folder']
       assert_response :success
       assert_template 'diff'
-      
+
       diff = assigns(:diff)
       assert_not_nil diff
       # 2 files modified
@@ -271,7 +273,7 @@
 
       assert_tag :tag => 'h2', :content => /2:6/
     end
-    
+
     def test_annotate
       @repository.fetch_changesets
       @repository.reload
--- a/test/functional/.svn/text-base/roles_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/roles_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -22,7 +22,7 @@
 class RolesController; def rescue_action(e) raise e end; end
 
 class RolesControllerTest < ActionController::TestCase
-  fixtures :roles, :users, :members, :member_roles, :workflows
+  fixtures :roles, :users, :members, :member_roles, :workflows, :trackers
   
   def setup
     @controller = RolesController.new
@@ -114,7 +114,7 @@
   def test_destroy_role_in_use
     post :destroy, :id => 1
     assert_redirected_to '/roles'
-    assert flash[:error] == 'This role is in use and can not be deleted.'
+    assert flash[:error] == 'This role is in use and cannot be deleted.'
     assert_not_nil Role.find_by_id(1)
   end
   
--- a/test/functional/.svn/text-base/search_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/search_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -9,14 +9,14 @@
            :issues, :trackers, :issue_statuses,
            :custom_fields, :custom_values,
            :repositories, :changesets
-  
+
   def setup
     @controller = SearchController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
   end
-  
+
   def test_search_for_projects
     get :index
     assert_response :success
@@ -27,35 +27,35 @@
     assert_template 'index'
     assert assigns(:results).include?(Project.find(1))
   end
-  
+
   def test_search_all_projects
     get :index, :q => 'recipe subproject commit', :submit => 'Search'
     assert_response :success
     assert_template 'index'
-    
+
     assert assigns(:results).include?(Issue.find(2))
     assert assigns(:results).include?(Issue.find(5))
     assert assigns(:results).include?(Changeset.find(101))
     assert_tag :dt, :attributes => { :class => /issue/ },
                     :child => { :tag => 'a',  :content => /Add ingredients categories/ },
                     :sibling => { :tag => 'dd', :content => /should be classified by categories/ }
-    
+
     assert assigns(:results_by_type).is_a?(Hash)
     assert_equal 5, assigns(:results_by_type)['changesets']
     assert_tag :a, :content => 'Changesets (5)'
   end
-  
+
   def test_search_issues
     get :index, :q => 'issue', :issues => 1
     assert_response :success
     assert_template 'index'
-    
+
     assert assigns(:results).include?(Issue.find(8))
     assert assigns(:results).include?(Issue.find(5))
     assert_tag :dt, :attributes => { :class => /issue closed/ },
                     :child => { :tag => 'a',  :content => /Closed/ }
   end
-  
+
   def test_search_project_and_subprojects
     get :index, :id => 1, :q => 'recipe subproject', :scope => 'subprojects', :submit => 'Search'
     assert_response :success
@@ -66,17 +66,17 @@
 
   def test_search_without_searchable_custom_fields
     CustomField.update_all "searchable = #{ActiveRecord::Base.connection.quoted_false}"
-    
+
     get :index, :id => 1
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:project)
-    
+
     get :index, :id => 1, :q => "can"
     assert_response :success
     assert_template 'index'
   end
-  
+
   def test_search_with_searchable_custom_fields
     get :index, :id => 1, :q => "stringforcustomfield"
     assert_response :success
@@ -85,7 +85,7 @@
     assert_equal 1, results.size
     assert results.include?(Issue.find(7))
   end
-  
+
   def test_search_all_words
     # 'all words' is on by default
     get :index, :id => 1, :q => 'recipe updating saving'
@@ -94,7 +94,7 @@
     assert_equal 1, results.size
     assert results.include?(Issue.find(3))
   end
-  
+
   def test_search_one_of_the_words
     get :index, :id => 1, :q => 'recipe updating saving', :submit => 'Search'
     results = assigns(:results)
@@ -116,7 +116,7 @@
     assert_not_nil results
     assert_equal 2, results.size
   end
-  
+
   def test_search_with_invalid_project_id
     get :index, :id => 195, :q => 'recipe'
     assert_response 404
@@ -127,7 +127,7 @@
     # issue of a public project
     get :index, :q => "3"
     assert_redirected_to '/issues/3'
-    
+
     # issue of a private project
     get :index, :q => "4"
     assert_response :success
@@ -139,7 +139,7 @@
     assert_response :success
     assert_template 'index'
   end
-  
+
   def test_tokens_with_quotes
     get :index, :id => 1, :q => '"good bye" hello "bye bye"'
     assert_equal ["good bye", "hello", "bye bye"], assigns(:tokens)
--- a/test/functional/.svn/text-base/settings_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/settings_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -23,7 +23,7 @@
 
 class SettingsControllerTest < ActionController::TestCase
   fixtures :users
-  
+
   def setup
     @controller = SettingsController.new
     @request    = ActionController::TestRequest.new
@@ -31,19 +31,19 @@
     User.current = nil
     @request.session[:user_id] = 1 # admin
   end
-  
+
   def test_index
     get :index
     assert_response :success
     assert_template 'edit'
   end
-  
+
   def test_get_edit
     get :edit
     assert_response :success
     assert_template 'edit'
   end
-  
+
   def test_post_edit_notifications
     post :edit, :settings => {:mail_from => 'functional@test.foo',
                               :bcc_recipients  => '0',
--- a/test/functional/.svn/text-base/sys_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/sys_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -17,12 +17,13 @@
 
 require File.expand_path('../../test_helper', __FILE__)
 require 'sys_controller'
+require 'mocha'
 
 # Re-raise errors caught by the controller.
 class SysController; def rescue_action(e) raise e end; end
 
 class SysControllerTest < ActionController::TestCase
-  fixtures :projects, :repositories
+  fixtures :projects, :repositories, :enabled_modules
   
   def setup
     @controller = SysController.new
@@ -55,11 +56,13 @@
   end
   
   def test_fetch_changesets
+    Repository::Subversion.any_instance.expects(:fetch_changesets).returns(true)
     get :fetch_changesets
     assert_response :success
   end
   
   def test_fetch_changesets_one_project
+    Repository::Subversion.any_instance.expects(:fetch_changesets).returns(true)
     get :fetch_changesets, :id => 'ecookbook'
     assert_response :success
   end
--- a/test/functional/.svn/text-base/time_entry_reports_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/time_entry_reports_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -4,16 +4,20 @@
 class TimeEntryReportsControllerTest < ActionController::TestCase
   fixtures :projects, :enabled_modules, :roles, :members, :member_roles, :issues, :time_entries, :users, :trackers, :enumerations, :issue_statuses, :custom_fields, :custom_values
 
-  def test_report_no_criteria
-    get :report, :project_id => 1
+  def test_report_at_project_level
+    get :report, :project_id => 'ecookbook'
     assert_response :success
     assert_template 'report'
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/time_entries/report", :id => 'query_form'}
   end
   
   def test_report_all_projects
     get :report
     assert_response :success
     assert_template 'report'
+    assert_tag :form,
+      :attributes => {:action => "/time_entries/report", :id => 'query_form'}
   end
   
   def test_report_all_projects_denied
@@ -80,6 +84,8 @@
     assert_template 'report'
     assert_not_nil assigns(:total_hours)
     assert_equal "154.25", "%.2f" % assigns(:total_hours)
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/issues/1/time_entries/report", :id => 'query_form'}
   end
   
   def test_report_custom_field_criteria
--- a/test/functional/.svn/text-base/timelog_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/timelog_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -131,6 +131,77 @@
     assert_equal 2, entry.issue_id
     assert_equal 2, entry.user_id
   end
+
+  def test_get_bulk_edit
+    @request.session[:user_id] = 2
+    get :bulk_edit, :ids => [1, 2]
+    assert_response :success
+    assert_template 'bulk_edit'
+    
+    # System wide custom field
+    assert_tag :select, :attributes => {:name => 'time_entry[custom_field_values][10]'}
+  end
+
+  def test_get_bulk_edit_on_different_projects
+    @request.session[:user_id] = 2
+    get :bulk_edit, :ids => [1, 2, 6]
+    assert_response :success
+    assert_template 'bulk_edit'
+  end
+
+  def test_bulk_update
+    @request.session[:user_id] = 2
+    # update time entry activity
+    post :bulk_update, :ids => [1, 2], :time_entry => { :activity_id => 9}
+                                     
+    assert_response 302
+    # check that the issues were updated
+    assert_equal [9, 9], TimeEntry.find_all_by_id([1, 2]).collect {|i| i.activity_id}
+  end
+
+  def test_bulk_update_on_different_projects
+    @request.session[:user_id] = 2
+    # update time entry activity
+    post :bulk_update, :ids => [1, 2, 4], :time_entry => { :activity_id => 9 }
+    
+    assert_response 302
+    # check that the issues were updated
+    assert_equal [9, 9, 9], TimeEntry.find_all_by_id([1, 2, 4]).collect {|i| i.activity_id}
+  end
+
+  def test_bulk_update_on_different_projects_without_rights
+    @request.session[:user_id] = 3
+    user = User.find(3)
+    action = { :controller => "timelog", :action => "bulk_update" }
+    assert user.allowed_to?(action, TimeEntry.find(1).project)
+    assert ! user.allowed_to?(action, TimeEntry.find(5).project)
+    post :bulk_update, :ids => [1, 5], :time_entry => { :activity_id => 9 }
+    assert_response 403
+  end
+
+  def test_bulk_update_custom_field
+    @request.session[:user_id] = 2
+    post :bulk_update, :ids => [1, 2], :time_entry => { :custom_field_values => {'10' => '0'} }
+                                     
+    assert_response 302
+    assert_equal ["0", "0"], TimeEntry.find_all_by_id([1, 2]).collect {|i| i.custom_value_for(10).value}
+  end
+
+  def test_post_bulk_update_should_redirect_back_using_the_back_url_parameter
+    @request.session[:user_id] = 2
+    post :bulk_update, :ids => [1,2], :back_url => '/time_entries'
+
+    assert_response :redirect
+    assert_redirected_to '/time_entries'
+  end
+
+  def test_post_bulk_update_should_not_redirect_back_using_the_back_url_parameter_off_the_host
+    @request.session[:user_id] = 2
+    post :bulk_update, :ids => [1,2], :back_url => 'http://google.com'
+
+    assert_response :redirect
+    assert_redirected_to :controller => 'timelog', :action => 'index', :project_id => Project.find(1).identifier
+  end
   
   def test_destroy
     @request.session[:user_id] = 2
@@ -142,19 +213,13 @@
   
   def test_destroy_should_fail
     # simulate that this fails (e.g. due to a plugin), see #5700
-    TimeEntry.class_eval do
-      before_destroy :stop_callback_chain
-      def stop_callback_chain ; return false ; end
-    end
+    TimeEntry.any_instance.expects(:destroy).returns(false)
 
     @request.session[:user_id] = 2
     delete :destroy, :id => 1
     assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_equal I18n.t(:notice_unable_delete_time_entry), flash[:error]
     assert_not_nil TimeEntry.find_by_id(1)
-
-    # remove the simulation
-    TimeEntry.before_destroy.reject! {|callback| callback.method == :stop_callback_chain }
   end
   
   def test_index_all_projects
@@ -163,10 +228,12 @@
     assert_template 'index'
     assert_not_nil assigns(:total_hours)
     assert_equal "162.90", "%.2f" % assigns(:total_hours)
+    assert_tag :form,
+      :attributes => {:action => "/time_entries", :id => 'query_form'}
   end
   
   def test_index_at_project_level
-    get :index, :project_id => 1
+    get :index, :project_id => 'ecookbook'
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:entries)
@@ -178,10 +245,12 @@
     # display all time by default
     assert_equal '2007-03-12'.to_date, assigns(:from)
     assert_equal '2007-04-22'.to_date, assigns(:to)
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/time_entries", :id => 'query_form'}
   end
   
   def test_index_at_project_level_with_date_range
-    get :index, :project_id => 1, :from => '2007-03-20', :to => '2007-04-30'
+    get :index, :project_id => 'ecookbook', :from => '2007-03-20', :to => '2007-04-30'
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:entries)
@@ -190,24 +259,30 @@
     assert_equal "12.90", "%.2f" % assigns(:total_hours)
     assert_equal '2007-03-20'.to_date, assigns(:from)
     assert_equal '2007-04-30'.to_date, assigns(:to)
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/time_entries", :id => 'query_form'}
   end
 
   def test_index_at_project_level_with_period
-    get :index, :project_id => 1, :period => '7_days'
+    get :index, :project_id => 'ecookbook', :period => '7_days'
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:entries)
     assert_not_nil assigns(:total_hours)
     assert_equal Date.today - 7, assigns(:from)
     assert_equal Date.today, assigns(:to)
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/time_entries", :id => 'query_form'}
   end
 
   def test_index_one_day
-    get :index, :project_id => 1, :from => "2007-03-23", :to => "2007-03-23"
+    get :index, :project_id => 'ecookbook', :from => "2007-03-23", :to => "2007-03-23"
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:total_hours)
     assert_equal "4.25", "%.2f" % assigns(:total_hours)
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/time_entries", :id => 'query_form'}
   end
   
   def test_index_at_issue_level
@@ -221,6 +296,10 @@
     # display all time based on what's been logged
     assert_equal '2007-03-12'.to_date, assigns(:from)
     assert_equal '2007-04-22'.to_date, assigns(:to)
+    # TODO: remove /projects/:project_id/issues/:issue_id/time_entries routes
+    # to use /issues/:issue_id/time_entries
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/issues/1/time_entries", :id => 'query_form'}
   end
   
   def test_index_atom_feed
@@ -236,8 +315,8 @@
     get :index, :format => 'csv'
     assert_response :success
     assert_equal 'text/csv', @response.content_type
-    assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment\n")
-    assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\"\n")
+    assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment,Overtime\n")
+    assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\",\"\"\n")
   end
   
   def test_index_csv_export
@@ -245,7 +324,7 @@
     get :index, :project_id => 1, :format => 'csv'
     assert_response :success
     assert_equal 'text/csv', @response.content_type
-    assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment\n")
-    assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\"\n")
+    assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment,Overtime\n")
+    assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\",\"\"\n")
   end
 end
--- a/test/functional/.svn/text-base/users_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/users_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -24,7 +24,7 @@
 class UsersControllerTest < ActionController::TestCase
   include Redmine::I18n
   
-  fixtures :users, :projects, :members, :member_roles, :roles, :auth_sources, :custom_fields, :custom_values
+  fixtures :users, :projects, :members, :member_roles, :roles, :auth_sources, :custom_fields, :custom_values, :groups_users
   
   def setup
     @controller = UsersController.new
@@ -59,6 +59,15 @@
     assert_equal 'John', users.first.firstname
   end
   
+  def test_index_with_group_filter
+    get :index, :group_id => '10'
+    assert_response :success
+    assert_template 'index'
+    users = assigns(:users)
+    assert users.any?
+    assert_equal([], (users - Group.find(10).users))
+  end
+  
   def test_show
     @request.session[:user_id] = nil
     get :show, :id => 2
--- a/test/functional/.svn/text-base/versions_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/versions_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -22,7 +22,7 @@
 class VersionsController; def rescue_action(e) raise e end; end
 
 class VersionsControllerTest < ActionController::TestCase
-  fixtures :projects, :versions, :issues, :users, :roles, :members, :member_roles, :enabled_modules
+  fixtures :projects, :versions, :issues, :users, :roles, :members, :member_roles, :enabled_modules, :issue_statuses
   
   def setup
     @controller = VersionsController.new
@@ -145,4 +145,10 @@
     assert_response :success
     assert_template '_issue_counts'
   end
+  
+  def test_issue_status_by_status
+    xhr :get, :status_by, :id => 2, :status_by => 'status'
+    assert_response :success
+    assert_template '_issue_counts'
+  end
 end
--- a/test/functional/.svn/text-base/watchers_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/watchers_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -43,7 +43,7 @@
     assert_difference('Watcher.count') do
       xhr :post, :watch, :object_type => 'issue', :object_id => '1'
       assert_response :success
-      assert_select_rjs :replace_html, 'watcher'
+      assert @response.body.include?('$$(".issue-1-watcher")')
     end
     assert Issue.find(1).watched_by?(User.find(3))
   end
@@ -56,34 +56,13 @@
       assert_response 403
     end
   end
-
-  def test_watch_with_multiple_replacements
-    @request.session[:user_id] = 3
-    assert_difference('Watcher.count') do
-      xhr :post, :watch, :object_type => 'issue', :object_id => '1', :replace => ['watch_item_1','watch_item_2']
-      assert_response :success
-      assert_select_rjs :replace_html, 'watch_item_1'
-      assert_select_rjs :replace_html, 'watch_item_2'
-    end
-  end
   
   def test_unwatch
     @request.session[:user_id] = 3
     assert_difference('Watcher.count', -1) do
       xhr :post, :unwatch, :object_type => 'issue', :object_id => '2'
       assert_response :success
-      assert_select_rjs :replace_html, 'watcher'
-    end
-    assert !Issue.find(1).watched_by?(User.find(3))
-  end
-
-  def test_unwatch_with_multiple_replacements
-    @request.session[:user_id] = 3
-    assert_difference('Watcher.count', -1) do
-      xhr :post, :unwatch, :object_type => 'issue', :object_id => '2', :replace => ['watch_item_1', 'watch_item_2']
-      assert_response :success
-      assert_select_rjs :replace_html, 'watch_item_1'
-      assert_select_rjs :replace_html, 'watch_item_2'
+      assert @response.body.include?('$$(".issue-2-watcher")')
     end
     assert !Issue.find(1).watched_by?(User.find(3))
   end
--- a/test/functional/.svn/text-base/wiki_controller_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/.svn/text-base/wiki_controller_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -23,14 +23,14 @@
 
 class WikiControllerTest < ActionController::TestCase
   fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, :attachments
-  
+
   def setup
     @controller = WikiController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
   end
-  
+
   def test_show_start_page
     get :show, :project_id => 'ecookbook'
     assert_response :success
@@ -43,7 +43,7 @@
                            :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/Page_with_an_inline_image' },
                                                     :content => 'Page with an inline image' } }
   end
-  
+
   def test_show_page_with_name
     get :show, :project_id => 1, :id => 'Another_page'
     assert_response :success
@@ -54,30 +54,37 @@
     assert_tag :tag => 'img', :attributes => { :src => '/attachments/download/3',
                                                :alt => 'This is a logo' }
   end
-  
+
+  def test_show_redirected_page
+    WikiRedirect.create!(:wiki_id => 1, :title => 'Old_title', :redirects_to => 'Another_page')
+
+    get :show, :project_id => 'ecookbook', :id => 'Old_title'
+    assert_redirected_to '/projects/ecookbook/wiki/Another_page'
+  end
+
   def test_show_with_sidebar
     page = Project.find(1).wiki.pages.new(:title => 'Sidebar')
     page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar')
     page.save!
-    
+
     get :show, :project_id => 1, :id => 'Another_page'
     assert_response :success
     assert_tag :tag => 'div', :attributes => {:id => 'sidebar'},
                               :content => /Side bar content for test_show_with_sidebar/
   end
-  
+
   def test_show_unexistent_page_without_edit_right
     get :show, :project_id => 1, :id => 'Unexistent page'
     assert_response 404
   end
-  
+
   def test_show_unexistent_page_with_edit_right
     @request.session[:user_id] = 2
     get :show, :project_id => 1, :id => 'Unexistent page'
     assert_response :success
     assert_template 'edit'
   end
-  
+
   def test_create_page
     @request.session[:user_id] = 2
     put :update, :project_id => 1,
@@ -91,7 +98,7 @@
     assert_not_nil page.content
     assert_equal 'Created the page', page.content.comments
   end
-  
+
   def test_create_page_with_attachments
     @request.session[:user_id] = 2
     assert_difference 'WikiPage.count' do
@@ -125,7 +132,7 @@
       end
     end
     assert_redirected_to '/projects/ecookbook/wiki/Another_page'
-    
+
     page = Wiki.find(1).pages.find_by_title('Another_page')
     assert_equal "edited", page.content.text
     assert_equal 2, page.content.version
@@ -149,12 +156,48 @@
       end
     assert_response :success
     assert_template 'edit'
-    
+
     assert_error_tag :descendant => {:content => /Comment is too long/}
     assert_tag :tag => 'textarea', :attributes => {:id => 'content_text'}, :content => 'edited'
     assert_tag :tag => 'input', :attributes => {:id => 'content_version', :value => '1'}
   end
-  
+
+  def test_update_stale_page_should_not_raise_an_error
+    @request.session[:user_id] = 2
+    c = Wiki.find(1).find_page('Another_page').content
+    c.text = 'Previous text'
+    c.save!
+    assert_equal 2, c.version
+
+    assert_no_difference 'WikiPage.count' do
+      assert_no_difference 'WikiContent.count' do
+        assert_no_difference 'WikiContent::Version.count' do
+          put :update, :project_id => 1,
+            :id => 'Another_page',
+            :content => {
+              :comments => 'My comments',
+              :text => 'Text should not be lost',
+              :version => 1
+            }
+        end
+      end
+    end
+    assert_response :success
+    assert_template 'edit'
+    assert_tag :div,
+      :attributes => { :class => /error/ },
+      :content => /Data has been updated by another user/
+    assert_tag 'textarea',
+      :attributes => { :name => 'content[text]' },
+      :content => /Text should not be lost/
+    assert_tag 'input',
+      :attributes => { :name => 'content[comments]', :value => 'My comments' }
+
+    c.reload
+    assert_equal 'Previous text', c.text
+    assert_equal 2, c.version
+  end
+
   def test_preview
     @request.session[:user_id] = 2
     xhr :post, :preview, :project_id => 1, :id => 'CookBook_documentation',
@@ -165,7 +208,7 @@
     assert_template 'common/_preview'
     assert_tag :tag => 'strong', :content => /previewed text/
   end
-  
+
   def test_preview_new_page
     @request.session[:user_id] = 2
     xhr :post, :preview, :project_id => 1, :id => 'New page',
@@ -176,7 +219,7 @@
     assert_template 'common/_preview'
     assert_tag :tag => 'h1', :content => /New page/
   end
-  
+
   def test_history
     get :history, :project_id => 1, :id => 'CookBook_documentation'
     assert_response :success
@@ -194,7 +237,7 @@
     assert_equal 1, assigns(:versions).size
     assert_select "input[type=submit][name=commit]", false
   end
-  
+
   def test_diff
     get :diff, :project_id => 1, :id => 'CookBook_documentation', :version => 2, :version_from => 1
     assert_response :success
@@ -202,7 +245,7 @@
     assert_tag :tag => 'span', :attributes => { :class => 'diff_in'},
                                :content => /updated/
   end
-  
+
   def test_annotate
     get :annotate, :project_id => 1, :id =>  'CookBook_documentation', :version => 2
     assert_response :success
@@ -230,7 +273,7 @@
       :attributes => {:selected => 'selected'},
       :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}}
   end
-  
+
   def test_get_rename_child_page
     @request.session[:user_id] = 2
     get :rename, :project_id => 1, :id => 'Child_1'
@@ -248,7 +291,7 @@
         :attributes => {:name => 'wiki_page[parent_id]'}
       }
   end
-  
+
   def test_rename_with_redirect
     @request.session[:user_id] = 2
     post :rename, :project_id => 1, :id => 'Another_page',
@@ -271,7 +314,7 @@
     # Check that there's no redirects
     assert_nil wiki.find_page('Another page')
   end
-  
+
   def test_rename_with_parent_assignment
     @request.session[:user_id] = 2
     post :rename, :project_id => 1, :id => 'Another_page',
@@ -287,13 +330,13 @@
     assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Child_1'
     assert_nil WikiPage.find_by_title('Child_1').parent
   end
-  
+
   def test_destroy_child
     @request.session[:user_id] = 2
     delete :destroy, :project_id => 1, :id => 'Child_1'
     assert_redirected_to :action => 'index', :project_id => 'ecookbook'
   end
-  
+
   def test_destroy_parent
     @request.session[:user_id] = 2
     assert_no_difference('WikiPage.count') do
@@ -302,7 +345,7 @@
     assert_response :success
     assert_template 'destroy'
   end
-  
+
   def test_destroy_parent_with_nullify
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -1) do
@@ -311,7 +354,7 @@
     assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_nil WikiPage.find_by_id(2)
   end
-  
+
   def test_destroy_parent_with_cascade
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -3) do
@@ -321,7 +364,7 @@
     assert_nil WikiPage.find_by_id(2)
     assert_nil WikiPage.find_by_id(5)
   end
-  
+
   def test_destroy_parent_with_reassign
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -1) do
@@ -331,7 +374,7 @@
     assert_nil WikiPage.find_by_id(2)
     assert_equal WikiPage.find(1), WikiPage.find_by_id(5).parent
   end
-  
+
   def test_index
     get :index, :project_id => 'ecookbook'
     assert_response :success
@@ -339,7 +382,8 @@
     pages = assigns(:pages)
     assert_not_nil pages
     assert_equal Project.find(1).wiki.pages.size, pages.size
-    
+    assert_equal pages.first.content.updated_on, pages.first.updated_on
+
     assert_tag :ul, :attributes => { :class => 'pages-hierarchy' },
                     :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/CookBook_documentation' },
                                               :content => 'CookBook documentation' },
@@ -351,13 +395,18 @@
                                                                        :content => 'Another page' } }
   end
 
+  def test_index_should_include_atom_link
+    get :index, :project_id => 'ecookbook'
+    assert_tag 'a', :attributes => { :href => '/projects/ecookbook/activity.atom?show_wiki_edits=1'}
+  end
+
   context "GET :export" do
     context "with an authorized user to export the wiki" do
       setup do
         @request.session[:user_id] = 2
         get :export, :project_id => 'ecookbook'
       end
-      
+
       should_respond_with :success
       should_assign_to :pages
       should_respond_with_content_type "text/html"
@@ -366,7 +415,7 @@
         assert_select "a[name=?]", "Another_page"
         assert_select "a[name=?]", "Page_with_an_inline_image"
       end
-      
+
     end
 
     context "with an unauthorized user" do
@@ -388,14 +437,17 @@
     should_assign_to :pages
     should_assign_to :pages_by_date
     should_render_template 'wiki/date_index'
-    
+
+    should "include atom link" do
+      assert_tag 'a', :attributes => { :href => '/projects/ecookbook/activity.atom?show_wiki_edits=1'}
+    end
   end
-  
+
   def test_not_found
     get :show, :project_id => 999
     assert_response 404
   end
-  
+
   def test_protect_page
     page = WikiPage.find_by_wiki_id_and_title(1, 'Another_page')
     assert !page.protected?
@@ -404,7 +456,7 @@
     assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_page'
     assert page.reload.protected?
   end
-  
+
   def test_unprotect_page
     page = WikiPage.find_by_wiki_id_and_title(1, 'CookBook_documentation')
     assert page.protected?
@@ -413,7 +465,7 @@
     assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'CookBook_documentation'
     assert !page.reload.protected?
   end
-  
+
   def test_show_page_with_edit_link
     @request.session[:user_id] = 2
     get :show, :project_id => 1
@@ -421,15 +473,15 @@
     assert_template 'show'
     assert_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }
   end
-  
+
   def test_show_page_without_edit_link
     @request.session[:user_id] = 4
     get :show, :project_id => 1
     assert_response :success
     assert_template 'show'
     assert_no_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }
-  end  
-  
+  end
+
   def test_edit_unprotected_page
     # Non members can edit unprotected wiki pages
     @request.session[:user_id] = 4
@@ -437,21 +489,21 @@
     assert_response :success
     assert_template 'edit'
   end
-  
+
   def test_edit_protected_page_by_nonmember
     # Non members can't edit protected wiki pages
     @request.session[:user_id] = 4
     get :edit, :project_id => 1, :id => 'CookBook_documentation'
     assert_response 403
   end
-  
+
   def test_edit_protected_page_by_member
     @request.session[:user_id] = 2
     get :edit, :project_id => 1, :id => 'CookBook_documentation'
     assert_response :success
-    assert_template 'edit'    
+    assert_template 'edit'
   end
-  
+
   def test_history_of_non_existing_page_should_return_404
     get :history, :project_id => 1, :id => 'Unknown_page'
     assert_response 404
--- a/test/functional/activities_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/activities_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -8,8 +8,8 @@
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:events_by_day)
-    
-    assert_tag :tag => "h3", 
+
+    assert_tag :tag => "h3",
                :content => /#{2.days.ago.to_date.day}/,
                :sibling => { :tag => "dl",
                  :child => { :tag => "dt",
@@ -20,14 +20,14 @@
                  }
                }
   end
-  
+
   def test_previous_project_index
     get :index, :id => 1, :from => 3.days.ago.to_date
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:events_by_day)
-               
-    assert_tag :tag => "h3", 
+
+    assert_tag :tag => "h3",
                :content => /#{3.day.ago.to_date.day}/,
                :sibling => { :tag => "dl",
                  :child => { :tag => "dt",
@@ -38,14 +38,14 @@
                  }
                }
   end
-  
+
   def test_global_index
     get :index
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:events_by_day)
-    
-    assert_tag :tag => "h3", 
+
+    assert_tag :tag => "h3",
                :content => /#{5.day.ago.to_date.day}/,
                :sibling => { :tag => "dl",
                  :child => { :tag => "dt",
@@ -56,14 +56,14 @@
                  }
                }
   end
-  
+
   def test_user_index
     get :index, :user_id => 2
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:events_by_day)
-    
-    assert_tag :tag => "h3", 
+
+    assert_tag :tag => "h3",
                :content => /#{3.day.ago.to_date.day}/,
                :sibling => { :tag => "dl",
                  :child => { :tag => "dt",
@@ -74,7 +74,7 @@
                  }
                }
   end
-  
+
   def test_index_atom_feed
     get :index, :format => 'atom'
     assert_response :success
@@ -83,5 +83,4 @@
       :tag => 'link',
       :attributes => {:href => 'http://test.host/issues/11'}}
   end
-  
 end
--- a/test/functional/attachments_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/attachments_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -7,12 +7,12 @@
 # modify it under the terms of the 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.
@@ -27,7 +27,7 @@
 class AttachmentsControllerTest < ActionController::TestCase
   fixtures :users, :projects, :roles, :members, :member_roles, :enabled_modules, :issues, :trackers, :attachments,
            :versions, :wiki_pages, :wikis, :documents
-  
+
   def setup
     @controller = AttachmentsController.new
     @request    = ActionController::TestRequest.new
@@ -35,13 +35,13 @@
     Attachment.storage_path = "#{RAILS_ROOT}/test/fixtures/files"
     User.current = nil
   end
-  
+
   def test_show_diff
     get :show, :id => 14 # 060719210727_changeset_utf8.diff
     assert_response :success
     assert_template 'diff'
     assert_equal 'text/html', @response.content_type
-    
+
     assert_tag 'th',
       :attributes => {:class => /filename/},
       :content => /issues_controller.rb\t\(révision 1484\)/
@@ -49,13 +49,13 @@
       :attributes => {:class => /line-code/},
       :content => /Demande créée avec succès/
   end
-  
+
   def test_show_diff_should_strip_non_utf8_content
     get :show, :id => 5 # 060719210727_changeset_iso8859-1.diff
     assert_response :success
     assert_template 'diff'
     assert_equal 'text/html', @response.content_type
-    
+
     assert_tag 'th',
       :attributes => {:class => /filename/},
       :content => /issues_controller.rb\t\(rvision 1484\)/
@@ -63,57 +63,69 @@
       :attributes => {:class => /line-code/},
       :content => /Demande cre avec succs/
   end
-  
+
   def test_show_text_file
     get :show, :id => 4
     assert_response :success
     assert_template 'file'
     assert_equal 'text/html', @response.content_type
   end
-  
+
   def test_show_text_file_should_send_if_too_big
     Setting.file_max_size_displayed = 512
     Attachment.find(4).update_attribute :filesize, 754.kilobyte
-    
+
     get :show, :id => 4
     assert_response :success
     assert_equal 'application/x-ruby', @response.content_type
   end
-  
+
   def test_show_other
     get :show, :id => 6
     assert_response :success
     assert_equal 'application/octet-stream', @response.content_type
   end
-  
+
+  def test_show_file_from_private_issue_without_permission
+    get :show, :id => 15
+    assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Fattachments%2F15'
+  end
+
+  def test_show_file_from_private_issue_with_permission
+    @request.session[:user_id] = 2
+    get :show, :id => 15
+    assert_response :success
+    assert_tag 'h2', :content => /private.diff/
+  end
+
   def test_download_text_file
     get :download, :id => 4
     assert_response :success
     assert_equal 'application/x-ruby', @response.content_type
   end
-  
+
   def test_download_should_assign_content_type_if_blank
     Attachment.find(4).update_attribute(:content_type, '')
-    
+
     get :download, :id => 4
     assert_response :success
     assert_equal 'text/x-ruby', @response.content_type
   end
-  
+
   def test_download_missing_file
     get :download, :id => 2
     assert_response 404
   end
-  
+
   def test_anonymous_on_private_private
     get :download, :id => 7
     assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Fattachments%2Fdownload%2F7'
   end
-  
+
   def test_destroy_issue_attachment
     issue = Issue.find(3)
     @request.session[:user_id] = 2
-    
+
     assert_difference 'issue.attachments.count', -1 do
       post :destroy, :id => 1
     end
@@ -125,7 +137,7 @@
     assert_equal '1', j.details.first.prop_key
     assert_equal 'error281.txt', j.details.first.old_value
   end
-  
+
   def test_destroy_wiki_page_attachment
     @request.session[:user_id] = 2
     assert_difference 'Attachment.count', -1 do
@@ -133,7 +145,7 @@
       assert_response 302
     end
   end
-  
+
   def test_destroy_project_attachment
     @request.session[:user_id] = 2
     assert_difference 'Attachment.count', -1 do
@@ -141,7 +153,7 @@
       assert_response 302
     end
   end
-  
+
   def test_destroy_version_attachment
     @request.session[:user_id] = 2
     assert_difference 'Attachment.count', -1 do
@@ -149,7 +161,7 @@
       assert_response 302
     end
   end
-  
+
   def test_destroy_without_permission
     post :destroy, :id => 3
     assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Fattachments%2Fdestroy%2F3'
--- a/test/functional/auth_sources_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/auth_sources_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -66,18 +66,30 @@
   end
 
   context "post :destroy" do
+    setup do
+      @auth_source = AuthSource.generate!(:name => 'TestEdit')
+    end
+    
     context "without users" do
       setup do
-        @auth_source = AuthSource.generate!(:name => 'TestEdit')
         post :destroy, :id => @auth_source.id
       end
 
       should_respond_with :redirect
       should_redirect_to("index") {{:action => 'index'}}
       should_set_the_flash_to /deletion/i
-
     end
     
-    should "be tested with users"
+    context "with users" do
+      setup do
+        User.generate!(:auth_source => @auth_source)
+        post :destroy, :id => @auth_source.id
+      end
+      
+      should_respond_with :redirect
+      should "not destroy the AuthSource" do
+        assert AuthSource.find(@auth_source.id)
+      end
+    end
   end
 end
--- a/test/functional/custom_fields_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/custom_fields_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -31,6 +31,31 @@
     @request.session[:user_id] = 1
   end
   
+  def test_get_new_issue_custom_field
+    get :new, :type => 'IssueCustomField'
+    assert_response :success
+    assert_template 'new'
+    assert_tag :select,
+      :attributes => {:name => 'custom_field[field_format]'},
+      :child => {
+        :tag => 'option',
+        :attributes => {:value => 'user'},
+        :content => 'User'
+      }
+    assert_tag :select,
+      :attributes => {:name => 'custom_field[field_format]'},
+      :child => {
+        :tag => 'option',
+        :attributes => {:value => 'version'},
+        :content => 'Version'
+      }
+  end
+  
+  def test_get_new_with_invalid_custom_field_class_should_redirect_to_list
+    get :new, :type => 'UnknownCustomField'
+    assert_redirected_to '/custom_fields'
+  end
+  
   def test_post_new_list_custom_field
     assert_difference 'CustomField.count' do
       post :new, :type => "IssueCustomField",
@@ -53,9 +78,4 @@
     assert_equal ["0.1", "0.2"], field.possible_values
     assert_equal 1, field.trackers.size
   end
-  
-  def test_invalid_custom_field_class_should_redirect_to_list
-    get :new, :type => 'UnknownCustomField'
-    assert_redirected_to '/custom_fields'
-  end
 end
--- a/test/functional/documents_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/documents_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -23,30 +23,30 @@
 
 class DocumentsControllerTest < ActionController::TestCase
   fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :documents, :enumerations
-  
+
   def setup
     @controller = DocumentsController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
   end
-  
+
   def test_index
     # Sets a default category
     e = Enumeration.find_by_name('Technical documentation')
     e.update_attributes(:is_default => true)
-    
+
     get :index, :project_id => 'ecookbook'
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:grouped)
-    
+
     # Default category selected in the new document form
     assert_tag :select, :attributes => {:name => 'document[category_id]'},
                         :child => {:tag => 'option', :attributes => {:selected => 'selected'},
                                                      :content => 'Technical documentation'}
   end
-  
+
   def test_index_with_long_description
     # adds a long description to the first document
     doc = documents(:documents_001)
@@ -55,7 +55,7 @@
 
 Vestibulum non velit mi. Aliquam scelerisque libero ut nulla fringilla a sollicitudin magna rhoncus.  Praesent a nunc lorem, ac porttitor eros. Sed ac diam nec neque interdum adipiscing quis quis justo. Donec arcu nunc, fringilla eu dictum at, venenatis ac sem. Vestibulum quis elit urna, ac mattis sapien. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
 LOREM
-    
+
     get :index, :project_id => 'ecookbook'
     assert_response :success
     assert_template 'index'
@@ -64,21 +64,21 @@
     assert_select '.wiki p', :text => (doc.description.split("\n").first + '...')
     assert_select '.wiki p', :text => Regexp.new(Regexp.escape("EndOfLineHere..."))
   end
-  
+
   def test_new_with_one_attachment
     ActionMailer::Base.deliveries.clear
     Setting.notified_events << 'document_added'
     @request.session[:user_id] = 2
     set_tmp_attachments_directory
-    
+
     post :new, :project_id => 'ecookbook',
                :document => { :title => 'DocumentsControllerTest#test_post_new',
                               :description => 'This is a new document',
                               :category_id => 2},
                :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
-               
+
     assert_redirected_to '/projects/ecookbook/documents'
-    
+
     document = Document.find_by_title('DocumentsControllerTest#test_post_new')
     assert_not_nil document
     assert_equal Enumeration.find(2), document.category
@@ -86,7 +86,7 @@
     assert_equal 'testfile.txt', document.attachments.first.filename
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_destroy
     @request.session[:user_id] = 2
     post :destroy, :id => 1
--- a/test/functional/groups_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/groups_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -104,4 +104,13 @@
       post :destroy_membership, :id => 10, :membership_id => 6
     end
   end
+  
+  def test_autocomplete_for_user
+    get :autocomplete_for_user, :id => 10, :q => 'mis'
+    assert_response :success
+    users = assigns(:users)
+    assert_not_nil users
+    assert users.any?
+    assert !users.include?(Group.find(10).users.first)
+  end
 end
--- a/test/functional/issue_moves_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/issue_moves_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -112,6 +112,19 @@
         assert_equal '2009-12-31', issue.due_date.to_s, "Due date is incorrect"
       end
     end
+
+    should "allow adding a note when copying" do
+      @request.session[:user_id] = 2
+      assert_difference 'Issue.count', 1 do
+        post :create, :ids => [1], :copy_options => {:copy => '1'}, :notes => 'Copying one issue', :new_tracker_id => '', :assigned_to_id => 4, :status_id => 3, :start_date => '2009-12-01', :due_date => '2009-12-31'
+      end
+      
+      issue = Issue.first(:order => 'id DESC')
+      assert_equal 1, issue.journals.size
+      journal = issue.journals.first
+      assert_equal 0, journal.details.size
+      assert_equal 'Copying one issue', journal.notes
+    end
   end
   
   def test_copy_to_another_project_should_follow_when_needed
--- a/test/functional/issues_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/issues_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -45,17 +45,17 @@
            :journals,
            :journal_details,
            :queries
-  
+
   def setup
     @controller = IssuesController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
   end
-  
+
   def test_index
     Setting.default_language = 'en'
-    
+
     get :index
     assert_response :success
     assert_template 'index.rhtml'
@@ -69,7 +69,7 @@
     # project column
     assert_tag :tag => 'th', :content => /Project/
   end
-  
+
   def test_index_should_not_list_issues_when_module_disabled
     EnabledModule.delete_all("name = 'issue_tracking' AND project_id = 1")
     get :index
@@ -91,7 +91,14 @@
     assert_no_tag :tag => 'a', :content => /Can't print recipes/
     assert_tag :tag => 'a', :content => /Subproject issue/
   end
-  
+
+  def test_index_should_list_visible_issues_only
+    get :index, :per_page => 100
+    assert_response :success
+    assert_not_nil assigns(:issues)
+    assert_nil assigns(:issues).detect {|issue| !issue.visible?}
+  end
+
   def test_index_with_project
     Setting.display_subprojects_issues = 0
     get :index, :project_id => 1
@@ -101,7 +108,7 @@
     assert_tag :tag => 'a', :content => /Can't print recipes/
     assert_no_tag :tag => 'a', :content => /Subproject issue/
   end
-  
+
   def test_index_with_project_and_subprojects
     Setting.display_subprojects_issues = 1
     get :index, :project_id => 1
@@ -112,7 +119,7 @@
     assert_tag :tag => 'a', :content => /Subproject issue/
     assert_no_tag :tag => 'a', :content => /Issue of a private subproject/
   end
-  
+
   def test_index_with_project_and_subprojects_should_show_private_subprojects
     @request.session[:user_id] = 2
     Setting.display_subprojects_issues = 1
@@ -124,45 +131,45 @@
     assert_tag :tag => 'a', :content => /Subproject issue/
     assert_tag :tag => 'a', :content => /Issue of a private subproject/
   end
-  
+
   def test_index_with_project_and_default_filter
     get :index, :project_id => 1, :set_filter => 1
     assert_response :success
     assert_template 'index.rhtml'
     assert_not_nil assigns(:issues)
-    
+
     query = assigns(:query)
     assert_not_nil query
     # default filter
     assert_equal({'status_id' => {:operator => 'o', :values => ['']}}, query.filters)
   end
-  
+
   def test_index_with_project_and_filter
-    get :index, :project_id => 1, :set_filter => 1, 
-      :fields => ['tracker_id'],
-      :operators => {'tracker_id' => '='},
-      :values => {'tracker_id' => ['1']} 
+    get :index, :project_id => 1, :set_filter => 1,
+      :f => ['tracker_id'],
+      :op => {'tracker_id' => '='},
+      :v => {'tracker_id' => ['1']}
     assert_response :success
     assert_template 'index.rhtml'
     assert_not_nil assigns(:issues)
-    
+
     query = assigns(:query)
     assert_not_nil query
     assert_equal({'tracker_id' => {:operator => '=', :values => ['1']}}, query.filters)
   end
-  
+
   def test_index_with_project_and_empty_filters
     get :index, :project_id => 1, :set_filter => 1, :fields => ['']
     assert_response :success
     assert_template 'index.rhtml'
     assert_not_nil assigns(:issues)
-    
+
     query = assigns(:query)
     assert_not_nil query
     # no filter
     assert_equal({}, query.filters)
   end
-  
+
   def test_index_with_query
     get :index, :project_id => 1, :query_id => 5
     assert_response :success
@@ -170,7 +177,7 @@
     assert_not_nil assigns(:issues)
     assert_nil assigns(:issue_count_by_group)
   end
-  
+
   def test_index_with_query_grouped_by_tracker
     get :index, :project_id => 1, :query_id => 6
     assert_response :success
@@ -178,7 +185,7 @@
     assert_not_nil assigns(:issues)
     assert_not_nil assigns(:issue_count_by_group)
   end
-  
+
   def test_index_with_query_grouped_by_list_custom_field
     get :index, :project_id => 1, :query_id => 9
     assert_response :success
@@ -186,15 +193,15 @@
     assert_not_nil assigns(:issues)
     assert_not_nil assigns(:issue_count_by_group)
   end
-  
+
   def test_index_sort_by_field_not_included_in_columns
     Setting.issue_list_default_columns = %w(subject author)
     get :index, :sort => 'tracker'
   end
-  
+
   def test_index_csv_with_project
     Setting.default_language = 'en'
-    
+
     get :index, :format => 'csv'
     assert_response :success
     assert_not_nil assigns(:issues)
@@ -206,24 +213,24 @@
     assert_not_nil assigns(:issues)
     assert_equal 'text/csv', @response.content_type
   end
-  
+
   def test_index_pdf
     get :index, :format => 'pdf'
     assert_response :success
     assert_not_nil assigns(:issues)
     assert_equal 'application/pdf', @response.content_type
-    
+
     get :index, :project_id => 1, :format => 'pdf'
     assert_response :success
     assert_not_nil assigns(:issues)
     assert_equal 'application/pdf', @response.content_type
-    
+
     get :index, :project_id => 1, :query_id => 6, :format => 'pdf'
     assert_response :success
     assert_not_nil assigns(:issues)
     assert_equal 'application/pdf', @response.content_type
   end
-  
+
   def test_index_pdf_with_query_grouped_by_list_custom_field
     get :index, :project_id => 1, :query_id => 9, :format => 'pdf'
     assert_response :success
@@ -231,106 +238,163 @@
     assert_not_nil assigns(:issue_count_by_group)
     assert_equal 'application/pdf', @response.content_type
   end
-  
+
   def test_index_sort
     get :index, :sort => 'tracker,id:desc'
     assert_response :success
-    
+
     sort_params = @request.session['issues_index_sort']
     assert sort_params.is_a?(String)
     assert_equal 'tracker,id:desc', sort_params
-    
+
     issues = assigns(:issues)
     assert_not_nil issues
     assert !issues.empty?
     assert_equal issues.sort {|a,b| a.tracker == b.tracker ? b.id <=> a.id : a.tracker <=> b.tracker }.collect(&:id), issues.collect(&:id)
   end
-  
+
   def test_index_with_columns
     columns = ['tracker', 'subject', 'assigned_to']
-    get :index, :set_filter => 1, :query => { 'column_names' => columns}
+    get :index, :set_filter => 1, :c => columns
     assert_response :success
-    
+
     # query should use specified columns
     query = assigns(:query)
     assert_kind_of Query, query
     assert_equal columns, query.column_names.map(&:to_s)
-    
+
     # columns should be stored in session
     assert_kind_of Hash, session[:query]
     assert_kind_of Array, session[:query][:column_names]
     assert_equal columns, session[:query][:column_names].map(&:to_s)
   end
 
+  def test_index_with_custom_field_column
+    columns = %w(tracker subject cf_2)
+    get :index, :set_filter => 1, :c => columns
+    assert_response :success
+
+    # query should use specified columns
+    query = assigns(:query)
+    assert_kind_of Query, query
+    assert_equal columns, query.column_names.map(&:to_s)
+
+    assert_tag :td,
+      :attributes => {:class => 'cf_2 string'},
+      :ancestor => {:tag => 'table', :attributes => {:class => /issues/}}
+  end
+
   def test_show_by_anonymous
     get :show, :id => 1
     assert_response :success
     assert_template 'show.rhtml'
     assert_not_nil assigns(:issue)
     assert_equal Issue.find(1), assigns(:issue)
-    
+
     # anonymous role is allowed to add a note
     assert_tag :tag => 'form',
                :descendant => { :tag => 'fieldset',
-                                :child => { :tag => 'legend', 
+                                :child => { :tag => 'legend',
                                             :content => /Notes/ } }
   end
-  
+
   def test_show_by_manager
     @request.session[:user_id] = 2
     get :show, :id => 1
     assert_response :success
-    
+
     assert_tag :tag => 'a',
       :content => /Quote/
-    
+
     assert_tag :tag => 'form',
                :descendant => { :tag => 'fieldset',
-                                :child => { :tag => 'legend', 
+                                :child => { :tag => 'legend',
                                             :content => /Change properties/ } },
                :descendant => { :tag => 'fieldset',
-                                :child => { :tag => 'legend', 
+                                :child => { :tag => 'legend',
                                             :content => /Log time/ } },
                :descendant => { :tag => 'fieldset',
-                                :child => { :tag => 'legend', 
+                                :child => { :tag => 'legend',
                                             :content => /Notes/ } }
   end
-  
+
   def test_show_should_deny_anonymous_access_without_permission
     Role.anonymous.remove_permission!(:view_issues)
     get :show, :id => 1
     assert_response :redirect
   end
-  
+
+  def test_show_should_deny_anonymous_access_to_private_issue
+    Issue.update_all(["is_private = ?", true], "id = 1")
+    get :show, :id => 1
+    assert_response :redirect
+  end
+
   def test_show_should_deny_non_member_access_without_permission
     Role.non_member.remove_permission!(:view_issues)
     @request.session[:user_id] = 9
     get :show, :id => 1
     assert_response 403
   end
-  
+
+  def test_show_should_deny_non_member_access_to_private_issue
+    Issue.update_all(["is_private = ?", true], "id = 1")
+    @request.session[:user_id] = 9
+    get :show, :id => 1
+    assert_response 403
+  end
+
   def test_show_should_deny_member_access_without_permission
     Role.find(1).remove_permission!(:view_issues)
     @request.session[:user_id] = 2
     get :show, :id => 1
     assert_response 403
   end
-  
+
+  def test_show_should_deny_member_access_to_private_issue_without_permission
+    Issue.update_all(["is_private = ?", true], "id = 1")
+    @request.session[:user_id] = 3
+    get :show, :id => 1
+    assert_response 403
+  end
+
+  def test_show_should_allow_author_access_to_private_issue
+    Issue.update_all(["is_private = ?, author_id = 3", true], "id = 1")
+    @request.session[:user_id] = 3
+    get :show, :id => 1
+    assert_response :success
+  end
+
+  def test_show_should_allow_assignee_access_to_private_issue
+    Issue.update_all(["is_private = ?, assigned_to_id = 3", true], "id = 1")
+    @request.session[:user_id] = 3
+    get :show, :id => 1
+    assert_response :success
+  end
+
+  def test_show_should_allow_member_access_to_private_issue_with_permission
+    Issue.update_all(["is_private = ?", true], "id = 1")
+    User.find(3).roles_for_project(Project.find(1)).first.update_attribute :issues_visibility, 'all'
+    @request.session[:user_id] = 3
+    get :show, :id => 1
+    assert_response :success
+  end
+
   def test_show_should_not_disclose_relations_to_invisible_issues
     Setting.cross_project_issue_relations = '1'
     IssueRelation.create!(:issue_from => Issue.find(1), :issue_to => Issue.find(2), :relation_type => 'relates')
     # Relation to a private project issue
     IssueRelation.create!(:issue_from => Issue.find(1), :issue_to => Issue.find(4), :relation_type => 'relates')
-    
+
     get :show, :id => 1
     assert_response :success
-    
+
     assert_tag :div, :attributes => { :id => 'relations' },
                      :descendant => { :tag => 'a', :content => /#2$/ }
     assert_no_tag :div, :attributes => { :id => 'relations' },
                         :descendant => { :tag => 'a', :content => /#4$/ }
   end
-  
+
   def test_show_atom
     get :show, :id => 2, :format => 'atom'
     assert_response :success
@@ -338,7 +402,7 @@
     # Inline image
     assert_select 'content', :text => Regexp.new(Regexp.quote('http://test.host/attachments/download/10'))
   end
-  
+
   def test_show_export_to_pdf
     get :show, :id => 3, :format => 'pdf'
     assert_response :success
@@ -352,7 +416,7 @@
     get :new, :project_id => 1, :tracker_id => 1
     assert_response :success
     assert_template 'new'
-    
+
     assert_tag :tag => 'input', :attributes => { :name => 'issue[custom_field_values][2]',
                                                  :value => 'Default string' }
   end
@@ -362,51 +426,51 @@
     get :new, :project_id => 1
     assert_response :success
     assert_template 'new'
-    
+
     issue = assigns(:issue)
     assert_not_nil issue
     assert_equal Project.find(1).trackers.first, issue.tracker
   end
-  
+
   def test_get_new_with_no_default_status_should_display_an_error
     @request.session[:user_id] = 2
     IssueStatus.delete_all
-    
+
     get :new, :project_id => 1
     assert_response 500
     assert_error_tag :content => /No default issue/
   end
-  
+
   def test_get_new_with_no_tracker_should_display_an_error
     @request.session[:user_id] = 2
     Tracker.delete_all
-    
+
     get :new, :project_id => 1
     assert_response 500
     assert_error_tag :content => /No tracker/
   end
-  
+
   def test_update_new_form
     @request.session[:user_id] = 2
     xhr :post, :new, :project_id => 1,
-                     :issue => {:tracker_id => 2, 
+                     :issue => {:tracker_id => 2,
                                 :subject => 'This is the test_new issue',
                                 :description => 'This is the description',
                                 :priority_id => 5}
     assert_response :success
     assert_template 'attributes'
-    
+
     issue = assigns(:issue)
     assert_kind_of Issue, issue
     assert_equal 1, issue.project_id
     assert_equal 2, issue.tracker_id
     assert_equal 'This is the test_new issue', issue.subject
   end
-  
+
   def test_post_create
     @request.session[:user_id] = 2
     assert_difference 'Issue.count' do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 3,
                             :status_id => 2,
                             :subject => 'This is the test_new issue',
@@ -417,7 +481,7 @@
                             :custom_field_values => {'2' => 'Value for field 2'}}
     end
     assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
-    
+
     issue = Issue.find_by_subject('This is the test_new issue')
     assert_not_nil issue
     assert_equal 2, issue.author_id
@@ -429,11 +493,11 @@
     assert_not_nil v
     assert_equal 'Value for field 2', v.value
   end
-  
+
   def test_post_create_without_start_date
     @request.session[:user_id] = 2
     assert_difference 'Issue.count' do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 3,
                             :status_id => 2,
                             :subject => 'This is the test_new issue',
@@ -444,15 +508,15 @@
                             :custom_field_values => {'2' => 'Value for field 2'}}
     end
     assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
-    
+
     issue = Issue.find_by_subject('This is the test_new issue')
     assert_not_nil issue
     assert_nil issue.start_date
   end
-  
+
   def test_post_create_and_continue
     @request.session[:user_id] = 2
-    post :create, :project_id => 1, 
+    post :create, :project_id => 1,
                :issue => {:tracker_id => 3,
                           :subject => 'This is first issue',
                           :priority_id => 5},
@@ -460,11 +524,11 @@
     assert_redirected_to :controller => 'issues', :action => 'new', :project_id => 'ecookbook',
                          :issue => {:tracker_id => 3}
   end
-  
+
   def test_post_create_without_custom_fields_param
     @request.session[:user_id] = 2
     assert_difference 'Issue.count' do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 1,
                             :subject => 'This is the test_new issue',
                             :description => 'This is the description',
@@ -478,7 +542,7 @@
     field.update_attribute(:is_required, true)
 
     @request.session[:user_id] = 2
-    post :create, :project_id => 1, 
+    post :create, :project_id => 1,
                :issue => {:tracker_id => 1,
                           :subject => 'This is the test_new issue',
                           :description => 'This is the description',
@@ -489,13 +553,13 @@
     assert_not_nil issue
     assert_equal I18n.translate('activerecord.errors.messages.invalid'), issue.errors.on(:custom_values)
   end
-  
+
   def test_post_create_with_watchers
     @request.session[:user_id] = 2
     ActionMailer::Base.deliveries.clear
-    
+
     assert_difference 'Watcher.count', 2 do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 1,
                             :subject => 'This is a new issue with watchers',
                             :description => 'This is the description',
@@ -505,7 +569,7 @@
     issue = Issue.find_by_subject('This is a new issue with watchers')
     assert_not_nil issue
     assert_redirected_to :controller => 'issues', :action => 'show', :id => issue
-    
+
     # Watchers added
     assert_equal [2, 3], issue.watcher_user_ids.sort
     assert issue.watched_by?(User.find(3))
@@ -514,12 +578,12 @@
     assert_kind_of TMail::Mail, mail
     assert [mail.bcc, mail.cc].flatten.include?(User.find(3).mail)
   end
-  
+
   def test_post_create_subissue
     @request.session[:user_id] = 2
-    
+
     assert_difference 'Issue.count' do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 1,
                             :subject => 'This is a child issue',
                             :parent_issue_id => 2}
@@ -531,9 +595,9 @@
 
   def test_post_create_subissue_with_non_numeric_parent_id
     @request.session[:user_id] = 2
-    
+
     assert_difference 'Issue.count' do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 1,
                             :subject => 'This is a child issue',
                             :parent_issue_id => 'ABC'}
@@ -542,12 +606,12 @@
     assert_not_nil issue
     assert_nil issue.parent
   end
-  
+
   def test_post_create_should_send_a_notification
     ActionMailer::Base.deliveries.clear
     @request.session[:user_id] = 2
     assert_difference 'Issue.count' do
-      post :create, :project_id => 1, 
+      post :create, :project_id => 1,
                  :issue => {:tracker_id => 3,
                             :subject => 'This is the test_new issue',
                             :description => 'This is the description',
@@ -556,13 +620,13 @@
                             :custom_field_values => {'2' => 'Value for field 2'}}
     end
     assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
-    
+
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_post_create_should_preserve_fields_values_on_validation_failure
     @request.session[:user_id] = 2
-    post :create, :project_id => 1, 
+    post :create, :project_id => 1,
                :issue => {:tracker_id => 1,
                           # empty subject
                           :subject => '',
@@ -571,35 +635,35 @@
                           :custom_field_values => {'1' => 'Oracle', '2' => 'Value for field 2'}}
     assert_response :success
     assert_template 'new'
-    
+
     assert_tag :textarea, :attributes => { :name => 'issue[description]' },
                           :content => 'This is a description'
     assert_tag :select, :attributes => { :name => 'issue[priority_id]' },
                         :child => { :tag => 'option', :attributes => { :selected => 'selected',
                                                                        :value => '6' },
-                                                      :content => 'High' }  
+                                                      :content => 'High' }
     # Custom fields
     assert_tag :select, :attributes => { :name => 'issue[custom_field_values][1]' },
                         :child => { :tag => 'option', :attributes => { :selected => 'selected',
                                                                        :value => 'Oracle' },
-                                                      :content => 'Oracle' }  
+                                                      :content => 'Oracle' }
     assert_tag :input, :attributes => { :name => 'issue[custom_field_values][2]',
                                         :value => 'Value for field 2'}
   end
-  
+
   def test_post_create_should_ignore_non_safe_attributes
     @request.session[:user_id] = 2
     assert_nothing_raised do
       post :create, :project_id => 1, :issue => { :tracker => "A param can not be a Tracker" }
     end
   end
-  
+
   context "without workflow privilege" do
     setup do
       Workflow.delete_all(["role_id = ?", Role.anonymous.id])
       Role.anonymous.add_permission! :add_issues, :add_issue_notes
     end
-    
+
     context "#new" do
       should "propose default status only" do
         get :new, :project_id => 1
@@ -610,10 +674,10 @@
           :children => {:count => 1},
           :child => {:tag => 'option', :attributes => {:value => IssueStatus.default.id.to_s}}
       end
-      
+
       should "accept default status" do
         assert_difference 'Issue.count' do
-          post :create, :project_id => 1, 
+          post :create, :project_id => 1,
                      :issue => {:tracker_id => 1,
                                 :subject => 'This is an issue',
                                 :status_id => 1}
@@ -621,21 +685,10 @@
         issue = Issue.last(:order => 'id')
         assert_equal IssueStatus.default, issue.status
       end
-      
-      should "accept default status" do
-        assert_difference 'Issue.count' do
-          post :create, :project_id => 1, 
-                     :issue => {:tracker_id => 1,
-                                :subject => 'This is an issue',
-                                :status_id => 1}
-        end
-        issue = Issue.last(:order => 'id')
-        assert_equal IssueStatus.default, issue.status
-      end
-      
+
       should "ignore unauthorized status" do
         assert_difference 'Issue.count' do
-          post :create, :project_id => 1, 
+          post :create, :project_id => 1,
                      :issue => {:tracker_id => 1,
                                 :subject => 'This is an issue',
                                 :status_id => 3}
@@ -644,7 +697,7 @@
         assert_equal IssueStatus.default, issue.status
       end
     end
-    
+
     context "#update" do
       should "ignore status change" do
         assert_difference 'Journal.count' do
@@ -652,7 +705,7 @@
         end
         assert_equal 1, Issue.find(1).status_id
       end
-      
+
       should "ignore attributes changes" do
         assert_difference 'Journal.count' do
           put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2}
@@ -663,7 +716,7 @@
       end
     end
   end
-  
+
   context "with workflow privilege" do
     setup do
       Workflow.delete_all(["role_id = ?", Role.anonymous.id])
@@ -671,7 +724,7 @@
       Workflow.create!(:role => Role.anonymous, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4)
       Role.anonymous.add_permission! :add_issues, :add_issue_notes
     end
-    
+
     context "#update" do
       should "accept authorized status" do
         assert_difference 'Journal.count' do
@@ -679,14 +732,14 @@
         end
         assert_equal 3, Issue.find(1).status_id
       end
-      
+
       should "ignore unauthorized status" do
         assert_difference 'Journal.count' do
           put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2}
         end
         assert_equal 1, Issue.find(1).status_id
       end
-      
+
       should "accept authorized attributes changes" do
         assert_difference 'Journal.count' do
           put :update, :id => 1, :notes => 'just trying', :issue => {:assigned_to_id => 2}
@@ -694,7 +747,7 @@
         issue = Issue.find(1)
         assert_equal 2, issue.assigned_to_id
       end
-      
+
       should "ignore unauthorized attributes changes" do
         assert_difference 'Journal.count' do
           put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed'}
@@ -703,7 +756,7 @@
         assert_equal "Can't print recipes", issue.subject
       end
     end
-    
+
     context "and :edit_issues permission" do
       setup do
         Role.anonymous.add_permission! :add_issues, :edit_issues
@@ -715,14 +768,14 @@
         end
         assert_equal 3, Issue.find(1).status_id
       end
-      
+
       should "ignore unauthorized status" do
         assert_difference 'Journal.count' do
           put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2}
         end
         assert_equal 1, Issue.find(1).status_id
       end
-      
+
       should "accept authorized attributes changes" do
         assert_difference 'Journal.count' do
           put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2}
@@ -733,7 +786,7 @@
       end
     end
   end
-  
+
   def test_copy_issue
     @request.session[:user_id] = 2
     get :new, :project_id => 1, :copy_from => 1
@@ -742,7 +795,7 @@
     orig = Issue.find(1)
     assert_equal orig.subject, assigns(:issue).subject
   end
-  
+
   def test_get_edit
     @request.session[:user_id] = 2
     get :edit, :id => 1
@@ -751,26 +804,26 @@
     assert_not_nil assigns(:issue)
     assert_equal Issue.find(1), assigns(:issue)
   end
-  
+
   def test_get_edit_with_params
     @request.session[:user_id] = 2
     get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 },
         :time_entry => { :hours => '2.5', :comments => 'test_get_edit_with_params', :activity_id => TimeEntryActivity.first.id }
     assert_response :success
     assert_template 'edit'
-    
+
     issue = assigns(:issue)
     assert_not_nil issue
-    
+
     assert_equal 5, issue.status_id
     assert_tag :select, :attributes => { :name => 'issue[status_id]' },
-                        :child => { :tag => 'option', 
+                        :child => { :tag => 'option',
                                     :content => 'Closed',
                                     :attributes => { :selected => 'selected' } }
-                                    
+
     assert_equal 7, issue.priority_id
     assert_tag :select, :attributes => { :name => 'issue[priority_id]' },
-                        :child => { :tag => 'option', 
+                        :child => { :tag => 'option',
                                     :content => 'Urgent',
                                     :attributes => { :selected => 'selected' } }
 
@@ -785,13 +838,13 @@
     @request.session[:user_id] = 2
     xhr :post, :new, :project_id => 1,
                              :id => 1,
-                             :issue => {:tracker_id => 2, 
+                             :issue => {:tracker_id => 2,
                                         :subject => 'This is the test_new issue',
                                         :description => 'This is the description',
                                         :priority_id => 5}
     assert_response :success
     assert_template 'attributes'
-    
+
     issue = assigns(:issue)
     assert_kind_of Issue, issue
     assert_equal 1, issue.id
@@ -799,7 +852,7 @@
     assert_equal 2, issue.tracker_id
     assert_equal 'This is the test_new issue', issue.subject
   end
-  
+
   def test_update_using_invalid_http_verbs
     @request.session[:user_id] = 2
     subject = 'Updated by an invalid http verb'
@@ -817,12 +870,12 @@
   def test_put_update_without_custom_fields_param
     @request.session[:user_id] = 2
     ActionMailer::Base.deliveries.clear
-    
+
     issue = Issue.find(1)
     assert_equal '125', issue.custom_value_for(2).value
     old_subject = issue.subject
     new_subject = 'Subject modified by IssuesControllerTest#test_post_edit'
-    
+
     assert_difference('Journal.count') do
       assert_difference('JournalDetail.count', 2) do
         put :update, :id => 1, :issue => {:subject => new_subject,
@@ -836,18 +889,18 @@
     assert_equal new_subject, issue.subject
     # Make sure custom fields were not cleared
     assert_equal '125', issue.custom_value_for(2).value
-    
+
     mail = ActionMailer::Base.deliveries.last
     assert_kind_of TMail::Mail, mail
     assert mail.subject.starts_with?("[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}]")
     assert mail.body.include?("Subject changed from #{old_subject} to #{new_subject}")
   end
-  
+
   def test_put_update_with_custom_field_change
     @request.session[:user_id] = 2
     issue = Issue.find(1)
     assert_equal '125', issue.custom_value_for(2).value
-    
+
     assert_difference('Journal.count') do
       assert_difference('JournalDetail.count', 3) do
         put :update, :id => 1, :issue => {:subject => 'Custom field change',
@@ -860,12 +913,12 @@
     assert_redirected_to :action => 'show', :id => '1'
     issue.reload
     assert_equal 'New custom value', issue.custom_value_for(2).value
-    
+
     mail = ActionMailer::Base.deliveries.last
     assert_kind_of TMail::Mail, mail
     assert mail.body.include?("Searchable field changed from 125 to New custom value")
   end
-  
+
   def test_put_update_with_status_and_assignee_change
     issue = Issue.find(1)
     assert_equal 1, issue.status_id
@@ -883,13 +936,13 @@
     j = Journal.find(:first, :order => 'id DESC')
     assert_equal 'Assigned to dlopper', j.notes
     assert_equal 2, j.details.size
-    
+
     mail = ActionMailer::Base.deliveries.last
     assert mail.body.include?("Status changed from New to Assigned")
     # subject should contain the new status
     assert mail.subject.include?("(#{ IssueStatus.find(2).name })")
   end
-  
+
   def test_put_update_with_note_only
     notes = 'Note added by IssuesControllerTest#test_update_with_note_only'
     # anonymous user
@@ -901,11 +954,11 @@
     assert_equal notes, j.notes
     assert_equal 0, j.details.size
     assert_equal User.anonymous, j.user
-    
+
     mail = ActionMailer::Base.deliveries.last
     assert mail.body.include?(notes)
   end
-  
+
   def test_put_update_with_note_and_spent_time
     @request.session[:user_id] = 2
     spent_hours_before = Issue.find(1).spent_hours
@@ -916,22 +969,22 @@
            :time_entry => { :hours => '2.5', :comments => 'test_put_update_with_note_and_spent_time', :activity_id => TimeEntryActivity.first.id }
     end
     assert_redirected_to :action => 'show', :id => '1'
-    
+
     issue = Issue.find(1)
-    
+
     j = Journal.find(:first, :order => 'id DESC')
     assert_equal '2.5 hours added', j.notes
     assert_equal 0, j.details.size
-    
+
     t = issue.time_entries.find_by_comments('test_put_update_with_note_and_spent_time')
     assert_not_nil t
     assert_equal 2.5, t.hours
     assert_equal spent_hours_before + 2.5, issue.spent_hours
   end
-  
+
   def test_put_update_with_attachment_only
     set_tmp_attachments_directory
-    
+
     # Delete all fixtured journals, a race condition can occur causing the wrong
     # journal to get fetched in the next find.
     Journal.delete_all
@@ -947,21 +1000,21 @@
     assert_equal 1, j.details.size
     assert_equal 'testfile.txt', j.details.first.value
     assert_equal User.anonymous, j.user
-    
+
     mail = ActionMailer::Base.deliveries.last
     assert mail.body.include?('testfile.txt')
   end
 
   def test_put_update_with_attachment_that_fails_to_save
     set_tmp_attachments_directory
-    
+
     # Delete all fixtured journals, a race condition can occur causing the wrong
     # journal to get fetched in the next find.
     Journal.delete_all
 
     # Mock out the unsaved attachment
     Attachment.any_instance.stubs(:create).returns(Attachment.new)
-    
+
     # anonymous user
     put :update,
          :id => 1,
@@ -976,12 +1029,12 @@
     issue = Issue.find(1)
     issue.journals.clear
     ActionMailer::Base.deliveries.clear
-    
+
     put :update,
          :id => 1,
          :notes => ''
     assert_redirected_to :action => 'show', :id => '1'
-    
+
     issue.reload
     assert issue.journals.empty?
     # No email should be sent
@@ -994,18 +1047,18 @@
     issue = Issue.find(1)
     old_subject = issue.subject
     new_subject = 'Subject modified by IssuesControllerTest#test_post_edit'
-    
+
     put :update, :id => 1, :issue => {:subject => new_subject,
                                      :priority_id => '6',
                                      :category_id => '1' # no change
                                     }
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
-  def test_put_update_with_invalid_spent_time
+
+  def test_put_update_with_invalid_spent_time_hours_only
     @request.session[:user_id] = 2
     notes = 'Note added by IssuesControllerTest#test_post_edit_with_invalid_spent_time'
-    
+
     assert_no_difference('Journal.count') do
       put :update,
            :id => 1,
@@ -1014,12 +1067,31 @@
     end
     assert_response :success
     assert_template 'edit'
-    
-    assert_tag :textarea, :attributes => { :name => 'notes' },
-                          :content => notes
+
+    assert_error_tag :descendant => {:content => /Activity can't be blank/}
+    assert_tag :textarea, :attributes => { :name => 'notes' }, :content => notes
     assert_tag :input, :attributes => { :name => 'time_entry[hours]', :value => "2z" }
   end
-  
+
+  def test_put_update_with_invalid_spent_time_comments_only
+    @request.session[:user_id] = 2
+    notes = 'Note added by IssuesControllerTest#test_post_edit_with_invalid_spent_time'
+
+    assert_no_difference('Journal.count') do
+      put :update,
+           :id => 1,
+           :notes => notes,
+           :time_entry => {"comments"=>"this is my comment", "activity_id"=>"", "hours"=>""}
+    end
+    assert_response :success
+    assert_template 'edit'
+
+    assert_error_tag :descendant => {:content => /Activity can't be blank/}
+    assert_error_tag :descendant => {:content => /Hours can't be blank/}
+    assert_tag :textarea, :attributes => { :name => 'notes' }, :content => notes
+    assert_tag :input, :attributes => { :name => 'time_entry[comments]', :value => "this is my comment" }
+  end
+
   def test_put_update_should_allow_fixed_version_to_be_set_to_a_subproject
     issue = Issue.find(2)
     @request.session[:user_id] = 2
@@ -1050,7 +1122,7 @@
     assert_response :redirect
     assert_redirected_to '/issues'
   end
-  
+
   def test_put_update_should_not_redirect_back_using_the_back_url_parameter_off_the_host
     issue = Issue.find(2)
     @request.session[:user_id] = 2
@@ -1065,19 +1137,21 @@
     assert_response :redirect
     assert_redirected_to :controller => 'issues', :action => 'show', :id => issue.id
   end
-  
+
   def test_get_bulk_edit
     @request.session[:user_id] = 2
     get :bulk_edit, :ids => [1, 2]
     assert_response :success
     assert_template 'bulk_edit'
-    
+
+    assert_tag :input, :attributes => {:name => 'issue[parent_issue_id]'}
+
     # Project specific custom field, date type
     field = CustomField.find(9)
     assert !field.is_for_all?
     assert_equal 'date', field.field_format
     assert_tag :input, :attributes => {:name => 'issue[custom_field_values][9]'}
-    
+
     # System wide custom field
     assert CustomField.find(1).is_for_all?
     assert_tag :select, :attributes => {:name => 'issue[custom_field_values][1]'}
@@ -1088,7 +1162,10 @@
     get :bulk_edit, :ids => [1, 2, 6]
     assert_response :success
     assert_template 'bulk_edit'
-    
+
+    # Can not set issues from different projects as children of an issue
+    assert_no_tag :input, :attributes => {:name => 'issue[parent_issue_id]'}
+
     # Project specific custom field, date type
     field = CustomField.find(9)
     assert !field.is_for_all?
@@ -1096,6 +1173,38 @@
     assert_no_tag :input, :attributes => {:name => 'issue[custom_field_values][9]'}
   end
 
+  def test_get_bulk_edit_with_user_custom_field
+    field = IssueCustomField.create!(:name => 'Tester', :field_format => 'user', :is_for_all => true)
+
+    @request.session[:user_id] = 2
+    get :bulk_edit, :ids => [1, 2]
+    assert_response :success
+    assert_template 'bulk_edit'
+
+    assert_tag :select,
+      :attributes => {:name => "issue[custom_field_values][#{field.id}]"},
+      :children => {
+        :only => {:tag => 'option'},
+        :count => Project.find(1).users.count + 1
+      }
+  end
+
+  def test_get_bulk_edit_with_version_custom_field
+    field = IssueCustomField.create!(:name => 'Affected version', :field_format => 'version', :is_for_all => true)
+
+    @request.session[:user_id] = 2
+    get :bulk_edit, :ids => [1, 2]
+    assert_response :success
+    assert_template 'bulk_edit'
+
+    assert_tag :select,
+      :attributes => {:name => "issue[custom_field_values][#{field.id}]"},
+      :children => {
+        :only => {:tag => 'option'},
+        :count => Project.find(1).versions.count + 1
+      }
+  end
+
   def test_bulk_update
     @request.session[:user_id] = 2
     # update issues priority
@@ -1103,11 +1212,11 @@
                                      :issue => {:priority_id => 7,
                                                 :assigned_to_id => '',
                                                 :custom_field_values => {'2' => ''}}
-                                     
+
     assert_response 302
     # check that the issues were updated
     assert_equal [7, 7], Issue.find_all_by_id([1, 2]).collect {|i| i.priority.id}
-    
+
     issue = Issue.find(1)
     journal = issue.journals.find(:first, :order => 'created_on DESC')
     assert_equal '125', issue.custom_value_for(2).value
@@ -1122,11 +1231,11 @@
                                      :issue => {:priority_id => 7,
                                                 :assigned_to_id => '',
                                                 :custom_field_values => {'2' => ''}}
-    
+
     assert_response 302
     # check that the issues were updated
     assert_equal [7, 7, 7], Issue.find([1,2,6]).map(&:priority_id)
-    
+
     issue = Issue.find(1)
     journal = issue.journals.find(:first, :order => 'created_on DESC')
     assert_equal '125', issue.custom_value_for(2).value
@@ -1147,7 +1256,7 @@
     assert_response 403
     assert_not_equal "Bulk should fail", Journal.last.notes
   end
-    
+
   def test_bullk_update_should_send_a_notification
     @request.session[:user_id] = 2
     ActionMailer::Base.deliveries.clear
@@ -1173,12 +1282,25 @@
                                      :issue => {:priority_id => '',
                                                 :assigned_to_id => '',
                                                 :status_id => '5'}
-                                     
+
     assert_response 302
     issue = Issue.find(1)
     assert issue.closed?
   end
 
+  def test_bulk_update_parent_id
+    @request.session[:user_id] = 2
+    post :bulk_update, :ids => [1, 3],
+      :notes => 'Bulk editing parent',
+      :issue => {:priority_id => '', :assigned_to_id => '', :status_id => '', :parent_issue_id => '2'}
+
+    assert_response 302
+    parent = Issue.find(2)
+    assert_equal parent.id, Issue.find(1).parent_id
+    assert_equal parent.id, Issue.find(3).parent_id
+    assert_equal [1, 3], parent.children.collect(&:id).sort
+  end
+
   def test_bulk_update_custom_field
     @request.session[:user_id] = 2
     # update issues priority
@@ -1186,9 +1308,9 @@
                                      :issue => {:priority_id => '',
                                                 :assigned_to_id => '',
                                                 :custom_field_values => {'2' => '777'}}
-                                     
+
     assert_response 302
-    
+
     issue = Issue.find(1)
     journal = issue.journals.find(:first, :order => 'created_on DESC')
     assert_equal '777', issue.custom_value_for(2).value
@@ -1206,7 +1328,7 @@
     # check that the issues were updated
     assert_nil Issue.find(2).assigned_to
   end
-  
+
   def test_post_bulk_update_should_allow_fixed_version_to_be_set_to_a_subproject
     @request.session[:user_id] = 2
 
@@ -1235,7 +1357,7 @@
     assert_response :redirect
     assert_redirected_to :controller => 'issues', :action => 'index', :project_id => Project.find(1).identifier
   end
-  
+
   def test_destroy_issue_with_no_time_entries
     assert_nil TimeEntry.find_by_issue_id(2)
     @request.session[:user_id] = 2
@@ -1269,7 +1391,7 @@
     assert_nil TimeEntry.find(1).issue_id
     assert_nil TimeEntry.find(2).issue_id
   end
-  
+
   def test_destroy_issues_and_reassign_time_entries_to_another_issue
     @request.session[:user_id] = 2
     post :destroy, :ids => [1, 3], :todo => 'reassign', :reassign_to_id => 2
@@ -1278,14 +1400,26 @@
     assert_equal 2, TimeEntry.find(1).issue_id
     assert_equal 2, TimeEntry.find(2).issue_id
   end
-  
+
   def test_destroy_issues_from_different_projects
     @request.session[:user_id] = 2
     post :destroy, :ids => [1, 2, 6], :todo => 'destroy'
     assert_redirected_to :controller => 'issues', :action => 'index'
     assert !(Issue.find_by_id(1) || Issue.find_by_id(2) || Issue.find_by_id(6))
   end
-  
+
+  def test_destroy_parent_and_child_issues
+    parent = Issue.generate!(:project_id => 1, :tracker_id => 1)
+    child = Issue.generate!(:project_id => 1, :tracker_id => 1, :parent_issue_id => parent.id)
+    assert child.is_descendant_of?(parent.reload)
+
+    @request.session[:user_id] = 2
+    assert_difference 'Issue.count', -2 do
+      post :destroy, :ids => [parent.id, child.id], :todo => 'destroy'
+    end
+    assert_response 302
+  end
+
   def test_default_search_scope
     get :index
     assert_tag :div, :attributes => {:id => 'quick-search'},
--- a/test/functional/journals_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/journals_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -5,12 +5,12 @@
 # modify it under the terms of the 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.
@@ -22,27 +22,28 @@
 class JournalsController; def rescue_action(e) raise e end; end
 
 class JournalsControllerTest < ActionController::TestCase
-  fixtures :projects, :users, :members, :member_roles, :roles, :issues, :journals, :journal_details, :enabled_modules
-  
+  fixtures :projects, :users, :members, :member_roles, :roles, :issues, :journals, :journal_details, :enabled_modules,
+    :trackers, :issue_statuses, :enumerations, :custom_fields, :custom_values, :custom_fields_projects
+
   def setup
     @controller = JournalsController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
   end
-  
+
   def test_index
     get :index, :project_id => 1
     assert_response :success
     assert_not_nil assigns(:journals)
     assert_equal 'application/atom+xml', @response.content_type
   end
-  
+
   def test_diff
     get :diff, :id => 3, :detail_id => 4
     assert_response :success
     assert_template 'diff'
-    
+
     assert_tag 'span',
       :attributes => {:class => 'diff_out'},
       :content => /removed/
@@ -50,14 +51,14 @@
       :attributes => {:class => 'diff_in'},
       :content => /added/
   end
-  
+
   def test_reply_to_issue
     @request.session[:user_id] = 2
     get :new, :id => 6
     assert_response :success
     assert_select_rjs :show, "update"
   end
-  
+
   def test_reply_to_issue_without_permission
     @request.session[:user_id] = 7
     get :new, :id => 6
@@ -80,7 +81,7 @@
       assert_select 'textarea'
     end
   end
-  
+
   def test_post_edit
     @request.session[:user_id] = 1
     xhr :post, :edit, :id => 2, :notes => 'Updated notes'
@@ -88,7 +89,7 @@
     assert_select_rjs :replace, 'journal-2-notes'
     assert_equal 'Updated notes', Journal.find(2).notes
   end
-  
+
   def test_post_edit_with_empty_notes
     @request.session[:user_id] = 1
     xhr :post, :edit, :id => 2, :notes => ''
--- a/test/functional/previews_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/previews_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,3 +1,20 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
 require File.expand_path('../../test_helper', __FILE__)
 
 class PreviewsControllerTest < ActionController::TestCase
@@ -18,6 +35,15 @@
     assert_template 'preview'
     assert_not_nil assigns(:notes)
   end
+  
+  def test_preview_journal_notes_for_update
+    @request.session[:user_id] = 2
+    post :issue, :project_id => '1', :id => 1, :notes => 'Foo'
+    assert_response :success
+    assert_template 'preview'
+    assert_not_nil assigns(:notes)
+    assert_tag :p, :content => 'Foo'
+  end
 
   def test_news
     get :news, :project_id => 1,
--- a/test/functional/projects_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/projects_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -33,13 +33,13 @@
     @request.session[:user_id] = nil
     Setting.default_language = 'en'
   end
-  
+
   def test_index
     get :index
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:projects)
-    
+
     assert_tag :ul, :child => {:tag => 'li',
                                :descendant => {:tag => 'a', :content => 'eCookbook'},
                                :child => { :tag => 'ul',
@@ -48,18 +48,18 @@
                                                            }
                                           }
                                }
-                               
+
     assert_no_tag :a, :content => /Private child of eCookbook/
   end
-  
+
   def test_index_atom
     get :index, :format => 'atom'
     assert_response :success
     assert_template 'common/feed.atom.rxml'
     assert_select 'feed>title', :text => 'Redmine: Latest projects'
-    assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_by(User.current))
+    assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_condition(User.current))
   end
-  
+
   context "#index" do
     context "by non-admin user with view_time_entries permission" do
       setup do
@@ -71,7 +71,7 @@
         assert_tag :a, :attributes => {:href => '/time_entries'}
       end
     end
-    
+
     context "by non-admin user without view_time_entries permission" do
       setup do
         Role.find(2).remove_permission! :view_time_entries
@@ -84,15 +84,15 @@
         assert_template 'index'
         assert_no_tag :a, :attributes => {:href => '/time_entries'}
       end
-    end 
+    end
   end
-  
+
   context "#new" do
     context "by admin user" do
       setup do
         @request.session[:user_id] = 1
       end
-      
+
       should "accept get" do
         get :new
         assert_response :success
@@ -121,7 +121,7 @@
         Role.find(1).add_permission! :add_subprojects
         @request.session[:user_id] = 2
       end
-      
+
       should "accept get" do
         get :new, :parent_id => 'ecookbook'
         assert_response :success
@@ -134,7 +134,7 @@
                                :child => {:tag => 'option', :attributes => {:value => ''}}
       end
     end
-    
+
   end
 
   context "POST :create" do
@@ -142,11 +142,11 @@
       setup do
         @request.session[:user_id] = 1
       end
-      
+
       should "create a new project" do
         post :create,
           :project => {
-            :name => "blog", 
+            :name => "blog",
             :description => "weblog",
             :homepage => 'http://weblog',
             :identifier => "blog",
@@ -158,11 +158,11 @@
             :enabled_module_names => ['issue_tracking', 'news', 'repository']
           }
         assert_redirected_to '/projects/blog/settings'
-        
+
         project = Project.find_by_name('blog')
         assert_kind_of Project, project
         assert project.active?
-        assert_equal 'weblog', project.description 
+        assert_equal 'weblog', project.description
         assert_equal 'http://weblog', project.homepage
         assert_equal true, project.is_public?
         assert_nil project.parent
@@ -171,9 +171,9 @@
         assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort
         assert project.issue_custom_fields.include?(IssueCustomField.find(9))
       end
-      
+
       should "create a new subproject" do
-        post :create, :project => { :name => "blog", 
+        post :create, :project => { :name => "blog",
                                  :description => "weblog",
                                  :identifier => "blog",
                                  :is_public => 1,
@@ -181,21 +181,21 @@
                                  :parent_id => 1
                                 }
         assert_redirected_to '/projects/blog/settings'
-        
+
         project = Project.find_by_name('blog')
         assert_kind_of Project, project
         assert_equal Project.find(1), project.parent
       end
     end
-    
+
     context "by non-admin user with add_project permission" do
       setup do
         Role.non_member.add_permission! :add_project
         @request.session[:user_id] = 9
       end
-      
+
       should "accept create a Project" do
-        post :create, :project => { :name => "blog", 
+        post :create, :project => { :name => "blog",
                                  :description => "weblog",
                                  :identifier => "blog",
                                  :is_public => 1,
@@ -203,24 +203,24 @@
                                  :tracker_ids => ['1', '3'],
                                  :enabled_module_names => ['issue_tracking', 'news', 'repository']
                                 }
-        
+
         assert_redirected_to '/projects/blog/settings'
-        
+
         project = Project.find_by_name('blog')
         assert_kind_of Project, project
-        assert_equal 'weblog', project.description 
+        assert_equal 'weblog', project.description
         assert_equal true, project.is_public?
         assert_equal [1, 3], project.trackers.map(&:id).sort
         assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort
-        
+
         # User should be added as a project member
         assert User.find(9).member_of?(project)
         assert_equal 1, project.members.size
       end
-      
+
       should "fail with parent_id" do
         assert_no_difference 'Project.count' do
-          post :create, :project => { :name => "blog", 
+          post :create, :project => { :name => "blog",
                                    :description => "weblog",
                                    :identifier => "blog",
                                    :is_public => 1,
@@ -234,16 +234,16 @@
         assert_not_nil project.errors.on(:parent_id)
       end
     end
-    
+
     context "by non-admin user with add_subprojects permission" do
       setup do
         Role.find(1).remove_permission! :add_project
         Role.find(1).add_permission! :add_subprojects
         @request.session[:user_id] = 2
       end
-      
+
       should "create a project with a parent_id" do
-        post :create, :project => { :name => "blog", 
+        post :create, :project => { :name => "blog",
                                  :description => "weblog",
                                  :identifier => "blog",
                                  :is_public => 1,
@@ -253,10 +253,10 @@
         assert_redirected_to '/projects/blog/settings'
         project = Project.find_by_name('blog')
       end
-      
+
       should "fail without parent_id" do
         assert_no_difference 'Project.count' do
-          post :create, :project => { :name => "blog", 
+          post :create, :project => { :name => "blog",
                                    :description => "weblog",
                                    :identifier => "blog",
                                    :is_public => 1,
@@ -268,11 +268,11 @@
         assert_kind_of Project, project
         assert_not_nil project.errors.on(:parent_id)
       end
-      
+
       should "fail with unauthorized parent_id" do
         assert !User.find(2).member_of?(Project.find(6))
         assert_no_difference 'Project.count' do
-          post :create, :project => { :name => "blog", 
+          post :create, :project => { :name => "blog",
                                    :description => "weblog",
                                    :identifier => "blog",
                                    :is_public => 1,
@@ -287,13 +287,29 @@
       end
     end
   end
-  
+
+  def test_create_should_preserve_modules_on_validation_failure
+    with_settings :default_projects_modules => ['issue_tracking', 'repository'] do
+      @request.session[:user_id] = 1
+      assert_no_difference 'Project.count' do
+        post :create, :project => {
+          :name => "blog",
+          :identifier => "",
+          :enabled_module_names => %w(issue_tracking news)
+        }
+      end
+      assert_response :success
+      project = assigns(:project)
+      assert_equal %w(issue_tracking news), project.enabled_module_names.sort
+    end
+  end
+
   def test_create_should_not_accept_get
     @request.session[:user_id] = 1
     get :create
     assert_response :method_not_allowed
   end
-  
+
   def test_show_by_id
     get :show, :id => 1
     assert_response :success
@@ -307,7 +323,7 @@
     assert_template 'show'
     assert_not_nil assigns(:project)
     assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
-    
+
     assert_tag 'li', :content => /Development status/
   end
 
@@ -317,10 +333,10 @@
     assert_response :success
     assert_template 'show'
     assert_not_nil assigns(:project)
-    
+
     assert_no_tag 'li', :content => /Development status/
   end
-  
+
   def test_show_should_not_fail_when_custom_values_are_nil
     project = Project.find_by_identifier('ecookbook')
     project.custom_values.first.update_attribute(:value, nil)
@@ -330,17 +346,17 @@
     assert_not_nil assigns(:project)
     assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
   end
-  
+
   def show_archived_project_should_be_denied
     project = Project.find_by_identifier('ecookbook')
     project.archive!
-    
+
     get :show, :id => 'ecookbook'
     assert_response 403
     assert_nil assigns(:project)
     assert_tag :tag => 'p', :content => /archived/
   end
-  
+
   def test_private_subprojects_hidden
     get :show, :id => 'ecookbook'
     assert_response :success
@@ -355,14 +371,14 @@
     assert_template 'show'
     assert_tag :tag => 'a', :content => /Private child/
   end
-  
+
   def test_settings
     @request.session[:user_id] = 2 # manager
     get :settings, :id => 1
     assert_response :success
     assert_template 'settings'
   end
-  
+
   def test_update
     @request.session[:user_id] = 2 # manager
     post :update, :id => 1, :project => {:name => 'Test changed name',
@@ -375,7 +391,7 @@
   def test_modules
     @request.session[:user_id] = 2
     Project.find(1).enabled_module_names = ['issue_tracking', 'news']
-    
+
     post :modules, :id => 1, :enabled_module_names => ['issue_tracking', 'repository', 'documents']
     assert_redirected_to '/projects/ecookbook/settings/modules'
     assert_equal ['documents', 'issue_tracking', 'repository'], Project.find(1).enabled_module_names.sort
@@ -386,7 +402,7 @@
     get :modules, :id => 1
     assert_response :method_not_allowed
   end
-  
+
   def test_get_destroy
     @request.session[:user_id] = 1 # admin
     get :destroy, :id => 1
@@ -401,14 +417,14 @@
     assert_redirected_to '/admin/projects'
     assert_nil Project.find_by_id(1)
   end
-  
+
   def test_archive
     @request.session[:user_id] = 1 # admin
     post :archive, :id => 1
     assert_redirected_to '/admin/projects'
     assert !Project.find(1).active?
   end
-  
+
   def test_unarchive
     @request.session[:user_id] = 1 # admin
     Project.find(1).archive
@@ -416,7 +432,7 @@
     assert_redirected_to '/admin/projects'
     assert Project.find(1).active?
   end
-  
+
   def test_project_breadcrumbs_should_be_limited_to_3_ancestors
     CustomField.delete_all
     parent = nil
@@ -427,12 +443,12 @@
       assert_tag :h1, :parent => { :attributes => {:id => 'header'}},
                       :children => { :count => [i, 3].min,
                                      :only => { :tag => 'a' } }
-                                     
+
       parent = p
     end
   end
 
-  def test_copy_with_project
+  def test_get_copy
     @request.session[:user_id] = 1 # admin
     get :copy, :id => 1
     assert_response :success
@@ -440,37 +456,61 @@
     assert assigns(:project)
     assert_equal Project.find(1).description, assigns(:project).description
     assert_nil assigns(:project).id
+
+    assert_tag :tag => 'input',
+      :attributes => {:name => 'project[enabled_module_names][]', :value => 'issue_tracking'}
   end
 
-  def test_copy_without_project
+  def test_get_copy_without_project
     @request.session[:user_id] = 1 # admin
     get :copy
     assert_response :redirect
     assert_redirected_to :controller => 'admin', :action => 'projects'
   end
 
-  context "POST :copy" do
-    should "TODO: test the rest of the method"
+  def test_post_copy_should_copy_requested_items
+    @request.session[:user_id] = 1 # admin
+    CustomField.delete_all
 
-    should "redirect to the project settings when successful" do
-      @request.session[:user_id] = 1 # admin
-      post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'}
-      assert_response :redirect
-      assert_redirected_to :controller => 'projects', :action => 'settings', :id => 'unique-copy'
+    assert_difference 'Project.count' do
+      post :copy, :id => 1,
+        :project => {
+          :name => 'Copy',
+          :identifier => 'unique-copy',
+          :tracker_ids => ['1', '2', '3', ''],
+          :enabled_module_names => %w(issue_tracking time_tracking)
+        },
+        :only => %w(issues versions)
     end
+    project = Project.find('unique-copy')
+    source = Project.find(1)
+    assert_equal %w(issue_tracking time_tracking), project.enabled_module_names.sort
+
+    assert_equal source.versions.count, project.versions.count, "All versions were not copied"
+    # issues assigned to a closed version won't be copied
+    assert_equal source.issues.select {|i| i.fixed_version.nil? || i.fixed_version.open?}.size,
+                 project.issues.count, "All issues were not copied"
+    assert_equal 0, project.members.count
+  end
+
+  def test_post_copy_should_redirect_to_settings_when_successful
+    @request.session[:user_id] = 1 # admin
+    post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'}
+    assert_response :redirect
+    assert_redirected_to :controller => 'projects', :action => 'settings', :id => 'unique-copy'
   end
 
   def test_jump_should_redirect_to_active_tab
     get :show, :id => 1, :jump => 'issues'
     assert_redirected_to '/projects/ecookbook/issues'
   end
-  
+
   def test_jump_should_not_redirect_to_inactive_tab
     get :show, :id => 3, :jump => 'documents'
     assert_response :success
     assert_template 'show'
   end
-  
+
   def test_jump_should_not_redirect_to_unknown_tab
     get :show, :id => 3, :jump => 'foobar'
     assert_response :success
@@ -486,13 +526,13 @@
   end
   # Don't use this hook now
   Redmine::Hook.clear_listeners
-  
+
   def test_hook_response
     Redmine::Hook.add_listener(ProjectBasedTemplate)
     get :show, :id => 1
     assert_tag :tag => 'link', :attributes => {:href => '/stylesheets/ecookbook.css'},
                                :parent => {:tag => 'head'}
-    
+
     Redmine::Hook.clear_listeners
   end
 end
--- a/test/functional/queries_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/queries_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -64,9 +64,9 @@
          :project_id => 'ecookbook', 
          :confirm => '1',
          :default_columns => '1',
-         :fields => ["status_id", "assigned_to_id"],
-         :operators => {"assigned_to_id" => "=", "status_id" => "o"},
-         :values => { "assigned_to_id" => ["1"], "status_id" => ["1"]},
+         :f => ["status_id", "assigned_to_id"],
+         :op => {"assigned_to_id" => "=", "status_id" => "o"},
+         :v => { "assigned_to_id" => ["1"], "status_id" => ["1"]},
          :query => {"name" => "test_new_project_public_query", "is_public" => "1"}
          
     q = Query.find_by_name('test_new_project_public_query')
@@ -101,7 +101,8 @@
          :fields => ["status_id", "assigned_to_id"],
          :operators => {"assigned_to_id" => "=", "status_id" => "o"},
          :values => { "assigned_to_id" => ["me"], "status_id" => ["1"]},
-         :query => {"name" => "test_new_global_private_query", "is_public" => "1", "column_names" => ["", "tracker", "subject", "priority", "category"]}
+         :query => {"name" => "test_new_global_private_query", "is_public" => "1"},
+         :c => ["", "tracker", "subject", "priority", "category"]
          
     q = Query.find_by_name('test_new_global_private_query')
     assert_redirected_to :controller => 'issues', :action => 'index', :project_id => nil, :query_id => q
--- a/test/functional/repositories_bazaar_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/repositories_bazaar_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -116,12 +116,12 @@
       get :diff, :id => 3, :rev => 3
       assert_response :success
       assert_template 'diff'
-      # Line 22 removed
+      # Line 11 removed
       assert_tag :tag => 'th',
-                 :content => /2/,
+                 :content => /11/,
                  :sibling => { :tag => 'td', 
-                               :attributes => { :class => /diff_in/ },
-                               :content => /Main purpose/ }
+                               :attributes => { :class => /diff_out/ },
+                               :content => /Display more information/ }
     end
     
     def test_annotate
--- a/test/functional/repositories_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/repositories_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -22,15 +22,17 @@
 class RepositoriesController; def rescue_action(e) raise e end; end
 
 class RepositoriesControllerTest < ActionController::TestCase
-  fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
-  
+  fixtures :projects, :users, :roles, :members, :member_roles,
+           :repositories, :issues, :issue_statuses, :changesets, :changes,
+           :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
+
   def setup
     @controller = RepositoriesController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
   end
-  
+
   def test_revisions
     get :revisions, :id => 1
     assert_response :success
@@ -44,7 +46,7 @@
     assert_not_nil assigns(:changeset)
     assert_equal "1", assigns(:changeset).revision
   end
-  
+
   def test_revision_with_before_nil_and_afer_normal
     get :revision, {:id => 1, :rev => 1}
     assert_response :success
@@ -56,24 +58,30 @@
         :child => { :tag => "a", :attributes => { :href => '/projects/ecookbook/repository/revisions/2'}
     }
   end
-  
+
   def test_graph_commits_per_month
     get :graph, :id => 1, :graph => 'commits_per_month'
     assert_response :success
     assert_equal 'image/svg+xml', @response.content_type
   end
-  
+
   def test_graph_commits_per_author
     get :graph, :id => 1, :graph => 'commits_per_author'
     assert_response :success
     assert_equal 'image/svg+xml', @response.content_type
   end
-  
+
   def test_committers
     @request.session[:user_id] = 2
     # add a commit with an unknown user
-    Changeset.create!(:repository => Project.find(1).repository, :committer => 'foo', :committed_on => Time.now, :revision => 100, :comments => 'Committed by foo.')
-    
+    Changeset.create!(
+        :repository => Project.find(1).repository,
+        :committer  => 'foo',
+        :committed_on => Time.now,
+        :revision => 100,
+        :comments => 'Committed by foo.'
+     )
+
     get :committers, :id => 1
     assert_response :success
     assert_template 'committers'
@@ -94,8 +102,13 @@
   def test_map_committers
     @request.session[:user_id] = 2
     # add a commit with an unknown user
-    c = Changeset.create!(:repository => Project.find(1).repository, :committer => 'foo', :committed_on => Time.now, :revision => 100, :comments => 'Committed by foo.')
-    
+    c = Changeset.create!(
+            :repository => Project.find(1).repository,
+            :committer  => 'foo',
+            :committed_on => Time.now,
+            :revision => 100,
+            :comments => 'Committed by foo.'
+          )
     assert_no_difference "Changeset.count(:conditions => 'user_id = 3')" do
       post :committers, :id => 1, :committers => { '0' => ['foo', '2'], '1' => ['dlopper', '3']}
       assert_redirected_to '/projects/ecookbook/repository/committers'
--- a/test/functional/repositories_cvs_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/repositories_cvs_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -39,24 +39,14 @@
     User.current = nil
 
     @project = Project.find(PRJ_ID)
-    @repository  = Repository::Cvs.create(:project => Project.find(PRJ_ID),
-                                          :root_url => REPOSITORY_PATH,
-                                          :url => MODULE_NAME,
+    @repository  = Repository::Cvs.create(:project      => Project.find(PRJ_ID),
+                                          :root_url     => REPOSITORY_PATH,
+                                          :url          => MODULE_NAME,
                                           :log_encoding => 'UTF-8')
     assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)
-    def test_show
-      @repository.fetch_changesets
-      @repository.reload
-      get :show, :id => PRJ_ID
-      assert_response :success
-      assert_template 'show'
-      assert_not_nil assigns(:entries)
-      assert_not_nil assigns(:changesets)
-    end
-    
     def test_browse_root
       @repository.fetch_changesets
       @repository.reload
@@ -65,14 +55,17 @@
       assert_template 'show'
       assert_not_nil assigns(:entries)
       assert_equal 3, assigns(:entries).size
-      
+
       entry = assigns(:entries).detect {|e| e.name == 'images'}
       assert_equal 'dir', entry.kind
 
       entry = assigns(:entries).detect {|e| e.name == 'README'}
       assert_equal 'file', entry.kind
+
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
     end
-    
+
     def test_browse_directory
       @repository.fetch_changesets
       @repository.reload
@@ -86,7 +79,7 @@
       assert_equal 'file', entry.kind
       assert_equal 'images/edit.png', entry.path
     end
-    
+
     def test_browse_at_given_revision
       @repository.fetch_changesets
       @repository.reload
@@ -96,17 +89,18 @@
       assert_not_nil assigns(:entries)
       assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
     end
-  
+
     def test_entry
       @repository.fetch_changesets
       @repository.reload
       get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'entry'
-      assert_no_tag :tag => 'td', :attributes => { :class => /line-code/},
-                                  :content => /before_filter/
+      assert_no_tag :tag => 'td',
+                    :attributes => { :class => /line-code/},
+                    :content => /before_filter/
     end
-    
+
     def test_entry_at_given_revision
       # changesets must be loaded
       @repository.fetch_changesets
@@ -115,18 +109,20 @@
       assert_response :success
       assert_template 'entry'
       # this line was removed in r3
-      assert_tag :tag => 'td', :attributes => { :class => /line-code/},
-                               :content => /before_filter/
+      assert_tag :tag => 'td',
+                 :attributes => { :class => /line-code/},
+                 :content => /before_filter/
     end
-    
+
     def test_entry_not_found
       @repository.fetch_changesets
       @repository.reload
       get :entry, :id => PRJ_ID, :path => ['sources', 'zzz.c']
-      assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
-                                :content => /The entry or revision was not found in the repository/
+      assert_tag :tag => 'p',
+                 :attributes => { :id => /errorExplanation/ },
+                 :content => /The entry or revision was not found in the repository/
     end
-  
+
     def test_entry_download
       @repository.fetch_changesets
       @repository.reload
@@ -143,7 +139,7 @@
       assert_not_nil assigns(:entry)
       assert_equal 'sources', assigns(:entry).name
     end
-    
+
     def test_diff
       @repository.fetch_changesets
       @repository.reload
@@ -151,11 +147,11 @@
       assert_response :success
       assert_template 'diff'
       assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_out' },
-                               :content => /watched.remove_watcher/
+                               :content => /before_filter :require_login/
       assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
-                               :content => /watched.remove_all_watcher/
+                               :content => /with one change/
     end
-                               
+
     def test_diff_new_files
       @repository.fetch_changesets
       @repository.reload
@@ -171,7 +167,7 @@
       assert_tag :tag => 'th', :attributes => { :class => 'filename' },
                                :content => /test\/images\/edit.png/
       assert_tag :tag => 'th', :attributes => { :class => 'filename' },
-                               :content => /test\/sources\/watchers_controller.rb/                        
+                               :content => /test\/sources\/watchers_controller.rb/
     end
 
     def test_annotate
@@ -181,23 +177,33 @@
       assert_response :success
       assert_template 'annotate'
       # 1.1 line
-      assert_tag :tag => 'th', :attributes => { :class => 'line-num' },
-                               :content => '18',
-                               :sibling => { :tag => 'td', :attributes => { :class => 'revision' },
-                                             :content => /1.1/,
-                                             :sibling => { :tag => 'td', :attributes => { :class => 'author' },
-                                                           :content => /LANG/
-                                           }
-                               }
+      assert_tag :tag => 'th',
+                 :attributes => { :class => 'line-num' },
+                 :content => '18',
+                 :sibling => {
+                   :tag => 'td',
+                   :attributes => { :class => 'revision' },
+                   :content => /1.1/,
+                   :sibling => {
+                      :tag => 'td',
+                      :attributes => { :class => 'author' },
+                      :content => /LANG/
+                        }
+                   }
       # 1.2 line
-      assert_tag :tag => 'th', :attributes => { :class => 'line-num' },
-                               :content => '32',
-                               :sibling => { :tag => 'td', :attributes => { :class => 'revision' },
-                                             :content => /1.2/,
-                                             :sibling => { :tag => 'td', :attributes => { :class => 'author' },
-                                                           :content => /LANG/
-                                           }
-                               }
+      assert_tag :tag => 'th',
+                 :attributes => { :class => 'line-num' },
+                 :content => '32',
+                 :sibling => {
+                     :tag => 'td',
+                     :attributes => { :class => 'revision' },
+                     :content => /1.2/,
+                     :sibling => {
+                        :tag => 'td',
+                        :attributes => { :class => 'author' },
+                        :content => /LANG/
+                        }
+                   }
     end
   else
     puts "CVS test repository NOT FOUND. Skipping functional tests !!!"
--- a/test/functional/repositories_darcs_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/repositories_darcs_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -41,16 +41,6 @@
   end
 
   if File.directory?(REPOSITORY_PATH)
-    def test_show
-      @repository.fetch_changesets
-      @repository.reload
-      get :show, :id => PRJ_ID
-      assert_response :success
-      assert_template 'show'
-      assert_not_nil assigns(:entries)
-      assert_not_nil assigns(:changesets)
-    end
-
     def test_browse_root
       @repository.fetch_changesets
       @repository.reload
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/functional/repositories_filesystem_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,122 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
+require File.expand_path('../../test_helper', __FILE__)
+require 'repositories_controller'
+
+# Re-raise errors caught by the controller.
+class RepositoriesController; def rescue_action(e) raise e end; end
+
+class RepositoriesFilesystemControllerTest < ActionController::TestCase
+  fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
+
+  # No '..' in the repository path
+  REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/filesystem_repository'
+  PRJ_ID = 3
+
+  def setup
+    @ruby19_non_utf8_pass =
+        (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
+    @controller = RepositoriesController.new
+    @request    = ActionController::TestRequest.new
+    @response   = ActionController::TestResponse.new
+    User.current = nil
+    Setting.enabled_scm << 'Filesystem' unless Setting.enabled_scm.include?('Filesystem')
+    @repository = Repository::Filesystem.create(
+                      :project       => Project.find(PRJ_ID),
+                      :url           => REPOSITORY_PATH,
+                      :path_encoding => ''
+                      )
+    assert @repository
+  end
+
+  if File.directory?(REPOSITORY_PATH)
+    def test_browse_root
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
+      assert_response :success
+      assert_template 'show'
+      assert_not_nil assigns(:entries)
+      assert assigns(:entries).size > 0
+      assert_not_nil assigns(:changesets)
+      assert assigns(:changesets).size == 0
+    end
+
+    def test_show_no_extension
+      get :entry, :id => PRJ_ID, :path => ['test']
+      assert_response :success
+      assert_template 'entry'
+      assert_tag :tag => 'th',
+                 :content => '1',
+                 :attributes => { :class => 'line-num' },
+                 :sibling => { :tag => 'td', :content => /TEST CAT/ }
+    end
+
+    def test_entry_download_no_extension
+      get :entry, :id => PRJ_ID, :path => ['test'], :format => 'raw'
+      assert_response :success
+      assert_equal 'application/octet-stream', @response.content_type
+    end
+
+    def test_show_non_ascii_contents
+      with_settings :repositories_encodings => 'UTF-8,EUC-JP' do
+        get :entry, :id => PRJ_ID, :path => ['japanese', 'euc-jp.txt']
+        assert_response :success
+        assert_template 'entry'
+        assert_tag :tag => 'th',
+                   :content => '2',
+                   :attributes => { :class => 'line-num' },
+                   :sibling => { :tag => 'td', :content => /japanese/ }
+        if @ruby19_non_utf8_pass
+          puts "TODO: show repository file contents test fails in Ruby 1.9 " +
+               "and Encoding.default_external is not UTF-8. " +
+               "Current value is '#{Encoding.default_external.to_s}'"
+        else
+          str_japanese = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"
+          str_japanese.force_encoding('UTF-8') if str_japanese.respond_to?(:force_encoding)
+          assert_tag :tag => 'th',
+                     :content => '3',
+                     :attributes => { :class => 'line-num' },
+                     :sibling => { :tag => 'td', :content => /#{str_japanese}/ }
+        end
+      end
+    end
+
+    def test_show_utf16
+      with_settings :repositories_encodings => 'UTF-16' do
+        get :entry, :id => PRJ_ID, :path => ['japanese', 'utf-16.txt']
+        assert_response :success
+        assert_tag :tag => 'th',
+                   :content => '2',
+                   :attributes => { :class => 'line-num' },
+                   :sibling => { :tag => 'td', :content => /japanese/ }
+      end
+    end
+
+    def test_show_text_file_should_send_if_too_big
+      with_settings :file_max_size_displayed => 1 do
+        get :entry, :id => PRJ_ID, :path => ['japanese', 'big-file.txt']
+        assert_response :success
+        assert_equal 'text/plain', @response.content_type
+      end
+    end
+  else
+    puts "Filesystem test repository NOT FOUND. Skipping functional tests !!!"
+    def test_fake; assert true end
+  end
+end
--- a/test/functional/repositories_git_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/repositories_git_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -27,27 +27,34 @@
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
   REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
+  PRJ_ID     = 3
+  CHAR_1_HEX = "\xc3\x9c"
 
   def setup
+    @ruby19_non_utf8_pass =
+      (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
+
     @controller = RepositoriesController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
-    @repository = Repository::Git.create(:project => Project.find(3), :url => REPOSITORY_PATH)
+    @repository = Repository::Git.create(
+                      :project => Project.find(3),
+                      :url     => REPOSITORY_PATH,
+                      :path_encoding => 'ISO-8859-1'
+                      )
     assert @repository
+    @char_1        = CHAR_1_HEX.dup
+    if @char_1.respond_to?(:force_encoding)
+      @char_1.force_encoding('UTF-8')
+    end
   end
 
   if File.directory?(REPOSITORY_PATH)
-    def test_show
-      get :show, :id => 3
-      assert_response :success
-      assert_template 'show'
-      assert_not_nil assigns(:entries)
-      assert_not_nil assigns(:changesets)
-    end
-    
     def test_browse_root
-      get :show, :id => 3
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -61,10 +68,14 @@
       assert assigns(:entries).detect {|e| e.name == 'renamed_test.txt' && e.kind == 'file'}
       assert assigns(:entries).detect {|e| e.name == 'filemane with spaces.txt' && e.kind == 'file'}
       assert assigns(:entries).detect {|e| e.name == ' filename with a leading space.txt ' && e.kind == 'file'}
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
     end
 
     def test_browse_branch
-      get :show, :id => 3, :rev => 'test_branch'
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :rev => 'test_branch'
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -73,10 +84,31 @@
       assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
       assert assigns(:entries).detect {|e| e.name == 'test.txt' && e.kind == 'file'}
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
+    end
+
+    def test_browse_tag
+      @repository.fetch_changesets
+      @repository.reload
+       [
+        "tag00.lightweight",
+        "tag01.annotated",
+       ].each do |t1|
+        get :show, :id => PRJ_ID, :rev => t1
+        assert_response :success
+        assert_template 'show'
+        assert_not_nil assigns(:entries)
+        assigns(:entries).size > 0
+        assert_not_nil assigns(:changesets)
+        assigns(:changesets).size > 0
+      end
     end
 
     def test_browse_directory
-      get :show, :id => 3, :path => ['images']
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -85,43 +117,71 @@
       assert_not_nil entry
       assert_equal 'file', entry.kind
       assert_equal 'images/edit.png', entry.path
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
     end
-    
+
     def test_browse_at_given_revision
-      get :show, :id => 3, :path => ['images'], :rev => '7234cb2750b63f47bff735edc50a1c0a433c2518'
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images'],
+          :rev => '7234cb2750b63f47bff735edc50a1c0a433c2518'
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
       assert_equal ['delete.png'], assigns(:entries).collect(&:name)
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
     end
 
     def test_changes
-      get :changes, :id => 3, :path => ['images', 'edit.png']
+      get :changes, :id => PRJ_ID, :path => ['images', 'edit.png']
       assert_response :success
       assert_template 'changes'
       assert_tag :tag => 'h2', :content => 'edit.png'
     end
-    
+
     def test_entry_show
-      get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb']
+      get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'entry'
       # Line 19
       assert_tag :tag => 'th',
-                 :content => /11/,
-                 :attributes => { :class => /line-num/ },
+                 :content => '11',
+                 :attributes => { :class => 'line-num' },
                  :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
     end
-    
+
+    def test_entry_show_latin_1
+      if @ruby19_non_utf8_pass
+        puts_ruby19_non_utf8_pass()
+      else
+        with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+          ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1|
+            get :entry, :id => PRJ_ID,
+                :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
+            assert_response :success
+            assert_template 'entry'
+            assert_tag :tag => 'th',
+                   :content => '1',
+                   :attributes => { :class => 'line-num' },
+                   :sibling => { :tag => 'td',
+                                 :content => /test-#{@char_1}.txt/ }
+          end
+        end
+      end
+    end
+
     def test_entry_download
-      get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
+      get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'],
+          :format => 'raw'
       assert_response :success
       # File content
       assert @response.body.include?('WITHOUT ANY WARRANTY')
     end
-  
+
     def test_directory_entry
-      get :entry, :id => 3, :path => ['sources']
+      get :entry, :id => PRJ_ID, :path => ['sources']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entry)
@@ -131,15 +191,14 @@
     def test_diff
       @repository.fetch_changesets
       @repository.reload
-
       # Full diff of changeset 2f9c0091
-      get :diff, :id => 3, :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
+      get :diff, :id => PRJ_ID, :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
       assert_response :success
       assert_template 'diff'
       # Line 22 removed
       assert_tag :tag => 'th',
                  :content => /22/,
-                 :sibling => { :tag => 'td', 
+                 :sibling => { :tag => 'td',
                                :attributes => { :class => /diff_out/ },
                                :content => /def remove/ }
       assert_tag :tag => 'h2', :content => /2f9c0091/
@@ -148,49 +207,109 @@
     def test_diff_two_revs
       @repository.fetch_changesets
       @repository.reload
-
-      get :diff, :id => 3, :rev    => '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
-                           :rev_to => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
+      get :diff, :id => PRJ_ID,
+          :rev    => '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
+          :rev_to => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
       assert_response :success
       assert_template 'diff'
-
       diff = assigns(:diff)
       assert_not_nil diff
       assert_tag :tag => 'h2', :content => /2f9c0091:61b685fb/
     end
 
+    def test_diff_latin_1
+      if @ruby19_non_utf8_pass
+        puts_ruby19_non_utf8_pass()
+      else
+        with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+          ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1|
+            get :diff, :id => PRJ_ID, :rev => r1
+            assert_response :success
+            assert_template 'diff'
+            assert_tag :tag => 'thead',
+                       :descendant => {
+                         :tag => 'th',
+                         :attributes => { :class => 'filename' } ,
+                         :content => /latin-1-dir\/test-#{@char_1}.txt/ ,
+                        },
+                       :sibling => {
+                         :tag => 'tbody',
+                         :descendant => {
+                            :tag => 'td',
+                            :attributes => { :class => /diff_in/ },
+                            :content => /test-#{@char_1}.txt/
+                         }
+                       }
+          end
+        end
+      end
+    end
+
     def test_annotate
-      get :annotate, :id => 3, :path => ['sources', 'watchers_controller.rb']
+      get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'annotate'
       # Line 23, changeset 2f9c0091
-      assert_tag :tag => 'th', :content => /24/,
-                 :sibling => { :tag => 'td', :child => { :tag => 'a', :content => /2f9c0091/ } },
-                 :sibling => { :tag => 'td', :content => /jsmith/ },
+      assert_tag :tag => 'th', :content => '24',
+                 :sibling => {
+                    :tag => 'td',
+                    :child => {
+                       :tag => 'a',
+                       :content => /2f9c0091c754a91af7a9c478e36556b4bde8dcf7/
+                       }
+                    },
+                 :sibling => { :tag => 'td', :content => /jsmith/ }
+      assert_tag :tag => 'th', :content => '24',
+                 :sibling => {
+                    :tag => 'td',
+                    :child => {
+                       :tag => 'a',
+                       :content => /2f9c0091c754a91af7a9c478e36556b4bde8dcf7/
+                       }
+                    },
                  :sibling => { :tag => 'td', :content => /watcher =/ }
     end
 
     def test_annotate_at_given_revision
       @repository.fetch_changesets
       @repository.reload
-      get :annotate, :id => 3, :rev => 'deff7', :path => ['sources', 'watchers_controller.rb']
+      get :annotate, :id => PRJ_ID, :rev => 'deff7',
+          :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'annotate'
       assert_tag :tag => 'h2', :content => /@ deff712f/
     end
 
     def test_annotate_binary_file
-      get :annotate, :id => 3, :path => ['images', 'edit.png']
+      get :annotate, :id => PRJ_ID, :path => ['images', 'edit.png']
       assert_response 500
       assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
-                                :content => /can not be annotated/
+                              :content => /cannot be annotated/
+    end
+
+    def test_annotate_latin_1
+      if @ruby19_non_utf8_pass
+        puts_ruby19_non_utf8_pass()
+      else
+        with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+          ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1|
+            get :annotate, :id => PRJ_ID,
+                :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
+            assert_tag :tag => 'th',
+                       :content => '1',
+                       :attributes => { :class => 'line-num' },
+                       :sibling => { :tag => 'td',
+                                     :content => /test-#{@char_1}.txt/ }
+          end
+        end
+      end
     end
 
     def test_revision
       @repository.fetch_changesets
       @repository.reload
       ['61b685fbe55ab05b5ac68402d5720c1a6ac973d1', '61b685f'].each do |r|
-        get :revision, :id => 3, :rev => r
+        get :revision, :id => PRJ_ID, :rev => r
         assert_response :success
         assert_template 'revision'
       end
@@ -200,11 +319,19 @@
       @repository.fetch_changesets
       @repository.reload
       ['', ' ', nil].each do |r|
-        get :revision, :id => 3, :rev => r
+        get :revision, :id => PRJ_ID, :rev => r
         assert_response 404
         assert_error_tag :content => /was not found/
       end
     end
+
+    private
+
+    def puts_ruby19_non_utf8_pass
+      puts "TODO: This test fails in Ruby 1.9 " +
+           "and Encoding.default_external is not UTF-8. " +
+           "Current value is '#{Encoding.default_external.to_s}'"
+    end
   else
     puts "Git test repository NOT FOUND. Skipping functional tests !!!"
     def test_fake; assert true end
--- a/test/functional/repositories_mercurial_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/repositories_mercurial_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -25,29 +25,48 @@
   fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
 
   # No '..' in the repository path
-  REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
+  REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') +
+                       '/tmp/test/mercurial_repository'
+  CHAR_1_HEX = "\xc3\x9c"
+  PRJ_ID     = 3
+
+  ruby19_non_utf8_pass =
+     (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
 
   def setup
     @controller = RepositoriesController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
-    @repository = Repository::Mercurial.create(:project => Project.find(3), :url => REPOSITORY_PATH)
+    @repository = Repository::Mercurial.create(
+                      :project => Project.find(PRJ_ID),
+                      :url     => REPOSITORY_PATH,
+                      :path_encoding => 'ISO-8859-1'
+                      )
     assert @repository
     @diff_c_support = true
+    @char_1        = CHAR_1_HEX.dup
+    @tag_char_1    = "tag-#{CHAR_1_HEX}-00"
+    @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
+    @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
+    if @char_1.respond_to?(:force_encoding)
+      @char_1.force_encoding('UTF-8')
+      @tag_char_1.force_encoding('UTF-8')
+      @branch_char_0.force_encoding('UTF-8')
+      @branch_char_1.force_encoding('UTF-8')
+    end
   end
 
-  if File.directory?(REPOSITORY_PATH)
-    def test_show
-      get :show, :id => 3
-      assert_response :success
-      assert_template 'show'
-      assert_not_nil assigns(:entries)
-      assert_not_nil assigns(:changesets)
-    end
-
+  if ruby19_non_utf8_pass
+    puts "TODO: Mercurial functional test fails in Ruby 1.9 " +
+         "and Encoding.default_external is not UTF-8. " +
+         "Current value is '#{Encoding.default_external.to_s}'"
+    def test_fake; assert true end
+  elsif File.directory?(REPOSITORY_PATH)
     def test_show_root
-      get :show, :id => 3
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -55,10 +74,14 @@
       assert assigns(:entries).detect {|e| e.name == 'images'  && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'README'  && e.kind == 'file'}
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
     end
 
     def test_show_directory
-      get :show, :id => 3, :path => ['images']
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -67,43 +90,110 @@
       assert_not_nil entry
       assert_equal 'file', entry.kind
       assert_equal 'images/edit.png', entry.path
+      assert_not_nil assigns(:changesets)
+      assigns(:changesets).size > 0
     end
 
     def test_show_at_given_revision
+      @repository.fetch_changesets
+      @repository.reload
       [0, '0', '0885933ad4f6'].each do |r1|
-        get :show, :id => 3, :path => ['images'], :rev => r1
+        get :show, :id => PRJ_ID, :path => ['images'], :rev => r1
         assert_response :success
         assert_template 'show'
         assert_not_nil assigns(:entries)
         assert_equal ['delete.png'], assigns(:entries).collect(&:name)
+        assert_not_nil assigns(:changesets)
+        assigns(:changesets).size > 0
       end
     end
 
     def test_show_directory_sql_escape_percent
+      @repository.fetch_changesets
+      @repository.reload
       [13, '13', '3a330eb32958'].each do |r1|
-        get :show, :id => 3, :path => ['sql_escape', 'percent%dir'], :rev => r1
+        get :show, :id => PRJ_ID, :path => ['sql_escape', 'percent%dir'],
+            :rev => r1
         assert_response :success
         assert_template 'show'
 
         assert_not_nil assigns(:entries)
-        assert_equal ['percent%file1.txt', 'percentfile1.txt'], assigns(:entries).collect(&:name)
+        assert_equal ['percent%file1.txt', 'percentfile1.txt'],
+                     assigns(:entries).collect(&:name)
         changesets = assigns(:changesets)
+        assert_not_nil changesets
+        assigns(:changesets).size > 0
+        assert_equal %w(13 11 10 9), changesets.collect(&:revision)
+      end
+    end
 
-        ## This is not yet implemented.
-        # assert_not_nil changesets
-        # assert_equal %w(13 11 10 9), changesets.collect(&:revision)
+    def test_show_directory_latin_1_path
+      @repository.fetch_changesets
+      @repository.reload
+      [21, '21', 'adf805632193'].each do |r1|
+        get :show, :id => PRJ_ID, :path => ['latin-1-dir'], :rev => r1
+        assert_response :success
+        assert_template 'show'
+
+        assert_not_nil assigns(:entries)
+        assert_equal ["make-latin-1-file.rb",
+                      "test-#{@char_1}-1.txt",
+                      "test-#{@char_1}-2.txt",
+                      "test-#{@char_1}.txt"], assigns(:entries).collect(&:name)
+        changesets = assigns(:changesets)
+        assert_not_nil changesets
+        assert_equal %w(21 20 19 18 17), changesets.collect(&:revision)
+      end
+    end
+
+    def test_show_branch
+      @repository.fetch_changesets
+      @repository.reload
+       [
+          'default',
+          @branch_char_1,
+          'branch (1)[2]&,%.-3_4',
+          @branch_char_0,
+          'test_branch.latin-1',
+          'test-branch-00',
+      ].each do |bra|
+        get :show, :id => PRJ_ID, :rev => bra
+        assert_response :success
+        assert_template 'show'
+        assert_not_nil assigns(:entries)
+        assert assigns(:entries).size > 0
+        assert_not_nil assigns(:changesets)
+        assigns(:changesets).size > 0
+      end
+    end
+
+    def test_show_tag
+      @repository.fetch_changesets
+      @repository.reload
+       [
+        @tag_char_1,
+        'tag_test.00',
+        'tag-init-revision'
+      ].each do |tag|
+        get :show, :id => PRJ_ID, :rev => tag
+        assert_response :success
+        assert_template 'show'
+        assert_not_nil assigns(:entries)
+        assert assigns(:entries).size > 0
+        assert_not_nil assigns(:changesets)
+        assigns(:changesets).size > 0
       end
     end
 
     def test_changes
-      get :changes, :id => 3, :path => ['images', 'edit.png']
+      get :changes, :id => PRJ_ID, :path => ['images', 'edit.png']
       assert_response :success
       assert_template 'changes'
       assert_tag :tag => 'h2', :content => 'edit.png'
     end
-    
+
     def test_entry_show
-      get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb']
+      get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'entry'
       # Line 10
@@ -112,37 +202,72 @@
                  :attributes => { :class => 'line-num' },
                  :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
     end
-    
+
+    def test_entry_show_latin_1_path
+      [21, '21', 'adf805632193'].each do |r1|
+        get :entry, :id => PRJ_ID,
+            :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
+        assert_response :success
+        assert_template 'entry'
+        assert_tag :tag => 'th',
+                 :content => '1',
+                 :attributes => { :class => 'line-num' },
+                 :sibling => { :tag => 'td',
+                               :content => /Mercurial is a distributed version control system/ }
+      end
+    end
+
+    def test_entry_show_latin_1_contents
+      with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+        [27, '27', '7bbf4c738e71'].each do |r1|
+          get :entry, :id => PRJ_ID,
+              :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
+          assert_response :success
+          assert_template 'entry'
+          assert_tag :tag => 'th',
+                 :content => '1',
+                 :attributes => { :class => 'line-num' },
+                 :sibling => { :tag => 'td',
+                               :content => /test-#{@char_1}.txt/ }
+        end
+      end
+    end
+
     def test_entry_download
-      get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
+      get :entry, :id => PRJ_ID,
+          :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
       assert_response :success
       # File content
       assert @response.body.include?('WITHOUT ANY WARRANTY')
     end
 
+    def test_entry_binary_force_download
+      get :entry, :id => PRJ_ID, :rev => 1, :path => ['images', 'edit.png']
+      assert_response :success
+      assert_equal 'image/png', @response.content_type
+    end
+
     def test_directory_entry
-      get :entry, :id => 3, :path => ['sources']
+      get :entry, :id => PRJ_ID, :path => ['sources']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entry)
       assert_equal 'sources', assigns(:entry).name
     end
-    
+
     def test_diff
       @repository.fetch_changesets
       @repository.reload
-
       [4, '4', 'def6d2f1254a'].each do |r1|
         # Full diff of changeset 4
-        get :diff, :id => 3, :rev => r1
+        get :diff, :id => PRJ_ID, :rev => r1
         assert_response :success
         assert_template 'diff'
-
         if @diff_c_support
           # Line 22 removed
           assert_tag :tag => 'th',
                      :content => '22',
-                     :sibling => { :tag => 'td', 
+                     :sibling => { :tag => 'td',
                                    :attributes => { :class => /diff_out/ },
                                    :content => /def remove/ }
           assert_tag :tag => 'h2', :content => /4:def6d2f1254a/
@@ -153,11 +278,10 @@
     def test_diff_two_revs
       @repository.fetch_changesets
       @repository.reload
-
       [2, '400bb8672109', '400', 400].each do |r1|
         [4, 'def6d2f1254a'].each do |r2|
-          get :diff, :id => 3, :rev    => r1,
-                               :rev_to => r2
+          get :diff, :id => PRJ_ID, :rev    => r1,
+                                    :rev_to => r2
           assert_response :success
           assert_template 'diff'
 
@@ -168,8 +292,32 @@
       end
     end
 
+    def test_diff_latin_1_path
+      with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+        [21, 'adf805632193'].each do |r1|
+          get :diff, :id => PRJ_ID, :rev => r1
+          assert_response :success
+          assert_template 'diff'
+          assert_tag :tag => 'thead',
+                     :descendant => {
+                       :tag => 'th',
+                       :attributes => { :class => 'filename' } ,
+                       :content => /latin-1-dir\/test-#{@char_1}-2.txt/ ,
+                      },
+                     :sibling => {
+                       :tag => 'tbody',
+                       :descendant => {
+                          :tag => 'td',
+                          :attributes => { :class => /diff_in/ },
+                          :content => /It is written in Python/
+                       }
+                     }
+        end
+      end
+    end
+
     def test_annotate
-      get :annotate, :id => 3, :path => ['sources', 'watchers_controller.rb']
+      get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'annotate'
       # Line 23, revision 4:def6d2f1254a
@@ -201,18 +349,66 @@
       @repository.fetch_changesets
       @repository.reload
       [2, '400bb8672109', '400', 400].each do |r1|
-        get :annotate, :id => 3, :rev => r1, :path => ['sources', 'watchers_controller.rb']
+        get :annotate, :id => PRJ_ID, :rev => r1,
+            :path => ['sources', 'watchers_controller.rb']
         assert_response :success
         assert_template 'annotate'
         assert_tag :tag => 'h2', :content => /@ 2:400bb8672109/
       end
     end
 
+    def test_annotate_latin_1_path
+      [21, '21', 'adf805632193'].each do |r1|
+        get :annotate, :id => PRJ_ID,
+            :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
+        assert_response :success
+        assert_template 'annotate'
+        assert_tag :tag => 'th',
+                 :content => '1',
+                 :attributes => { :class => 'line-num' },
+                 :sibling =>
+                       {
+                         :tag => 'td',
+                         :attributes => { :class => 'revision' },
+                         :child => { :tag => 'a', :content => '20:709858aafd1b' }
+                       }
+        assert_tag :tag => 'th',
+                 :content => '1',
+                 :attributes => { :class => 'line-num' },
+                 :sibling =>
+                       {
+                          :tag     => 'td'    ,
+                          :content => 'jsmith' ,
+                          :attributes => { :class   => 'author' },
+                        }
+        assert_tag :tag => 'th',
+                 :content => '1',
+                 :attributes => { :class => 'line-num' },
+                 :sibling => { :tag => 'td',
+                               :content => /Mercurial is a distributed version control system/ }
+
+      end
+    end
+
+    def test_annotate_latin_1_contents
+      with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+        [27, '7bbf4c738e71'].each do |r1|
+          get :annotate, :id => PRJ_ID,
+              :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
+          assert_tag :tag => 'th',
+                     :content => '1',
+                     :attributes => { :class => 'line-num' },
+                     :sibling => { :tag => 'td',
+                                   :content => /test-#{@char_1}.txt/ }
+        end
+      end
+    end
+
     def test_empty_revision
       @repository.fetch_changesets
       @repository.reload
       ['', ' ', nil].each do |r|
-        get :revision, :id => 3, :rev => r
+        get :revision, :id => PRJ_ID, :rev => r
         assert_response 404
         assert_error_tag :content => /was not found/
       end
--- a/test/functional/repositories_subversion_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/repositories_subversion_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -37,7 +37,7 @@
 
     @project = Project.find(PRJ_ID)
     @repository = Repository::Subversion.create(:project => @project,
-               :url => "file://#{self.class.repository_path('subversion')}")
+               :url => self.class.subversion_repository_url)
     assert @repository
   end
 
@@ -51,7 +51,7 @@
       assert_not_nil assigns(:entries)
       assert_not_nil assigns(:changesets)
     end
-    
+
     def test_browse_root
       @repository.fetch_changesets
       @repository.reload
@@ -62,7 +62,7 @@
       entry = assigns(:entries).detect {|e| e.name == 'subversion_test'}
       assert_equal 'dir', entry.kind
     end
-    
+
     def test_browse_directory
       @repository.fetch_changesets
       @repository.reload
@@ -70,7 +70,8 @@
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
-      assert_equal ['[folder_with_brackets]', 'folder', '.project', 'helloworld.c', 'textfile.txt'], assigns(:entries).collect(&:name)
+      assert_equal ['[folder_with_brackets]', 'folder', '.project', 'helloworld.c', 'textfile.txt'],
+                   assigns(:entries).collect(&:name)
       entry = assigns(:entries).detect {|e| e.name == 'helloworld.c'}
       assert_equal 'file', entry.kind
       assert_equal 'subversion_test/helloworld.c', entry.path
@@ -84,20 +85,21 @@
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
-      assert_equal ['folder', '.project', 'helloworld.c', 'helloworld.rb', 'textfile.txt'], assigns(:entries).collect(&:name)
+      assert_equal ['folder', '.project', 'helloworld.c', 'helloworld.rb', 'textfile.txt'],
+                   assigns(:entries).collect(&:name)
     end
-    
+
     def test_file_changes
       @repository.fetch_changesets
       @repository.reload
       get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder', 'helloworld.rb' ]
       assert_response :success
       assert_template 'changes'
-      
+
       changesets = assigns(:changesets)
       assert_not_nil changesets
       assert_equal %w(6 3 2), changesets.collect(&:revision)
-      
+
       # svn properties displayed with svn >= 1.5 only
       if Redmine::Scm::Adapters::SubversionAdapter.client_version_above?([1, 5, 0])
         assert_not_nil assigns(:properties)
@@ -115,12 +117,12 @@
       get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder' ]
       assert_response :success
       assert_template 'changes'
-      
+
       changesets = assigns(:changesets)
       assert_not_nil changesets
       assert_equal %w(10 9 7 6 5 2), changesets.collect(&:revision)
     end
-      
+
     def test_entry
       @repository.fetch_changesets
       @repository.reload
@@ -128,7 +130,7 @@
       assert_response :success
       assert_template 'entry'
     end
-      
+
     def test_entry_should_send_if_too_big
       @repository.fetch_changesets
       @repository.reload
@@ -140,7 +142,7 @@
         assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition']
       end
     end
-    
+
     def test_entry_at_given_revision
       @repository.fetch_changesets
       @repository.reload
@@ -151,7 +153,7 @@
       assert_tag :tag => 'td', :attributes => { :class => /line-code/},
                                :content => /Here's the code/
     end
-    
+
     def test_entry_not_found
       @repository.fetch_changesets
       @repository.reload
@@ -159,7 +161,7 @@
       assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
                                 :content => /The entry or revision was not found in the repository/
     end
-  
+
     def test_entry_download
       @repository.fetch_changesets
       @repository.reload
@@ -168,7 +170,7 @@
       assert_template ''
       assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition']
     end
-    
+
     def test_directory_entry
       @repository.fetch_changesets
       @repository.reload
@@ -178,7 +180,7 @@
       assert_not_nil assigns(:entry)
       assert_equal 'folder', assigns(:entry).name
     end
-    
+
     # TODO: this test needs fixtures.
     def test_revision
       @repository.fetch_changesets
@@ -189,17 +191,17 @@
       assert_tag :tag => 'ul',
                  :child => { :tag => 'li',
                              # link to the entry at rev 2
-                             :child => { :tag => 'a', 
+                             :child => { :tag => 'a',
                                          :attributes => {:href => '/projects/ecookbook/repository/revisions/2/entry/test/some/path/in/the/repo'},
                                          :content => 'repo',
                                          # link to partial diff
-                                         :sibling =>  { :tag => 'a', 
-                                                        :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/test/some/path/in/the/repo' } 
+                                         :sibling =>  { :tag => 'a',
+                                                        :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/test/some/path/in/the/repo' }
                                                        }
                                         }
                             }
     end
-    
+
     def test_invalid_revision
       @repository.fetch_changesets
       @repository.reload
@@ -229,24 +231,24 @@
       r = Project.find(1).repository
       # Changes repository url to a subdirectory
       r.update_attribute :url, (r.url + '/test/some')
-      
+
       get :revision, :id => 1, :rev => 2
       assert_response :success
       assert_template 'revision'
       assert_tag :tag => 'ul',
                  :child => { :tag => 'li',
                              # link to the entry at rev 2
-                             :child => { :tag => 'a', 
+                             :child => { :tag => 'a',
                                          :attributes => {:href => '/projects/ecookbook/repository/revisions/2/entry/path/in/the/repo'},
                                          :content => 'repo',
                                          # link to partial diff
-                                         :sibling =>  { :tag => 'a', 
-                                                        :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/path/in/the/repo' } 
+                                         :sibling =>  { :tag => 'a',
+                                                        :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/path/in/the/repo' }
                                                        }
                                         }
                             }
     end
-    
+
     def test_revision_diff
       @repository.fetch_changesets
       @repository.reload
@@ -263,7 +265,7 @@
       get :diff, :id => PRJ_ID, :rev => 6, :rev_to => 2, :path => ['subversion_test', 'folder']
       assert_response :success
       assert_template 'diff'
-      
+
       diff = assigns(:diff)
       assert_not_nil diff
       # 2 files modified
@@ -271,7 +273,7 @@
 
       assert_tag :tag => 'h2', :content => /2:6/
     end
-    
+
     def test_annotate
       @repository.fetch_changesets
       @repository.reload
--- a/test/functional/roles_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/roles_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -22,7 +22,7 @@
 class RolesController; def rescue_action(e) raise e end; end
 
 class RolesControllerTest < ActionController::TestCase
-  fixtures :roles, :users, :members, :member_roles, :workflows
+  fixtures :roles, :users, :members, :member_roles, :workflows, :trackers
   
   def setup
     @controller = RolesController.new
@@ -114,7 +114,7 @@
   def test_destroy_role_in_use
     post :destroy, :id => 1
     assert_redirected_to '/roles'
-    assert flash[:error] == 'This role is in use and can not be deleted.'
+    assert flash[:error] == 'This role is in use and cannot be deleted.'
     assert_not_nil Role.find_by_id(1)
   end
   
--- a/test/functional/search_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/search_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -9,14 +9,14 @@
            :issues, :trackers, :issue_statuses,
            :custom_fields, :custom_values,
            :repositories, :changesets
-  
+
   def setup
     @controller = SearchController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
   end
-  
+
   def test_search_for_projects
     get :index
     assert_response :success
@@ -27,35 +27,35 @@
     assert_template 'index'
     assert assigns(:results).include?(Project.find(1))
   end
-  
+
   def test_search_all_projects
     get :index, :q => 'recipe subproject commit', :submit => 'Search'
     assert_response :success
     assert_template 'index'
-    
+
     assert assigns(:results).include?(Issue.find(2))
     assert assigns(:results).include?(Issue.find(5))
     assert assigns(:results).include?(Changeset.find(101))
     assert_tag :dt, :attributes => { :class => /issue/ },
                     :child => { :tag => 'a',  :content => /Add ingredients categories/ },
                     :sibling => { :tag => 'dd', :content => /should be classified by categories/ }
-    
+
     assert assigns(:results_by_type).is_a?(Hash)
     assert_equal 5, assigns(:results_by_type)['changesets']
     assert_tag :a, :content => 'Changesets (5)'
   end
-  
+
   def test_search_issues
     get :index, :q => 'issue', :issues => 1
     assert_response :success
     assert_template 'index'
-    
+
     assert assigns(:results).include?(Issue.find(8))
     assert assigns(:results).include?(Issue.find(5))
     assert_tag :dt, :attributes => { :class => /issue closed/ },
                     :child => { :tag => 'a',  :content => /Closed/ }
   end
-  
+
   def test_search_project_and_subprojects
     get :index, :id => 1, :q => 'recipe subproject', :scope => 'subprojects', :submit => 'Search'
     assert_response :success
@@ -66,17 +66,17 @@
 
   def test_search_without_searchable_custom_fields
     CustomField.update_all "searchable = #{ActiveRecord::Base.connection.quoted_false}"
-    
+
     get :index, :id => 1
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:project)
-    
+
     get :index, :id => 1, :q => "can"
     assert_response :success
     assert_template 'index'
   end
-  
+
   def test_search_with_searchable_custom_fields
     get :index, :id => 1, :q => "stringforcustomfield"
     assert_response :success
@@ -85,7 +85,7 @@
     assert_equal 1, results.size
     assert results.include?(Issue.find(7))
   end
-  
+
   def test_search_all_words
     # 'all words' is on by default
     get :index, :id => 1, :q => 'recipe updating saving'
@@ -94,7 +94,7 @@
     assert_equal 1, results.size
     assert results.include?(Issue.find(3))
   end
-  
+
   def test_search_one_of_the_words
     get :index, :id => 1, :q => 'recipe updating saving', :submit => 'Search'
     results = assigns(:results)
@@ -116,7 +116,7 @@
     assert_not_nil results
     assert_equal 2, results.size
   end
-  
+
   def test_search_with_invalid_project_id
     get :index, :id => 195, :q => 'recipe'
     assert_response 404
@@ -127,7 +127,7 @@
     # issue of a public project
     get :index, :q => "3"
     assert_redirected_to '/issues/3'
-    
+
     # issue of a private project
     get :index, :q => "4"
     assert_response :success
@@ -139,7 +139,7 @@
     assert_response :success
     assert_template 'index'
   end
-  
+
   def test_tokens_with_quotes
     get :index, :id => 1, :q => '"good bye" hello "bye bye"'
     assert_equal ["good bye", "hello", "bye bye"], assigns(:tokens)
--- a/test/functional/settings_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/settings_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -23,7 +23,7 @@
 
 class SettingsControllerTest < ActionController::TestCase
   fixtures :users
-  
+
   def setup
     @controller = SettingsController.new
     @request    = ActionController::TestRequest.new
@@ -31,19 +31,19 @@
     User.current = nil
     @request.session[:user_id] = 1 # admin
   end
-  
+
   def test_index
     get :index
     assert_response :success
     assert_template 'edit'
   end
-  
+
   def test_get_edit
     get :edit
     assert_response :success
     assert_template 'edit'
   end
-  
+
   def test_post_edit_notifications
     post :edit, :settings => {:mail_from => 'functional@test.foo',
                               :bcc_recipients  => '0',
--- a/test/functional/sys_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/sys_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -17,12 +17,13 @@
 
 require File.expand_path('../../test_helper', __FILE__)
 require 'sys_controller'
+require 'mocha'
 
 # Re-raise errors caught by the controller.
 class SysController; def rescue_action(e) raise e end; end
 
 class SysControllerTest < ActionController::TestCase
-  fixtures :projects, :repositories
+  fixtures :projects, :repositories, :enabled_modules
   
   def setup
     @controller = SysController.new
@@ -55,11 +56,13 @@
   end
   
   def test_fetch_changesets
+    Repository::Subversion.any_instance.expects(:fetch_changesets).returns(true)
     get :fetch_changesets
     assert_response :success
   end
   
   def test_fetch_changesets_one_project
+    Repository::Subversion.any_instance.expects(:fetch_changesets).returns(true)
     get :fetch_changesets, :id => 'ecookbook'
     assert_response :success
   end
--- a/test/functional/time_entry_reports_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/time_entry_reports_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -4,16 +4,20 @@
 class TimeEntryReportsControllerTest < ActionController::TestCase
   fixtures :projects, :enabled_modules, :roles, :members, :member_roles, :issues, :time_entries, :users, :trackers, :enumerations, :issue_statuses, :custom_fields, :custom_values
 
-  def test_report_no_criteria
-    get :report, :project_id => 1
+  def test_report_at_project_level
+    get :report, :project_id => 'ecookbook'
     assert_response :success
     assert_template 'report'
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/time_entries/report", :id => 'query_form'}
   end
   
   def test_report_all_projects
     get :report
     assert_response :success
     assert_template 'report'
+    assert_tag :form,
+      :attributes => {:action => "/time_entries/report", :id => 'query_form'}
   end
   
   def test_report_all_projects_denied
@@ -80,6 +84,8 @@
     assert_template 'report'
     assert_not_nil assigns(:total_hours)
     assert_equal "154.25", "%.2f" % assigns(:total_hours)
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/issues/1/time_entries/report", :id => 'query_form'}
   end
   
   def test_report_custom_field_criteria
--- a/test/functional/timelog_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/timelog_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -131,6 +131,77 @@
     assert_equal 2, entry.issue_id
     assert_equal 2, entry.user_id
   end
+
+  def test_get_bulk_edit
+    @request.session[:user_id] = 2
+    get :bulk_edit, :ids => [1, 2]
+    assert_response :success
+    assert_template 'bulk_edit'
+    
+    # System wide custom field
+    assert_tag :select, :attributes => {:name => 'time_entry[custom_field_values][10]'}
+  end
+
+  def test_get_bulk_edit_on_different_projects
+    @request.session[:user_id] = 2
+    get :bulk_edit, :ids => [1, 2, 6]
+    assert_response :success
+    assert_template 'bulk_edit'
+  end
+
+  def test_bulk_update
+    @request.session[:user_id] = 2
+    # update time entry activity
+    post :bulk_update, :ids => [1, 2], :time_entry => { :activity_id => 9}
+                                     
+    assert_response 302
+    # check that the issues were updated
+    assert_equal [9, 9], TimeEntry.find_all_by_id([1, 2]).collect {|i| i.activity_id}
+  end
+
+  def test_bulk_update_on_different_projects
+    @request.session[:user_id] = 2
+    # update time entry activity
+    post :bulk_update, :ids => [1, 2, 4], :time_entry => { :activity_id => 9 }
+    
+    assert_response 302
+    # check that the issues were updated
+    assert_equal [9, 9, 9], TimeEntry.find_all_by_id([1, 2, 4]).collect {|i| i.activity_id}
+  end
+
+  def test_bulk_update_on_different_projects_without_rights
+    @request.session[:user_id] = 3
+    user = User.find(3)
+    action = { :controller => "timelog", :action => "bulk_update" }
+    assert user.allowed_to?(action, TimeEntry.find(1).project)
+    assert ! user.allowed_to?(action, TimeEntry.find(5).project)
+    post :bulk_update, :ids => [1, 5], :time_entry => { :activity_id => 9 }
+    assert_response 403
+  end
+
+  def test_bulk_update_custom_field
+    @request.session[:user_id] = 2
+    post :bulk_update, :ids => [1, 2], :time_entry => { :custom_field_values => {'10' => '0'} }
+                                     
+    assert_response 302
+    assert_equal ["0", "0"], TimeEntry.find_all_by_id([1, 2]).collect {|i| i.custom_value_for(10).value}
+  end
+
+  def test_post_bulk_update_should_redirect_back_using_the_back_url_parameter
+    @request.session[:user_id] = 2
+    post :bulk_update, :ids => [1,2], :back_url => '/time_entries'
+
+    assert_response :redirect
+    assert_redirected_to '/time_entries'
+  end
+
+  def test_post_bulk_update_should_not_redirect_back_using_the_back_url_parameter_off_the_host
+    @request.session[:user_id] = 2
+    post :bulk_update, :ids => [1,2], :back_url => 'http://google.com'
+
+    assert_response :redirect
+    assert_redirected_to :controller => 'timelog', :action => 'index', :project_id => Project.find(1).identifier
+  end
   
   def test_destroy
     @request.session[:user_id] = 2
@@ -142,19 +213,13 @@
   
   def test_destroy_should_fail
     # simulate that this fails (e.g. due to a plugin), see #5700
-    TimeEntry.class_eval do
-      before_destroy :stop_callback_chain
-      def stop_callback_chain ; return false ; end
-    end
+    TimeEntry.any_instance.expects(:destroy).returns(false)
 
     @request.session[:user_id] = 2
     delete :destroy, :id => 1
     assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_equal I18n.t(:notice_unable_delete_time_entry), flash[:error]
     assert_not_nil TimeEntry.find_by_id(1)
-
-    # remove the simulation
-    TimeEntry.before_destroy.reject! {|callback| callback.method == :stop_callback_chain }
   end
   
   def test_index_all_projects
@@ -163,10 +228,12 @@
     assert_template 'index'
     assert_not_nil assigns(:total_hours)
     assert_equal "162.90", "%.2f" % assigns(:total_hours)
+    assert_tag :form,
+      :attributes => {:action => "/time_entries", :id => 'query_form'}
   end
   
   def test_index_at_project_level
-    get :index, :project_id => 1
+    get :index, :project_id => 'ecookbook'
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:entries)
@@ -178,10 +245,12 @@
     # display all time by default
     assert_equal '2007-03-12'.to_date, assigns(:from)
     assert_equal '2007-04-22'.to_date, assigns(:to)
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/time_entries", :id => 'query_form'}
   end
   
   def test_index_at_project_level_with_date_range
-    get :index, :project_id => 1, :from => '2007-03-20', :to => '2007-04-30'
+    get :index, :project_id => 'ecookbook', :from => '2007-03-20', :to => '2007-04-30'
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:entries)
@@ -190,24 +259,30 @@
     assert_equal "12.90", "%.2f" % assigns(:total_hours)
     assert_equal '2007-03-20'.to_date, assigns(:from)
     assert_equal '2007-04-30'.to_date, assigns(:to)
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/time_entries", :id => 'query_form'}
   end
 
   def test_index_at_project_level_with_period
-    get :index, :project_id => 1, :period => '7_days'
+    get :index, :project_id => 'ecookbook', :period => '7_days'
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:entries)
     assert_not_nil assigns(:total_hours)
     assert_equal Date.today - 7, assigns(:from)
     assert_equal Date.today, assigns(:to)
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/time_entries", :id => 'query_form'}
   end
 
   def test_index_one_day
-    get :index, :project_id => 1, :from => "2007-03-23", :to => "2007-03-23"
+    get :index, :project_id => 'ecookbook', :from => "2007-03-23", :to => "2007-03-23"
     assert_response :success
     assert_template 'index'
     assert_not_nil assigns(:total_hours)
     assert_equal "4.25", "%.2f" % assigns(:total_hours)
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/time_entries", :id => 'query_form'}
   end
   
   def test_index_at_issue_level
@@ -221,6 +296,10 @@
     # display all time based on what's been logged
     assert_equal '2007-03-12'.to_date, assigns(:from)
     assert_equal '2007-04-22'.to_date, assigns(:to)
+    # TODO: remove /projects/:project_id/issues/:issue_id/time_entries routes
+    # to use /issues/:issue_id/time_entries
+    assert_tag :form,
+      :attributes => {:action => "/projects/ecookbook/issues/1/time_entries", :id => 'query_form'}
   end
   
   def test_index_atom_feed
@@ -236,8 +315,8 @@
     get :index, :format => 'csv'
     assert_response :success
     assert_equal 'text/csv', @response.content_type
-    assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment\n")
-    assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\"\n")
+    assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment,Overtime\n")
+    assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\",\"\"\n")
   end
   
   def test_index_csv_export
@@ -245,7 +324,7 @@
     get :index, :project_id => 1, :format => 'csv'
     assert_response :success
     assert_equal 'text/csv', @response.content_type
-    assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment\n")
-    assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\"\n")
+    assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment,Overtime\n")
+    assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\",\"\"\n")
   end
 end
--- a/test/functional/users_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/users_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -24,7 +24,7 @@
 class UsersControllerTest < ActionController::TestCase
   include Redmine::I18n
   
-  fixtures :users, :projects, :members, :member_roles, :roles, :auth_sources, :custom_fields, :custom_values
+  fixtures :users, :projects, :members, :member_roles, :roles, :auth_sources, :custom_fields, :custom_values, :groups_users
   
   def setup
     @controller = UsersController.new
@@ -59,6 +59,15 @@
     assert_equal 'John', users.first.firstname
   end
   
+  def test_index_with_group_filter
+    get :index, :group_id => '10'
+    assert_response :success
+    assert_template 'index'
+    users = assigns(:users)
+    assert users.any?
+    assert_equal([], (users - Group.find(10).users))
+  end
+  
   def test_show
     @request.session[:user_id] = nil
     get :show, :id => 2
--- a/test/functional/versions_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/versions_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -22,7 +22,7 @@
 class VersionsController; def rescue_action(e) raise e end; end
 
 class VersionsControllerTest < ActionController::TestCase
-  fixtures :projects, :versions, :issues, :users, :roles, :members, :member_roles, :enabled_modules
+  fixtures :projects, :versions, :issues, :users, :roles, :members, :member_roles, :enabled_modules, :issue_statuses
   
   def setup
     @controller = VersionsController.new
@@ -145,4 +145,10 @@
     assert_response :success
     assert_template '_issue_counts'
   end
+  
+  def test_issue_status_by_status
+    xhr :get, :status_by, :id => 2, :status_by => 'status'
+    assert_response :success
+    assert_template '_issue_counts'
+  end
 end
--- a/test/functional/watchers_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/watchers_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -43,7 +43,7 @@
     assert_difference('Watcher.count') do
       xhr :post, :watch, :object_type => 'issue', :object_id => '1'
       assert_response :success
-      assert_select_rjs :replace_html, 'watcher'
+      assert @response.body.include?('$$(".issue-1-watcher")')
     end
     assert Issue.find(1).watched_by?(User.find(3))
   end
@@ -56,34 +56,13 @@
       assert_response 403
     end
   end
-
-  def test_watch_with_multiple_replacements
-    @request.session[:user_id] = 3
-    assert_difference('Watcher.count') do
-      xhr :post, :watch, :object_type => 'issue', :object_id => '1', :replace => ['watch_item_1','watch_item_2']
-      assert_response :success
-      assert_select_rjs :replace_html, 'watch_item_1'
-      assert_select_rjs :replace_html, 'watch_item_2'
-    end
-  end
   
   def test_unwatch
     @request.session[:user_id] = 3
     assert_difference('Watcher.count', -1) do
       xhr :post, :unwatch, :object_type => 'issue', :object_id => '2'
       assert_response :success
-      assert_select_rjs :replace_html, 'watcher'
-    end
-    assert !Issue.find(1).watched_by?(User.find(3))
-  end
-
-  def test_unwatch_with_multiple_replacements
-    @request.session[:user_id] = 3
-    assert_difference('Watcher.count', -1) do
-      xhr :post, :unwatch, :object_type => 'issue', :object_id => '2', :replace => ['watch_item_1', 'watch_item_2']
-      assert_response :success
-      assert_select_rjs :replace_html, 'watch_item_1'
-      assert_select_rjs :replace_html, 'watch_item_2'
+      assert @response.body.include?('$$(".issue-2-watcher")')
     end
     assert !Issue.find(1).watched_by?(User.find(3))
   end
--- a/test/functional/wiki_controller_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/functional/wiki_controller_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -23,14 +23,14 @@
 
 class WikiControllerTest < ActionController::TestCase
   fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, :attachments
-  
+
   def setup
     @controller = WikiController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
   end
-  
+
   def test_show_start_page
     get :show, :project_id => 'ecookbook'
     assert_response :success
@@ -43,7 +43,7 @@
                            :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/Page_with_an_inline_image' },
                                                     :content => 'Page with an inline image' } }
   end
-  
+
   def test_show_page_with_name
     get :show, :project_id => 1, :id => 'Another_page'
     assert_response :success
@@ -54,30 +54,37 @@
     assert_tag :tag => 'img', :attributes => { :src => '/attachments/download/3',
                                                :alt => 'This is a logo' }
   end
-  
+
+  def test_show_redirected_page
+    WikiRedirect.create!(:wiki_id => 1, :title => 'Old_title', :redirects_to => 'Another_page')
+
+    get :show, :project_id => 'ecookbook', :id => 'Old_title'
+    assert_redirected_to '/projects/ecookbook/wiki/Another_page'
+  end
+
   def test_show_with_sidebar
     page = Project.find(1).wiki.pages.new(:title => 'Sidebar')
     page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar')
     page.save!
-    
+
     get :show, :project_id => 1, :id => 'Another_page'
     assert_response :success
     assert_tag :tag => 'div', :attributes => {:id => 'sidebar'},
                               :content => /Side bar content for test_show_with_sidebar/
   end
-  
+
   def test_show_unexistent_page_without_edit_right
     get :show, :project_id => 1, :id => 'Unexistent page'
     assert_response 404
   end
-  
+
   def test_show_unexistent_page_with_edit_right
     @request.session[:user_id] = 2
     get :show, :project_id => 1, :id => 'Unexistent page'
     assert_response :success
     assert_template 'edit'
   end
-  
+
   def test_create_page
     @request.session[:user_id] = 2
     put :update, :project_id => 1,
@@ -91,7 +98,7 @@
     assert_not_nil page.content
     assert_equal 'Created the page', page.content.comments
   end
-  
+
   def test_create_page_with_attachments
     @request.session[:user_id] = 2
     assert_difference 'WikiPage.count' do
@@ -125,7 +132,7 @@
       end
     end
     assert_redirected_to '/projects/ecookbook/wiki/Another_page'
-    
+
     page = Wiki.find(1).pages.find_by_title('Another_page')
     assert_equal "edited", page.content.text
     assert_equal 2, page.content.version
@@ -149,12 +156,48 @@
       end
     assert_response :success
     assert_template 'edit'
-    
+
     assert_error_tag :descendant => {:content => /Comment is too long/}
     assert_tag :tag => 'textarea', :attributes => {:id => 'content_text'}, :content => 'edited'
     assert_tag :tag => 'input', :attributes => {:id => 'content_version', :value => '1'}
   end
-  
+
+  def test_update_stale_page_should_not_raise_an_error
+    @request.session[:user_id] = 2
+    c = Wiki.find(1).find_page('Another_page').content
+    c.text = 'Previous text'
+    c.save!
+    assert_equal 2, c.version
+
+    assert_no_difference 'WikiPage.count' do
+      assert_no_difference 'WikiContent.count' do
+        assert_no_difference 'WikiContent::Version.count' do
+          put :update, :project_id => 1,
+            :id => 'Another_page',
+            :content => {
+              :comments => 'My comments',
+              :text => 'Text should not be lost',
+              :version => 1
+            }
+        end
+      end
+    end
+    assert_response :success
+    assert_template 'edit'
+    assert_tag :div,
+      :attributes => { :class => /error/ },
+      :content => /Data has been updated by another user/
+    assert_tag 'textarea',
+      :attributes => { :name => 'content[text]' },
+      :content => /Text should not be lost/
+    assert_tag 'input',
+      :attributes => { :name => 'content[comments]', :value => 'My comments' }
+
+    c.reload
+    assert_equal 'Previous text', c.text
+    assert_equal 2, c.version
+  end
+
   def test_preview
     @request.session[:user_id] = 2
     xhr :post, :preview, :project_id => 1, :id => 'CookBook_documentation',
@@ -165,7 +208,7 @@
     assert_template 'common/_preview'
     assert_tag :tag => 'strong', :content => /previewed text/
   end
-  
+
   def test_preview_new_page
     @request.session[:user_id] = 2
     xhr :post, :preview, :project_id => 1, :id => 'New page',
@@ -176,7 +219,7 @@
     assert_template 'common/_preview'
     assert_tag :tag => 'h1', :content => /New page/
   end
-  
+
   def test_history
     get :history, :project_id => 1, :id => 'CookBook_documentation'
     assert_response :success
@@ -194,7 +237,7 @@
     assert_equal 1, assigns(:versions).size
     assert_select "input[type=submit][name=commit]", false
   end
-  
+
   def test_diff
     get :diff, :project_id => 1, :id => 'CookBook_documentation', :version => 2, :version_from => 1
     assert_response :success
@@ -202,7 +245,7 @@
     assert_tag :tag => 'span', :attributes => { :class => 'diff_in'},
                                :content => /updated/
   end
-  
+
   def test_annotate
     get :annotate, :project_id => 1, :id =>  'CookBook_documentation', :version => 2
     assert_response :success
@@ -230,7 +273,7 @@
       :attributes => {:selected => 'selected'},
       :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}}
   end
-  
+
   def test_get_rename_child_page
     @request.session[:user_id] = 2
     get :rename, :project_id => 1, :id => 'Child_1'
@@ -248,7 +291,7 @@
         :attributes => {:name => 'wiki_page[parent_id]'}
       }
   end
-  
+
   def test_rename_with_redirect
     @request.session[:user_id] = 2
     post :rename, :project_id => 1, :id => 'Another_page',
@@ -271,7 +314,7 @@
     # Check that there's no redirects
     assert_nil wiki.find_page('Another page')
   end
-  
+
   def test_rename_with_parent_assignment
     @request.session[:user_id] = 2
     post :rename, :project_id => 1, :id => 'Another_page',
@@ -287,13 +330,13 @@
     assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Child_1'
     assert_nil WikiPage.find_by_title('Child_1').parent
   end
-  
+
   def test_destroy_child
     @request.session[:user_id] = 2
     delete :destroy, :project_id => 1, :id => 'Child_1'
     assert_redirected_to :action => 'index', :project_id => 'ecookbook'
   end
-  
+
   def test_destroy_parent
     @request.session[:user_id] = 2
     assert_no_difference('WikiPage.count') do
@@ -302,7 +345,7 @@
     assert_response :success
     assert_template 'destroy'
   end
-  
+
   def test_destroy_parent_with_nullify
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -1) do
@@ -311,7 +354,7 @@
     assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_nil WikiPage.find_by_id(2)
   end
-  
+
   def test_destroy_parent_with_cascade
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -3) do
@@ -321,7 +364,7 @@
     assert_nil WikiPage.find_by_id(2)
     assert_nil WikiPage.find_by_id(5)
   end
-  
+
   def test_destroy_parent_with_reassign
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -1) do
@@ -331,7 +374,7 @@
     assert_nil WikiPage.find_by_id(2)
     assert_equal WikiPage.find(1), WikiPage.find_by_id(5).parent
   end
-  
+
   def test_index
     get :index, :project_id => 'ecookbook'
     assert_response :success
@@ -339,7 +382,8 @@
     pages = assigns(:pages)
     assert_not_nil pages
     assert_equal Project.find(1).wiki.pages.size, pages.size
-    
+    assert_equal pages.first.content.updated_on, pages.first.updated_on
+
     assert_tag :ul, :attributes => { :class => 'pages-hierarchy' },
                     :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/CookBook_documentation' },
                                               :content => 'CookBook documentation' },
@@ -351,13 +395,18 @@
                                                                        :content => 'Another page' } }
   end
 
+  def test_index_should_include_atom_link
+    get :index, :project_id => 'ecookbook'
+    assert_tag 'a', :attributes => { :href => '/projects/ecookbook/activity.atom?show_wiki_edits=1'}
+  end
+
   context "GET :export" do
     context "with an authorized user to export the wiki" do
       setup do
         @request.session[:user_id] = 2
         get :export, :project_id => 'ecookbook'
       end
-      
+
       should_respond_with :success
       should_assign_to :pages
       should_respond_with_content_type "text/html"
@@ -366,7 +415,7 @@
         assert_select "a[name=?]", "Another_page"
         assert_select "a[name=?]", "Page_with_an_inline_image"
       end
-      
+
     end
 
     context "with an unauthorized user" do
@@ -388,14 +437,17 @@
     should_assign_to :pages
     should_assign_to :pages_by_date
     should_render_template 'wiki/date_index'
-    
+
+    should "include atom link" do
+      assert_tag 'a', :attributes => { :href => '/projects/ecookbook/activity.atom?show_wiki_edits=1'}
+    end
   end
-  
+
   def test_not_found
     get :show, :project_id => 999
     assert_response 404
   end
-  
+
   def test_protect_page
     page = WikiPage.find_by_wiki_id_and_title(1, 'Another_page')
     assert !page.protected?
@@ -404,7 +456,7 @@
     assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_page'
     assert page.reload.protected?
   end
-  
+
   def test_unprotect_page
     page = WikiPage.find_by_wiki_id_and_title(1, 'CookBook_documentation')
     assert page.protected?
@@ -413,7 +465,7 @@
     assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'CookBook_documentation'
     assert !page.reload.protected?
   end
-  
+
   def test_show_page_with_edit_link
     @request.session[:user_id] = 2
     get :show, :project_id => 1
@@ -421,15 +473,15 @@
     assert_template 'show'
     assert_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }
   end
-  
+
   def test_show_page_without_edit_link
     @request.session[:user_id] = 4
     get :show, :project_id => 1
     assert_response :success
     assert_template 'show'
     assert_no_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }
-  end  
-  
+  end
+
   def test_edit_unprotected_page
     # Non members can edit unprotected wiki pages
     @request.session[:user_id] = 4
@@ -437,21 +489,21 @@
     assert_response :success
     assert_template 'edit'
   end
-  
+
   def test_edit_protected_page_by_nonmember
     # Non members can't edit protected wiki pages
     @request.session[:user_id] = 4
     get :edit, :project_id => 1, :id => 'CookBook_documentation'
     assert_response 403
   end
-  
+
   def test_edit_protected_page_by_member
     @request.session[:user_id] = 2
     get :edit, :project_id => 1, :id => 'CookBook_documentation'
     assert_response :success
-    assert_template 'edit'    
+    assert_template 'edit'
   end
-  
+
   def test_history_of_non_existing_page_should_return_404
     get :history, :project_id => 1, :id => 'Unknown_page'
     assert_response 404
--- a/test/integration/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,47 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 41
-/svn/!svn/ver/4729/trunk/test/integration
-END
-application_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/4509/trunk/test/integration/application_test.rb
-END
-routing_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4729/trunk/test/integration/routing_test.rb
-END
-admin_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/4509/trunk/test/integration/admin_test.rb
+/svn/!svn/ver/5946/branches/1.2-stable/test/integration
 END
-projects_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4509/trunk/test/integration/projects_test.rb
-END
-issues_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/4509/trunk/test/integration/issues_test.rb
-END
-account_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4509/trunk/test/integration/account_test.rb
-END
-layout_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/4509/trunk/test/integration/layout_test.rb
-END
--- a/test/integration/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/integration
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/integration
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T15:23:11.666065Z
-4729
+2011-05-29T07:24:15.223638Z
+5946
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 b828e87474858f965d2048f5f15f8e4b
 2010-12-12T23:24:34.194336Z
 4509
@@ -72,10 +72,10 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-7e4b62197ce8e1dfe456477ae9ee384f
-2011-01-16T15:23:11.666065Z
-4729
+2011-06-06T13:18:32.000000Z
+f45261de85d88966691601f82641521c
+2011-04-01T15:30:32.931755Z
+5280
 jplang
 
 
@@ -98,7 +98,7 @@
 
 
 
-28869
+29127
 
 admin_test.rb
 file
@@ -106,7 +106,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 fbd4d2a8c15f4ec209250f3395903604
 2010-12-12T23:24:34.194336Z
 4509
@@ -140,7 +140,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 4b83660bc635b651f2e1d2d8ee50b84b
 2010-12-12T23:24:34.194336Z
 4509
@@ -174,11 +174,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-09fa9e6798468c9b7fda21b438e16c5e
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+7b3dce66fa8d8e391dc027a5d90a510f
+2011-04-02T08:01:06.891147Z
+5289
+tmaruyama
 has-props
 
 
@@ -200,7 +200,7 @@
 
 
 
-4801
+6985
 
 account_test.rb
 file
@@ -208,7 +208,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 5cdf08841a7442b774036772bb1fc1a7
 2010-12-12T23:24:34.194336Z
 4509
@@ -242,11 +242,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-ff949103a3bdac892a3372cfb71047f0
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+9058073eeb692c5629a88c6066e2cca8
+2011-03-28T19:56:22.585019Z
+5238
+jplang
 
 
 
@@ -268,5 +268,5 @@
 
 
 
-626
+1319
 
--- a/test/integration/.svn/text-base/issues_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/.svn/text-base/issues_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -65,7 +65,7 @@
   end
 
   # add then remove 2 attachments to an issue
-  def test_issue_attachements
+  def test_issue_attachments
     log_user('jsmith', 'jsmith')
     set_tmp_attachments_directory
 
@@ -126,4 +126,75 @@
                    :attributes => { :href => '/projects/ecookbook/issues?page=2' }
     
   end
+  
+  def test_issue_with_user_custom_field
+    @field = IssueCustomField.create!(:name => 'Tester', :field_format => 'user', :is_for_all => true, :trackers => Tracker.all)
+    Role.anonymous.add_permission! :add_issues, :edit_issues
+    users = Project.find(1).users
+    tester = users.first
+    
+    # Issue form
+    get '/projects/ecookbook/issues/new'
+    assert_response :success
+    assert_tag :select,
+      :attributes => {:name => "issue[custom_field_values][#{@field.id}]"},
+      :children => {:count => (users.size + 1)}, # +1 for blank value
+      :child => {
+        :tag => 'option',
+        :attributes => {:value => tester.id.to_s},
+        :content => tester.name
+      }
+    
+    # Create issue
+    assert_difference 'Issue.count' do
+      post '/projects/ecookbook/issues', 
+        :issue => {
+          :tracker_id => '1',
+          :priority_id => '4',
+          :subject => 'Issue with user custom field',
+          :custom_field_values => {@field.id.to_s => users.first.id.to_s}
+        }
+    end
+    issue = Issue.first(:order => 'id DESC')
+    assert_response 302
+    
+    # Issue view
+    follow_redirect!
+    assert_tag :th,
+      :content => /Tester/,
+      :sibling => {
+        :tag => 'td',
+        :content => tester.name
+      }
+    assert_tag :select,
+      :attributes => {:name => "issue[custom_field_values][#{@field.id}]"},
+      :children => {:count => (users.size + 1)}, # +1 for blank value
+      :child => {
+        :tag => 'option',
+        :attributes => {:value => tester.id.to_s, :selected => 'selected'},
+        :content => tester.name
+      }
+    
+    # Update issue
+    new_tester = users[1]
+    assert_difference 'Journal.count' do
+      put "/issues/#{issue.id}",
+        :notes => 'Updating custom field',
+        :issue => {
+          :custom_field_values => {@field.id.to_s => new_tester.id.to_s}
+        }
+    end
+    assert_response 302
+    
+    # Issue view
+    follow_redirect!
+    assert_tag :content => 'Tester',
+      :ancestor => {:tag => 'ul', :attributes => {:class => /details/}},
+      :sibling => {
+        :content => tester.name,
+        :sibling => {
+          :content => new_tester.name
+        }
+      }
+  end
 end
--- a/test/integration/.svn/text-base/layout_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/.svn/text-base/layout_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -21,4 +21,29 @@
     assert_response :forbidden
     assert_select "#admin-menu", :count => 0
   end
+
+  def test_top_menu_and_search_not_visible_when_login_required
+    with_settings :login_required => '1' do
+      get '/'
+      assert_select "#top-menu > ul", 0
+      assert_select "#quick-search", 0
+    end
+  end
+
+  def test_top_menu_and_search_visible_when_login_not_required
+    with_settings :login_required => '0' do
+      get '/'
+      assert_select "#top-menu > ul"
+      assert_select "#quick-search"
+    end
+  end
+  
+  def test_wiki_formatter_header_tags
+    Role.anonymous.add_permission! :add_issues
+    
+    get '/projects/ecookbook/issues/new'
+    assert_tag :script,
+      :attributes => {:src => %r{^/javascripts/jstoolbar/textile.js}},
+      :parent => {:tag => 'head'}
+  end
 end
--- a/test/integration/.svn/text-base/routing_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/.svn/text-base/routing_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -91,14 +91,12 @@
     should_route :post, "/issues/1/quoted", :controller => 'journals', :action => 'new', :id => '1'
 
     should_route :get, "/issues/calendar", :controller => 'calendars', :action => 'show'
-    should_route :put, "/issues/calendar", :controller => 'calendars', :action => 'update'
     should_route :get, "/projects/project-name/issues/calendar", :controller => 'calendars', :action => 'show', :project_id => 'project-name'
-    should_route :put, "/projects/project-name/issues/calendar", :controller => 'calendars', :action => 'update', :project_id => 'project-name'
 
     should_route :get, "/issues/gantt", :controller => 'gantts', :action => 'show'
-    should_route :put, "/issues/gantt", :controller => 'gantts', :action => 'update'
+    should_route :get, "/issues/gantt.pdf", :controller => 'gantts', :action => 'show', :format => 'pdf'
     should_route :get, "/projects/project-name/issues/gantt", :controller => 'gantts', :action => 'show', :project_id => 'project-name'
-    should_route :put, "/projects/project-name/issues/gantt", :controller => 'gantts', :action => 'update', :project_id => 'project-name'
+    should_route :get, "/projects/project-name/issues/gantt.pdf", :controller => 'gantts', :action => 'show', :project_id => 'project-name', :format => 'pdf'
 
     should_route :get, "/issues/auto_complete", :controller => 'auto_completes', :action => 'issues'
 
@@ -197,6 +195,14 @@
     should_route :delete, "/projects/1.xml", :controller => 'projects', :action => 'destroy', :id => '1', :format => 'xml'
     should_route :delete, "/projects/64/enumerations", :controller => 'project_enumerations', :action => 'destroy', :project_id => '64'
   end
+  
+  context "queries" do
+    should_route :get, "/queries/new", :controller => 'queries', :action => 'new'
+    should_route :get, "/projects/redmine/queries/new", :controller => 'queries', :action => 'new', :project_id => 'redmine'
+    
+    should_route :post, "/queries/new", :controller => 'queries', :action => 'new'
+    should_route :post, "/projects/redmine/queries/new", :controller => 'queries', :action => 'new', :project_id => 'redmine'
+  end
 
   context "repositories" do
     should_route :get, "/projects/redmine/repository", :controller => 'repositories', :action => 'show', :id => 'redmine'
--- a/test/integration/api_test/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/api_test/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,59 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4729/trunk/test/integration/api_test
-END
-token_authentication_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4509/trunk/test/integration/api_test/token_authentication_test.rb
-END
-users_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/4729/trunk/test/integration/api_test/users_test.rb
+/svn/!svn/ver/5946/branches/1.2-stable/test/integration/api_test
 END
-time_entries_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/4509/trunk/test/integration/api_test/time_entries_test.rb
-END
-http_basic_login_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/4509/trunk/test/integration/api_test/http_basic_login_test.rb
-END
-projects_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4645/trunk/test/integration/api_test/projects_test.rb
-END
-issues_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4509/trunk/test/integration/api_test/issues_test.rb
-END
-http_basic_login_with_api_token_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 90
-/svn/!svn/ver/4509/trunk/test/integration/api_test/http_basic_login_with_api_token_test.rb
-END
-news_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4509/trunk/test/integration/api_test/news_test.rb
-END
-disabled_rest_api_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/4509/trunk/test/integration/api_test/disabled_rest_api_test.rb
-END
--- a/test/integration/api_test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/api_test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/integration/api_test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/integration/api_test
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T15:23:11.666065Z
-4729
+2011-05-29T07:24:15.223638Z
+5946
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 7d38bb393dfe949c081c7e9ee2ea0caa
 2010-12-12T23:24:34.194336Z
 4509
@@ -66,11 +66,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-5cca5d3e833a26e12978491298f55859
-2011-01-16T15:23:11.666065Z
-4729
-jplang
+2011-06-06T13:18:32.000000Z
+7a9592ae362d7037a34c8d52a83bfa94
+2011-04-01T00:46:29.119996Z
+5270
+tmaruyama
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-9688
+9690
 
 time_entries_test.rb
 file
@@ -100,11 +100,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-1704d0f93701094c0ebf95183e078b5f
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+f3362e09e4ef210beddc057c74493b74
+2011-05-29T07:24:15.223638Z
+5946
+jplang
 has-props
 
 
@@ -126,7 +126,7 @@
 
 
 
-5254
+5607
 
 http_basic_login_test.rb
 file
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 92abe10e190b64c60afc90866336aa7c
 2010-12-12T23:24:34.194336Z
 4509
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 31d08ba85b57fcdb41e06c1f367de87e
 2011-01-06T20:36:31.826591Z
 4645
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 a4c38f734c93d99d52de27d41a380756
 2010-12-12T23:24:34.194336Z
 4509
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 445e18c4a9d648b99d948eac4e750480
 2010-12-12T23:24:34.194336Z
 4509
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 bee85bcaab5d8fb5f90a64ad4ac32e3c
 2010-12-12T23:24:34.194336Z
 4509
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 24e8e5b1544016befedeea49b8fb5cb5
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/integration/api_test/.svn/text-base/time_entries_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/api_test/.svn/text-base/time_entries_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -32,6 +32,16 @@
       assert_tag :tag => 'time_entries',
         :child => {:tag => 'time_entry', :child => {:tag => 'id', :content => '2'}}
     end
+    
+    context "with limit" do
+      should "return limited results" do
+        get '/time_entries.xml?limit=2', {}, :authorization => credentials('jsmith')
+        assert_response :success
+        assert_equal 'application/xml', @response.content_type
+        assert_tag :tag => 'time_entries',
+          :children => {:count => 2}
+      end
+    end
   end
   
   context "GET /time_entries/2.xml" do
--- a/test/integration/api_test/.svn/text-base/users_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/api_test/.svn/text-base/users_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -141,7 +141,7 @@
             
           assert_response :unprocessable_entity
           assert_equal 'application/xml', @response.content_type
-          assert_tag 'errors', :child => {:tag => 'error', :content => "Firstname can't be blank"}
+          assert_tag 'errors', :child => {:tag => 'error', :content => "First name can't be blank"}
         end
       end
       
@@ -226,7 +226,7 @@
             
           assert_response :unprocessable_entity
           assert_equal 'application/xml', @response.content_type
-          assert_tag 'errors', :child => {:tag => 'error', :content => "Firstname can't be blank"}
+          assert_tag 'errors', :child => {:tag => 'error', :content => "First name can't be blank"}
         end
       end
       
--- a/test/integration/api_test/time_entries_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/api_test/time_entries_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -32,6 +32,16 @@
       assert_tag :tag => 'time_entries',
         :child => {:tag => 'time_entry', :child => {:tag => 'id', :content => '2'}}
     end
+    
+    context "with limit" do
+      should "return limited results" do
+        get '/time_entries.xml?limit=2', {}, :authorization => credentials('jsmith')
+        assert_response :success
+        assert_equal 'application/xml', @response.content_type
+        assert_tag :tag => 'time_entries',
+          :children => {:count => 2}
+      end
+    end
   end
   
   context "GET /time_entries/2.xml" do
--- a/test/integration/api_test/users_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/api_test/users_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -141,7 +141,7 @@
             
           assert_response :unprocessable_entity
           assert_equal 'application/xml', @response.content_type
-          assert_tag 'errors', :child => {:tag => 'error', :content => "Firstname can't be blank"}
+          assert_tag 'errors', :child => {:tag => 'error', :content => "First name can't be blank"}
         end
       end
       
@@ -226,7 +226,7 @@
             
           assert_response :unprocessable_entity
           assert_equal 'application/xml', @response.content_type
-          assert_tag 'errors', :child => {:tag => 'error', :content => "Firstname can't be blank"}
+          assert_tag 'errors', :child => {:tag => 'error', :content => "First name can't be blank"}
         end
       end
       
--- a/test/integration/issues_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/issues_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -65,7 +65,7 @@
   end
 
   # add then remove 2 attachments to an issue
-  def test_issue_attachements
+  def test_issue_attachments
     log_user('jsmith', 'jsmith')
     set_tmp_attachments_directory
 
@@ -126,4 +126,75 @@
                    :attributes => { :href => '/projects/ecookbook/issues?page=2' }
     
   end
+  
+  def test_issue_with_user_custom_field
+    @field = IssueCustomField.create!(:name => 'Tester', :field_format => 'user', :is_for_all => true, :trackers => Tracker.all)
+    Role.anonymous.add_permission! :add_issues, :edit_issues
+    users = Project.find(1).users
+    tester = users.first
+    
+    # Issue form
+    get '/projects/ecookbook/issues/new'
+    assert_response :success
+    assert_tag :select,
+      :attributes => {:name => "issue[custom_field_values][#{@field.id}]"},
+      :children => {:count => (users.size + 1)}, # +1 for blank value
+      :child => {
+        :tag => 'option',
+        :attributes => {:value => tester.id.to_s},
+        :content => tester.name
+      }
+    
+    # Create issue
+    assert_difference 'Issue.count' do
+      post '/projects/ecookbook/issues', 
+        :issue => {
+          :tracker_id => '1',
+          :priority_id => '4',
+          :subject => 'Issue with user custom field',
+          :custom_field_values => {@field.id.to_s => users.first.id.to_s}
+        }
+    end
+    issue = Issue.first(:order => 'id DESC')
+    assert_response 302
+    
+    # Issue view
+    follow_redirect!
+    assert_tag :th,
+      :content => /Tester/,
+      :sibling => {
+        :tag => 'td',
+        :content => tester.name
+      }
+    assert_tag :select,
+      :attributes => {:name => "issue[custom_field_values][#{@field.id}]"},
+      :children => {:count => (users.size + 1)}, # +1 for blank value
+      :child => {
+        :tag => 'option',
+        :attributes => {:value => tester.id.to_s, :selected => 'selected'},
+        :content => tester.name
+      }
+    
+    # Update issue
+    new_tester = users[1]
+    assert_difference 'Journal.count' do
+      put "/issues/#{issue.id}",
+        :notes => 'Updating custom field',
+        :issue => {
+          :custom_field_values => {@field.id.to_s => new_tester.id.to_s}
+        }
+    end
+    assert_response 302
+    
+    # Issue view
+    follow_redirect!
+    assert_tag :content => 'Tester',
+      :ancestor => {:tag => 'ul', :attributes => {:class => /details/}},
+      :sibling => {
+        :content => tester.name,
+        :sibling => {
+          :content => new_tester.name
+        }
+      }
+  end
 end
--- a/test/integration/layout_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/layout_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -21,4 +21,29 @@
     assert_response :forbidden
     assert_select "#admin-menu", :count => 0
   end
+
+  def test_top_menu_and_search_not_visible_when_login_required
+    with_settings :login_required => '1' do
+      get '/'
+      assert_select "#top-menu > ul", 0
+      assert_select "#quick-search", 0
+    end
+  end
+
+  def test_top_menu_and_search_visible_when_login_not_required
+    with_settings :login_required => '0' do
+      get '/'
+      assert_select "#top-menu > ul"
+      assert_select "#quick-search"
+    end
+  end
+  
+  def test_wiki_formatter_header_tags
+    Role.anonymous.add_permission! :add_issues
+    
+    get '/projects/ecookbook/issues/new'
+    assert_tag :script,
+      :attributes => {:src => %r{^/javascripts/jstoolbar/textile.js}},
+      :parent => {:tag => 'head'}
+  end
 end
--- a/test/integration/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/integration/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/integration/lib
 http://redmine.rubyforge.org/svn
 
 
--- a/test/integration/lib/redmine/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/lib/redmine/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/integration/lib/redmine
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/integration/lib/redmine
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 302d4ea0c07530cc9d48b971849df66d
 2010-12-12T23:24:34.194336Z
 4509
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 782f5d377a79dea8a580dcd902121b37
 2010-12-23T09:42:33.439630Z
 4560
--- a/test/integration/routing_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/integration/routing_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -91,14 +91,12 @@
     should_route :post, "/issues/1/quoted", :controller => 'journals', :action => 'new', :id => '1'
 
     should_route :get, "/issues/calendar", :controller => 'calendars', :action => 'show'
-    should_route :put, "/issues/calendar", :controller => 'calendars', :action => 'update'
     should_route :get, "/projects/project-name/issues/calendar", :controller => 'calendars', :action => 'show', :project_id => 'project-name'
-    should_route :put, "/projects/project-name/issues/calendar", :controller => 'calendars', :action => 'update', :project_id => 'project-name'
 
     should_route :get, "/issues/gantt", :controller => 'gantts', :action => 'show'
-    should_route :put, "/issues/gantt", :controller => 'gantts', :action => 'update'
+    should_route :get, "/issues/gantt.pdf", :controller => 'gantts', :action => 'show', :format => 'pdf'
     should_route :get, "/projects/project-name/issues/gantt", :controller => 'gantts', :action => 'show', :project_id => 'project-name'
-    should_route :put, "/projects/project-name/issues/gantt", :controller => 'gantts', :action => 'update', :project_id => 'project-name'
+    should_route :get, "/projects/project-name/issues/gantt.pdf", :controller => 'gantts', :action => 'show', :project_id => 'project-name', :format => 'pdf'
 
     should_route :get, "/issues/auto_complete", :controller => 'auto_completes', :action => 'issues'
 
@@ -197,6 +195,14 @@
     should_route :delete, "/projects/1.xml", :controller => 'projects', :action => 'destroy', :id => '1', :format => 'xml'
     should_route :delete, "/projects/64/enumerations", :controller => 'project_enumerations', :action => 'destroy', :project_id => '64'
   end
+  
+  context "queries" do
+    should_route :get, "/queries/new", :controller => 'queries', :action => 'new'
+    should_route :get, "/projects/redmine/queries/new", :controller => 'queries', :action => 'new', :project_id => 'redmine'
+    
+    should_route :post, "/queries/new", :controller => 'queries', :action => 'new'
+    should_route :post, "/projects/redmine/queries/new", :controller => 'queries', :action => 'new', :project_id => 'redmine'
+  end
 
   context "repositories" do
     should_route :get, "/projects/redmine/repository", :controller => 'repositories', :action => 'show', :id => 'redmine'
--- a/test/mocks/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/mocks/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/mocks
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/mocks
 http://redmine.rubyforge.org/svn
 
 
@@ -38,7 +38,7 @@
 
 
 
-2011-03-03T11:05:09.000000Z
+2011-06-06T13:15:00.000000Z
 c73745cf74166bf38552d6469b74b190
 2009-09-20T14:06:57.257282Z
 2895
--- a/test/mocks/development/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/mocks/development/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/mocks/development
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/mocks/development
 http://redmine.rubyforge.org/svn
 
 
--- a/test/mocks/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/mocks/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/mocks/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/mocks/test
 http://redmine.rubyforge.org/svn
 
 
--- a/test/test_helper.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/test_helper.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -87,6 +87,7 @@
     saved_settings = options.keys.inject({}) {|h, k| h[k] = Setting[k].dup; h}
     options.each {|k, v| Setting[k] = v}
     yield
+  ensure
     saved_settings.each {|k, v| Setting[k] = v}
   end
 
@@ -109,6 +110,13 @@
     File.join(RAILS_ROOT.gsub(%r{config\/\.\.}, ''), "/tmp/test/#{vendor.downcase}_repository")
   end
   
+  # Returns the url of the subversion test repository
+  def self.subversion_repository_url
+    path = repository_path('subversion')
+    path = '/' + path unless path.starts_with?('/')
+    "file://#{path}"
+  end
+  
   # Returns true if the +vendor+ test repository is configured
   def self.repository_configured?(vendor)
     File.directory?(repository_path(vendor))
@@ -416,7 +424,7 @@
   # Checks that the response is a valid JSON string
   def self.should_be_a_valid_json_string
     should "be a valid JSON string (or empty)" do
-      assert (response.body.blank? || ActiveSupport::JSON.decode(response.body))
+      assert(response.body.blank? || ActiveSupport::JSON.decode(response.body))
     end
   end
 
--- a/test/unit/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,341 +1,5 @@
-K 25
-svn:wc:ra_dav:version-url
-V 34
-/svn/!svn/ver/4991/trunk/test/unit
-END
-document_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4509/trunk/test/unit/document_test.rb
-END
-token_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 48
-/svn/!svn/ver/4509/trunk/test/unit/token_test.rb
+/svn/!svn/ver/5947/branches/1.2-stable/test/unit
 END
-repository_git_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4986/trunk/test/unit/repository_git_test.rb
-END
-repository_mercurial_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4991/trunk/test/unit/repository_mercurial_test.rb
-END
-issue_relation_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4721/trunk/test/unit/issue_relation_test.rb
-END
-version_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4597/trunk/test/unit/version_test.rb
-END
-enumeration_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4509/trunk/test/unit/enumeration_test.rb
-END
-board_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/4509/trunk/test/unit/board_test.rb
-END
-issue_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/4958/trunk/test/unit/issue_test.rb
-END
-issue_status_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4895/trunk/test/unit/issue_status_test.rb
-END
-time_entry_activity_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4509/trunk/test/unit/time_entry_activity_test.rb
-END
-tracker_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4509/trunk/test/unit/tracker_test.rb
-END
-repository_subversion_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4987/trunk/test/unit/repository_subversion_test.rb
-END
-repository_bazaar_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/4982/trunk/test/unit/repository_bazaar_test.rb
-END
-role_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/4509/trunk/test/unit/role_test.rb
-END
-changeset_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4984/trunk/test/unit/changeset_test.rb
-END
-comment_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4509/trunk/test/unit/comment_test.rb
-END
-wiki_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/4680/trunk/test/unit/wiki_test.rb
-END
-calendar_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4509/trunk/test/unit/calendar_test.rb
-END
-journal_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4509/trunk/test/unit/journal_test.rb
-END
-document_category_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/4509/trunk/test/unit/document_category_test.rb
-END
-default_data_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4509/trunk/test/unit/default_data_test.rb
-END
-user_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/4936/trunk/test/unit/user_test.rb
-END
-mail_handler_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4576/trunk/test/unit/mail_handler_test.rb
-END
-repository_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4982/trunk/test/unit/repository_test.rb
-END
-time_entry_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4709/trunk/test/unit/time_entry_test.rb
-END
-principal_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4509/trunk/test/unit/principal_test.rb
-END
-journal_observer_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4509/trunk/test/unit/journal_observer_test.rb
-END
-auth_source_ldap_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4509/trunk/test/unit/auth_source_ldap_test.rb
-END
-repository_filesystem_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4509/trunk/test/unit/repository_filesystem_test.rb
-END
-project_nested_set_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/4650/trunk/test/unit/project_nested_set_test.rb
-END
-message_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4509/trunk/test/unit/message_test.rb
-END
-wiki_redirect_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/4509/trunk/test/unit/wiki_redirect_test.rb
-END
-issue_category_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4509/trunk/test/unit/issue_category_test.rb
-END
-attachment_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4598/trunk/test/unit/attachment_test.rb
-END
-issue_priority_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4509/trunk/test/unit/issue_priority_test.rb
-END
-repository_cvs_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4982/trunk/test/unit/repository_cvs_test.rb
-END
-repository_darcs_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4982/trunk/test/unit/repository_darcs_test.rb
-END
-activity_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/4509/trunk/test/unit/activity_test.rb
-END
-group_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/4509/trunk/test/unit/group_test.rb
-END
-watcher_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4509/trunk/test/unit/watcher_test.rb
-END
-wiki_content_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4509/trunk/test/unit/wiki_content_test.rb
-END
-enabled_module_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/4509/trunk/test/unit/enabled_module_test.rb
-END
-wiki_page_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4509/trunk/test/unit/wiki_page_test.rb
-END
-issue_nested_set_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4735/trunk/test/unit/issue_nested_set_test.rb
-END
-query_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/4888/trunk/test/unit/query_test.rb
-END
-search_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4509/trunk/test/unit/search_test.rb
-END
-custom_value_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4509/trunk/test/unit/custom_value_test.rb
-END
-project_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4615/trunk/test/unit/project_test.rb
-END
-member_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4509/trunk/test/unit/member_test.rb
-END
-mailer_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4509/trunk/test/unit/mailer_test.rb
-END
-news_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/4509/trunk/test/unit/news_test.rb
-END
-user_preference_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4509/trunk/test/unit/user_preference_test.rb
-END
-custom_field_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4509/trunk/test/unit/custom_field_test.rb
-END
-setting_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4509/trunk/test/unit/setting_test.rb
-END
-testing_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4509/trunk/test/unit/testing_test.rb
-END
--- a/test/unit/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/unit
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/unit
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-03T03:35:13.139305Z
-4991
-tmaruyama
+2011-05-29T07:47:25.955545Z
+5947
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-31100b89782bb9004a5f162375b5192b
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:17:46.000000Z
+c59de31e1223a9784db2e15d0a3627df
+2011-05-18T07:56:16.533778Z
+5848
+tmaruyama
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-2150
+2138
 
 token_test.rb
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 e89c6342d99d8e32ca9c9d3399641b96
 2010-12-12T23:24:34.194336Z
 4509
@@ -100,10 +100,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-47242b5b6c39be0674556191a42a70ff
-2011-03-02T05:12:39.499704Z
-4986
+2011-06-06T13:17:46.000000Z
+0e626a5d1815bfb8fe3d3894aa558637
+2011-05-19T02:17:19.580631Z
+5855
 tmaruyama
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-5437
+16980
 
 repository_mercurial_test.rb
 file
@@ -134,10 +134,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-df5148d6503c41188684ca42c8fb1563
-2011-03-03T03:35:13.139305Z
-4991
+2011-06-06T13:17:46.000000Z
+e7adac02507d6c3adc56636d03772718
+2011-05-08T05:10:05.435666Z
+5704
 tmaruyama
 has-props
 
@@ -160,7 +160,7 @@
 
 
 
-7231
+10475
 
 issue_relation_test.rb
 file
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 c121bfc1afd3428c1c63ffc8e4c9441e
 2011-01-15T14:03:39.071238Z
 4721
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 9aa8e8e5f5ef4c0c74c9fcdaba7ada60
 2010-12-31T11:16:03.020751Z
 4597
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 01227adbe16fcf333a7e99f9a7bcc0f6
 2010-12-12T23:24:34.194336Z
 4509
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 afdfda5a2d9285920afb8815085ad0ee
 2010-12-12T23:24:34.194336Z
 4509
@@ -304,11 +304,11 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-103def744f4a7e87035c40962f5f4b9f
-2011-02-27T15:51:10.736814Z
-4958
-jplang
+2011-06-06T13:17:46.000000Z
+5cfdd0a7bdaa5c23036e2ef0c890a8ae
+2011-05-17T01:15:35.033077Z
+5806
+tmaruyama
 has-props
 
 
@@ -330,7 +330,7 @@
 
 
 
-32944
+37453
 
 issue_status_test.rb
 file
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:40:17.000000Z
+2011-06-06T13:15:00.000000Z
 927e020ce867263e6cf5af443bfaecd8
 2011-02-20T15:38:07.840581Z
 4895
@@ -372,11 +372,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-41183297c9b098b67d368c45289eb47f
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:17:46.000000Z
+82ebca9b5e4c722834aaa5cc3021cb39
+2011-04-04T11:54:22.596314Z
+5315
+tmaruyama
 has-props
 
 
@@ -398,7 +398,7 @@
 
 
 
-2987
+2985
 
 tracker_test.rb
 file
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 32e8c8fd522283c8008b2dac1de383dd
 2010-12-12T23:24:34.194336Z
 4509
@@ -440,10 +440,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-428e976e05c3c4bffbc9885ef1272fc7
-2011-03-02T07:10:39.633104Z
-4987
+2011-06-06T13:17:46.000000Z
+969b74ba0ac95022625b038ed3b53ac7
+2011-05-08T05:10:45.369091Z
+5705
 tmaruyama
 has-props
 
@@ -466,7 +466,7 @@
 
 
 
-7066
+6956
 
 repository_bazaar_test.rb
 file
@@ -474,10 +474,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-562f1297bf47e2199e1f04ccd1733f49
-2011-03-01T10:27:30.170724Z
-4982
+2011-06-06T13:17:46.000000Z
+30bae9b277a795c111c423d92d737684
+2011-03-16T05:50:06.339454Z
+5148
 tmaruyama
 has-props
 
@@ -500,7 +500,7 @@
 
 
 
-2704
+3522
 
 changeset_test.rb
 file
@@ -508,10 +508,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-ee5c9c8f3cf4814a73673fe693faf697
-2011-03-01T15:35:27.747088Z
-4984
+2011-06-06T13:17:46.000000Z
+1cf1ec1e57d07381b05b2c4d816d1dbc
+2011-05-09T04:54:37.910430Z
+5711
 tmaruyama
 has-props
 
@@ -534,7 +534,7 @@
 
 
 
-10123
+14116
 
 role_test.rb
 file
@@ -542,11 +542,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-54e0d5b5ac94a5a9a0649b2af1b030e4
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:17:46.000000Z
+2e07bb095dbde788122b64dd317497c1
+2011-04-05T22:37:45.210136Z
+5333
+jplang
 has-props
 
 
@@ -568,7 +568,7 @@
 
 
 
-3054
+3248
 
 helpers
 dir
@@ -579,11 +579,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-d279aa9cdae195412ec42a41d76bc999
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:17:46.000000Z
+c42e1faeab30f032275bfd52435972f7
+2011-03-04T14:32:58.878627Z
+5003
+jplang
 has-props
 
 
@@ -605,7 +605,7 @@
 
 
 
-1496
+1824
 
 wiki_test.rb
 file
@@ -613,11 +613,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-fe66a05a1301e78c21ab94a101fda6af
-2011-01-10T18:32:04.408692Z
-4680
-jplang
+2011-06-06T13:17:46.000000Z
+7d976bf38eb872a25baba7c1f7a08cc5
+2011-05-17T02:38:09.971445Z
+5812
+tmaruyama
 has-props
 
 
@@ -639,56 +639,22 @@
 
 
 
-2392
+3225
 
 lib
 dir
 
-calendar_test.rb
-file
-
-
-
-
-2011-03-03T11:05:08.000000Z
-fadeda4795465dbbbf5873729ddba30a
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1777
-
 journal_test.rb
 file
 
 
 
 
-2011-03-03T11:05:08.000000Z
-93378a65c9f444ca160b6681b7435610
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+a699c36ad643f02bf36d9a95b5579a2d
+2011-05-17T01:16:31.186747Z
+5808
+tmaruyama
 has-props
 
 
@@ -710,7 +676,7 @@
 
 
 
-1589
+3249
 
 document_category_test.rb
 file
@@ -718,11 +684,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-621cee22436f207cb82915edfe609d42
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+5b7691649eace6223fab74bf0674ff57
+2011-05-18T07:54:54.667231Z
+5846
+tmaruyama
 has-props
 
 
@@ -744,7 +710,7 @@
 
 
 
-1371
+1366
 
 default_data_test.rb
 file
@@ -752,11 +718,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-f1290324d506f8535d74ccf3f878c24f
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+591c0e3bed3419509ed192f8cb2d4f39
+2011-05-18T07:54:25.978295Z
+5845
+tmaruyama
 has-props
 
 
@@ -778,7 +744,7 @@
 
 
 
-1718
+1712
 
 user_test.rb
 file
@@ -786,10 +752,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-93a08b69d91fdc8222483cbb6d20563d
-2011-02-23T17:27:31.762248Z
-4936
+2011-06-06T13:18:32.000000Z
+29d179b6d28c7ce861f25681cccae51a
+2011-03-15T15:39:59.504985Z
+5140
 jplang
 has-props
 
@@ -812,7 +778,7 @@
 
 
 
-26161
+26723
 
 mail_handler_test.rb
 file
@@ -820,11 +786,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-ccd63941c3776cd520a713f27ed01d08
-2010-12-29T17:38:57.772516Z
-4576
-jplang
+2011-06-06T13:18:32.000000Z
+eb1dbf9596b5b0182d2e20ba8dafa14d
+2011-05-17T02:13:19.527857Z
+5809
+tmaruyama
 has-props
 
 
@@ -846,7 +812,7 @@
 
 
 
-18979
+19111
 
 repository_test.rb
 file
@@ -854,10 +820,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-71ee0e9aa37fb046390f5774895ef623
-2011-03-01T10:27:30.170724Z
-4982
+2011-06-06T13:18:32.000000Z
+6aed1b4132534a97d49738817211706d
+2011-05-12T23:58:58.450242Z
+5767
 tmaruyama
 has-props
 
@@ -880,7 +846,7 @@
 
 
 
-6540
+8402
 
 time_entry_test.rb
 file
@@ -888,7 +854,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 ab1c1db4414427c710071842f98a5685
 2011-01-14T18:45:28.811697Z
 4709
@@ -922,7 +888,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 69e70ceb20c56bbb25155e8120146aa3
 2010-12-12T23:24:34.194336Z
 4509
@@ -956,33 +922,33 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-0a054ecc047ebca7e0cb9fe8aadf51eb
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3959
+2011-06-06T13:18:32.000000Z
+4d068178e1e5343bb1d3bc3f4405b434
+2011-05-17T01:16:04.549837Z
+5807
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4290
 
 auth_source_ldap_test.rb
 file
@@ -990,7 +956,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 4de167441793151c86bc376e671cc3c1
 2010-12-12T23:24:34.194336Z
 4509
@@ -1024,7 +990,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 47282cfa59c0817a7936d60b0ac3e16c
 2011-01-06T21:17:08.355137Z
 4650
@@ -1058,11 +1024,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-8d990ac10b1aeee25c74ee1f5cdc9d18
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+eadb473d8dd159c88fde8c16bbe74e03
+2011-05-21T01:10:47.308181Z
+5862
+tmaruyama
 has-props
 
 
@@ -1084,7 +1050,41 @@
 
 
 
-1940
+2031
+
+custom_field_user_format_test.rb
+file
+
+
+
+
+2011-06-06T13:18:32.000000Z
+949bad455047fae4556155bfcb62a3a1
+2011-04-07T16:34:58.239484Z
+5354
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2823
 
 message_test.rb
 file
@@ -1092,7 +1092,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 6b620c2638af1111d237a35ecba5107d
 2010-12-12T23:24:34.194336Z
 4509
@@ -1126,7 +1126,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 f4be42a1985df0fc471331477246eea7
 2010-12-12T23:24:34.194336Z
 4509
@@ -1160,7 +1160,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 fb1799532feba53a1df0355271636ce7
 2010-12-12T23:24:34.194336Z
 4509
@@ -1194,11 +1194,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-e8fef8d0f3de527136fabe2c2195be9e
-2010-12-31T15:24:42.140175Z
-4598
-jplang
+2011-06-06T13:18:32.000000Z
+f1659fedd261e623671925e6a8cca78f
+2011-05-18T07:53:50.954451Z
+5844
+tmaruyama
 has-props
 
 
@@ -1220,7 +1220,7 @@
 
 
 
-3619
+3609
 
 issue_priority_test.rb
 file
@@ -1228,7 +1228,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 23d11bc7cfedc1a4d419928eb81d5c64
 2010-12-12T23:24:34.194336Z
 4509
@@ -1262,10 +1262,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-a2d7bc3feefa89da466f5ead9e4da18d
-2011-03-01T10:27:30.170724Z
-4982
+2011-06-06T13:18:32.000000Z
+5152dbf3df76a2d3ce878004f7a96c0f
+2011-05-08T05:08:44.023166Z
+5702
 tmaruyama
 has-props
 
@@ -1288,7 +1288,7 @@
 
 
 
-3909
+6270
 
 repository_darcs_test.rb
 file
@@ -1296,10 +1296,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-44a11577927a86290e2887c1e0c0dd24
-2011-03-01T10:27:30.170724Z
-4982
+2011-06-06T13:18:32.000000Z
+d59b40c2d47bc0848d94e4db7d75fc57
+2011-04-12T05:47:05.800856Z
+5435
 tmaruyama
 has-props
 
@@ -1322,7 +1322,7 @@
 
 
 
-2723
+2878
 
 activity_test.rb
 file
@@ -1330,11 +1330,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-f2227b773374d5366d6ee7e26f7f977e
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+78ae483a9d1f99ce076587cc6bfd9266
+2011-05-29T07:47:25.955545Z
+5947
+jplang
 has-props
 
 
@@ -1356,7 +1356,7 @@
 
 
 
-3264
+3345
 
 group_test.rb
 file
@@ -1364,7 +1364,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 50cc3fd88223d69f74e1b11991989bbc
 2010-12-12T23:24:34.194336Z
 4509
@@ -1398,11 +1398,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-3665052c1291d40753ee1ab4c61cd237
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+ee0be4e865bda5f947a309206e08b74b
+2011-05-29T07:18:05.033755Z
+5945
+jplang
 has-props
 
 
@@ -1424,7 +1424,7 @@
 
 
 
-3420
+4481
 
 wiki_content_test.rb
 file
@@ -1432,11 +1432,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-5f0c8e09595f6c8f6a95def9d4ff3833
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+117ecad84a309ca3ba42869d000b80bd
+2011-05-17T02:38:55.557254Z
+5813
+tmaruyama
 has-props
 
 
@@ -1458,7 +1458,7 @@
 
 
 
-3109
+3079
 
 enabled_module_test.rb
 file
@@ -1466,11 +1466,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-870052407719f2a360e8e95f0498130f
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+cc3153be22896f0d6588d64d5d9e381e
+2011-05-18T07:55:38.214882Z
+5847
+tmaruyama
 has-props
 
 
@@ -1492,7 +1492,7 @@
 
 
 
-1594
+1588
 
 wiki_page_test.rb
 file
@@ -1500,11 +1500,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-2b51ebfe6e4e23011d9b29f08028d832
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+1adb775822010aa696251df89ef822ee
+2011-05-17T02:37:04.586333Z
+5811
+tmaruyama
 has-props
 
 
@@ -1526,7 +1526,7 @@
 
 
 
-3903
+4085
 
 issue_nested_set_test.rb
 file
@@ -1534,11 +1534,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-a9a2a1d3497b65464c17a71858f15278
-2011-01-22T11:46:15.415880Z
-4735
-jplang
+2011-06-06T13:18:32.000000Z
+3ddfb679cbb5808edf1db3bd1e825d47
+2011-05-17T01:15:01.993813Z
+5805
+tmaruyama
 has-props
 
 
@@ -1560,7 +1560,7 @@
 
 
 
-14804
+14996
 
 query_test.rb
 file
@@ -1568,10 +1568,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-1cf7133fc93cd35e36b828afe1abdd35
-2011-02-20T13:03:32.835478Z
-4888
+2011-06-06T13:18:32.000000Z
+d9e7a21458e2be607054094d5760941b
+2011-04-29T13:33:15.566169Z
+5603
 jplang
 has-props
 
@@ -1594,7 +1594,7 @@
 
 
 
-21925
+23112
 
 search_test.rb
 file
@@ -1602,11 +1602,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-7c10ed0c6e700b4bfe67499ced7f9129
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+48fb0465a704fc0db79e0146cdbc6b7e
+2011-05-17T02:39:40.624115Z
+5814
+tmaruyama
 has-props
 
 
@@ -1628,7 +1628,7 @@
 
 
 
-4661
+4598
 
 custom_value_test.rb
 file
@@ -1636,7 +1636,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 e012f89814e1a9ddec5e1fd550c6b5e1
 2010-12-12T23:24:34.194336Z
 4509
@@ -1670,10 +1670,10 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-d50e8af60d440f2f3c60a31031b79830
-2011-01-02T11:38:35.152085Z
-4615
+2011-06-06T13:18:32.000000Z
+efe6a39b84eb3cd04ca65d7735bf56bb
+2011-03-30T17:16:25.989870Z
+5265
 jplang
 has-props
 
@@ -1696,7 +1696,7 @@
 
 
 
-39071
+40844
 
 member_test.rb
 file
@@ -1704,7 +1704,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 ef906b6b6bdeaa8d627ff66390dd31ab
 2010-12-12T23:24:34.194336Z
 4509
@@ -1738,11 +1738,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-2f98e8acd7868617728cd08702411096
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+9221f0d614365c7a155143d7c279b45c
+2011-04-04T01:10:10.703801Z
+5305
+tmaruyama
 has-props
 
 
@@ -1764,7 +1764,7 @@
 
 
 
-14555
+14780
 
 news_test.rb
 file
@@ -1772,7 +1772,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 759e3cea9ff889147937b83bcc137e4b
 2010-12-12T23:24:34.194336Z
 4509
@@ -1806,7 +1806,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 eab02ac34d43f18f1bc929dd62d6ee9a
 2010-12-12T23:24:34.194336Z
 4509
@@ -1840,7 +1840,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 59b08ad686160723b5b83df2cb5f8ee1
 2010-12-12T23:24:34.194336Z
 4509
@@ -1874,11 +1874,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-8a4fd1977e88faed5d7ebca9ac40d037
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+9d0e88a70fec4d68e8a35ec2da88ec33
+2011-05-18T11:36:35.474218Z
+5851
+tmaruyama
 has-props
 
 
@@ -1900,7 +1900,7 @@
 
 
 
-1817
+1801
 
 testing_test.rb
 file
@@ -1908,7 +1908,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 8f6032e2276c7077ad1716c67634c17e
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/unit/.svn/prop-base/calendar_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/test/unit/.svn/text-base/activity_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/activity_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -24,11 +24,11 @@
   def setup
     @project = Project.find(1)
   end
-  
+
   def test_activity_without_subprojects
     events = find_events(User.anonymous, :project => @project)
     assert_not_nil events
-    
+
     assert events.include?(Issue.find(1))
     assert !events.include?(Issue.find(4))
     # subproject issue
@@ -38,54 +38,57 @@
   def test_activity_with_subprojects
     events = find_events(User.anonymous, :project => @project, :with_subprojects => 1)
     assert_not_nil events
-    
+
     assert events.include?(Issue.find(1))
     # subproject issue
     assert events.include?(Issue.find(5))
   end
-  
+
   def test_global_activity_anonymous
     events = find_events(User.anonymous)
     assert_not_nil events
-    
+
     assert events.include?(Issue.find(1))
     assert events.include?(Message.find(5))
     # Issue of a private project
     assert !events.include?(Issue.find(4))
+    # Private issue and comment
+    assert !events.include?(Issue.find(14))
+    assert !events.include?(Journal.find(5))
   end
-  
+
   def test_global_activity_logged_user
     events = find_events(User.find(2)) # manager
     assert_not_nil events
-    
+
     assert events.include?(Issue.find(1))
     # Issue of a private project the user belongs to
     assert events.include?(Issue.find(4))
   end
-  
+
   def test_user_activity
     user = User.find(2)
     events = Redmine::Activity::Fetcher.new(User.anonymous, :author => user).events(nil, nil, :limit => 10)
-    
+
     assert(events.size > 0)
     assert(events.size <= 10)
     assert_nil(events.detect {|e| e.event_author != user})
   end
-  
+
   def test_files_activity
     f = Redmine::Activity::Fetcher.new(User.anonymous, :project => Project.find(1))
     f.scope = ['files']
     events = f.events
-    
+
     assert_kind_of Array, events
     assert events.include?(Attachment.find_by_container_type_and_container_id('Project', 1))
     assert events.include?(Attachment.find_by_container_type_and_container_id('Version', 1))
     assert_equal [Attachment], events.collect(&:class).uniq
     assert_equal %w(Project Version), events.collect(&:container_type).uniq.sort
   end
-  
+
   private
-  
+
   def find_events(user, options={})
     Redmine::Activity::Fetcher.new(user, options).events(Date.today - 30, Date.today + 1)
   end
--- a/test/unit/.svn/text-base/attachment_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/attachment_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,18 +1,18 @@
 # encoding: utf-8
 #
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,7 +21,7 @@
 
 class AttachmentTest < ActiveSupport::TestCase
   fixtures :issues, :users
-  
+
   def setup
   end
 
@@ -37,7 +37,7 @@
     assert_equal '1478adae0d4eb06d35897518540e25d6', a.digest
     assert File.exist?(a.diskfile)
   end
-  
+
   def test_create_should_auto_assign_content_type
     a = Attachment.new(:container => Issue.find(1),
                        :file => uploaded_test_file("testfile.txt", ""),
@@ -45,7 +45,7 @@
     assert a.save
     assert_equal 'text/plain', a.content_type
   end
-  
+
   def test_identical_attachments_at_the_same_time_should_not_overwrite
     a1 = Attachment.create!(:container => Issue.find(1),
                             :file => uploaded_test_file("testfile.txt", ""),
@@ -55,7 +55,7 @@
                             :author => User.find(1))
     assert a1.disk_filename != a2.disk_filename
   end
-  
+
   def test_diskfilename
     assert Attachment.disk_filename("test_file.txt") =~ /^\d{12}_test_file.txt$/
     assert_equal 'test_file.txt', Attachment.disk_filename("test_file.txt")[13..-1]
--- a/test/unit/.svn/text-base/calendar_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the 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.
-
-require File.expand_path('../../test_helper', __FILE__)
-
-class CalendarTest < ActiveSupport::TestCase
-  
-  def test_monthly
-    c = Redmine::Helpers::Calendar.new(Date.today, :fr, :month)
-    assert_equal [1, 7], [c.startdt.cwday, c.enddt.cwday]
-    
-    c = Redmine::Helpers::Calendar.new('2007-07-14'.to_date, :fr, :month)
-    assert_equal ['2007-06-25'.to_date, '2007-08-05'.to_date], [c.startdt, c.enddt]   
-     
-    c = Redmine::Helpers::Calendar.new(Date.today, :en, :month)
-    assert_equal [7, 6], [c.startdt.cwday, c.enddt.cwday]
-  end
-
-  def test_weekly
-    c = Redmine::Helpers::Calendar.new(Date.today, :fr, :week)
-    assert_equal [1, 7], [c.startdt.cwday, c.enddt.cwday]
-    
-    c = Redmine::Helpers::Calendar.new('2007-07-14'.to_date, :fr, :week)
-    assert_equal ['2007-07-09'.to_date, '2007-07-15'.to_date], [c.startdt, c.enddt]
-
-    c = Redmine::Helpers::Calendar.new(Date.today, :en, :week)
-    assert_equal [7, 6], [c.startdt.cwday, c.enddt.cwday]
-  end
-end
--- a/test/unit/.svn/text-base/changeset_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/changeset_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -20,54 +20,61 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class ChangesetTest < ActiveSupport::TestCase
-  fixtures :projects, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :users, :members, :member_roles, :trackers
+  fixtures :projects, :repositories,
+           :issues, :issue_statuses, :issue_categories,
+           :changesets, :changes, 
+           :enumerations,
+           :custom_fields, :custom_values,
+           :users, :members, :member_roles, :trackers,
+           :enabled_modules, :roles
 
   def setup
   end
-  
+
   def test_ref_keywords_any
     ActionMailer::Base.deliveries.clear
-    Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
+    Setting.commit_fix_status_id = IssueStatus.find(
+                                   :first, :conditions => ["is_closed = ?", true]).id
     Setting.commit_fix_done_ratio = '90'
     Setting.commit_ref_keywords = '*'
     Setting.commit_fix_keywords = 'fixes , closes'
-    
-    c = Changeset.new(:repository => Project.find(1).repository,
+
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => 'New commit (#2). Fixes #1')
+                      :comments     => 'New commit (#2). Fixes #1')
     c.scan_comment_for_issue_ids
-    
+
     assert_equal [1, 2], c.issue_ids.sort
     fixed = Issue.find(1)
     assert fixed.closed?
     assert_equal 90, fixed.done_ratio
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_ref_keywords
     Setting.commit_ref_keywords = 'refs'
     Setting.commit_fix_keywords = ''
-    
-    c = Changeset.new(:repository => Project.find(1).repository,
+
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => 'Ignores #2. Refs #1')
+                      :comments     => 'Ignores #2. Refs #1')
     c.scan_comment_for_issue_ids
     
     assert_equal [1], c.issue_ids.sort
   end
-  
+
   def test_ref_keywords_any_only
     Setting.commit_ref_keywords = '*'
     Setting.commit_fix_keywords = ''
     
-    c = Changeset.new(:repository => Project.find(1).repository,
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => 'Ignores #2. Refs #1')
+                      :comments     => 'Ignores #2. Refs #1')
     c.scan_comment_for_issue_ids
-    
+
     assert_equal [1, 2], c.issue_ids.sort
   end
-  
+
   def test_ref_keywords_any_with_timelog
     Setting.commit_ref_keywords = '*'
     Setting.commit_logtime_enabled = '1'
@@ -87,41 +94,44 @@
       '3,25' => 3.25,
       '3,25h' => 3.25,
     }.each do |syntax, expected_hours|
-      c = Changeset.new(:repository => Project.find(1).repository,
+      c = Changeset.new(:repository   => Project.find(1).repository,
                         :committed_on => 24.hours.ago,
-                        :comments => "Worked on this issue #1 @#{syntax}",
-                        :revision => '520',
-                        :user => User.find(2))
+                        :comments     => "Worked on this issue #1 @#{syntax}",
+                        :revision     => '520',
+                        :user         => User.find(2))
       assert_difference 'TimeEntry.count' do
         c.scan_comment_for_issue_ids
       end
       assert_equal [1], c.issue_ids.sort
-      
+
       time = TimeEntry.first(:order => 'id desc')
       assert_equal 1, time.issue_id
       assert_equal 1, time.project_id
       assert_equal 2, time.user_id
-      assert_equal expected_hours, time.hours, "@#{syntax} should be logged as #{expected_hours} hours but was #{time.hours}"
+      assert_equal expected_hours, time.hours,
+          "@#{syntax} should be logged as #{expected_hours} hours but was #{time.hours}"
       assert_equal Date.yesterday, time.spent_on
       assert time.activity.is_default?
-      assert time.comments.include?('r520'), "r520 was expected in time_entry comments: #{time.comments}"
+      assert time.comments.include?('r520'),
+            "r520 was expected in time_entry comments: #{time.comments}"
     end
   end
-  
+
   def test_ref_keywords_closing_with_timelog
-    Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
+    Setting.commit_fix_status_id = IssueStatus.find(
+                                    :first, :conditions => ["is_closed = ?", true]).id
     Setting.commit_ref_keywords = '*'
     Setting.commit_fix_keywords = 'fixes , closes'
     Setting.commit_logtime_enabled = '1'
     
-    c = Changeset.new(:repository => Project.find(1).repository,
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => 'This is a comment. Fixes #1 @4.5, #2 @1',
-                      :user => User.find(2))
+                      :comments     => 'This is a comment. Fixes #1 @4.5, #2 @1',
+                      :user         => User.find(2))
     assert_difference 'TimeEntry.count', 2 do
       c.scan_comment_for_issue_ids
     end
-    
+
     assert_equal [1, 2], c.issue_ids.sort
     assert Issue.find(1).closed?
     assert Issue.find(2).closed?
@@ -129,13 +139,13 @@
     times = TimeEntry.all(:order => 'id desc', :limit => 2)
     assert_equal [1, 2], times.collect(&:issue_id).sort
   end
-  
+
   def test_ref_keywords_any_line_start
     Setting.commit_ref_keywords = '*'
 
-    c = Changeset.new(:repository => Project.find(1).repository,
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => '#1 is the reason of this commit')
+                      :comments     => '#1 is the reason of this commit')
     c.scan_comment_for_issue_ids
 
     assert_equal [1], c.issue_ids.sort
@@ -144,9 +154,9 @@
   def test_ref_keywords_allow_brackets_around_a_issue_number
     Setting.commit_ref_keywords = '*'
 
-    c = Changeset.new(:repository => Project.find(1).repository,
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => '[#1] Worked on this issue')
+                      :comments     => '[#1] Worked on this issue')
     c.scan_comment_for_issue_ids
 
     assert_equal [1], c.issue_ids.sort
@@ -155,33 +165,35 @@
   def test_ref_keywords_allow_brackets_around_multiple_issue_numbers
     Setting.commit_ref_keywords = '*'
 
-    c = Changeset.new(:repository => Project.find(1).repository,
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => '[#1 #2, #3] Worked on these')
+                      :comments     => '[#1 #2, #3] Worked on these')
     c.scan_comment_for_issue_ids
 
     assert_equal [1,2,3], c.issue_ids.sort
   end
-  
+
   def test_commit_referencing_a_subproject_issue
-    c = Changeset.new(:repository => Project.find(1).repository,
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => 'refs #5, a subproject issue')
+                      :comments     => 'refs #5, a subproject issue')
     c.scan_comment_for_issue_ids
-    
+
     assert_equal [5], c.issue_ids.sort
     assert c.issues.first.project != c.project
   end
 
   def test_commit_referencing_a_parent_project_issue
     # repository of child project
-    r = Repository::Subversion.create!(:project => Project.find(3), :url => 'svn://localhost/test')
-      
-    c = Changeset.new(:repository => r,
+    r = Repository::Subversion.create!(
+          :project => Project.find(3),
+          :url     => 'svn://localhost/test')
+
+    c = Changeset.new(:repository   => r,
                       :committed_on => Time.now,
-                      :comments => 'refs #2, an issue of a parent project')
+                      :comments     => 'refs #2, an issue of a parent project')
     c.scan_comment_for_issue_ids
-    
+
     assert_equal [2], c.issue_ids.sort
     assert c.issues.first.project != c.project
   end
@@ -192,7 +204,9 @@
   end
 
   def test_text_tag_hash
-    c = Changeset.new(:scmid => '7234cb2750b63f47bff735edc50a1c0a433c2518', :revision => '7234cb2750b63f47bff735edc50a1c0a433c2518')
+    c = Changeset.new(
+          :scmid    => '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          :revision => '7234cb2750b63f47bff735edc50a1c0a433c2518')
     assert_equal 'commit:7234cb2750b63f47bff735edc50a1c0a433c2518', c.text_tag
   end
 
@@ -222,65 +236,166 @@
   end
 
   def test_comments_should_be_converted_to_utf8
-      proj = Project.find(3)
-      str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
-      r = Repository::Bazaar.create!(
-            :project => proj, :url => '/tmp/test/bazaar',
+    proj = Project.find(3)
+    # str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
+    str = "Texte encod\xe9 en ISO-8859-1."
+    str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding)
+    r = Repository::Bazaar.create!(
+            :project      => proj,
+            :url          => '/tmp/test/bazaar',
             :log_encoding => 'ISO-8859-1' )
-      assert r
-      c = Changeset.new(:repository => r,
-                        :committed_on => Time.now,
-                        :revision => '123',
-                        :scmid => '12345',
-                        :comments => str)
-      assert( c.save )
-      assert_equal "Texte encodé en ISO-8859-1.", c.comments
+    assert r
+    c = Changeset.new(:repository   => r,
+                      :committed_on => Time.now,
+                      :revision     => '123',
+                      :scmid        => '12345',
+                      :comments     => str)
+    assert( c.save )
+    str_utf8 = "Texte encod\xc3\xa9 en ISO-8859-1."
+    str_utf8.force_encoding("UTF-8") if str_utf8.respond_to?(:force_encoding)
+    assert_equal str_utf8, c.comments
   end
 
-  def test_invalid_utf8_sequences_in_comments_should_be_stripped
-      proj = Project.find(3)
-      str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
-      r = Repository::Bazaar.create!(
-            :project => proj, :url => '/tmp/test/bazaar',
+  def test_invalid_utf8_sequences_in_comments_should_be_replaced_latin1
+    proj = Project.find(3)
+    # str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
+    str1 = "Texte encod\xe9 en ISO-8859-1."
+    str2 = "\xe9a\xe9b\xe9c\xe9d\xe9e test"
+    str1.force_encoding("UTF-8") if str1.respond_to?(:force_encoding)
+    str2.force_encoding("ASCII-8BIT") if str2.respond_to?(:force_encoding)
+    r = Repository::Bazaar.create!(
+            :project      => proj,
+            :url          => '/tmp/test/bazaar',
             :log_encoding => 'UTF-8' )
-      assert r
-      c = Changeset.new(:repository => r,
-                        :committed_on => Time.now,
-                        :revision => '123',
-                        :scmid => '12345',
-                        :comments => str)
-      assert( c.save )
-      if str.respond_to?(:force_encoding)
-        assert_equal "Texte encod? en ISO-8859-1.", c.comments
-      else
-        assert_equal "Texte encod en ISO-8859-1.", c.comments
-      end
+    assert r
+    c = Changeset.new(:repository   => r,
+                      :committed_on => Time.now,
+                      :revision     => '123',
+                      :scmid        => '12345',
+                      :comments     => str1,
+                      :committer    => str2)
+    assert( c.save )
+    assert_equal "Texte encod? en ISO-8859-1.", c.comments
+    assert_equal "?a?b?c?d?e test", c.committer
+  end
+
+  def test_invalid_utf8_sequences_in_comments_should_be_replaced_ja_jis
+    proj = Project.find(3)
+    str = "test\xb5\xfetest\xb5\xfe"
+    if str.respond_to?(:force_encoding)
+      str.force_encoding('ASCII-8BIT')
+    end
+    r = Repository::Bazaar.create!(
+            :project      => proj,
+            :url          => '/tmp/test/bazaar',
+            :log_encoding => 'ISO-2022-JP' )
+    assert r
+    c = Changeset.new(:repository   => r,
+                      :committed_on => Time.now,
+                      :revision     => '123',
+                      :scmid        => '12345',
+                      :comments     => str)
+    assert( c.save )
+    assert_equal "test??test??", c.comments
   end
 
   def test_comments_should_be_converted_all_latin1_to_utf8
-      s1 = "\xC2\x80"
-      s2 = "\xc3\x82\xc2\x80"
-      if s1.respond_to?(:force_encoding)
-        s3 = s1
-        s4 = s2
-        s1.force_encoding('ASCII-8BIT')
-        s2.force_encoding('ASCII-8BIT')
-        s3.force_encoding('ISO-8859-1')
-        s4.force_encoding('UTF-8')
-        assert_equal s3.encode('UTF-8'), s4
-      end
-      proj = Project.find(3)
-      r = Repository::Bazaar.create!(
-            :project => proj, :url => '/tmp/test/bazaar',
+    s1 = "\xC2\x80"
+    s2 = "\xc3\x82\xc2\x80"
+    s4 = s2.dup
+    if s1.respond_to?(:force_encoding)
+      s3 = s1.dup
+      s1.force_encoding('ASCII-8BIT')
+      s2.force_encoding('ASCII-8BIT')
+      s3.force_encoding('ISO-8859-1')
+      s4.force_encoding('UTF-8')
+      assert_equal s3.encode('UTF-8'), s4
+    end
+    proj = Project.find(3)
+    r = Repository::Bazaar.create!(
+            :project      => proj,
+            :url          => '/tmp/test/bazaar',
             :log_encoding => 'ISO-8859-1' )
-      assert r
-      c = Changeset.new(:repository => r,
-                        :committed_on => Time.now,
-                        :revision => '123',
-                        :scmid => '12345',
-                        :comments => s1)
-      assert( c.save )
-      assert_equal s2, c.comments
+    assert r
+    c = Changeset.new(:repository   => r,
+                      :committed_on => Time.now,
+                      :revision     => '123',
+                      :scmid        => '12345',
+                      :comments     => s1)
+    assert( c.save )
+    assert_equal s4, c.comments
+  end
+
+  def test_invalid_utf8_sequences_in_paths_should_be_replaced
+    proj = Project.find(3)
+    str1 = "Texte encod\xe9 en ISO-8859-1"
+    str2 = "\xe9a\xe9b\xe9c\xe9d\xe9e test"
+    str1.force_encoding("UTF-8")      if str1.respond_to?(:force_encoding)
+    str2.force_encoding("ASCII-8BIT") if str2.respond_to?(:force_encoding)
+    r = Repository::Bazaar.create!(
+            :project => proj,
+            :url => '/tmp/test/bazaar',
+            :log_encoding => 'UTF-8' )
+    assert r
+    cs = Changeset.new(
+               :repository   => r,
+               :committed_on => Time.now,
+               :revision     => '123',
+               :scmid        => '12345',
+               :comments     => "test")
+    assert(cs.save)
+    ch = Change.new(
+                  :changeset     => cs,
+                  :action        => "A",
+                  :path          => str1,
+                  :from_path     => str2,
+                  :from_revision => "345")
+    assert(ch.save)
+    assert_equal "Texte encod? en ISO-8859-1", ch.path
+    assert_equal "?a?b?c?d?e test", ch.from_path
+  end
+
+  def test_comments_nil
+    proj = Project.find(3)
+    r = Repository::Bazaar.create!(
+            :project      => proj,
+            :url          => '/tmp/test/bazaar',
+            :log_encoding => 'ISO-8859-1' )
+    assert r
+    c = Changeset.new(:repository   => r,
+                      :committed_on => Time.now,
+                      :revision     => '123',
+                      :scmid        => '12345',
+                      :comments     => nil,
+                      :committer    => nil)
+    assert( c.save )
+    assert_equal "", c.comments
+    assert_equal nil, c.committer
+    if c.comments.respond_to?(:force_encoding)
+      assert_equal "UTF-8", c.comments.encoding.to_s
+    end
+  end
+
+  def test_comments_empty
+    proj = Project.find(3)
+    r = Repository::Bazaar.create!(
+            :project      => proj,
+            :url          => '/tmp/test/bazaar',
+            :log_encoding => 'ISO-8859-1' )
+    assert r
+    c = Changeset.new(:repository   => r,
+                      :committed_on => Time.now,
+                      :revision     => '123',
+                      :scmid        => '12345',
+                      :comments     => "",
+                      :committer    => "")
+    assert( c.save )
+    assert_equal "", c.comments
+    assert_equal "", c.committer
+    if c.comments.respond_to?(:force_encoding)
+      assert_equal "UTF-8", c.comments.encoding.to_s
+      assert_equal "UTF-8", c.committer.encoding.to_s
+    end
   end
 
   def test_identifier
--- a/test/unit/.svn/text-base/comment_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/comment_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -31,6 +31,15 @@
     @news.reload
     assert_equal 2, @news.comments_count
   end
+  
+  def test_create_should_send_notification
+    Setting.notified_events << 'news_comment_added'
+    Watcher.create!(:watchable => @news, :user => @jsmith)
+    
+    assert_difference 'ActionMailer::Base.deliveries.size' do
+      Comment.create!(:commented => @news, :author => @jsmith, :comments => "my comment")
+    end
+  end
 
   def test_validate
     comment = Comment.new(:commented => @news)
--- a/test/unit/.svn/text-base/default_data_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/default_data_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,7 +20,7 @@
 class DefaultDataTest < ActiveSupport::TestCase
   include Redmine::I18n
   fixtures :roles
-  
+
   def test_no_data
     assert !Redmine::DefaultData::Loader::no_data?
     Role.delete_all("builtin = 0")
@@ -29,7 +29,7 @@
     Enumeration.delete_all
     assert Redmine::DefaultData::Loader::no_data?
   end
-  
+
   def test_load
     valid_languages.each do |lang|
       begin
--- a/test/unit/.svn/text-base/document_category_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/document_category_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -23,7 +23,7 @@
   def test_should_be_an_enumeration
     assert DocumentCategory.ancestors.include?(Enumeration)
   end
-  
+
   def test_objects_count
     assert_equal 2, DocumentCategory.find_by_name("Uncategorized").objects_count
     assert_equal 0, DocumentCategory.find_by_name("User documentation").objects_count
@@ -33,4 +33,3 @@
     assert_equal :enumeration_doc_categories, DocumentCategory.new.option_name
   end
 end
-
--- a/test/unit/.svn/text-base/document_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/document_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -24,7 +24,7 @@
     doc = Document.new(:project => Project.find(1), :title => 'New document', :category => Enumeration.find_by_name('User documentation'))
     assert doc.save
   end
-  
+
   def test_create_should_send_email_notification
     ActionMailer::Base.deliveries.clear
     Setting.notified_events << 'document_added'
@@ -38,18 +38,18 @@
     # Sets a default category
     e = Enumeration.find_by_name('Technical documentation')
     e.update_attributes(:is_default => true)
-    
+
     doc = Document.new(:project => Project.find(1), :title => 'New document')
     assert_equal e, doc.category
     assert doc.save
   end
-  
+
   def test_updated_on_with_attachments
     d = Document.find(1)
     assert d.attachments.any?
     assert_equal d.attachments.map(&:created_on).max, d.updated_on
   end
-  
+
   def test_updated_on_without_attachments
     d = Document.find(2)
     assert d.attachments.empty?
--- a/test/unit/.svn/text-base/enabled_module_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/enabled_module_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,7 +19,7 @@
 
 class EnabledModuleTest < ActiveSupport::TestCase
   fixtures :projects, :wikis
-  
+
   def test_enabling_wiki_should_create_a_wiki
     CustomField.delete_all
     project = Project.create!(:name => 'Project with wiki', :identifier => 'wikiproject')
@@ -29,7 +29,7 @@
     assert_not_nil project.wiki
     assert_equal 'Wiki', project.wiki.start_page
   end
-  
+
   def test_reenabling_wiki_should_not_create_another_wiki
     project = Project.find(1)
     assert_not_nil project.wiki
--- a/test/unit/.svn/text-base/issue_nested_set_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/issue_nested_set_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,166 +21,166 @@
   fixtures :projects, :users, :members, :member_roles, :roles,
            :trackers, :projects_trackers,
            :versions,
-           :issue_statuses, :issue_categories, :issue_relations, :workflows, 
+           :issue_statuses, :issue_categories, :issue_relations, :workflows,
            :enumerations,
            :issues,
            :custom_fields, :custom_fields_projects, :custom_fields_trackers, :custom_values,
            :time_entries
 
   self.use_transactional_fixtures = false
-  
+
   def test_create_root_issue
     issue1 = create_issue!
     issue2 = create_issue!
     issue1.reload
     issue2.reload
-    
+
     assert_equal [issue1.id, nil, 1, 2], [issue1.root_id, issue1.parent_id, issue1.lft, issue1.rgt]
     assert_equal [issue2.id, nil, 1, 2], [issue2.root_id, issue2.parent_id, issue2.lft, issue2.rgt]
   end
-  
+
   def test_create_child_issue
     parent = create_issue!
     child =  create_issue!(:parent_issue_id => parent.id)
     parent.reload
     child.reload
-    
+
     assert_equal [parent.id, nil, 1, 4], [parent.root_id, parent.parent_id, parent.lft, parent.rgt]
     assert_equal [parent.id, parent.id, 2, 3], [child.root_id, child.parent_id, child.lft, child.rgt]
   end
-  
+
   def test_creating_a_child_in_different_project_should_not_validate
     issue = create_issue!
     child = Issue.new(:project_id => 2, :tracker_id => 1, :author_id => 1, :subject => 'child', :parent_issue_id => issue.id)
     assert !child.save
     assert_not_nil child.errors.on(:parent_issue_id)
   end
-  
+
   def test_move_a_root_to_child
     parent1 = create_issue!
     parent2 = create_issue!
     child = create_issue!(:parent_issue_id => parent1.id)
-    
+
     parent2.parent_issue_id = parent1.id
     parent2.save!
     child.reload
     parent1.reload
     parent2.reload
-    
+
     assert_equal [parent1.id, 1, 6], [parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [parent1.id, 4, 5], [parent2.root_id, parent2.lft, parent2.rgt]
     assert_equal [parent1.id, 2, 3], [child.root_id, child.lft, child.rgt]
   end
-  
+
   def test_move_a_child_to_root
     parent1 = create_issue!
     parent2 = create_issue!
     child =   create_issue!(:parent_issue_id => parent1.id)
-    
+
     child.parent_issue_id = nil
     child.save!
     child.reload
     parent1.reload
     parent2.reload
-    
+
     assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [parent2.id, 1, 2], [parent2.root_id, parent2.lft, parent2.rgt]
     assert_equal [child.id, 1, 2], [child.root_id, child.lft, child.rgt]
   end
-  
+
   def test_move_a_child_to_another_issue
     parent1 = create_issue!
     parent2 = create_issue!
     child =   create_issue!(:parent_issue_id => parent1.id)
-    
+
     child.parent_issue_id = parent2.id
     child.save!
     child.reload
     parent1.reload
     parent2.reload
-    
+
     assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [parent2.id, 1, 4], [parent2.root_id, parent2.lft, parent2.rgt]
     assert_equal [parent2.id, 2, 3], [child.root_id, child.lft, child.rgt]
   end
-  
+
   def test_move_a_child_with_descendants_to_another_issue
     parent1 = create_issue!
     parent2 = create_issue!
     child =   create_issue!(:parent_issue_id => parent1.id)
     grandchild = create_issue!(:parent_issue_id => child.id)
-    
+
     parent1.reload
     parent2.reload
     child.reload
     grandchild.reload
-    
+
     assert_equal [parent1.id, 1, 6], [parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [parent2.id, 1, 2], [parent2.root_id, parent2.lft, parent2.rgt]
     assert_equal [parent1.id, 2, 5], [child.root_id, child.lft, child.rgt]
     assert_equal [parent1.id, 3, 4], [grandchild.root_id, grandchild.lft, grandchild.rgt]
-    
+
     child.reload.parent_issue_id = parent2.id
     child.save!
     child.reload
     grandchild.reload
     parent1.reload
     parent2.reload
-    
+
     assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [parent2.id, 1, 6], [parent2.root_id, parent2.lft, parent2.rgt]
     assert_equal [parent2.id, 2, 5], [child.root_id, child.lft, child.rgt]
     assert_equal [parent2.id, 3, 4], [grandchild.root_id, grandchild.lft, grandchild.rgt]
   end
-  
+
   def test_move_a_child_with_descendants_to_another_project
     parent1 = create_issue!
     child =   create_issue!(:parent_issue_id => parent1.id)
     grandchild = create_issue!(:parent_issue_id => child.id)
-        
+
     assert child.reload.move_to_project(Project.find(2))
     child.reload
     grandchild.reload
     parent1.reload
-    
+
     assert_equal [1, parent1.id, 1, 2], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [2, child.id, 1, 4], [child.project_id, child.root_id, child.lft, child.rgt]
     assert_equal [2, child.id, 2, 3], [grandchild.project_id, grandchild.root_id, grandchild.lft, grandchild.rgt]
   end
-  
+
   def test_invalid_move_to_another_project
     parent1 = create_issue!
     child =   create_issue!(:parent_issue_id => parent1.id)
     grandchild = create_issue!(:parent_issue_id => child.id, :tracker_id => 2)
     Project.find(2).tracker_ids = [1]
-    
+
     parent1.reload
     assert_equal [1, parent1.id, 1, 6], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
-    
+
     # child can not be moved to Project 2 because its child is on a disabled tracker
     assert_equal false, Issue.find(child.id).move_to_project(Project.find(2))
     child.reload
     grandchild.reload
     parent1.reload
-    
+
     # no change
     assert_equal [1, parent1.id, 1, 6], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [1, parent1.id, 2, 5], [child.project_id, child.root_id, child.lft, child.rgt]
     assert_equal [1, parent1.id, 3, 4], [grandchild.project_id, grandchild.root_id, grandchild.lft, grandchild.rgt]
   end
-  
+
   def test_moving_an_issue_to_a_descendant_should_not_validate
     parent1 = create_issue!
     parent2 = create_issue!
     child =   create_issue!(:parent_issue_id => parent1.id)
     grandchild = create_issue!(:parent_issue_id => child.id)
-    
+
     child.reload
     child.parent_issue_id = grandchild.id
     assert !child.save
     assert_not_nil child.errors.on(:parent_issue_id)
   end
-  
+
   def test_moving_an_issue_should_keep_valid_relations_only
     issue1 = create_issue!
     issue2 = create_issue!
@@ -196,17 +196,17 @@
     assert !IssueRelation.exists?(r2.id)
     assert IssueRelation.exists?(r3.id)
   end
-  
+
   def test_destroy_should_destroy_children
     issue1 = create_issue!
     issue2 = create_issue!
     issue3 = create_issue!(:parent_issue_id => issue2.id)
     issue4 = create_issue!(:parent_issue_id => issue1.id)
-    
+
     issue3.init_journal(User.find(2))
     issue3.subject = 'child with journal'
     issue3.save!
-    
+
     assert_difference 'Issue.count', -2 do
       assert_difference 'Journal.count', -1 do
         assert_difference 'JournalDetail.count', -1 do
@@ -214,7 +214,7 @@
         end
       end
     end
-    
+
     issue1.reload
     issue4.reload
     assert !Issue.exists?(issue2.id)
@@ -222,7 +222,17 @@
     assert_equal [issue1.id, 1, 4], [issue1.root_id, issue1.lft, issue1.rgt]
     assert_equal [issue1.id, 2, 3], [issue4.root_id, issue4.lft, issue4.rgt]
   end
-  
+
+  def test_destroy_parent_issue_updated_during_children_destroy
+    parent = create_issue!
+    create_issue!(:start_date => Date.today, :parent_issue_id => parent.id)
+    create_issue!(:start_date => 2.days.from_now, :parent_issue_id => parent.id)
+
+    assert_difference 'Issue.count', -3 do
+      Issue.find(parent.id).destroy
+    end
+  end
+
   def test_destroy_child_issue_with_children
     root = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'root')
     child = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'child', :parent_issue_id => root.id)
@@ -230,7 +240,7 @@
     leaf.init_journal(User.find(2))
     leaf.subject = 'leaf with journal'
     leaf.save!
-    
+
     assert_difference 'Issue.count', -2 do
       assert_difference 'Journal.count', -1 do
         assert_difference 'JournalDetail.count', -1 do
@@ -238,11 +248,11 @@
         end
       end
     end
-    
+
     root = Issue.find(root.id)
     assert root.leaf?, "Root issue is not a leaf (lft: #{root.lft}, rgt: #{root.rgt})"
   end
-  
+
   def test_parent_priority_should_be_the_highest_child_priority
     parent = create_issue!(:priority => IssuePriority.find_by_name('Normal'))
     # Create children
@@ -261,7 +271,7 @@
     child3.save!
     assert_equal 'Normal', parent.reload.priority.name
   end
-  
+
   def test_parent_dates_should_be_lowest_start_and_highest_due_dates
     parent = create_issue!
     create_issue!(:start_date => '2010-01-25', :due_date => '2010-02-15', :parent_issue_id => parent.id)
@@ -271,22 +281,22 @@
     assert_equal Date.parse('2010-01-25'), parent.start_date
     assert_equal Date.parse('2010-02-22'), parent.due_date
   end
-  
+
   def test_parent_done_ratio_should_be_average_done_ratio_of_leaves
     parent = create_issue!
     create_issue!(:done_ratio => 20, :parent_issue_id => parent.id)
     assert_equal 20, parent.reload.done_ratio
     create_issue!(:done_ratio => 70, :parent_issue_id => parent.id)
     assert_equal 45, parent.reload.done_ratio
-    
+
     child = create_issue!(:done_ratio => 0, :parent_issue_id => parent.id)
     assert_equal 30, parent.reload.done_ratio
-    
+
     create_issue!(:done_ratio => 30, :parent_issue_id => child.id)
     assert_equal 30, child.reload.done_ratio
     assert_equal 40, parent.reload.done_ratio
   end
-  
+
   def test_parent_done_ratio_should_be_weighted_by_estimated_times_if_any
     parent = create_issue!
     create_issue!(:estimated_hours => 10, :done_ratio => 20, :parent_issue_id => parent.id)
@@ -294,7 +304,7 @@
     create_issue!(:estimated_hours => 20, :done_ratio => 50, :parent_issue_id => parent.id)
     assert_equal (50 * 20 + 20 * 10) / 30, parent.reload.done_ratio
   end
-  
+
   def test_parent_estimate_should_be_sum_of_leaves
     parent = create_issue!
     create_issue!(:estimated_hours => nil, :parent_issue_id => parent.id)
@@ -328,7 +338,7 @@
     parent.reload
     assert_equal [Date.parse('2010-06-02'), Date.parse('2010-06-10')], [parent.start_date, parent.due_date]
   end
-  
+
   def test_project_copy_should_copy_issue_tree
     p = Project.create!(:name => 'Tree copy', :identifier => 'tree-copy', :tracker_ids => [1, 2])
     i1 = create_issue!(:project_id => p.id, :subject => 'i1')
@@ -339,7 +349,7 @@
     c = Project.new(:name => 'Copy', :identifier => 'copy', :tracker_ids => [1, 2])
     c.copy(p, :only => 'issues')
     c.reload
-    
+
     assert_equal 5, c.issues.count
     ic1, ic2, ic3, ic4, ic5 = c.issues.find(:all, :order => 'subject')
     assert ic1.root?
@@ -348,7 +358,7 @@
     assert_equal ic2, ic4.parent
     assert ic5.root?
   end
-  
+
   # Helper that creates an issue with default attributes
   def create_issue!(attributes={})
     Issue.create!({:project_id => 1, :tracker_id => 1, :author_id => 1, :subject => 'test'}.merge(attributes))
--- a/test/unit/.svn/text-base/issue_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/issue_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -5,12 +5,12 @@
 # modify it under the terms of the 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.
@@ -22,7 +22,7 @@
            :trackers, :projects_trackers,
            :enabled_modules,
            :versions,
-           :issue_statuses, :issue_categories, :issue_relations, :workflows, 
+           :issue_statuses, :issue_categories, :issue_relations, :workflows,
            :enumerations,
            :issues,
            :custom_fields, :custom_fields_projects, :custom_fields_trackers, :custom_values,
@@ -34,17 +34,17 @@
     issue.reload
     assert_equal 1.5, issue.estimated_hours
   end
-  
+
   def test_create_minimal
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 3, :status_id => 1, :priority => IssuePriority.all.first, :subject => 'test_create')
     assert issue.save
     assert issue.description.nil?
   end
-  
+
   def test_create_with_required_custom_field
     field = IssueCustomField.find_by_name('Database')
     field.update_attribute(:is_required, true)
-    
+
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => 'test_create', :description => 'IssueTest#test_create_with_required_custom_field')
     assert issue.available_custom_fields.include?(field)
     # No value for the custom field
@@ -64,38 +64,82 @@
     issue.reload
     assert_equal 'PostgreSQL', issue.custom_value_for(field).value
   end
-  
+
+  def assert_visibility_match(user, issues)
+    assert_equal issues.collect(&:id).sort, Issue.all.select {|issue| issue.visible?(user)}.collect(&:id).sort
+  end
+
   def test_visible_scope_for_anonymous
     # Anonymous user should see issues of public projects only
     issues = Issue.visible(User.anonymous).all
     assert issues.any?
     assert_nil issues.detect {|issue| !issue.project.is_public?}
+    assert_nil issues.detect {|issue| issue.is_private?}
+    assert_visibility_match User.anonymous, issues
+  end
+
+  def test_visible_scope_for_anonymous_with_own_issues_visibility
+    Role.anonymous.update_attribute :issues_visibility, 'own'
+    Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => User.anonymous.id, :subject => 'Issue by anonymous')
+
+    issues = Issue.visible(User.anonymous).all
+    assert issues.any?
+    assert_nil issues.detect {|issue| issue.author != User.anonymous}
+    assert_visibility_match User.anonymous, issues
+  end
+
+  def test_visible_scope_for_anonymous_without_view_issues_permissions
     # Anonymous user should not see issues without permission
     Role.anonymous.remove_permission!(:view_issues)
     issues = Issue.visible(User.anonymous).all
     assert issues.empty?
+    assert_visibility_match User.anonymous, issues
   end
-  
-  def test_visible_scope_for_user
+
+  def test_visible_scope_for_non_member
     user = User.find(9)
     assert user.projects.empty?
     # Non member user should see issues of public projects only
     issues = Issue.visible(user).all
     assert issues.any?
     assert_nil issues.detect {|issue| !issue.project.is_public?}
+    assert_nil issues.detect {|issue| issue.is_private?}
+    assert_visibility_match user, issues
+  end
+
+  def test_visible_scope_for_non_member_with_own_issues_visibility
+    Role.non_member.update_attribute :issues_visibility, 'own'
+    Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 9, :subject => 'Issue by non member')
+    user = User.find(9)
+
+    issues = Issue.visible(user).all
+    assert issues.any?
+    assert_nil issues.detect {|issue| issue.author != user}
+    assert_visibility_match user, issues
+  end
+
+  def test_visible_scope_for_non_member_without_view_issues_permissions
     # Non member user should not see issues without permission
     Role.non_member.remove_permission!(:view_issues)
-    user.reload
+    user = User.find(9)
+    assert user.projects.empty?
     issues = Issue.visible(user).all
     assert issues.empty?
+    assert_visibility_match user, issues
+  end
+
+  def test_visible_scope_for_member
+    user = User.find(9)
     # User should see issues of projects for which he has view_issues permissions only
-    Member.create!(:principal => user, :project_id => 2, :role_ids => [1])
-    user.reload
+    Role.non_member.remove_permission!(:view_issues)
+    Member.create!(:principal => user, :project_id => 3, :role_ids => [2])
     issues = Issue.visible(user).all
     assert issues.any?
-    assert_nil issues.detect {|issue| issue.project_id != 2}
+    assert_nil issues.detect {|issue| issue.project_id != 3}
+    assert_nil issues.detect {|issue| issue.is_private?}
+    assert_visibility_match user, issues
   end
-  
+
   def test_visible_scope_for_admin
     user = User.find(1)
     user.members.each(&:destroy)
@@ -104,25 +148,48 @@
     assert issues.any?
     # Admin should see issues on private projects that he does not belong to
     assert issues.detect {|issue| !issue.project.is_public?}
+    # Admin should see private issues of other users
+    assert issues.detect {|issue| issue.is_private? && issue.author != user}
+    assert_visibility_match user, issues
   end
-  
+
+  def test_visible_scope_with_project
+    project = Project.find(1)
+    issues = Issue.visible(User.find(2), :project => project).all
+    projects = issues.collect(&:project).uniq
+    assert_equal 1, projects.size
+    assert_equal project, projects.first
+  end
+
+  def test_visible_scope_with_project_and_subprojects
+    project = Project.find(1)
+    issues = Issue.visible(User.find(2), :project => project, :with_subprojects => true).all
+    projects = issues.collect(&:project).uniq
+    assert projects.size > 1
+    assert_equal [], projects.select {|p| !p.is_or_is_descendant_of?(project)}
+  end
+
+  def test_visible_and_nested_set_scopes
+    assert_equal 0, Issue.find(1).descendants.visible.all.size
+  end
+
   def test_errors_full_messages_should_include_custom_fields_errors
     field = IssueCustomField.find_by_name('Database')
-    
+
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => 'test_create', :description => 'IssueTest#test_create_with_required_custom_field')
     assert issue.available_custom_fields.include?(field)
     # Invalid value
     issue.custom_field_values = { field.id => 'SQLServer' }
-    
+
     assert !issue.valid?
     assert_equal 1, issue.errors.full_messages.size
     assert_equal "Database #{I18n.translate('activerecord.errors.messages.inclusion')}", issue.errors.full_messages.first
   end
-  
+
   def test_update_issue_with_required_custom_field
     field = IssueCustomField.find_by_name('Database')
     field.update_attribute(:is_required, true)
-    
+
     issue = Issue.find(1)
     assert_nil issue.custom_value_for(field)
     assert issue.available_custom_fields.include?(field)
@@ -137,23 +204,23 @@
     issue.reload
     assert_equal 'PostgreSQL', issue.custom_value_for(field).value
   end
-  
+
   def test_should_not_update_attributes_if_custom_fields_validation_fails
     issue = Issue.find(1)
     field = IssueCustomField.find_by_name('Database')
     assert issue.available_custom_fields.include?(field)
-    
+
     issue.custom_field_values = { field.id => 'Invalid' }
     issue.subject = 'Should be not be saved'
     assert !issue.save
-    
+
     issue.reload
     assert_equal "Can't print recipes", issue.subject
   end
-  
+
   def test_should_not_recreate_custom_values_objects_on_update
     field = IssueCustomField.find_by_name('Database')
-    
+
     issue = Issue.find(1)
     issue.custom_field_values = { field.id => 'PostgreSQL' }
     assert issue.save
@@ -164,14 +231,14 @@
     issue.reload
     assert_equal custom_value.id, issue.custom_value_for(field).id
   end
-  
+
   def test_assigning_tracker_id_should_reload_custom_fields_values
     issue = Issue.new(:project => Project.find(1))
     assert issue.custom_field_values.empty?
     issue.tracker_id = 1
     assert issue.custom_field_values.any?
   end
-  
+
   def test_assigning_attributes_should_assign_tracker_id_first
     attributes = ActiveSupport::OrderedHash.new
     attributes['custom_field_values'] = { '1' => 'MySQL' }
@@ -181,40 +248,38 @@
     assert_not_nil issue.custom_value_for(1)
     assert_equal 'MySQL', issue.custom_value_for(1).value
   end
-  
+
   def test_should_update_issue_with_disabled_tracker
     p = Project.find(1)
     issue = Issue.find(1)
-    
+
     p.trackers.delete(issue.tracker)
     assert !p.trackers.include?(issue.tracker)
-    
+
     issue.reload
     issue.subject = 'New subject'
     assert issue.save
   end
-  
+
   def test_should_not_set_a_disabled_tracker
     p = Project.find(1)
     p.trackers.delete(Tracker.find(2))
-      
+
     issue = Issue.find(1)
     issue.tracker_id = 2
     issue.subject = 'New subject'
     assert !issue.save
     assert_not_nil issue.errors.on(:tracker_id)
   end
-  
+
   def test_category_based_assignment
     issue = Issue.create(:project_id => 1, :tracker_id => 1, :author_id => 3, :status_id => 1, :priority => IssuePriority.all.first, :subject => 'Assignment test', :description => 'Assignment test', :category_id => 1)
     assert_equal IssueCategory.find(1).assigned_to, issue.assigned_to
   end
-  
-  
-  
+
   def test_new_statuses_allowed_to
     Workflow.delete_all
-    
+
     Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 2, :author => false, :assignee => false)
     Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3, :author => true, :assignee => false)
     Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4, :author => false, :assignee => true)
@@ -223,20 +288,20 @@
     role = Role.find(1)
     tracker = Tracker.find(1)
     user = User.find(2)
-    
+
     issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1)
     assert_equal [1, 2], issue.new_statuses_allowed_to(user).map(&:id)
-    
+
     issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user)
     assert_equal [1, 2, 3], issue.new_statuses_allowed_to(user).map(&:id)
-    
+
     issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :assigned_to => user)
     assert_equal [1, 2, 4], issue.new_statuses_allowed_to(user).map(&:id)
-    
+
     issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user, :assigned_to => user)
     assert_equal [1, 2, 3, 4, 5], issue.new_statuses_allowed_to(user).map(&:id)
   end
-  
+
   def test_copy
     issue = Issue.new.copy_from(1)
     assert issue.save
@@ -250,13 +315,13 @@
   def test_copy_should_copy_status
     orig = Issue.find(8)
     assert orig.status != IssueStatus.default
-    
+
     issue = Issue.new.copy_from(orig)
     assert issue.save
     issue.reload
     assert_equal orig.status, issue.status
   end
-  
+
   def test_should_close_duplicates
     # Create 3 issues
     issue1 = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :priority => IssuePriority.all.first, :subject => 'Duplicates test', :description => 'Duplicates test')
@@ -265,37 +330,37 @@
     assert issue2.save
     issue3 = issue1.clone
     assert issue3.save
-    
+
     # 2 is a dupe of 1
     IssueRelation.create(:issue_from => issue2, :issue_to => issue1, :relation_type => IssueRelation::TYPE_DUPLICATES)
     # And 3 is a dupe of 2
     IssueRelation.create(:issue_from => issue3, :issue_to => issue2, :relation_type => IssueRelation::TYPE_DUPLICATES)
     # And 3 is a dupe of 1 (circular duplicates)
     IssueRelation.create(:issue_from => issue3, :issue_to => issue1, :relation_type => IssueRelation::TYPE_DUPLICATES)
-        
+
     assert issue1.reload.duplicates.include?(issue2)
-    
+
     # Closing issue 1
     issue1.init_journal(User.find(:first), "Closing issue1")
     issue1.status = IssueStatus.find :first, :conditions => {:is_closed => true}
     assert issue1.save
     # 2 and 3 should be also closed
     assert issue2.reload.closed?
-    assert issue3.reload.closed?    
+    assert issue3.reload.closed?
   end
-  
+
   def test_should_not_close_duplicated_issue
     # Create 3 issues
     issue1 = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :priority => IssuePriority.all.first, :subject => 'Duplicates test', :description => 'Duplicates test')
     assert issue1.save
     issue2 = issue1.clone
     assert issue2.save
-    
+
     # 2 is a dupe of 1
     IssueRelation.create(:issue_from => issue2, :issue_to => issue1, :relation_type => IssueRelation::TYPE_DUPLICATES)
     # 2 is a dup of 1 but 1 is not a duplicate of 2
     assert !issue2.reload.duplicates.include?(issue1)
-    
+
     # Closing issue 2
     issue2.init_journal(User.find(:first), "Closing issue2")
     issue2.status = IssueStatus.find :first, :conditions => {:is_closed => true}
@@ -303,57 +368,57 @@
     # 1 should not be also closed
     assert !issue1.reload.closed?
   end
-  
+
   def test_assignable_versions
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :fixed_version_id => 1, :subject => 'New issue')
     assert_equal ['open'], issue.assignable_versions.collect(&:status).uniq
   end
-  
+
   def test_should_not_be_able_to_assign_a_new_issue_to_a_closed_version
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :fixed_version_id => 1, :subject => 'New issue')
     assert !issue.save
     assert_not_nil issue.errors.on(:fixed_version_id)
   end
-  
+
   def test_should_not_be_able_to_assign_a_new_issue_to_a_locked_version
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :fixed_version_id => 2, :subject => 'New issue')
     assert !issue.save
     assert_not_nil issue.errors.on(:fixed_version_id)
   end
-  
+
   def test_should_be_able_to_assign_a_new_issue_to_an_open_version
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :fixed_version_id => 3, :subject => 'New issue')
     assert issue.save
   end
-  
+
   def test_should_be_able_to_update_an_issue_assigned_to_a_closed_version
     issue = Issue.find(11)
     assert_equal 'closed', issue.fixed_version.status
     issue.subject = 'Subject changed'
     assert issue.save
   end
-  
+
   def test_should_not_be_able_to_reopen_an_issue_assigned_to_a_closed_version
     issue = Issue.find(11)
     issue.status_id = 1
     assert !issue.save
     assert_not_nil issue.errors.on_base
   end
-  
+
   def test_should_be_able_to_reopen_and_reassign_an_issue_assigned_to_a_closed_version
     issue = Issue.find(11)
     issue.status_id = 1
     issue.fixed_version_id = 3
     assert issue.save
   end
-  
+
   def test_should_be_able_to_reopen_an_issue_assigned_to_a_locked_version
     issue = Issue.find(12)
     assert_equal 'locked', issue.fixed_version.status
     issue.status_id = 1
     assert issue.save
   end
-  
+
   def test_move_to_another_project_with_same_category
     issue = Issue.find(1)
     assert issue.move_to_project(Project.find(2))
@@ -364,7 +429,7 @@
     # Make sure time entries were move to the target project
     assert_equal 2, issue.time_entries.first.project_id
   end
-  
+
   def test_move_to_another_project_without_same_category
     issue = Issue.find(2)
     assert issue.move_to_project(Project.find(2))
@@ -373,7 +438,7 @@
     # Category cleared
     assert_nil issue.category_id
   end
-  
+
   def test_move_to_another_project_should_clear_fixed_version_when_not_shared
     issue = Issue.find(1)
     issue.update_attribute(:fixed_version_id, 1)
@@ -383,7 +448,7 @@
     # Cleared fixed_version
     assert_equal nil, issue.fixed_version
   end
-  
+
   def test_move_to_another_project_should_keep_fixed_version_when_shared_with_the_target_project
     issue = Issue.find(1)
     issue.update_attribute(:fixed_version_id, 4)
@@ -393,7 +458,7 @@
     # Keep fixed_version
     assert_equal 4, issue.fixed_version_id
   end
-  
+
   def test_move_to_another_project_should_clear_fixed_version_when_not_shared_with_the_target_project
     issue = Issue.find(1)
     issue.update_attribute(:fixed_version_id, 1)
@@ -403,7 +468,7 @@
     # Cleared fixed_version
     assert_equal nil, issue.fixed_version
   end
-  
+
   def test_move_to_another_project_should_keep_fixed_version_when_shared_systemwide
     issue = Issue.find(1)
     issue.update_attribute(:fixed_version_id, 7)
@@ -413,7 +478,7 @@
     # Keep fixed_version
     assert_equal 7, issue.fixed_version_id
   end
-  
+
   def test_move_to_another_project_with_disabled_tracker
     issue = Issue.find(1)
     target = Project.find(2)
@@ -423,7 +488,7 @@
     issue.reload
     assert_equal 1, issue.project_id
   end
-  
+
   def test_copy_to_the_same_project
     issue = Issue.find(1)
     copy = nil
@@ -434,7 +499,7 @@
     assert_equal issue.project, copy.project
     assert_equal "125", copy.custom_value_for(2).value
   end
-  
+
   def test_copy_to_another_project_and_tracker
     issue = Issue.find(1)
     copy = nil
@@ -456,6 +521,11 @@
         @copy = nil
       end
 
+      should "not create a journal" do
+        @copy = @issue.move_to_project(Project.find(3), Tracker.find(2), {:copy => true, :attributes => {:assigned_to_id => 3}})
+        assert_equal 0, @copy.reload.journals.size
+      end
+
       should "allow assigned_to changes" do
         @copy = @issue.move_to_project(Project.find(3), Tracker.find(2), {:copy => true, :attributes => {:assigned_to_id => 3}})
         assert_equal 3, @copy.assigned_to_id
@@ -478,9 +548,29 @@
 
         assert_equal date, @copy.due_date
       end
+
+      should "set current user as author" do
+        User.current = User.find(9)
+        @copy = @issue.move_to_project(Project.find(3), Tracker.find(2), {:copy => true, :attributes => {}})
+
+        assert_equal User.current, @copy.author
+      end
+
+      should "keep journal notes" do
+        date = Date.today
+        notes = "Notes added when copying"
+        User.current = User.find(9)
+        @issue.init_journal(User.current, notes)
+        @copy = @issue.move_to_project(Project.find(3), Tracker.find(2), {:copy => true, :attributes => {:start_date => date}})
+
+        assert_equal 1, @copy.journals.size
+        journal = @copy.journals.first
+        assert_equal 0, journal.details.size
+        assert_equal notes, journal.notes
+      end
     end
   end
-  
+
   def test_recipients_should_not_include_users_that_cannot_view_the_issue
     issue = Issue.find(12)
     assert issue.recipients.include?(issue.author.mail)
@@ -497,50 +587,50 @@
     assert issue.watched_by?(user)
     assert !issue.watcher_recipients.include?(user.mail)
   end
-  
+
   def test_issue_destroy
     Issue.find(1).destroy
     assert_nil Issue.find_by_id(1)
     assert_nil TimeEntry.find_by_issue_id(1)
   end
-  
+
   def test_blocked
     blocked_issue = Issue.find(9)
     blocking_issue = Issue.find(10)
-     
+
     assert blocked_issue.blocked?
     assert !blocking_issue.blocked?
   end
-  
+
   def test_blocked_issues_dont_allow_closed_statuses
     blocked_issue = Issue.find(9)
-  
+
     allowed_statuses = blocked_issue.new_statuses_allowed_to(users(:users_002))
     assert !allowed_statuses.empty?
     closed_statuses = allowed_statuses.select {|st| st.is_closed?}
     assert closed_statuses.empty?
   end
-  
+
   def test_unblocked_issues_allow_closed_statuses
     blocking_issue = Issue.find(10)
-  
+
     allowed_statuses = blocking_issue.new_statuses_allowed_to(users(:users_002))
     assert !allowed_statuses.empty?
     closed_statuses = allowed_statuses.select {|st| st.is_closed?}
     assert !closed_statuses.empty?
   end
-  
+
   def test_rescheduling_an_issue_should_reschedule_following_issue
     issue1 = Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => '-', :start_date => Date.today, :due_date => Date.today + 2)
     issue2 = Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => '-', :start_date => Date.today, :due_date => Date.today + 2)
     IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES)
     assert_equal issue1.due_date + 1, issue2.reload.start_date
-    
+
     issue1.due_date = Date.today + 5
     issue1.save!
     assert_equal issue1.due_date + 1, issue2.reload.start_date
   end
-  
+
   def test_overdue
     assert Issue.new(:due_date => 1.day.ago.to_date).overdue?
     assert !Issue.new(:due_date => Date.today).overdue?
@@ -587,13 +677,13 @@
     should "not show the issue author twice" do
       assignable_user_ids = Issue.find(1).assignable_users.collect(&:id)
       assert_equal 2, assignable_user_ids.length
-      
+
       assignable_user_ids.each do |user_id|
         assert_equal 1, assignable_user_ids.select {|i| i == user_id}.length, "User #{user_id} appears more or less than once"
       end
     end
   end
-  
+
   def test_create_should_send_email_notification
     ActionMailer::Base.deliveries.clear
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 3, :status_id => 1, :priority => IssuePriority.all.first, :subject => 'test_create', :estimated_hours => '1:30')
@@ -606,13 +696,13 @@
     ActionMailer::Base.deliveries.clear
     issue = Issue.find(1)
     stale = Issue.find(1)
-    
+
     issue.init_journal(User.find(1))
     issue.subject = 'Subjet update'
     assert issue.save
     assert_equal 1, ActionMailer::Base.deliveries.size
     ActionMailer::Base.deliveries.clear
-    
+
     stale.init_journal(User.find(1))
     stale.subject = 'Another subjet update'
     assert_raise ActiveRecord::StaleObjectError do
@@ -620,14 +710,14 @@
     end
     assert ActionMailer::Base.deliveries.empty?
   end
-  
+
   def test_journalized_description
     IssueCustomField.delete_all
-    
+
     i = Issue.first
     old_description = i.description
     new_description = "This is the new description"
-    
+
     i.init_journal(User.find(2))
     i.description = new_description
     assert_difference 'Journal.count', 1 do
@@ -635,7 +725,7 @@
         i.save!
       end
     end
-    
+
     detail = JournalDetail.first(:order => 'id DESC')
     assert_equal i, detail.journal.journalized
     assert_equal 'attr', detail.property
@@ -643,7 +733,7 @@
     assert_equal old_description, detail.old_value
     assert_equal new_description, detail.value
   end
-  
+
   def test_saving_twice_should_not_duplicate_journal_details
     i = Issue.find(:first)
     i.init_journal(User.find(2), 'Some notes')
@@ -673,7 +763,7 @@
     assert IssueRelation.create!(:issue_from => Issue.find(1), :issue_to => Issue.find(2), :relation_type => IssueRelation::TYPE_PRECEDES)
     assert IssueRelation.create!(:issue_from => Issue.find(2), :issue_to => Issue.find(3), :relation_type => IssueRelation::TYPE_PRECEDES)
     assert IssueRelation.create!(:issue_from => Issue.find(3), :issue_to => Issue.find(8), :relation_type => IssueRelation::TYPE_PRECEDES)
-    
+
     assert_equal [2, 3, 8], Issue.find(1).all_dependent_issues.collect(&:id).sort
   end
 
@@ -683,10 +773,22 @@
     assert IssueRelation.create!(:issue_from => Issue.find(2), :issue_to => Issue.find(3), :relation_type => IssueRelation::TYPE_PRECEDES)
     # Validation skipping
     assert IssueRelation.new(:issue_from => Issue.find(3), :issue_to => Issue.find(1), :relation_type => IssueRelation::TYPE_PRECEDES).save(false)
-    
+
     assert_equal [2, 3], Issue.find(1).all_dependent_issues.collect(&:id).sort
   end
-  
+
+  def test_all_dependent_issues_with_persistent_multiple_circular_dependencies
+    IssueRelation.delete_all
+    assert IssueRelation.create!(:issue_from => Issue.find(1), :issue_to => Issue.find(2), :relation_type => IssueRelation::TYPE_RELATES)
+    assert IssueRelation.create!(:issue_from => Issue.find(2), :issue_to => Issue.find(3), :relation_type => IssueRelation::TYPE_RELATES)
+    assert IssueRelation.create!(:issue_from => Issue.find(3), :issue_to => Issue.find(8), :relation_type => IssueRelation::TYPE_RELATES)
+    # Validation skipping
+    assert IssueRelation.new(:issue_from => Issue.find(8), :issue_to => Issue.find(2), :relation_type => IssueRelation::TYPE_RELATES).save(false)
+    assert IssueRelation.new(:issue_from => Issue.find(3), :issue_to => Issue.find(1), :relation_type => IssueRelation::TYPE_RELATES).save(false)
+
+    assert_equal [2, 3, 8], Issue.find(1).all_dependent_issues.collect(&:id).sort
+  end
+
   context "#done_ratio" do
     setup do
       @issue = Issue.find(1)
@@ -696,12 +798,12 @@
       @issue_status2 = IssueStatus.find(2)
       @issue_status2.update_attribute(:default_done_ratio, 0)
     end
-    
+
     context "with Setting.issue_done_ratio using the issue_field" do
       setup do
         Setting.issue_done_ratio = 'issue_field'
       end
-      
+
       should "read the issue's field" do
         assert_equal 0, @issue.done_ratio
         assert_equal 30, @issue2.done_ratio
@@ -712,7 +814,7 @@
       setup do
         Setting.issue_done_ratio = 'issue_status'
       end
-      
+
       should "read the Issue Status's default done ratio" do
         assert_equal 50, @issue.done_ratio
         assert_equal 0, @issue2.done_ratio
@@ -729,12 +831,12 @@
       @issue_status2 = IssueStatus.find(2)
       @issue_status2.update_attribute(:default_done_ratio, 0)
     end
-    
+
     context "with Setting.issue_done_ratio using the issue_field" do
       setup do
         Setting.issue_done_ratio = 'issue_field'
       end
-      
+
       should "not change the issue" do
         @issue.update_done_ratio_from_issue_status
         @issue2.update_done_ratio_from_issue_status
@@ -748,7 +850,7 @@
       setup do
         Setting.issue_done_ratio = 'issue_status'
       end
-      
+
       should "change the issue's done ratio" do
         @issue.update_done_ratio_from_issue_status
         @issue2.update_done_ratio_from_issue_status
@@ -760,59 +862,66 @@
   end
 
   test "#by_tracker" do
+    User.current = User.anonymous
     groups = Issue.by_tracker(Project.find(1))
     assert_equal 3, groups.size
     assert_equal 7, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
 
   test "#by_version" do
+    User.current = User.anonymous
     groups = Issue.by_version(Project.find(1))
     assert_equal 3, groups.size
     assert_equal 3, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
 
   test "#by_priority" do
+    User.current = User.anonymous
     groups = Issue.by_priority(Project.find(1))
     assert_equal 4, groups.size
     assert_equal 7, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
 
   test "#by_category" do
+    User.current = User.anonymous
     groups = Issue.by_category(Project.find(1))
     assert_equal 2, groups.size
     assert_equal 3, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
 
   test "#by_assigned_to" do
+    User.current = User.anonymous
     groups = Issue.by_assigned_to(Project.find(1))
     assert_equal 2, groups.size
     assert_equal 2, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
 
   test "#by_author" do
+    User.current = User.anonymous
     groups = Issue.by_author(Project.find(1))
     assert_equal 4, groups.size
     assert_equal 7, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
 
   test "#by_subproject" do
+    User.current = User.anonymous
     groups = Issue.by_subproject(Project.find(1))
-    assert_equal 2, groups.size
-    assert_equal 5, groups.inject(0) {|sum, group| sum + group['total'].to_i}
+    # Private descendant not visible
+    assert_equal 1, groups.size
+    assert_equal 2, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
-  
-  
+
   context ".allowed_target_projects_on_move" do
     should "return all active projects for admin users" do
       User.current = User.find(1)
       assert_equal Project.active.count, Issue.allowed_target_projects_on_move.size
     end
-    
+
     should "return allowed projects for non admin users" do
       User.current = User.find(2)
       Role.non_member.remove_permission! :move_issues
       assert_equal 3, Issue.allowed_target_projects_on_move.size
-      
+
       Role.non_member.add_permission! :move_issues
       assert_equal Project.active.count, Issue.allowed_target_projects_on_move.size
     end
@@ -826,7 +935,7 @@
 
   def test_on_active_projects_scope
     assert Project.find(2).archive
-    
+
     before = Issue.on_active_project.length
     # test inclusion to results
     issue = Issue.generate_for_project!(Project.find(1), :tracker => Project.find(2).trackers.first)
@@ -845,7 +954,7 @@
       @assignee = User.generate_with_protected!
       @issue = Issue.generate_for_project!(@project, :assigned_to => @assignee, :author => @author)
     end
-    
+
     should "include project recipients" do
       assert @project.recipients.present?
       @project.recipients.each do |project_recipient|
@@ -857,7 +966,7 @@
       assert @issue.author, "No author set for Issue"
       assert @issue.recipients.include?(@issue.author.mail)
     end
-    
+
     should "include the assigned to user if the assigned to user is active" do
       assert @issue.assigned_to, "No assigned_to set for Issue"
       assert @issue.recipients.include?(@issue.assigned_to.mail)
--- a/test/unit/.svn/text-base/journal_observer_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/journal_observer_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -36,6 +36,17 @@
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
 
+  def test_create_should_not_send_email_notification_with_notify_set_to_false
+    Setting.notified_events = ['issue_updated']
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    journal = issue.init_journal(user, issue)
+    journal.notify = false
+
+    assert journal.save
+    assert_equal 0, ActionMailer::Base.deliveries.size
+  end
+
   def test_create_should_not_send_email_notification_without_issue_updated
     Setting.notified_events = []
     issue = Issue.find(:first)
@@ -64,7 +75,7 @@
     user = User.find(:first)
     journal = issue.init_journal(user, issue)
     journal.notes = 'This update has a note'
-    
+
     assert journal.save
     assert_equal 0, ActionMailer::Base.deliveries.size
   end
@@ -87,7 +98,7 @@
     user = User.find(:first)
     issue.init_journal(user, issue)
     issue.status = IssueStatus.last
-    
+
     assert issue.save
     assert_equal 0, ActionMailer::Base.deliveries.size
   end
@@ -110,9 +121,8 @@
     user = User.find(:first)
     issue.init_journal(user, issue)
     issue.priority = IssuePriority.last
-    
+
     assert issue.save
     assert_equal 0, ActionMailer::Base.deliveries.size
   end
-
 end
--- a/test/unit/.svn/text-base/journal_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/journal_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -18,7 +18,7 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class JournalTest < ActiveSupport::TestCase
-  fixtures :issues, :issue_statuses, :journals, :journal_details
+  fixtures :projects, :issues, :issue_statuses, :journals, :journal_details, :users, :members, :member_roles
 
   def setup
     @journal = Journal.find 1
@@ -34,9 +34,9 @@
     status = @journal.new_status
     assert_not_nil status
     assert_kind_of IssueStatus, status
-    assert_equal 2, status.id 
+    assert_equal 2, status.id
   end
-  
+
   def test_create_should_send_email_notification
     ActionMailer::Base.deliveries.clear
     issue = Issue.find(:first)
@@ -47,4 +47,44 @@
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
 
+  def test_visible_scope_for_anonymous
+    # Anonymous user should see issues of public projects only
+    journals = Journal.visible(User.anonymous).all
+    assert journals.any?
+    assert_nil journals.detect {|journal| !journal.issue.project.is_public?}
+    # Anonymous user should not see issues without permission
+    Role.anonymous.remove_permission!(:view_issues)
+    journals = Journal.visible(User.anonymous).all
+    assert journals.empty?
+  end
+
+  def test_visible_scope_for_user
+    user = User.find(9)
+    assert user.projects.empty?
+    # Non member user should see issues of public projects only
+    journals = Journal.visible(user).all
+    assert journals.any?
+    assert_nil journals.detect {|journal| !journal.issue.project.is_public?}
+    # Non member user should not see issues without permission
+    Role.non_member.remove_permission!(:view_issues)
+    user.reload
+    journals = Journal.visible(user).all
+    assert journals.empty?
+    # User should see issues of projects for which he has view_issues permissions only
+    Member.create!(:principal => user, :project_id => 1, :role_ids => [1])
+    user.reload
+    journals = Journal.visible(user).all
+    assert journals.any?
+    assert_nil journals.detect {|journal| journal.issue.project_id != 1}
+  end
+
+  def test_visible_scope_for_admin
+    user = User.find(1)
+    user.members.each(&:destroy)
+    assert user.projects.empty?
+    journals = Journal.visible(user).all
+    assert journals.any?
+    # Admin should see issues on private projects that he does not belong to
+    assert journals.detect {|journal| !journal.issue.project.is_public?}
+  end
 end
--- a/test/unit/.svn/text-base/mail_handler_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/mail_handler_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,18 +1,18 @@
 # encoding: utf-8
 #
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,7 +20,7 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class MailHandlerTest < ActiveSupport::TestCase
-  fixtures :users, :projects, 
+  fixtures :users, :projects,
                    :enabled_modules,
                    :roles,
                    :members,
@@ -39,14 +39,14 @@
                    :custom_fields_projects,
                    :boards,
                    :messages
-  
+
   FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures/mail_handler'
-  
+
   def setup
     ActionMailer::Base.deliveries.clear
     Setting.notified_events = Redmine::Notifiable.all.collect(&:name)
   end
-  
+
   def test_add_issue
     ActionMailer::Base.deliveries.clear
     # This email contains: 'Project: onlinestore'
@@ -70,12 +70,13 @@
     # keywords should be removed from the email body
     assert !issue.description.match(/^Project:/i)
     assert !issue.description.match(/^Status:/i)
+    assert !issue.description.match(/^Start Date:/i)
     # Email notification should be sent
     mail = ActionMailer::Base.deliveries.last
     assert_not_nil mail
     assert mail.subject.include?('New ticket on a given project')
   end
-  
+
   def test_add_issue_with_default_tracker
     # This email contains: 'Project: onlinestore'
     issue = submit_email('ticket_on_given_project.eml', :issue => {:tracker => 'Support request'})
@@ -94,7 +95,7 @@
     assert_equal Project.find(2), issue.project
     assert_equal IssueStatus.find_by_name("Resolved"), issue.status
   end
-  
+
   def test_add_issue_with_attributes_override
     issue = submit_email('ticket_with_attributes.eml', :allow_override => 'tracker,category,priority')
     assert issue.is_a?(Issue)
@@ -108,7 +109,7 @@
     assert_equal 'Urgent', issue.priority.to_s
     assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
   end
-  
+
   def test_add_issue_with_partial_attributes_override
     issue = submit_email('ticket_with_attributes.eml', :issue => {:priority => 'High'}, :allow_override => ['tracker'])
     assert issue.is_a?(Issue)
@@ -122,7 +123,7 @@
     assert_equal 'High', issue.priority.to_s
     assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
   end
-  
+
   def test_add_issue_with_spaces_between_attribute_and_separator
     issue = submit_email('ticket_with_spaces_between_attribute_and_separator.eml', :allow_override => 'tracker,category,priority')
     assert issue.is_a?(Issue)
@@ -137,7 +138,6 @@
     assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
   end
 
-  
   def test_add_issue_with_attachment_to_specific_project
     issue = submit_email('ticket_with_attachment.eml', :issue => {:project => 'onlinestore'})
     assert issue.is_a?(Issue)
@@ -153,7 +153,7 @@
     assert_equal 'image/jpeg', issue.attachments.first.content_type
     assert_equal 10790, issue.attachments.first.filesize
   end
-  
+
   def test_add_issue_with_custom_fields
     issue = submit_email('ticket_with_custom_fields.eml', :issue => {:project => 'onlinestore'})
     assert issue.is_a?(Issue)
@@ -163,7 +163,7 @@
     assert_equal 'Value for a custom field', issue.custom_value_for(CustomField.find_by_name('Searchable field')).value
     assert !issue.description.match(/^searchable field:/i)
   end
-  
+
   def test_add_issue_with_cc
     issue = submit_email('ticket_with_cc.eml', :issue => {:project => 'ecookbook'})
     assert issue.is_a?(Issue)
@@ -172,13 +172,13 @@
     assert issue.watched_by?(User.find_by_mail('dlopper@somenet.foo'))
     assert_equal 1, issue.watcher_user_ids.size
   end
-  
+
   def test_add_issue_by_unknown_user
     assert_no_difference 'User.count' do
       assert_equal false, submit_email('ticket_by_unknown_user.eml', :issue => {:project => 'ecookbook'})
     end
   end
-  
+
   def test_add_issue_by_anonymous_user
     Role.anonymous.add_permission!(:add_issues)
     assert_no_difference 'User.count' do
@@ -196,7 +196,7 @@
       assert issue.author.anonymous?
     end
   end
-  
+
   def test_add_issue_by_anonymous_user_on_private_project
     Role.anonymous.add_permission!(:add_issues)
     assert_no_difference 'User.count' do
@@ -205,7 +205,7 @@
       end
     end
   end
-  
+
   def test_add_issue_by_anonymous_user_on_private_project_without_permission_check
     assert_no_difference 'User.count' do
       assert_difference 'Issue.count' do
@@ -217,7 +217,7 @@
       end
     end
   end
-  
+
   def test_add_issue_by_created_user
     Setting.default_language = 'en'
     assert_difference 'User.count' do
@@ -227,7 +227,7 @@
       assert_equal 'john.doe@somenet.foo', issue.author.mail
       assert_equal 'John', issue.author.firstname
       assert_equal 'Doe', issue.author.lastname
-    
+
       # account information
       email = ActionMailer::Base.deliveries.first
       assert_not_nil email
@@ -237,7 +237,7 @@
       assert_equal issue.author, User.try_to_login(login, password)
     end
   end
-  
+
   def test_add_issue_without_from_header
     Role.anonymous.add_permission!(:add_issues)
     assert_equal false, submit_email('ticket_without_from_header.eml')
@@ -270,7 +270,7 @@
     assert_equal 'Urgent', issue.priority.to_s
     assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
   end
-  
+
   def test_add_issue_with_japanese_keywords
     tracker = Tracker.create!(:name => '開発')
     Project.find(1).trackers << tracker
@@ -294,7 +294,7 @@
     assert issue.is_a?(Issue)
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_add_issue_note
     journal = submit_email('ticket_reply.eml')
     assert journal.is_a?(Journal)
@@ -318,6 +318,9 @@
     assert_equal '2010-12-31', issue.due_date.to_s
     assert_equal User.find_by_login('jsmith'), issue.assigned_to
     assert_equal "52.6", issue.custom_value_for(CustomField.find_by_name('Float field')).value
+    # keywords should be removed from the email body
+    assert !journal.notes.match(/^Status:/i)
+    assert !journal.notes.match(/^Start Date:/i)
   end
 
   def test_add_issue_note_should_send_email_notification
@@ -326,7 +329,7 @@
     assert journal.is_a?(Journal)
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_add_issue_note_should_not_set_defaults
     journal = submit_email('ticket_reply.eml', :issue => {:tracker => 'Support request', :priority => 'High'})
     assert journal.is_a?(Journal)
@@ -334,7 +337,7 @@
     assert_equal 'Feature request', journal.issue.tracker.name
     assert_equal 'Normal', journal.issue.priority.name
   end
-  
+
   def test_reply_to_a_message
     m = submit_email('message_reply.eml')
     assert m.is_a?(Message)
@@ -344,7 +347,7 @@
     # The email replies to message #2 which is part of the thread of message #1
     assert_equal Message.find(1), m.parent
   end
-  
+
   def test_reply_to_a_message_by_subject
     m = submit_email('message_reply_by_subject.eml')
     assert m.is_a?(Message)
@@ -353,7 +356,7 @@
     assert_equal 'Reply to the first post', m.subject
     assert_equal Message.find(1), m.parent
   end
-  
+
   def test_should_strip_tags_of_html_only_emails
     issue = submit_email('ticket_html_only.eml', :issue => {:project => 'ecookbook'})
     assert issue.is_a?(Issue)
@@ -381,7 +384,6 @@
       setup do
         Setting.mail_handler_body_delimiters = '---'
       end
-
       should "truncate the email at the delimiter for the issue" do
         issue = submit_email('ticket_on_given_project.eml')
         assert_issue_created(issue)
@@ -396,39 +398,32 @@
       setup do
         Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
       end
-
       should "truncate the email at the delimiter with the quoted reply symbols (>)" do
         journal = submit_email('issue_update_with_quoted_reply_above.eml')
         assert journal.is_a?(Journal)
         assert journal.notes.include?('An update to the issue by the sender.')
         assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---"))
         assert !journal.notes.include?('Looks like the JSON api for projects was missed.')
+      end
+    end
 
-      end
-
-    end
-    
     context "with multiple quoted replies (e.g. reply to a reply of a Redmine email notification)" do
       setup do
         Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
       end
-
       should "truncate the email at the delimiter with the quoted reply symbols (>)" do
         journal = submit_email('issue_update_with_multiple_quoted_reply_above.eml')
         assert journal.is_a?(Journal)
         assert journal.notes.include?('An update to the issue by the sender.')
         assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---"))
         assert !journal.notes.include?('Looks like the JSON api for projects was missed.')
-
       end
-
     end
 
     context "with multiple strings" do
       setup do
         Setting.mail_handler_body_delimiters = "---\nBREAK"
       end
-
       should "truncate the email at the first delimiter found (BREAK)" do
         issue = submit_email('ticket_on_given_project.eml')
         assert_issue_created(issue)
@@ -440,7 +435,7 @@
       end
     end
   end
-  
+
   def test_email_with_long_subject_line
     issue = submit_email('ticket_with_long_subject.eml')
     assert issue.is_a?(Issue)
@@ -448,7 +443,7 @@
   end
 
   private
-  
+
   def submit_email(filename, options={})
     raw = IO.read(File.join(FIXTURES_PATH, filename))
     MailHandler.receive(raw, options)
--- a/test/unit/.svn/text-base/mailer_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/mailer_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -20,12 +20,13 @@
 class MailerTest < ActiveSupport::TestCase
   include Redmine::I18n
   include ActionController::Assertions::SelectorAssertions
-  fixtures :projects, :enabled_modules, :issues, :users, :members, :member_roles, :roles, :documents, :attachments, :news, :tokens, :journals, :journal_details, :changesets, :trackers, :issue_statuses, :enumerations, :messages, :boards, :repositories
+  fixtures :all
   
   def setup
     ActionMailer::Base.deliveries.clear
     Setting.host_name = 'mydomain.foo'
     Setting.protocol = 'http'
+    Setting.plain_text_mail = '0'
   end
   
   def test_generated_links_in_emails
@@ -278,6 +279,9 @@
     assert Mailer.deliver_attachments_added(attachements)
     assert_not_nil last_email.bcc
     assert last_email.bcc.any?
+    assert_select_email do
+      assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
+    end
   end
   
   def test_project_file_added
@@ -285,6 +289,9 @@
     assert Mailer.deliver_attachments_added(attachements)
     assert_not_nil last_email.bcc
     assert last_email.bcc.any?
+    assert_select_email do
+      assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
+    end
   end
   
   def test_news_added
@@ -295,6 +302,14 @@
     end
   end
   
+  def test_news_comment_added
+    comment = Comment.find(2)
+    valid_languages.each do |lang|
+      Setting.default_language = lang.to_s
+      assert Mailer.deliver_news_comment_added(comment)
+    end
+  end
+  
   def test_message_posted
     message = Message.find(:first)
     recipients = ([message.root] + message.root.children).collect {|m| m.author.mail if m.author}
@@ -425,9 +440,6 @@
           end
         end
       end
-      
     end
-    
   end
-  
 end
--- a/test/unit/.svn/text-base/project_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/project_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -182,6 +182,41 @@
     assert_nil Issue.first(:conditions => {:project_id => @ecookbook.id})
   end
   
+  def test_destroying_root_projects_should_clear_data
+    Project.roots.each do |root|
+      root.destroy
+    end
+    
+    assert_equal 0, Project.count, "Projects were not deleted: #{Project.all.inspect}"
+    assert_equal 0, Member.count, "Members were not deleted: #{Member.all.inspect}"
+    assert_equal 0, MemberRole.count
+    assert_equal 0, Issue.count
+    assert_equal 0, Journal.count
+    assert_equal 0, JournalDetail.count
+    assert_equal 0, Attachment.count
+    assert_equal 0, EnabledModule.count
+    assert_equal 0, IssueCategory.count
+    assert_equal 0, IssueRelation.count
+    assert_equal 0, Board.count
+    assert_equal 0, Message.count
+    assert_equal 0, News.count
+    assert_equal 0, Query.count(:conditions => "project_id IS NOT NULL")
+    assert_equal 0, Repository.count
+    assert_equal 0, Changeset.count
+    assert_equal 0, Change.count
+    assert_equal 0, Comment.count
+    assert_equal 0, TimeEntry.count
+    assert_equal 0, Version.count
+    assert_equal 0, Watcher.count
+    assert_equal 0, Wiki.count
+    assert_equal 0, WikiPage.count
+    assert_equal 0, WikiContent.count
+    assert_equal 0, WikiContent::Version.count
+    assert_equal 0, Project.connection.select_all("SELECT * FROM projects_trackers").size
+    assert_equal 0, Project.connection.select_all("SELECT * FROM custom_fields_projects").size
+    assert_equal 0, CustomValue.count(:conditions => {:customized_type => ['Project', 'Issue', 'TimeEntry', 'Version']})
+  end
+  
   def test_move_an_orphan_project_to_a_root_project
     sub = Project.find(2)
     sub.set_parent! @ecookbook
@@ -553,6 +588,14 @@
     assert_nil Project.next_identifier
   end
   
+  def test_enabled_module_names
+    with_settings :default_projects_modules => ['issue_tracking', 'repository'] do
+      project = Project.new
+      
+      project.enabled_module_names = %w(issue_tracking news)
+      assert_equal %w(issue_tracking news), project.enabled_module_names.sort
+    end
+  end
 
   def test_enabled_module_names_should_not_recreate_enabled_modules
     project = Project.find(1)
--- a/test/unit/.svn/text-base/query_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/query_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -191,6 +191,29 @@
     result.each {|issue| assert issue.subject.downcase.include?('unable') }
   end
   
+  def test_range_for_this_week_with_week_starting_on_monday
+    I18n.locale = :fr
+    assert_equal '1', I18n.t(:general_first_day_of_week)
+    
+    Date.stubs(:today).returns(Date.parse('2011-04-29'))
+    
+    query = Query.new(:project => Project.find(1), :name => '_')
+    query.add_filter('due_date', 'w', [''])
+    assert query.statement.match(/issues\.due_date > '2011-04-24 23:59:59(\.9+)?' AND issues\.due_date <= '2011-05-01 23:59:59(\.9+)?/), "range not found in #{query.statement}"
+    I18n.locale = :en
+  end
+  
+  def test_range_for_this_week_with_week_starting_on_sunday
+    I18n.locale = :en
+    assert_equal '7', I18n.t(:general_first_day_of_week)
+    
+    Date.stubs(:today).returns(Date.parse('2011-04-29'))
+    
+    query = Query.new(:project => Project.find(1), :name => '_')
+    query.add_filter('due_date', 'w', [''])
+    assert query.statement.match(/issues\.due_date > '2011-04-23 23:59:59(\.9+)?' AND issues\.due_date <= '2011-04-30 23:59:59(\.9+)?/), "range not found in #{query.statement}"
+  end
+  
   def test_operator_does_not_contains
     query = Query.new(:project => Project.find(1), :name => '_')
     query.add_filter('subject', '!~', ['uNable'])
@@ -218,6 +241,14 @@
     User.current = nil
   end
   
+  def test_statement_should_be_nil_with_no_filters
+    q = Query.new(:name => '_')
+    q.filters = {}
+    
+    assert q.valid?
+    assert_nil q.statement
+  end
+  
   def test_default_columns
     q = Query.new
     assert !q.columns.empty? 
--- a/test/unit/.svn/text-base/repository_bazaar_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/repository_bazaar_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -71,6 +71,34 @@
       assert_equal 'file', entries.last.kind
       assert_equal 'edit.png', entries.last.name
     end
+
+    def test_previous
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('3')
+      assert_equal @repository.find_changeset_by_name('2'), changeset.previous
+    end
+
+    def test_previous_nil
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('1')
+      assert_nil changeset.previous
+    end
+
+    def test_next
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('2')
+      assert_equal @repository.find_changeset_by_name('3'), changeset.next
+    end
+
+    def test_next_nil
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('4')
+      assert_nil changeset.next
+    end
   else
     puts "Bazaar test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/.svn/text-base/repository_cvs_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/repository_cvs_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,36 +19,37 @@
 require 'pp'
 class RepositoryCvsTest < ActiveSupport::TestCase
   fixtures :projects
-  
+
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/cvs_repository'
   REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
   # CVS module
-  MODULE_NAME = 'test'
-  
+  MODULE_NAME    = 'test'
+  CHANGESETS_NUM = 7
+
   def setup
     @project = Project.find(3)
-    @repository = Repository::Cvs.create(:project => @project, 
+    @repository = Repository::Cvs.create(:project  => @project,
                                          :root_url => REPOSITORY_PATH,
-                                         :url => MODULE_NAME,
+                                         :url      => MODULE_NAME,
                                          :log_encoding => 'UTF-8')
     assert @repository
   end
-  
-  if File.directory?(REPOSITORY_PATH)  
+
+  if File.directory?(REPOSITORY_PATH)
     def test_fetch_changesets_from_scratch
       assert_equal 0, @repository.changesets.count
       @repository.fetch_changesets
       @repository.reload
-      
-      assert_equal 5, @repository.changesets.count
-      assert_equal 14, @repository.changes.count
+
+      assert_equal CHANGESETS_NUM, @repository.changesets.count
+      assert_equal 16, @repository.changes.count
       assert_not_nil @repository.changesets.find_by_comments('Two files changed')
 
       r2 = @repository.changesets.find_by_revision('2')
       assert_equal 'v1-20071213-162510', r2.scmid
     end
-    
+
     def test_fetch_changesets_incremental
       assert_equal 0, @repository.changesets.count
       @repository.fetch_changesets
@@ -69,26 +70,98 @@
 
       @repository.fetch_changesets
       @repository.reload
-      assert_equal 5, @repository.changesets.count
+      assert_equal CHANGESETS_NUM, @repository.changesets.count
 
-      assert_equal %w|5 4 3 2 1|, @repository.changesets.collect(&:revision)
-      rev5_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
+      assert_equal %w|7 6 5 4 3 2 1|, @repository.changesets.collect(&:revision)
+      rev5_commit = @repository.changesets.find_by_revision('5')
       assert_equal 'HEAD-20071213-163001', rev5_commit.scmid
        # 2007-12-14 01:30:01 +0900
       rev5_committed_on = Time.gm(2007, 12, 13, 16, 30, 1)
       assert_equal rev5_committed_on, rev5_commit.committed_on
     end
-    
+
     def test_deleted_files_should_not_be_listed
       assert_equal 0, @repository.changesets.count
       @repository.fetch_changesets
       @repository.reload
-      assert_equal 5, @repository.changesets.count
+      assert_equal CHANGESETS_NUM, @repository.changesets.count
 
       entries = @repository.entries('sources')
       assert entries.detect {|e| e.name == 'watchers_controller.rb'}
       assert_nil entries.detect {|e| e.name == 'welcome_controller.rb'}
     end
+
+    def test_entries_rev3
+      @repository.fetch_changesets
+      @repository.reload
+      entries = @repository.entries('', '3')
+      assert_equal 3, entries.size
+      assert_equal entries[2].name, "README"
+      assert_equal entries[2].lastrev.time, Time.gm(2007, 12, 13, 16, 27, 22)
+      assert_equal entries[2].lastrev.identifier, '3'
+      assert_equal entries[2].lastrev.revision, '3'
+      assert_equal entries[2].lastrev.author, 'LANG'
+    end
+
+    def test_entries_invalid_path
+      @repository.fetch_changesets
+      @repository.reload
+      assert_nil @repository.entries('missing')
+      assert_nil @repository.entries('missing', '3')
+    end
+
+    def test_entries_invalid_revision
+      @repository.fetch_changesets
+      @repository.reload
+      assert_nil @repository.entries('', '123')
+    end
+
+    def test_cat
+      @repository.fetch_changesets
+      @repository.reload
+      buf = @repository.cat('README')
+      assert buf
+      lines = buf.split("\n")
+      assert_equal 3, lines.length
+      buf = lines[1].gsub(/\r$/, "")
+      assert_equal 'with one change', buf
+      buf = @repository.cat('README', '1')
+      assert buf
+      lines = buf.split("\n")
+      assert_equal 1, lines.length
+      buf = lines[0].gsub(/\r$/, "")
+      assert_equal 'CVS test repository', buf
+      assert_nil @repository.cat('missing.rb')
+
+      # sources/welcome_controller.rb is removed at revision 5.
+      assert @repository.cat('sources/welcome_controller.rb', '4')
+      assert @repository.cat('sources/welcome_controller.rb', '5').blank?
+
+      # invalid revision
+      assert @repository.cat('README', '123').blank?
+    end
+
+    def test_annotate
+      @repository.fetch_changesets
+      @repository.reload
+      ann = @repository.annotate('README')
+      assert ann
+      assert_equal 3, ann.revisions.length
+      assert_equal '1.2', ann.revisions[1].revision
+      assert_equal 'LANG', ann.revisions[1].author
+      assert_equal 'with one change', ann.lines[1]
+
+      ann = @repository.annotate('README', '1')
+      assert ann
+      assert_equal 1, ann.revisions.length
+      assert_equal '1.1', ann.revisions[0].revision
+      assert_equal 'LANG', ann.revisions[0].author
+      assert_equal 'CVS test repository', ann.lines[0]
+
+     # invalid revision
+     assert_nil @repository.annotate('README', '123')
+   end
+
   else
     puts "CVS test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/.svn/text-base/repository_darcs_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/repository_darcs_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -52,6 +52,12 @@
       assert_equal 6, @repository.changesets.count
     end
 
+    def test_entries_invalid_revision
+      @repository.fetch_changesets
+      @repository.reload
+      assert_nil @repository.entries('', '123')
+    end
+
     def test_deleted_files_should_not_be_listed
       @repository.fetch_changesets
       @repository.reload
--- a/test/unit/.svn/text-base/repository_filesystem_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/repository_filesystem_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,34 +19,36 @@
 
 class RepositoryFilesystemTest < ActiveSupport::TestCase
   fixtures :projects
-  
+
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/filesystem_repository'
-  
+
   def setup
-    @project = Project.find(1)
+    @project = Project.find(3)
     Setting.enabled_scm << 'Filesystem' unless Setting.enabled_scm.include?('Filesystem')
-    assert @repository = Repository::Filesystem.create(:project => @project, :url => REPOSITORY_PATH)
+    @repository = Repository::Filesystem.create(
+                               :project => @project,
+                               :url     => REPOSITORY_PATH
+                                 )
+    assert @repository
   end
-  
-  if File.directory?(REPOSITORY_PATH)  
+
+  if File.directory?(REPOSITORY_PATH)
     def test_fetch_changesets
       @repository.fetch_changesets
       @repository.reload
-      
       assert_equal 0, @repository.changesets.count
       assert_equal 0, @repository.changes.count
     end
-        
+
     def test_entries
-      assert_equal 2, @repository.entries("", 2).size
+      assert_equal 3, @repository.entries("", 2).size
       assert_equal 2, @repository.entries("dir", 3).size
     end
 
     def test_cat
       assert_equal "TEST CAT\n", @repository.scm.cat("test")
     end
-
   else
     puts "Filesystem test repository NOT FOUND. Skipping unit tests !!! See doc/RUNNING_TESTS."
     def test_fake; assert true end
--- a/test/unit/.svn/text-base/repository_git_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/repository_git_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -25,21 +25,43 @@
   REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
 
   FELIX_HEX  = "Felix Sch\xC3\xA4fer"
+  CHAR_1_HEX = "\xc3\x9c"
 
-  def setup
-    Setting.commit_logs_encoding = 'UTF-8'
-    @project = Project.find(3)
-    @repository = Repository::Git.create(:project => @project, :url => REPOSITORY_PATH)
-    assert @repository
-  end
+  ## Ruby uses ANSI api to fork a process on Windows.
+  ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
+  ## and these are incompatible with ASCII.
+  # WINDOWS_PASS = Redmine::Platform.mswin?
+  WINDOWS_PASS = false
 
-  if File.directory?(REPOSITORY_PATH)  
+  if File.directory?(REPOSITORY_PATH)
+    def setup
+      klass = Repository::Git
+      assert_equal "Git", klass.scm_name
+      assert klass.scm_adapter_class
+      assert_not_equal "", klass.scm_command
+      assert_equal true, klass.scm_available
+
+      @project = Project.find(3)
+      @repository = Repository::Git.create(
+                        :project       => @project,
+                        :url           => REPOSITORY_PATH,
+                        :path_encoding => 'ISO-8859-1'
+                        )
+      assert @repository
+      @char_1        = CHAR_1_HEX.dup
+      if @char_1.respond_to?(:force_encoding)
+        @char_1.force_encoding('UTF-8')
+      end
+    end
+
     def test_fetch_changesets_from_scratch
+      assert_nil @repository.extra_info
+
       @repository.fetch_changesets
       @repository.reload
 
-      assert_equal 16, @repository.changesets.count
-      assert_equal 25, @repository.changes.count
+      assert_equal 21, @repository.changesets.count
+      assert_equal 33, @repository.changes.count
 
       commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
       assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
@@ -54,27 +76,265 @@
       change = commit.changes.sort_by(&:path).first
       assert_equal "README", change.path
       assert_equal "A", change.action
+
+      assert_equal 4, @repository.extra_info["branches"].size
     end
-    
+
     def test_fetch_changesets_incremental
       @repository.fetch_changesets
-      # Remove the 3 latest changesets
-      @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy)
+      @repository.reload
+      assert_equal 21, @repository.changesets.count
+      assert_equal 33, @repository.changes.count
+      extra_info_db = @repository.extra_info["branches"]
+      assert_equal 4, extra_info_db.size
+      assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
+                    extra_info_db["latin-1-path-encoding"]["last_scmid"]
+      assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
+                    extra_info_db["master"]["last_scmid"]
+
+      del_revs = [
+          "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
+          "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
+          "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
+          "deff712f05a90d96edbd70facc47d944be5897e3",
+          "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
+          "7e61ac704deecde634b51e59daa8110435dcb3da",
+         ]
+      @repository.changesets.each do |rev|
+        rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
+      end
       @repository.reload
       cs1 = @repository.changesets
-      assert_equal 13, cs1.count
-
-      rev_a_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
-      assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.revision
-      # Mon Jul 5 22:34:26 2010 +0200
-      rev_a_committed_on = Time.gm(2010, 7, 5, 20, 34, 26)
-      assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.scmid
-      assert_equal rev_a_committed_on, rev_a_commit.committed_on
-      latest_rev = @repository.latest_changeset
-      assert_equal rev_a_committed_on, latest_rev.committed_on
+      assert_equal 15, cs1.count
+      h = @repository.extra_info.dup
+      h["branches"]["master"]["last_scmid"] =
+            "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
+      @repository.merge_extra_info(h)
+      @repository.save
+      @repository.reload
+      extra_info_db_1 = @repository.extra_info["branches"]
+      assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
+                    extra_info_db_1["master"]["last_scmid"]
 
       @repository.fetch_changesets
-      assert_equal 16, @repository.changesets.count
+      assert_equal 21, @repository.changesets.count
+    end
+
+    def test_fetch_changesets_invalid_rev
+      @repository.fetch_changesets
+      @repository.reload
+      assert_equal 21, @repository.changesets.count
+      assert_equal 33, @repository.changes.count
+      extra_info_db = @repository.extra_info["branches"]
+      assert_equal 4, extra_info_db.size
+      assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
+                    extra_info_db["latin-1-path-encoding"]["last_scmid"]
+      assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
+                    extra_info_db["master"]["last_scmid"]
+
+      del_revs = [
+          "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
+          "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
+          "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
+          "deff712f05a90d96edbd70facc47d944be5897e3",
+          "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
+          "7e61ac704deecde634b51e59daa8110435dcb3da",
+         ]
+      @repository.changesets.each do |rev|
+        rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
+      end
+      @repository.reload
+      cs1 = @repository.changesets
+      assert_equal 15, cs1.count
+      h = @repository.extra_info.dup
+      h["branches"]["master"]["last_scmid"] =
+            "abcd1234efgh"
+      @repository.merge_extra_info(h)
+      @repository.save
+      @repository.reload
+      extra_info_db_1 = @repository.extra_info["branches"]
+      assert_equal "abcd1234efgh",
+                    extra_info_db_1["master"]["last_scmid"]
+
+      @repository.fetch_changesets
+      assert_equal 15, @repository.changesets.count
+    end
+
+    def test_db_consistent_ordering_init
+      assert_nil @repository.extra_info
+      @repository.fetch_changesets
+      @repository.reload
+      assert_equal 1, @repository.extra_info["db_consistent"]["ordering"]
+    end
+
+    def test_db_consistent_ordering_before_1_2
+      assert_nil @repository.extra_info
+      @repository.fetch_changesets
+      @repository.reload
+      assert_equal 21, @repository.changesets.count
+      assert_not_nil @repository.extra_info
+      @repository.write_attribute(:extra_info, nil)
+      @repository.save
+      assert_nil @repository.extra_info
+      assert_equal 21, @repository.changesets.count
+      @repository.fetch_changesets
+      @repository.reload
+      assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
+
+      del_revs = [
+          "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
+          "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
+          "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
+          "deff712f05a90d96edbd70facc47d944be5897e3",
+          "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
+          "7e61ac704deecde634b51e59daa8110435dcb3da",
+         ]
+      @repository.changesets.each do |rev|
+        rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
+      end
+      @repository.reload
+      cs1 = @repository.changesets
+      assert_equal 15, cs1.count
+      assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
+      h = @repository.extra_info.dup
+      h["branches"]["master"]["last_scmid"] =
+            "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
+      @repository.merge_extra_info(h)
+      @repository.save
+      @repository.reload
+      extra_info_db_1 = @repository.extra_info["branches"]
+      assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
+                    extra_info_db_1["master"]["last_scmid"]
+
+      @repository.fetch_changesets
+      assert_equal 21, @repository.changesets.count
+      assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
+    end
+
+    def test_latest_changesets
+      @repository.fetch_changesets
+      @repository.reload
+      # with limit
+      changesets = @repository.latest_changesets('', nil, 2)
+      assert_equal 2, changesets.size
+
+      # with path
+      changesets = @repository.latest_changesets('images', nil)
+      assert_equal [
+              'deff712f05a90d96edbd70facc47d944be5897e3',
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', nil)
+      assert_equal [
+              '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf',
+              '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8',
+              '713f4944648826f558cf548222f813dabe7cbb04',
+              '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      # with path, revision and limit
+      changesets = @repository.latest_changesets('images', '899a15dba')
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('images', '899a15dba', 1)
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', '899a15dba')
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', '899a15dba', 1)
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+          ], changesets.collect(&:revision)
+
+      # with path, tag and limit
+      changesets = @repository.latest_changesets('images', 'tag01.annotated')
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('images', 'tag01.annotated', 1)
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', 'tag01.annotated')
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', 'tag01.annotated', 1)
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+          ], changesets.collect(&:revision)
+
+      # with path, branch and limit
+      changesets = @repository.latest_changesets('images', 'test_branch')
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('images', 'test_branch', 1)
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', 'test_branch')
+      assert_equal [
+              '713f4944648826f558cf548222f813dabe7cbb04',
+              '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', 'test_branch', 2)
+      assert_equal [
+              '713f4944648826f558cf548222f813dabe7cbb04',
+              '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
+          ], changesets.collect(&:revision)
+
+      # latin-1 encoding path
+      changesets = @repository.latest_changesets(
+                    "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
+      assert_equal [
+              '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
+              '4fc55c43bf3d3dc2efb66145365ddc17639ce81e',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets(
+                    "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89', 1)
+      assert_equal [
+              '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
+          ], changesets.collect(&:revision)
+    end
+
+    def test_latest_changesets_latin_1_dir
+      if WINDOWS_PASS
+        #
+      else
+        @repository.fetch_changesets
+        @repository.reload
+        changesets = @repository.latest_changesets(
+                    "latin-1-dir/test-#{@char_1}-subdir", '1ca7f5ed')
+        assert_equal [
+              '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127',
+          ], changesets.collect(&:revision)
+      end
     end
 
     def test_find_changeset_by_name
@@ -97,14 +357,16 @@
     def test_identifier
       @repository.fetch_changesets
       @repository.reload
-      c = @repository.changesets.find_by_revision('7234cb2750b63f47bff735edc50a1c0a433c2518')
+      c = @repository.changesets.find_by_revision(
+                          '7234cb2750b63f47bff735edc50a1c0a433c2518')
       assert_equal c.scmid, c.identifier
     end
 
     def test_format_identifier
       @repository.fetch_changesets
       @repository.reload
-      c = @repository.changesets.find_by_revision('7234cb2750b63f47bff735edc50a1c0a433c2518')
+      c = @repository.changesets.find_by_revision(
+                          '7234cb2750b63f47bff735edc50a1c0a433c2518')
       assert_equal '7234cb27', c.format_identifier
     end
 
@@ -121,13 +383,54 @@
     def test_log_utf8
       @repository.fetch_changesets
       @repository.reload
-      str_felix_hex  = FELIX_HEX
+      str_felix_hex  = FELIX_HEX.dup
       if str_felix_hex.respond_to?(:force_encoding)
           str_felix_hex.force_encoding('UTF-8')
       end
-      c = @repository.changesets.find_by_revision('ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
+      c = @repository.changesets.find_by_revision(
+                        'ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
       assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
     end
+
+    def test_previous
+      @repository.fetch_changesets
+      @repository.reload
+      %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
+        changeset = @repository.find_changeset_by_name(r1)
+        %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
+          assert_equal @repository.find_changeset_by_name(r2), changeset.previous
+        end
+      end
+    end
+
+    def test_previous_nil
+      @repository.fetch_changesets
+      @repository.reload
+      %w|7234cb2750b63f47bff735edc50a1c0a433c2518 7234cb2|.each do |r1|
+        changeset = @repository.find_changeset_by_name(r1)
+        assert_nil changeset.previous
+      end
+    end
+
+    def test_next
+      @repository.fetch_changesets
+      @repository.reload
+      %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
+        changeset = @repository.find_changeset_by_name(r2)
+        %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
+        assert_equal @repository.find_changeset_by_name(r1), changeset.next
+        end
+      end
+    end
+
+    def test_next_nil
+      @repository.fetch_changesets
+      @repository.reload
+      %w|67e7792ce20ccae2e4bb73eed09bb397819c8834 67e7792ce20cca|.each do |r1|
+        changeset = @repository.find_changeset_by_name(r1)
+        assert_nil changeset.next
+      end
+    end
   else
     puts "Git test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/.svn/text-base/repository_mercurial_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/repository_mercurial_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,22 +19,45 @@
 
 class RepositoryMercurialTest < ActiveSupport::TestCase
   fixtures :projects
-  
+
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
 
-  def setup
-    @project = Project.find(3)
-    @repository = Repository::Mercurial.create(:project => @project, :url => REPOSITORY_PATH)
-    assert @repository
-  end
+  CHAR_1_HEX = "\xc3\x9c"
 
-  if File.directory?(REPOSITORY_PATH)  
+  if File.directory?(REPOSITORY_PATH)
+
+    def setup
+      klass = Repository::Mercurial
+      assert_equal "Mercurial", klass.scm_name
+      assert klass.scm_adapter_class
+      assert_not_equal "", klass.scm_command
+      assert_equal true, klass.scm_available
+
+      @project = Project.find(3)
+      @repository = Repository::Mercurial.create(
+                      :project => @project,
+                      :url     => REPOSITORY_PATH,
+                      :path_encoding => 'ISO-8859-1'
+                      )
+      assert @repository
+      @char_1        = CHAR_1_HEX.dup
+      @tag_char_1    = "tag-#{CHAR_1_HEX}-00"
+      @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
+      @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
+      if @char_1.respond_to?(:force_encoding)
+        @char_1.force_encoding('UTF-8')
+        @tag_char_1.force_encoding('UTF-8')
+        @branch_char_0.force_encoding('UTF-8')
+        @branch_char_1.force_encoding('UTF-8')
+      end
+    end
+
     def test_fetch_changesets_from_scratch
       @repository.fetch_changesets
       @repository.reload
-      assert_equal 17, @repository.changesets.count
-      assert_equal 25, @repository.changes.count
+      assert_equal 29, @repository.changesets.count
+      assert_equal 37, @repository.changes.count
       assert_equal "Initial import.\nThe repository contains 3 files.",
                    @repository.changesets.find_by_revision('0').comments
     end
@@ -45,9 +68,9 @@
       @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 2}
       @repository.reload
       assert_equal 3, @repository.changesets.count
-      
+
       @repository.fetch_changesets
-      assert_equal 17, @repository.changesets.count
+      assert_equal 29, @repository.changesets.count
     end
 
     def test_isodatesec
@@ -77,14 +100,69 @@
 
       # with_limit
       changesets = @repository.latest_changesets('', nil, 2)
-      assert_equal @repository.latest_changesets('', nil)[0, 2], changesets
+      assert_equal %w|28 27|, changesets.collect(&:revision)
 
       # with_filepath
-      changesets = @repository.latest_changesets('/sql_escape/percent%dir/percent%file1.txt', nil)
+      changesets = @repository.latest_changesets(
+                      '/sql_escape/percent%dir/percent%file1.txt', nil)
       assert_equal %w|11 10 9|, changesets.collect(&:revision)
 
-      changesets = @repository.latest_changesets('/sql_escape/underscore_dir/understrike_file.txt', nil)
+      changesets = @repository.latest_changesets(
+                      '/sql_escape/underscore_dir/understrike_file.txt', nil)
       assert_equal %w|12 9|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', nil)
+      assert_equal %w|28 17 8 6 1 0|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README','8')
+      assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README','8', 2)
+      assert_equal %w|8 6|, changesets.collect(&:revision)
+
+      # with_dirpath
+      changesets = @repository.latest_changesets('images', nil)
+      assert_equal %w|1 0|, changesets.collect(&:revision)
+
+      path = 'sql_escape/percent%dir'
+      changesets = @repository.latest_changesets(path, nil)
+      assert_equal %w|13 11 10 9|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets(path, '11')
+      assert_equal %w|11 10 9|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets(path, '11', 2)
+      assert_equal %w|11 10|, changesets.collect(&:revision)
+
+      path = 'sql_escape/underscore_dir'
+      changesets = @repository.latest_changesets(path, nil)
+      assert_equal %w|13 12 9|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets(path, '12')
+      assert_equal %w|12 9|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets(path, '12', 1)
+      assert_equal %w|12|, changesets.collect(&:revision)
+
+      # tag
+      changesets = @repository.latest_changesets('', 'tag_test.00')
+      assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('', 'tag_test.00', 2)
+      assert_equal %w|5 4|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('sources', 'tag_test.00')
+      assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
+      assert_equal %w|4 3|, changesets.collect(&:revision)
+
+      # named branch
+      changesets = @repository.latest_changesets('', @branch_char_1)
+      assert_equal %w|27 26|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1)
+      assert_equal %w|27|, changesets.collect(&:revision)
     end
 
     def test_copied_files
@@ -99,6 +177,7 @@
       assert_equal 'A', c1[0].action
       assert_equal '/sql_escape/percent%dir/percentfile1.txt',  c1[0].path
       assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
+      assert_equal '3a330eb32958', c1[0].from_revision
 
       assert_equal 'A', c1[1].action
       assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
@@ -111,6 +190,15 @@
       assert_equal 'A', c2[0].action
       assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
       assert_equal '/README', c2[0].from_path
+      assert_equal '933ca60293d7', c2[0].from_revision
+
+      cs3 = @repository.changesets.find_by_revision('19')
+      c3  = cs3.changes
+      assert_equal 1, c3.size
+      assert_equal 'A', c3[0].action
+      assert_equal "/latin-1-dir/test-#{@char_1}-1.txt",  c3[0].path
+      assert_equal "/latin-1-dir/test-#{@char_1}.txt",    c3[0].from_path
+      assert_equal '5d9891a1b425', c3[0].from_revision
     end
 
     def test_find_changeset_by_name
@@ -159,41 +247,44 @@
       assert_equal 'abc400bb8672', c.event_url[:rev]
     end
 
-    def test_latest_changesets_with_limit
+    def test_previous
       @repository.fetch_changesets
       @repository.reload
-      changesets = @repository.latest_changesets('', nil, 2)
-      assert_equal @repository.latest_changesets('', nil)[0, 2], changesets
+      %w|28 3ae45e2d177d 3ae45|.each do |r1|
+        changeset = @repository.find_changeset_by_name(r1)
+        %w|27 7bbf4c738e71 7bbf|.each do |r2|
+          assert_equal @repository.find_changeset_by_name(r2), changeset.previous
+        end
+      end
     end
 
-    def test_latest_changesets_with_filepath
+    def test_previous_nil
       @repository.fetch_changesets
       @repository.reload
-      changesets = @repository.latest_changesets('README', nil)
-      assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
-
-      path = 'sql_escape/percent%dir/percent%file1.txt'
-      changesets = @repository.latest_changesets(path, nil)
-      assert_equal %w|11 10 9|, changesets.collect(&:revision)
-
-      path = 'sql_escape/underscore_dir/understrike_file.txt'
-      changesets = @repository.latest_changesets(path, nil)
-      assert_equal %w|12 9|, changesets.collect(&:revision)
+      %w|0 0885933ad4f6 0885|.each do |r1|
+        changeset = @repository.find_changeset_by_name(r1)
+        assert_nil changeset.previous
+      end
     end
 
-    def test_latest_changesets_with_dirpath
+    def test_next
       @repository.fetch_changesets
       @repository.reload
-      changesets = @repository.latest_changesets('images', nil)
-      assert_equal %w|1 0|, changesets.collect(&:revision)
+      %w|27 7bbf4c738e71 7bbf|.each do |r2|
+        changeset = @repository.find_changeset_by_name(r2)
+        %w|28 3ae45e2d177d 3ae45|.each do |r1|
+        assert_equal @repository.find_changeset_by_name(r1), changeset.next
+        end
+      end
+    end
 
-      path = 'sql_escape/percent%dir'
-      changesets = @repository.latest_changesets(path, nil)
-      assert_equal %w|13 11 10 9|, changesets.collect(&:revision)
-
-      path = 'sql_escape/underscore_dir'
-      changesets = @repository.latest_changesets(path, nil)
-      assert_equal %w|13 12 9|, changesets.collect(&:revision)
+    def test_next_nil
+      @repository.fetch_changesets
+      @repository.reload
+      %w|28 3ae45e2d177d 3ae45|.each do |r1|
+        changeset = @repository.find_changeset_by_name(r1)
+        assert_nil changeset.next
+      end
     end
   else
     puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
--- a/test/unit/.svn/text-base/repository_subversion_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/repository_subversion_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -18,47 +18,48 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class RepositorySubversionTest < ActiveSupport::TestCase
-  fixtures :projects, :repositories, :enabled_modules, :users, :roles 
-  
+  fixtures :projects, :repositories, :enabled_modules, :users, :roles
+
   def setup
     @project = Project.find(3)
-    assert @repository = Repository::Subversion.create(:project => @project,
-             :url => "file://#{self.class.repository_path('subversion')}")
+    @repository = Repository::Subversion.create(:project => @project,
+             :url => self.class.subversion_repository_url)
+    assert @repository
   end
-  
+
   if repository_configured?('subversion')
     def test_fetch_changesets_from_scratch
       @repository.fetch_changesets
       @repository.reload
-      
+
       assert_equal 11, @repository.changesets.count
       assert_equal 20, @repository.changes.count
       assert_equal 'Initial import.', @repository.changesets.find_by_revision('1').comments
     end
-    
+
     def test_fetch_changesets_incremental
       @repository.fetch_changesets
       # Remove changesets with revision > 5
       @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 5}
       @repository.reload
       assert_equal 5, @repository.changesets.count
-      
+
       @repository.fetch_changesets
       assert_equal 11, @repository.changesets.count
     end
-    
+
     def test_latest_changesets
       @repository.fetch_changesets
-      
+
       # with limit
       changesets = @repository.latest_changesets('', nil, 2)
       assert_equal 2, changesets.size
       assert_equal @repository.latest_changesets('', nil).slice(0,2), changesets
-      
+
       # with path
       changesets = @repository.latest_changesets('subversion_test/folder', nil)
       assert_equal ["10", "9", "7", "6", "5", "2"], changesets.collect(&:revision)
-      
+
       # with path and revision
       changesets = @repository.latest_changesets('subversion_test/folder', 8)
       assert_equal ["7", "6", "5", "2"], changesets.collect(&:revision)
@@ -67,7 +68,7 @@
     def test_directory_listing_with_square_brackets_in_path
       @repository.fetch_changesets
       @repository.reload
-      
+
       entries = @repository.entries('subversion_test/[folder_with_brackets]')
       assert_not_nil entries, 'Expect to find entries in folder_with_brackets'
       assert_equal 1, entries.size, 'Expect one entry in folder_with_brackets'
@@ -76,7 +77,9 @@
 
     def test_directory_listing_with_square_brackets_in_base
       @project = Project.find(3)
-      @repository = Repository::Subversion.create(:project => @project, :url => "file:///#{self.class.repository_path('subversion')}/subversion_test/[folder_with_brackets]")
+      @repository = Repository::Subversion.create(
+                          :project => @project,
+                          :url => "file:///#{self.class.repository_path('subversion')}/subversion_test/[folder_with_brackets]")
 
       @repository.fetch_changesets
       @repository.reload
@@ -143,17 +146,13 @@
         s1 = "\xC2\x80"
         s2 = "\xc3\x82\xc2\x80"
         if s1.respond_to?(:force_encoding)
-          s3 = s1
-          s4 = s2
-          s1.force_encoding('ASCII-8BIT')
-          s2.force_encoding('ASCII-8BIT')
-          s3.force_encoding('ISO-8859-1')
-          s4.force_encoding('UTF-8')
-          assert_equal s3.encode('UTF-8'), s4
+          s1.force_encoding('ISO-8859-1')
+          s2.force_encoding('UTF-8')
+          assert_equal s1.encode('UTF-8'), s2
         end
         c = Changeset.new(:repository => @repository,
-                          :comments=>s2,
-                          :revision=>'123',
+                          :comments   => s2,
+                          :revision   => '123',
                           :committed_on => Time.now)
         assert c.save
         assert_equal s2, c.comments
--- a/test/unit/.svn/text-base/repository_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/repository_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -33,97 +33,109 @@
            :member_roles,
            :roles,
            :enumerations
-  
+
   def setup
     @repository = Project.find(1).repository
   end
-  
+
   def test_create
     repository = Repository::Subversion.new(:project => Project.find(3))
     assert !repository.save
-  
+
     repository.url = "svn://localhost"
     assert repository.save
     repository.reload
-    
+
     project = Project.find(3)
     assert_equal repository, project.repository
   end
-  
+
   def test_destroy
     changesets = Changeset.count(:all, :conditions => "repository_id = 10")
-    changes = Change.count(:all, :conditions => "repository_id = 10", :include => :changeset)
+    changes = Change.count(:all, :conditions => "repository_id = 10",
+                           :include => :changeset)
     assert_difference 'Changeset.count', -changesets do
       assert_difference 'Change.count', -changes do
         Repository.find(10).destroy
       end
     end
   end
-  
+
   def test_should_not_create_with_disabled_scm
     # disable Subversion
     with_settings :enabled_scm => ['Darcs', 'Git'] do
-      repository = Repository::Subversion.new(:project => Project.find(3), :url => "svn://localhost")
+      repository = Repository::Subversion.new(
+                      :project => Project.find(3), :url => "svn://localhost")
       assert !repository.save
-      assert_equal I18n.translate('activerecord.errors.messages.invalid'), repository.errors.on(:type)
+      assert_equal I18n.translate('activerecord.errors.messages.invalid'),
+                                  repository.errors.on(:type)
     end
   end
-  
+
   def test_scan_changesets_for_issue_ids
     Setting.default_language = 'en'
     Setting.notified_events = ['issue_added','issue_updated']
-    
+
     # choosing a status to apply to fix issues
-    Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
+    Setting.commit_fix_status_id = IssueStatus.find(
+                                     :first,
+                                     :conditions => ["is_closed = ?", true]).id
     Setting.commit_fix_done_ratio = "90"
     Setting.commit_ref_keywords = 'refs , references, IssueID'
     Setting.commit_fix_keywords = 'fixes , closes'
     Setting.default_language = 'en'
     ActionMailer::Base.deliveries.clear
-    
+
     # make sure issue 1 is not already closed
     fixed_issue = Issue.find(1)
     assert !fixed_issue.status.is_closed?
     old_status = fixed_issue.status
-        
+
     Repository.scan_changesets_for_issue_ids
     assert_equal [101, 102], Issue.find(3).changeset_ids
-    
+
     # fixed issues
     fixed_issue.reload
     assert fixed_issue.status.is_closed?
     assert_equal 90, fixed_issue.done_ratio
     assert_equal [101], fixed_issue.changeset_ids
-    
+
     # issue change
     journal = fixed_issue.journals.find(:first, :order => 'created_on desc')
     assert_equal User.find_by_login('dlopper'), journal.user
     assert_equal 'Applied in changeset r2.', journal.notes
-    
+
     # 2 email notifications
     assert_equal 2, ActionMailer::Base.deliveries.size
     mail = ActionMailer::Base.deliveries.first
     assert_kind_of TMail::Mail, mail
-    assert mail.subject.starts_with?("[#{fixed_issue.project.name} - #{fixed_issue.tracker.name} ##{fixed_issue.id}]")
-    assert mail.body.include?("Status changed from #{old_status} to #{fixed_issue.status}")
-    
+    assert mail.subject.starts_with?(
+        "[#{fixed_issue.project.name} - #{fixed_issue.tracker.name} ##{fixed_issue.id}]")
+    assert mail.body.include?(
+        "Status changed from #{old_status} to #{fixed_issue.status}")
+
     # ignoring commits referencing an issue of another project
     assert_equal [], Issue.find(4).changesets
   end
-  
+
   def test_for_changeset_comments_strip
-    repository = Repository::Mercurial.create( :project => Project.find( 4 ), :url => '/foo/bar/baz' )
+    repository = Repository::Mercurial.create(
+                    :project => Project.find( 4 ),
+                    :url => '/foo/bar/baz' )
     comment = <<-COMMENT
     This is a loooooooooooooooooooooooooooong comment                                                   
                                                                                                        
                                                                                             
     COMMENT
     changeset = Changeset.new(
-      :comments => comment, :commit_date => Time.now, :revision => 0, :scmid => 'f39b7922fb3c',
-      :committer => 'foo <foo@example.com>', :committed_on => Time.now, :repository => repository )
+      :comments => comment, :commit_date => Time.now,
+      :revision => 0, :scmid => 'f39b7922fb3c',
+      :committer => 'foo <foo@example.com>',
+      :committed_on => Time.now, :repository => repository )
     assert( changeset.save )
     assert_not_equal( comment, changeset.comments )
-    assert_equal( 'This is a loooooooooooooooooooooooooooong comment', changeset.comments )
+    assert_equal( 'This is a loooooooooooooooooooooooooooong comment',
+                  changeset.comments )
   end
 
   def test_for_urls_strip
@@ -134,29 +146,93 @@
         :log_encoding => 'UTF-8')
     assert repository.save
     repository.reload
-    assert_equal ':pserver:login:password@host:/path/to/the/repository', repository.url
+    assert_equal ':pserver:login:password@host:/path/to/the/repository',
+                  repository.url
     assert_equal 'foo', repository.root_url
   end
 
   def test_manual_user_mapping
     assert_no_difference "Changeset.count(:conditions => 'user_id <> 2')" do
-      c = Changeset.create!(:repository => @repository, :committer => 'foo', :committed_on => Time.now, :revision => 100, :comments => 'Committed by foo.')
+      c = Changeset.create!(
+              :repository => @repository,
+              :committer => 'foo',
+              :committed_on => Time.now,
+              :revision => 100,
+              :comments => 'Committed by foo.'
+            )
       assert_nil c.user
       @repository.committer_ids = {'foo' => '2'}
       assert_equal User.find(2), c.reload.user
       # committer is now mapped
-      c = Changeset.create!(:repository => @repository, :committer => 'foo', :committed_on => Time.now, :revision => 101, :comments => 'Another commit by foo.')
+      c = Changeset.create!(
+              :repository => @repository,
+              :committer => 'foo',
+              :committed_on => Time.now,
+              :revision => 101,
+              :comments => 'Another commit by foo.'
+            )
       assert_equal User.find(2), c.user
     end
   end
-  
+
   def test_auto_user_mapping_by_username
-    c = Changeset.create!(:repository => @repository, :committer => 'jsmith', :committed_on => Time.now, :revision => 100, :comments => 'Committed by john.')
+    c = Changeset.create!(
+          :repository   => @repository,
+          :committer    => 'jsmith',
+          :committed_on => Time.now,
+          :revision     => 100,
+          :comments     => 'Committed by john.'
+        )
     assert_equal User.find(2), c.user
   end
-  
+
   def test_auto_user_mapping_by_email
-    c = Changeset.create!(:repository => @repository, :committer => 'john <jsmith@somenet.foo>', :committed_on => Time.now, :revision => 100, :comments => 'Committed by john.')
+    c = Changeset.create!(
+          :repository   => @repository,
+          :committer    => 'john <jsmith@somenet.foo>',
+          :committed_on => Time.now,
+          :revision     => 100,
+          :comments     => 'Committed by john.'
+        )
     assert_equal User.find(2), c.user
   end
+
+  def test_filesystem_avaialbe
+    klass = Repository::Filesystem
+    assert klass.scm_adapter_class
+    assert_equal true, klass.scm_available
+  end
+
+  def test_merge_extra_info
+    repo = Repository::Subversion.new(:project => Project.find(3))
+    assert !repo.save
+    repo.url = "svn://localhost"
+    assert repo.save
+    repo.reload
+    project = Project.find(3)
+    assert_equal repo, project.repository
+    assert_nil repo.extra_info
+    h1 = {"test_1" => {"test_11" => "test_value_11"}}
+    repo.merge_extra_info(h1)
+    assert_equal h1, repo.extra_info
+    h2 = {"test_2" => {
+                   "test_21" => "test_value_21",
+                   "test_22" => "test_value_22",
+                  }}
+    repo.merge_extra_info(h2)
+    assert_equal (h = {"test_11" => "test_value_11"}),
+                 repo.extra_info["test_1"]
+    assert_equal "test_value_21",
+                 repo.extra_info["test_2"]["test_21"]
+    h3 = {"test_2" => {
+                   "test_23" => "test_value_23",
+                   "test_24" => "test_value_24",
+                  }}
+    repo.merge_extra_info(h3)
+    assert_equal (h = {"test_11" => "test_value_11"}),
+                 repo.extra_info["test_1"]
+    assert_nil repo.extra_info["test_2"]["test_21"]
+    assert_equal "test_value_23",
+                 repo.extra_info["test_2"]["test_23"]
+  end
 end
--- a/test/unit/.svn/text-base/role_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/role_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -49,6 +49,13 @@
     assert ! role.permissions.include?(perm[0])
     assert_equal size - 2, role.permissions.size
   end
+  
+  def test_name
+    I18n.locale = 'fr'
+    assert_equal 'Manager', Role.find(1).name
+    assert_equal 'Anonyme', Role.anonymous.name
+    assert_equal 'Non membre', Role.non_member.name
+  end
 
   context "#anonymous" do
     should "return the anonymous role" do
--- a/test/unit/.svn/text-base/search_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/search_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,7 +19,7 @@
 
 class SearchTest < ActiveSupport::TestCase
   fixtures :users,
-           :members, 
+           :members,
            :member_roles,
            :projects,
            :roles,
@@ -38,23 +38,23 @@
     @changeset_keyword = '%very first commit%'
     @changeset = Changeset.find(100)
   end
-  
+
   def test_search_by_anonymous
     User.current = nil
-    
+
     r = Issue.search(@issue_keyword).first
     assert r.include?(@issue)
     r = Changeset.search(@changeset_keyword).first
     assert r.include?(@changeset)
-    
+
     # Removes the :view_changesets permission from Anonymous role
     remove_permission Role.anonymous, :view_changesets
-    
+
     r = Issue.search(@issue_keyword).first
     assert r.include?(@issue)
     r = Changeset.search(@changeset_keyword).first
     assert !r.include?(@changeset)
-    
+
     # Make the project private
     @project.update_attribute :is_public, false
     r = Issue.search(@issue_keyword).first
@@ -62,24 +62,24 @@
     r = Changeset.search(@changeset_keyword).first
     assert !r.include?(@changeset)
   end
-  
+
   def test_search_by_user
     User.current = User.find_by_login('rhill')
     assert User.current.memberships.empty?
-    
+
     r = Issue.search(@issue_keyword).first
     assert r.include?(@issue)
     r = Changeset.search(@changeset_keyword).first
     assert r.include?(@changeset)
-    
+
     # Removes the :view_changesets permission from Non member role
     remove_permission Role.non_member, :view_changesets
-    
+
     r = Issue.search(@issue_keyword).first
     assert r.include?(@issue)
     r = Changeset.search(@changeset_keyword).first
     assert !r.include?(@changeset)
-    
+
     # Make the project private
     @project.update_attribute :is_public, false
     r = Issue.search(@issue_keyword).first
@@ -87,11 +87,11 @@
     r = Changeset.search(@changeset_keyword).first
     assert !r.include?(@changeset)
   end
-  
+
   def test_search_by_allowed_member
     User.current = User.find_by_login('jsmith')
     assert User.current.projects.include?(@project)
-    
+
     r = Issue.search(@issue_keyword).first
     assert r.include?(@issue)
     r = Changeset.search(@changeset_keyword).first
@@ -109,10 +109,10 @@
     # Removes the :view_changesets permission from user's and non member role
     remove_permission Role.find(1), :view_changesets
     remove_permission Role.non_member, :view_changesets
-    
+
     User.current = User.find_by_login('jsmith')
     assert User.current.projects.include?(@project)
-    
+
     r = Issue.search(@issue_keyword).first
     assert r.include?(@issue)
     r = Changeset.search(@changeset_keyword).first
@@ -125,18 +125,18 @@
     r = Changeset.search(@changeset_keyword).first
     assert !r.include?(@changeset)
   end
-  
+
   def test_search_issue_with_multiple_hits_in_journals
     i = Issue.find(1)
     assert_equal 2, i.journals.count(:all, :conditions => "notes LIKE '%notes%'")
-    
+
     r = Issue.search('%notes%').first
     assert_equal 1, r.size
     assert_equal i, r.first
   end
-  
+
   private
-  
+
   def remove_permission(role, permission)
     role.permissions = role.permissions - [ permission ]
     role.save
--- a/test/unit/.svn/text-base/setting_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/setting_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -18,27 +18,27 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class SettingTest < ActiveSupport::TestCase
-  
+
   def test_read_default
     assert_equal "Redmine", Setting.app_title
     assert Setting.self_registration?
     assert !Setting.login_required?
   end
-  
+
   def test_update
     Setting.app_title = "My title"
     assert_equal "My title", Setting.app_title
     # make sure db has been updated (INSERT)
     assert_equal "My title", Setting.find_by_name('app_title').value
-    
+
     Setting.app_title = "My other title"
     assert_equal "My other title", Setting.app_title
     # make sure db has been updated (UPDATE)
     assert_equal "My other title", Setting.find_by_name('app_title').value
   end
-  
+
   def test_serialized_setting
-    Setting.notified_events = ['issue_added', 'issue_updated', 'news_added']    
+    Setting.notified_events = ['issue_added', 'issue_updated', 'news_added']
     assert_equal ['issue_added', 'issue_updated', 'news_added'], Setting.notified_events
     assert_equal ['issue_added', 'issue_updated', 'news_added'], Setting.find_by_name('notified_events').value
   end
--- a/test/unit/.svn/text-base/time_entry_activity_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/time_entry_activity_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -23,10 +23,10 @@
   def test_should_be_an_enumeration
     assert TimeEntryActivity.ancestors.include?(Enumeration)
   end
-  
+
   def test_objects_count
     assert_equal 3, TimeEntryActivity.find_by_name("Design").objects_count
-    assert_equal 1, TimeEntryActivity.find_by_name("Development").objects_count
+    assert_equal 2, TimeEntryActivity.find_by_name("Development").objects_count
   end
 
   def test_option_name
--- a/test/unit/.svn/text-base/user_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/user_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -522,6 +522,23 @@
     assert_nil @dlopper.roles_for_project(Project.find(2)).detect {|role| role.member?}
   end
   
+  def test_projects_by_role_for_user_with_role
+    user = User.find(2)
+    assert_kind_of Hash, user.projects_by_role
+    assert_equal 2, user.projects_by_role.size
+    assert_equal [1,5], user.projects_by_role[Role.find(1)].collect(&:id).sort
+    assert_equal [2], user.projects_by_role[Role.find(2)].collect(&:id).sort
+  end
+  
+  def test_projects_by_role_for_user_with_no_role
+    user = User.generate!
+    assert_equal({}, user.projects_by_role)
+  end
+  
+  def test_projects_by_role_for_anonymous
+    assert_equal({}, User.anonymous.projects_by_role)
+  end
+
   def test_valid_notification_options
     # without memberships
     assert_equal 5, User.find(7).valid_notification_options.size
--- a/test/unit/.svn/text-base/watcher_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/watcher_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -47,12 +47,44 @@
     assert Issue.watched_by(@user).include?(@issue)
   end
   
+  def test_watcher_users
+    watcher_users = Issue.find(2).watcher_users
+    assert_kind_of Array, watcher_users
+    assert_kind_of User, watcher_users.first
+  end
+  
+  def test_watcher_users_should_not_validate_user
+    User.update_all("firstname = ''", "id=1")
+    @user.reload
+    assert !@user.valid?
+    
+    issue = Issue.new(:project => Project.find(1), :tracker_id => 1, :subject => "test", :author => User.find(2))
+    issue.watcher_users << @user
+    issue.save!
+    assert issue.watched_by?(@user)
+  end
+  
   def test_watcher_user_ids
+    assert_equal [1, 3], Issue.find(2).watcher_user_ids.sort
+  end
+  
+  def test_watcher_user_ids=
     issue = Issue.new
     issue.watcher_user_ids = ['1', '3']
     assert issue.watched_by?(User.find(1))
   end
   
+  def test_addable_watcher_users
+    addable_watcher_users = @issue.addable_watcher_users
+    assert_kind_of Array, addable_watcher_users
+    assert_kind_of User, addable_watcher_users.first
+  end
+  
+  def test_addable_watcher_users_should_not_include_user_that_cannot_view_the_object
+    issue = Issue.new(:project => Project.find(1), :is_private => true)
+    assert_nil issue.addable_watcher_users.detect {|user| !issue.visible?(user)}
+  end
+  
   def test_recipients
     @issue.watchers.delete_all
     @issue.reload
@@ -60,15 +92,15 @@
     assert @issue.watcher_recipients.empty?
     assert @issue.add_watcher(@user)
 
-    @user.mail_notification = true
-    @user.save    
+    @user.mail_notification = 'all'
+    @user.save!
     @issue.reload
     assert @issue.watcher_recipients.include?(@user.mail)
 
-    @user.mail_notification = false
-    @user.save    
+    @user.mail_notification = 'none'
+    @user.save!
     @issue.reload
-    assert @issue.watcher_recipients.include?(@user.mail)
+    assert !@issue.watcher_recipients.include?(@user.mail)
   end
   
   def test_unwatch
--- a/test/unit/.svn/text-base/wiki_content_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/wiki_content_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -24,13 +24,13 @@
     @wiki = Wiki.find(1)
     @page = @wiki.pages.first
   end
-  
+
   def test_create
-    page = WikiPage.new(:wiki => @wiki, :title => "Page")  
+    page = WikiPage.new(:wiki => @wiki, :title => "Page")
     page.content = WikiContent.new(:text => "Content text", :author => User.find(1), :comments => "My comment")
     assert page.save
     page.reload
-    
+
     content = page.content
     assert_kind_of WikiContent, content
     assert_equal 1, content.version
@@ -40,14 +40,14 @@
     assert_equal User.find(1), content.author
     assert_equal content.text, content.versions.last.text
   end
-  
+
   def test_create_should_send_email_notification
     Setting.notified_events = ['wiki_content_added']
     ActionMailer::Base.deliveries.clear
-    page = WikiPage.new(:wiki => @wiki, :title => "A new page")  
+    page = WikiPage.new(:wiki => @wiki, :title => "A new page")
     page.content = WikiContent.new(:text => "Content text", :author => User.find(1), :comments => "My comment")
     assert page.save
-    
+
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
 
@@ -60,26 +60,26 @@
     assert_equal version_count+1, content.version
     assert_equal version_count+1, content.versions.length
   end
-  
+
   def test_update_should_send_email_notification
     Setting.notified_events = ['wiki_content_updated']
     ActionMailer::Base.deliveries.clear
     content = @page.content
     content.text = "My new content"
     assert content.save
-    
+
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_fetch_history
     assert !@page.content.versions.empty?
     @page.content.versions.each do |version|
       assert_kind_of String, version.text
     end
   end
-  
+
   def test_large_text_should_not_be_truncated_to_64k
-    page = WikiPage.new(:wiki => @wiki, :title => "Big page")  
+    page = WikiPage.new(:wiki => @wiki, :title => "Big page")
     page.content = WikiContent.new(:text => "a" * 500.kilobyte, :author => User.find(1))
     assert page.save
     page.reload
--- a/test/unit/.svn/text-base/wiki_page_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/wiki_page_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -24,45 +24,45 @@
     @wiki = Wiki.find(1)
     @page = @wiki.pages.first
   end
-  
+
   def test_create
     page = WikiPage.new(:wiki => @wiki)
     assert !page.save
     assert_equal 1, page.errors.count
-  
+
     page.title = "Page"
     assert page.save
     page.reload
     assert !page.protected?
-    
+
     @wiki.reload
     assert @wiki.pages.include?(page)
   end
-  
+
   def test_sidebar_should_be_protected_by_default
     page = @wiki.find_or_new_page('sidebar')
     assert page.new_record?
     assert page.protected?
   end
-  
+
   def test_find_or_new_page
     page = @wiki.find_or_new_page("CookBook documentation")
     assert_kind_of WikiPage, page
     assert !page.new_record?
-    
+
     page = @wiki.find_or_new_page("Non existing page")
     assert_kind_of WikiPage, page
     assert page.new_record?
   end
-  
+
   def test_parent_title
     page = WikiPage.find_by_title('Another_page')
     assert_nil page.parent_title
-    
+
     page = WikiPage.find_by_title('Page_with_an_inline_image')
     assert_equal 'CookBook documentation', page.parent_title
   end
-  
+
   def test_assign_parent
     page = WikiPage.find_by_title('Another_page')
     page.parent_title = 'CookBook documentation'
@@ -70,7 +70,7 @@
     page.reload
     assert_equal WikiPage.find_by_title('CookBook_documentation'), page.parent
   end
-  
+
   def test_unassign_parent
     page = WikiPage.find_by_title('Page_with_an_inline_image')
     page.parent_title = ''
@@ -78,10 +78,10 @@
     page.reload
     assert_nil page.parent
   end
-  
+
   def test_parent_validation
     page = WikiPage.find_by_title('CookBook_documentation')
-    
+
     # A page that doesn't exist
     page.parent_title = 'Unknown title'
     assert !page.save
@@ -98,7 +98,7 @@
     page.parent_title = 'Another_page'
     assert page.save
   end
-  
+
   def test_destroy
     page = WikiPage.find(1)
     page.destroy
@@ -107,18 +107,25 @@
     assert WikiContent.find_all_by_page_id(1).empty?
     assert WikiContent.versioned_class.find_all_by_page_id(1).empty?
   end
-  
+
   def test_destroy_should_not_nullify_children
     page = WikiPage.find(2)
     child_ids = page.child_ids
     assert child_ids.any?
     page.destroy
     assert_nil WikiPage.find_by_id(2)
-    
+
     children = WikiPage.find_all_by_id(child_ids)
     assert_equal child_ids.size, children.size
     children.each do |child|
       assert_nil child.parent_id
     end
   end
+
+  def test_updated_on_eager_load
+    page = WikiPage.with_updated_on.first
+    assert page.is_a?(WikiPage)
+    assert_not_nil page.read_attribute(:updated_on)
+    assert_equal page.content.updated_on, page.updated_on
+  end
 end
--- a/test/unit/.svn/text-base/wiki_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/.svn/text-base/wiki_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,18 +1,18 @@
 # encoding: utf-8
 #
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,13 +20,13 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class WikiTest < ActiveSupport::TestCase
-  fixtures :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions
-  
+  fixtures :projects, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions
+
   def test_create
     wiki = Wiki.new(:project => Project.find(2))
     assert !wiki.save
     assert_equal 1, wiki.errors.count
-  
+
     wiki.start_page = "Start page"
     assert wiki.save
   end
@@ -38,38 +38,64 @@
     @wiki.reload
     assert_equal "Another start page", @wiki.start_page
   end
-  
-  def test_find_page
+
+  def test_find_page_should_not_be_case_sensitive
     wiki = Wiki.find(1)
     page = WikiPage.find(2)
-    
+
     assert_equal page, wiki.find_page('Another_page')
     assert_equal page, wiki.find_page('Another page')
     assert_equal page, wiki.find_page('ANOTHER page')
-    
+  end
+
+  def test_find_page_with_cyrillic_characters
+    wiki = Wiki.find(1)
     page = WikiPage.find(10)
     assert_equal page, wiki.find_page('Этика_менеджмента')
   end
-  
+
+  def test_find_page_with_backslashes
+    wiki = Wiki.find(1)
+    page = WikiPage.generate!(:wiki => wiki, :title => '2009\\02\\09')
+    assert_equal page, wiki.find_page('2009\\02\\09')
+  end
+
+  def test_find_page_without_redirect
+    wiki = Wiki.find(1)
+    page = wiki.find_page('Another_page')
+    assert_not_nil page
+    assert_equal 'Another_page', page.title
+    assert_equal false, wiki.page_found_with_redirect?
+  end
+
+  def test_find_page_with_redirect
+    wiki = Wiki.find(1)
+    WikiRedirect.create!(:wiki => wiki, :title => 'Old_title', :redirects_to => 'Another_page')
+    page = wiki.find_page('Old_title')
+    assert_not_nil page
+    assert_equal 'Another_page', page.title
+    assert_equal true, wiki.page_found_with_redirect?
+  end
+
   def test_titleize
     assert_equal 'Page_title_with_CAPITALES', Wiki.titleize('page title with CAPITALES')
     assert_equal 'テスト', Wiki.titleize('テスト')
   end
-  
+
   context "#sidebar" do
     setup do
       @wiki = Wiki.find(1)
     end
-    
+
     should "return nil if undefined" do
       assert_nil @wiki.sidebar
     end
-    
+
     should "return a WikiPage if defined" do
       page = @wiki.pages.new(:title => 'Sidebar')
       page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar')
       page.save!
-      
+
       assert_kind_of WikiPage, @wiki.sidebar
       assert_equal 'Sidebar', @wiki.sidebar.title
     end
--- a/test/unit/activity_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/activity_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -24,11 +24,11 @@
   def setup
     @project = Project.find(1)
   end
-  
+
   def test_activity_without_subprojects
     events = find_events(User.anonymous, :project => @project)
     assert_not_nil events
-    
+
     assert events.include?(Issue.find(1))
     assert !events.include?(Issue.find(4))
     # subproject issue
@@ -38,54 +38,57 @@
   def test_activity_with_subprojects
     events = find_events(User.anonymous, :project => @project, :with_subprojects => 1)
     assert_not_nil events
-    
+
     assert events.include?(Issue.find(1))
     # subproject issue
     assert events.include?(Issue.find(5))
   end
-  
+
   def test_global_activity_anonymous
     events = find_events(User.anonymous)
     assert_not_nil events
-    
+
     assert events.include?(Issue.find(1))
     assert events.include?(Message.find(5))
     # Issue of a private project
     assert !events.include?(Issue.find(4))
+    # Private issue and comment
+    assert !events.include?(Issue.find(14))
+    assert !events.include?(Journal.find(5))
   end
-  
+
   def test_global_activity_logged_user
     events = find_events(User.find(2)) # manager
     assert_not_nil events
-    
+
     assert events.include?(Issue.find(1))
     # Issue of a private project the user belongs to
     assert events.include?(Issue.find(4))
   end
-  
+
   def test_user_activity
     user = User.find(2)
     events = Redmine::Activity::Fetcher.new(User.anonymous, :author => user).events(nil, nil, :limit => 10)
-    
+
     assert(events.size > 0)
     assert(events.size <= 10)
     assert_nil(events.detect {|e| e.event_author != user})
   end
-  
+
   def test_files_activity
     f = Redmine::Activity::Fetcher.new(User.anonymous, :project => Project.find(1))
     f.scope = ['files']
     events = f.events
-    
+
     assert_kind_of Array, events
     assert events.include?(Attachment.find_by_container_type_and_container_id('Project', 1))
     assert events.include?(Attachment.find_by_container_type_and_container_id('Version', 1))
     assert_equal [Attachment], events.collect(&:class).uniq
     assert_equal %w(Project Version), events.collect(&:container_type).uniq.sort
   end
-  
+
   private
-  
+
   def find_events(user, options={})
     Redmine::Activity::Fetcher.new(user, options).events(Date.today - 30, Date.today + 1)
   end
--- a/test/unit/attachment_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/attachment_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,18 +1,18 @@
 # encoding: utf-8
 #
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,7 +21,7 @@
 
 class AttachmentTest < ActiveSupport::TestCase
   fixtures :issues, :users
-  
+
   def setup
   end
 
@@ -37,7 +37,7 @@
     assert_equal '1478adae0d4eb06d35897518540e25d6', a.digest
     assert File.exist?(a.diskfile)
   end
-  
+
   def test_create_should_auto_assign_content_type
     a = Attachment.new(:container => Issue.find(1),
                        :file => uploaded_test_file("testfile.txt", ""),
@@ -45,7 +45,7 @@
     assert a.save
     assert_equal 'text/plain', a.content_type
   end
-  
+
   def test_identical_attachments_at_the_same_time_should_not_overwrite
     a1 = Attachment.create!(:container => Issue.find(1),
                             :file => uploaded_test_file("testfile.txt", ""),
@@ -55,7 +55,7 @@
                             :author => User.find(1))
     assert a1.disk_filename != a2.disk_filename
   end
-  
+
   def test_diskfilename
     assert Attachment.disk_filename("test_file.txt") =~ /^\d{12}_test_file.txt$/
     assert_equal 'test_file.txt', Attachment.disk_filename("test_file.txt")[13..-1]
--- a/test/unit/calendar_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the 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.
-
-require File.expand_path('../../test_helper', __FILE__)
-
-class CalendarTest < ActiveSupport::TestCase
-  
-  def test_monthly
-    c = Redmine::Helpers::Calendar.new(Date.today, :fr, :month)
-    assert_equal [1, 7], [c.startdt.cwday, c.enddt.cwday]
-    
-    c = Redmine::Helpers::Calendar.new('2007-07-14'.to_date, :fr, :month)
-    assert_equal ['2007-06-25'.to_date, '2007-08-05'.to_date], [c.startdt, c.enddt]   
-     
-    c = Redmine::Helpers::Calendar.new(Date.today, :en, :month)
-    assert_equal [7, 6], [c.startdt.cwday, c.enddt.cwday]
-  end
-
-  def test_weekly
-    c = Redmine::Helpers::Calendar.new(Date.today, :fr, :week)
-    assert_equal [1, 7], [c.startdt.cwday, c.enddt.cwday]
-    
-    c = Redmine::Helpers::Calendar.new('2007-07-14'.to_date, :fr, :week)
-    assert_equal ['2007-07-09'.to_date, '2007-07-15'.to_date], [c.startdt, c.enddt]
-
-    c = Redmine::Helpers::Calendar.new(Date.today, :en, :week)
-    assert_equal [7, 6], [c.startdt.cwday, c.enddt.cwday]
-  end
-end
--- a/test/unit/changeset_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/changeset_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -20,54 +20,61 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class ChangesetTest < ActiveSupport::TestCase
-  fixtures :projects, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :users, :members, :member_roles, :trackers
+  fixtures :projects, :repositories,
+           :issues, :issue_statuses, :issue_categories,
+           :changesets, :changes, 
+           :enumerations,
+           :custom_fields, :custom_values,
+           :users, :members, :member_roles, :trackers,
+           :enabled_modules, :roles
 
   def setup
   end
-  
+
   def test_ref_keywords_any
     ActionMailer::Base.deliveries.clear
-    Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
+    Setting.commit_fix_status_id = IssueStatus.find(
+                                   :first, :conditions => ["is_closed = ?", true]).id
     Setting.commit_fix_done_ratio = '90'
     Setting.commit_ref_keywords = '*'
     Setting.commit_fix_keywords = 'fixes , closes'
-    
-    c = Changeset.new(:repository => Project.find(1).repository,
+
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => 'New commit (#2). Fixes #1')
+                      :comments     => 'New commit (#2). Fixes #1')
     c.scan_comment_for_issue_ids
-    
+
     assert_equal [1, 2], c.issue_ids.sort
     fixed = Issue.find(1)
     assert fixed.closed?
     assert_equal 90, fixed.done_ratio
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_ref_keywords
     Setting.commit_ref_keywords = 'refs'
     Setting.commit_fix_keywords = ''
-    
-    c = Changeset.new(:repository => Project.find(1).repository,
+
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => 'Ignores #2. Refs #1')
+                      :comments     => 'Ignores #2. Refs #1')
     c.scan_comment_for_issue_ids
     
     assert_equal [1], c.issue_ids.sort
   end
-  
+
   def test_ref_keywords_any_only
     Setting.commit_ref_keywords = '*'
     Setting.commit_fix_keywords = ''
     
-    c = Changeset.new(:repository => Project.find(1).repository,
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => 'Ignores #2. Refs #1')
+                      :comments     => 'Ignores #2. Refs #1')
     c.scan_comment_for_issue_ids
-    
+
     assert_equal [1, 2], c.issue_ids.sort
   end
-  
+
   def test_ref_keywords_any_with_timelog
     Setting.commit_ref_keywords = '*'
     Setting.commit_logtime_enabled = '1'
@@ -87,41 +94,44 @@
       '3,25' => 3.25,
       '3,25h' => 3.25,
     }.each do |syntax, expected_hours|
-      c = Changeset.new(:repository => Project.find(1).repository,
+      c = Changeset.new(:repository   => Project.find(1).repository,
                         :committed_on => 24.hours.ago,
-                        :comments => "Worked on this issue #1 @#{syntax}",
-                        :revision => '520',
-                        :user => User.find(2))
+                        :comments     => "Worked on this issue #1 @#{syntax}",
+                        :revision     => '520',
+                        :user         => User.find(2))
       assert_difference 'TimeEntry.count' do
         c.scan_comment_for_issue_ids
       end
       assert_equal [1], c.issue_ids.sort
-      
+
       time = TimeEntry.first(:order => 'id desc')
       assert_equal 1, time.issue_id
       assert_equal 1, time.project_id
       assert_equal 2, time.user_id
-      assert_equal expected_hours, time.hours, "@#{syntax} should be logged as #{expected_hours} hours but was #{time.hours}"
+      assert_equal expected_hours, time.hours,
+          "@#{syntax} should be logged as #{expected_hours} hours but was #{time.hours}"
       assert_equal Date.yesterday, time.spent_on
       assert time.activity.is_default?
-      assert time.comments.include?('r520'), "r520 was expected in time_entry comments: #{time.comments}"
+      assert time.comments.include?('r520'),
+            "r520 was expected in time_entry comments: #{time.comments}"
     end
   end
-  
+
   def test_ref_keywords_closing_with_timelog
-    Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
+    Setting.commit_fix_status_id = IssueStatus.find(
+                                    :first, :conditions => ["is_closed = ?", true]).id
     Setting.commit_ref_keywords = '*'
     Setting.commit_fix_keywords = 'fixes , closes'
     Setting.commit_logtime_enabled = '1'
     
-    c = Changeset.new(:repository => Project.find(1).repository,
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => 'This is a comment. Fixes #1 @4.5, #2 @1',
-                      :user => User.find(2))
+                      :comments     => 'This is a comment. Fixes #1 @4.5, #2 @1',
+                      :user         => User.find(2))
     assert_difference 'TimeEntry.count', 2 do
       c.scan_comment_for_issue_ids
     end
-    
+
     assert_equal [1, 2], c.issue_ids.sort
     assert Issue.find(1).closed?
     assert Issue.find(2).closed?
@@ -129,13 +139,13 @@
     times = TimeEntry.all(:order => 'id desc', :limit => 2)
     assert_equal [1, 2], times.collect(&:issue_id).sort
   end
-  
+
   def test_ref_keywords_any_line_start
     Setting.commit_ref_keywords = '*'
 
-    c = Changeset.new(:repository => Project.find(1).repository,
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => '#1 is the reason of this commit')
+                      :comments     => '#1 is the reason of this commit')
     c.scan_comment_for_issue_ids
 
     assert_equal [1], c.issue_ids.sort
@@ -144,9 +154,9 @@
   def test_ref_keywords_allow_brackets_around_a_issue_number
     Setting.commit_ref_keywords = '*'
 
-    c = Changeset.new(:repository => Project.find(1).repository,
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => '[#1] Worked on this issue')
+                      :comments     => '[#1] Worked on this issue')
     c.scan_comment_for_issue_ids
 
     assert_equal [1], c.issue_ids.sort
@@ -155,33 +165,35 @@
   def test_ref_keywords_allow_brackets_around_multiple_issue_numbers
     Setting.commit_ref_keywords = '*'
 
-    c = Changeset.new(:repository => Project.find(1).repository,
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => '[#1 #2, #3] Worked on these')
+                      :comments     => '[#1 #2, #3] Worked on these')
     c.scan_comment_for_issue_ids
 
     assert_equal [1,2,3], c.issue_ids.sort
   end
-  
+
   def test_commit_referencing_a_subproject_issue
-    c = Changeset.new(:repository => Project.find(1).repository,
+    c = Changeset.new(:repository   => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => 'refs #5, a subproject issue')
+                      :comments     => 'refs #5, a subproject issue')
     c.scan_comment_for_issue_ids
-    
+
     assert_equal [5], c.issue_ids.sort
     assert c.issues.first.project != c.project
   end
 
   def test_commit_referencing_a_parent_project_issue
     # repository of child project
-    r = Repository::Subversion.create!(:project => Project.find(3), :url => 'svn://localhost/test')
-      
-    c = Changeset.new(:repository => r,
+    r = Repository::Subversion.create!(
+          :project => Project.find(3),
+          :url     => 'svn://localhost/test')
+
+    c = Changeset.new(:repository   => r,
                       :committed_on => Time.now,
-                      :comments => 'refs #2, an issue of a parent project')
+                      :comments     => 'refs #2, an issue of a parent project')
     c.scan_comment_for_issue_ids
-    
+
     assert_equal [2], c.issue_ids.sort
     assert c.issues.first.project != c.project
   end
@@ -192,7 +204,9 @@
   end
 
   def test_text_tag_hash
-    c = Changeset.new(:scmid => '7234cb2750b63f47bff735edc50a1c0a433c2518', :revision => '7234cb2750b63f47bff735edc50a1c0a433c2518')
+    c = Changeset.new(
+          :scmid    => '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          :revision => '7234cb2750b63f47bff735edc50a1c0a433c2518')
     assert_equal 'commit:7234cb2750b63f47bff735edc50a1c0a433c2518', c.text_tag
   end
 
@@ -222,65 +236,166 @@
   end
 
   def test_comments_should_be_converted_to_utf8
-      proj = Project.find(3)
-      str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
-      r = Repository::Bazaar.create!(
-            :project => proj, :url => '/tmp/test/bazaar',
+    proj = Project.find(3)
+    # str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
+    str = "Texte encod\xe9 en ISO-8859-1."
+    str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding)
+    r = Repository::Bazaar.create!(
+            :project      => proj,
+            :url          => '/tmp/test/bazaar',
             :log_encoding => 'ISO-8859-1' )
-      assert r
-      c = Changeset.new(:repository => r,
-                        :committed_on => Time.now,
-                        :revision => '123',
-                        :scmid => '12345',
-                        :comments => str)
-      assert( c.save )
-      assert_equal "Texte encodé en ISO-8859-1.", c.comments
+    assert r
+    c = Changeset.new(:repository   => r,
+                      :committed_on => Time.now,
+                      :revision     => '123',
+                      :scmid        => '12345',
+                      :comments     => str)
+    assert( c.save )
+    str_utf8 = "Texte encod\xc3\xa9 en ISO-8859-1."
+    str_utf8.force_encoding("UTF-8") if str_utf8.respond_to?(:force_encoding)
+    assert_equal str_utf8, c.comments
   end
 
-  def test_invalid_utf8_sequences_in_comments_should_be_stripped
-      proj = Project.find(3)
-      str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
-      r = Repository::Bazaar.create!(
-            :project => proj, :url => '/tmp/test/bazaar',
+  def test_invalid_utf8_sequences_in_comments_should_be_replaced_latin1
+    proj = Project.find(3)
+    # str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
+    str1 = "Texte encod\xe9 en ISO-8859-1."
+    str2 = "\xe9a\xe9b\xe9c\xe9d\xe9e test"
+    str1.force_encoding("UTF-8") if str1.respond_to?(:force_encoding)
+    str2.force_encoding("ASCII-8BIT") if str2.respond_to?(:force_encoding)
+    r = Repository::Bazaar.create!(
+            :project      => proj,
+            :url          => '/tmp/test/bazaar',
             :log_encoding => 'UTF-8' )
-      assert r
-      c = Changeset.new(:repository => r,
-                        :committed_on => Time.now,
-                        :revision => '123',
-                        :scmid => '12345',
-                        :comments => str)
-      assert( c.save )
-      if str.respond_to?(:force_encoding)
-        assert_equal "Texte encod? en ISO-8859-1.", c.comments
-      else
-        assert_equal "Texte encod en ISO-8859-1.", c.comments
-      end
+    assert r
+    c = Changeset.new(:repository   => r,
+                      :committed_on => Time.now,
+                      :revision     => '123',
+                      :scmid        => '12345',
+                      :comments     => str1,
+                      :committer    => str2)
+    assert( c.save )
+    assert_equal "Texte encod? en ISO-8859-1.", c.comments
+    assert_equal "?a?b?c?d?e test", c.committer
+  end
+
+  def test_invalid_utf8_sequences_in_comments_should_be_replaced_ja_jis
+    proj = Project.find(3)
+    str = "test\xb5\xfetest\xb5\xfe"
+    if str.respond_to?(:force_encoding)
+      str.force_encoding('ASCII-8BIT')
+    end
+    r = Repository::Bazaar.create!(
+            :project      => proj,
+            :url          => '/tmp/test/bazaar',
+            :log_encoding => 'ISO-2022-JP' )
+    assert r
+    c = Changeset.new(:repository   => r,
+                      :committed_on => Time.now,
+                      :revision     => '123',
+                      :scmid        => '12345',
+                      :comments     => str)
+    assert( c.save )
+    assert_equal "test??test??", c.comments
   end
 
   def test_comments_should_be_converted_all_latin1_to_utf8
-      s1 = "\xC2\x80"
-      s2 = "\xc3\x82\xc2\x80"
-      if s1.respond_to?(:force_encoding)
-        s3 = s1
-        s4 = s2
-        s1.force_encoding('ASCII-8BIT')
-        s2.force_encoding('ASCII-8BIT')
-        s3.force_encoding('ISO-8859-1')
-        s4.force_encoding('UTF-8')
-        assert_equal s3.encode('UTF-8'), s4
-      end
-      proj = Project.find(3)
-      r = Repository::Bazaar.create!(
-            :project => proj, :url => '/tmp/test/bazaar',
+    s1 = "\xC2\x80"
+    s2 = "\xc3\x82\xc2\x80"
+    s4 = s2.dup
+    if s1.respond_to?(:force_encoding)
+      s3 = s1.dup
+      s1.force_encoding('ASCII-8BIT')
+      s2.force_encoding('ASCII-8BIT')
+      s3.force_encoding('ISO-8859-1')
+      s4.force_encoding('UTF-8')
+      assert_equal s3.encode('UTF-8'), s4
+    end
+    proj = Project.find(3)
+    r = Repository::Bazaar.create!(
+            :project      => proj,
+            :url          => '/tmp/test/bazaar',
             :log_encoding => 'ISO-8859-1' )
-      assert r
-      c = Changeset.new(:repository => r,
-                        :committed_on => Time.now,
-                        :revision => '123',
-                        :scmid => '12345',
-                        :comments => s1)
-      assert( c.save )
-      assert_equal s2, c.comments
+    assert r
+    c = Changeset.new(:repository   => r,
+                      :committed_on => Time.now,
+                      :revision     => '123',
+                      :scmid        => '12345',
+                      :comments     => s1)
+    assert( c.save )
+    assert_equal s4, c.comments
+  end
+
+  def test_invalid_utf8_sequences_in_paths_should_be_replaced
+    proj = Project.find(3)
+    str1 = "Texte encod\xe9 en ISO-8859-1"
+    str2 = "\xe9a\xe9b\xe9c\xe9d\xe9e test"
+    str1.force_encoding("UTF-8")      if str1.respond_to?(:force_encoding)
+    str2.force_encoding("ASCII-8BIT") if str2.respond_to?(:force_encoding)
+    r = Repository::Bazaar.create!(
+            :project => proj,
+            :url => '/tmp/test/bazaar',
+            :log_encoding => 'UTF-8' )
+    assert r
+    cs = Changeset.new(
+               :repository   => r,
+               :committed_on => Time.now,
+               :revision     => '123',
+               :scmid        => '12345',
+               :comments     => "test")
+    assert(cs.save)
+    ch = Change.new(
+                  :changeset     => cs,
+                  :action        => "A",
+                  :path          => str1,
+                  :from_path     => str2,
+                  :from_revision => "345")
+    assert(ch.save)
+    assert_equal "Texte encod? en ISO-8859-1", ch.path
+    assert_equal "?a?b?c?d?e test", ch.from_path
+  end
+
+  def test_comments_nil
+    proj = Project.find(3)
+    r = Repository::Bazaar.create!(
+            :project      => proj,
+            :url          => '/tmp/test/bazaar',
+            :log_encoding => 'ISO-8859-1' )
+    assert r
+    c = Changeset.new(:repository   => r,
+                      :committed_on => Time.now,
+                      :revision     => '123',
+                      :scmid        => '12345',
+                      :comments     => nil,
+                      :committer    => nil)
+    assert( c.save )
+    assert_equal "", c.comments
+    assert_equal nil, c.committer
+    if c.comments.respond_to?(:force_encoding)
+      assert_equal "UTF-8", c.comments.encoding.to_s
+    end
+  end
+
+  def test_comments_empty
+    proj = Project.find(3)
+    r = Repository::Bazaar.create!(
+            :project      => proj,
+            :url          => '/tmp/test/bazaar',
+            :log_encoding => 'ISO-8859-1' )
+    assert r
+    c = Changeset.new(:repository   => r,
+                      :committed_on => Time.now,
+                      :revision     => '123',
+                      :scmid        => '12345',
+                      :comments     => "",
+                      :committer    => "")
+    assert( c.save )
+    assert_equal "", c.comments
+    assert_equal "", c.committer
+    if c.comments.respond_to?(:force_encoding)
+      assert_equal "UTF-8", c.comments.encoding.to_s
+      assert_equal "UTF-8", c.committer.encoding.to_s
+    end
   end
 
   def test_identifier
--- a/test/unit/comment_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/comment_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -31,6 +31,15 @@
     @news.reload
     assert_equal 2, @news.comments_count
   end
+  
+  def test_create_should_send_notification
+    Setting.notified_events << 'news_comment_added'
+    Watcher.create!(:watchable => @news, :user => @jsmith)
+    
+    assert_difference 'ActionMailer::Base.deliveries.size' do
+      Comment.create!(:commented => @news, :author => @jsmith, :comments => "my comment")
+    end
+  end
 
   def test_validate
     comment = Comment.new(:commented => @news)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/custom_field_user_format_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,77 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
+require File.expand_path('../../test_helper', __FILE__)
+
+class CustomFieldUserFormatTest < ActiveSupport::TestCase
+  fixtures :custom_fields, :projects, :members, :users, :member_roles, :trackers, :issues
+  
+  def setup
+    @field = IssueCustomField.create!(:name => 'Tester', :field_format => 'user')
+  end
+  
+  def test_possible_values_with_no_arguments
+    assert_equal [], @field.possible_values
+    assert_equal [], @field.possible_values(nil)
+  end
+  
+  def test_possible_values_with_project_resource
+    project = Project.find(1)
+    possible_values = @field.possible_values(project.issues.first)
+    assert possible_values.any?
+    assert_equal project.users.sort.collect(&:id).map(&:to_s), possible_values
+  end
+  
+  def test_possible_values_with_nil_project_resource
+    project = Project.find(1)
+    assert_equal [], @field.possible_values(Issue.new)
+  end
+  
+  def test_possible_values_options_with_no_arguments
+    assert_equal [], @field.possible_values_options
+    assert_equal [], @field.possible_values_options(nil)
+  end
+  
+  def test_possible_values_options_with_project_resource
+    project = Project.find(1)
+    possible_values_options = @field.possible_values_options(project.issues.first)
+    assert possible_values_options.any?
+    assert_equal project.users.sort.map {|u| [u.name, u.id.to_s]}, possible_values_options
+  end
+  
+  def test_possible_values_options_with_array
+    projects = Project.find([1, 2])
+    possible_values_options = @field.possible_values_options(projects)
+    assert possible_values_options.any?
+    assert_equal (projects.first.users & projects.last.users).sort.map {|u| [u.name, u.id.to_s]}, possible_values_options
+  end
+  
+  def test_cast_blank_value
+    assert_equal nil, @field.cast_value(nil)
+    assert_equal nil, @field.cast_value("")
+  end
+  
+  def test_cast_valid_value
+    user = @field.cast_value("2")
+    assert_kind_of User, user
+    assert_equal User.find(2), user
+  end
+  
+  def test_cast_invalid_value
+    assert_equal nil, @field.cast_value("187")
+  end
+end
--- a/test/unit/default_data_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/default_data_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,7 +20,7 @@
 class DefaultDataTest < ActiveSupport::TestCase
   include Redmine::I18n
   fixtures :roles
-  
+
   def test_no_data
     assert !Redmine::DefaultData::Loader::no_data?
     Role.delete_all("builtin = 0")
@@ -29,7 +29,7 @@
     Enumeration.delete_all
     assert Redmine::DefaultData::Loader::no_data?
   end
-  
+
   def test_load
     valid_languages.each do |lang|
       begin
--- a/test/unit/document_category_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/document_category_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -23,7 +23,7 @@
   def test_should_be_an_enumeration
     assert DocumentCategory.ancestors.include?(Enumeration)
   end
-  
+
   def test_objects_count
     assert_equal 2, DocumentCategory.find_by_name("Uncategorized").objects_count
     assert_equal 0, DocumentCategory.find_by_name("User documentation").objects_count
@@ -33,4 +33,3 @@
     assert_equal :enumeration_doc_categories, DocumentCategory.new.option_name
   end
 end
-
--- a/test/unit/document_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/document_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -24,7 +24,7 @@
     doc = Document.new(:project => Project.find(1), :title => 'New document', :category => Enumeration.find_by_name('User documentation'))
     assert doc.save
   end
-  
+
   def test_create_should_send_email_notification
     ActionMailer::Base.deliveries.clear
     Setting.notified_events << 'document_added'
@@ -38,18 +38,18 @@
     # Sets a default category
     e = Enumeration.find_by_name('Technical documentation')
     e.update_attributes(:is_default => true)
-    
+
     doc = Document.new(:project => Project.find(1), :title => 'New document')
     assert_equal e, doc.category
     assert doc.save
   end
-  
+
   def test_updated_on_with_attachments
     d = Document.find(1)
     assert d.attachments.any?
     assert_equal d.attachments.map(&:created_on).max, d.updated_on
   end
-  
+
   def test_updated_on_without_attachments
     d = Document.find(2)
     assert d.attachments.empty?
--- a/test/unit/enabled_module_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/enabled_module_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,7 +19,7 @@
 
 class EnabledModuleTest < ActiveSupport::TestCase
   fixtures :projects, :wikis
-  
+
   def test_enabling_wiki_should_create_a_wiki
     CustomField.delete_all
     project = Project.create!(:name => 'Project with wiki', :identifier => 'wikiproject')
@@ -29,7 +29,7 @@
     assert_not_nil project.wiki
     assert_equal 'Wiki', project.wiki.start_page
   end
-  
+
   def test_reenabling_wiki_should_not_create_another_wiki
     project = Project.find(1)
     assert_not_nil project.wiki
--- a/test/unit/helpers/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/helpers/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,59 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 42
-/svn/!svn/ver/4982/trunk/test/unit/helpers
+V 56
+/svn/!svn/ver/5878/branches/1.2-stable/test/unit/helpers
 END
-repository_helper_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4932/trunk/test/unit/helpers/repository_helper_test.rb
-END
-custom_fields_helper_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/4509/trunk/test/unit/helpers/custom_fields_helper_test.rb
-END
-timelog_helper_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4509/trunk/test/unit/helpers/timelog_helper_test.rb
-END
-issue_moves_helper_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/3936/trunk/test/unit/helpers/issue_moves_helper_test.rb
-END
-application_helper_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/4982/trunk/test/unit/helpers/application_helper_test.rb
-END
-search_helper_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4509/trunk/test/unit/helpers/search_helper_test.rb
-END
-sort_helper_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4509/trunk/test/unit/helpers/sort_helper_test.rb
-END
-projects_helper_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/4509/trunk/test/unit/helpers/projects_helper_test.rb
-END
-issues_helper_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4509/trunk/test/unit/helpers/issues_helper_test.rb
-END
--- a/test/unit/helpers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/helpers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/unit/helpers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/unit/helpers
 http://redmine.rubyforge.org/svn
 
 
 
-2011-03-01T10:27:30.170724Z
-4982
+2011-05-18T02:46:50.087237Z
+5833
 tmaruyama
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-657e0f9ae00af3978571139525631dcc
-2011-02-23T07:04:52.071012Z
-4932
+2011-06-06T13:17:45.000000Z
+de5d924549645540d359a120c9236ea3
+2011-04-12T05:04:45.936482Z
+5428
 tmaruyama
 
 
@@ -58,7 +58,7 @@
 
 
 
-2288
+3834
 
 custom_fields_helper_test.rb
 file
@@ -66,11 +66,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-0091346b4a944910faf5733e2ed88a76
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:17:45.000000Z
+d9a56bd73de482d38a0ed098b11f0f49
+2011-03-24T18:24:30.045951Z
+5214
+jplang
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-1123
+1828
 
 timelog_helper_test.rb
 file
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 ac087c4ae8e6354c77ef7189351ce220
 2010-12-12T23:24:34.194336Z
 4509
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 2c72db60f744a7dec4600df692c40766
 2010-08-11T14:42:10.119704Z
 3936
@@ -168,10 +168,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-1f311492ce81d8708bef3193e684f98d
-2011-03-01T10:27:30.170724Z
-4982
+2011-06-06T13:17:45.000000Z
+3833a7b3d44df2dea7f55a5c4f3a13d9
+2011-05-18T02:46:50.087237Z
+5833
 tmaruyama
 has-props
 
@@ -194,7 +194,7 @@
 
 
 
-35024
+32490
 
 search_helper_test.rb
 file
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 9eb29557d249537fed237c15e1b1b65b
 2010-12-12T23:24:34.194336Z
 4509
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 fd65c7c018eb59b2d8697ebeb6b7ba71
 2010-12-12T23:24:34.194336Z
 4509
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 93f6f6ca679f5c32988254776b6d09ae
 2010-12-12T23:24:34.194336Z
 4509
@@ -304,11 +304,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-b26d2e82551d9f01c0394400ffd85136
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:17:45.000000Z
+d4c94f0c0516cba361aaaee5bacba498
+2011-05-16T22:56:46.854254Z
+5804
+tmaruyama
 
 
 
@@ -330,5 +330,5 @@
 
 
 
-5782
+6813
 
--- a/test/unit/helpers/.svn/text-base/application_helper_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/helpers/.svn/text-base/application_helper_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -18,9 +18,9 @@
 require File.expand_path('../../../test_helper', __FILE__)
 
 class ApplicationHelperTest < ActionView::TestCase
-  
+
   fixtures :projects, :roles, :enabled_modules, :users,
-                      :repositories, :changesets, 
+                      :repositories, :changesets,
                       :trackers, :issue_statuses, :issues, :versions, :documents,
                       :wikis, :wiki_pages, :wiki_contents,
                       :boards, :messages,
@@ -35,11 +35,11 @@
     context "authorized user" do
       should "be tested"
     end
-    
+
     context "unauthorized user" do
       should "be tested"
     end
-    
+
     should "allow using the :controller and :action for the target link" do
       User.current = User.find_by_login('admin')
 
@@ -48,9 +48,9 @@
                                        {:controller => 'issues', :action => 'edit', :id => Issue.first.id})
       assert_match /href/, response
     end
-    
+
   end
-  
+
   def test_auto_links
     to_test = {
       'http://foo.bar' => '<a class="external" href="http://foo.bar">http://foo.bar</a>',
@@ -84,12 +84,12 @@
     }
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
   end
-  
+
   def test_auto_mailto
-    assert_equal '<p><a class="email" href="mailto:test@foo.bar">test@foo.bar</a></p>', 
+    assert_equal '<p><a class="email" href="mailto:test@foo.bar">test@foo.bar</a></p>',
       textilizable('test@foo.bar')
   end
-  
+
   def test_inline_images
     to_test = {
       '!http://foo.bar/image.jpg!' => '<img src="http://foo.bar/image.jpg" alt="" />',
@@ -102,7 +102,7 @@
     }
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
   end
-  
+
   def test_inline_images_inside_tags
     raw = <<-RAW
 h1. !foo.png! Heading
@@ -115,7 +115,7 @@
     assert textilizable(raw).include?('<img src="foo.png" alt="" />')
     assert textilizable(raw).include?('<img src="bar.gif" alt="" />')
   end
-  
+
   def test_attached_images
     to_test = {
       'Inline image: !logo.gif!' => 'Inline image: <img src="/attachments/download/3" title="This is a logo" alt="This is a logo" />',
@@ -128,7 +128,7 @@
     attachments = Attachment.find(:all)
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text, :attachments => attachments) }
   end
-  
+
   def test_textile_external_links
     to_test = {
       'This is a "link":http://foo.bar' => 'This is a <a href="http://foo.bar" class="external">link</a>',
@@ -149,27 +149,27 @@
   end
 
   def test_redmine_links
-    issue_link = link_to('#3', {:controller => 'issues', :action => 'show', :id => 3}, 
+    issue_link = link_to('#3', {:controller => 'issues', :action => 'show', :id => 3},
                                :class => 'issue status-1 priority-1 overdue', :title => 'Error 281 when updating a recipe (New)')
-    
+
     changeset_link = link_to('r1', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 1},
                                    :class => 'changeset', :title => 'My very first commit')
     changeset_link2 = link_to('r2', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 2},
                                     :class => 'changeset', :title => 'This commit fixes #1, #2 and references #1 & #3')
-    
+
     document_link = link_to('Test document', {:controller => 'documents', :action => 'show', :id => 1},
                                              :class => 'document')
-    
+
     version_link = link_to('1.0', {:controller => 'versions', :action => 'show', :id => 2},
                                   :class => 'version')
 
     message_url = {:controller => 'messages', :action => 'show', :board_id => 1, :id => 4}
-    
+
     project_url = {:controller => 'projects', :action => 'show', :id => 'subproject1'}
-    
+
     source_url = {:controller => 'repositories', :action => 'entry', :id => 'ecookbook', :path => ['some', 'file']}
     source_url_with_ext = {:controller => 'repositories', :action => 'entry', :id => 'ecookbook', :path => ['some', 'file.ext']}
-    
+
     to_test = {
       # tickets
       '#3, [#3], (#3) and #3.'      => "#{issue_link}, [#{issue_link}], (#{issue_link}) and #{issue_link}.",
@@ -224,14 +224,14 @@
     @project = Project.find(1)
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text), "#{text} failed" }
   end
-  
+
   def test_cross_project_redmine_links
     source_link = link_to('ecookbook:source:/some/file', {:controller => 'repositories', :action => 'entry', :id => 'ecookbook', :path => ['some', 'file']},
       :class => 'source')
-    
+
     changeset_link = link_to('ecookbook:r2', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 2},
       :class => 'changeset', :title => 'This commit fixes #1, #2 and references #1 & #3')
-                                   
+
     to_test = {
       # documents
       'document:"Test document"'              => 'document:"Test document"',
@@ -345,7 +345,7 @@
     }
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text, :attachments => Issue.find(3).attachments), "#{text} failed" }
   end
-  
+
   def test_wiki_links
     to_test = {
       '[[CookBook documentation]]' => '<a href="/projects/ecookbook/wiki/CookBook_documentation" class="wiki-page">CookBook documentation</a>',
@@ -374,7 +374,7 @@
     @project = Project.find(1)
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
   end
-  
+
   def test_html_tags
     to_test = {
       "<div>content</div>" => "<p>&lt;div&gt;content&lt;/div&gt;</p>",
@@ -398,7 +398,7 @@
     }
     to_test.each { |text, result| assert_equal result, textilizable(text) }
   end
-  
+
   def test_allowed_html_tags
     to_test = {
       "<pre>preformatted text</pre>" => "<pre>preformatted text</pre>",
@@ -407,7 +407,7 @@
     }
     to_test.each { |text, result| assert_equal result, textilizable(text) }
   end
-  
+
   def test_pre_tags
     raw = <<-RAW
 Before
@@ -426,10 +426,10 @@
 </pre>
 <p>After</p>
 EXPECTED
-    
+
     assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
   end
-  
+
   def test_pre_content_should_not_parse_wiki_and_redmine_links
     raw = <<-RAW
 [[CookBook documentation]]
@@ -452,11 +452,11 @@
 #1
 </pre>
 EXPECTED
-                                 
+
     @project = Project.find(1)
     assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
   end
-  
+
   def test_non_closing_pre_blocks_should_be_closed
     raw = <<-RAW
 <pre><code>
@@ -466,11 +466,11 @@
 <pre><code>
 </code></pre>
 EXPECTED
-                                 
+
     @project = Project.find(1)
     assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
   end
-  
+
   def test_syntax_highlight
     raw = <<-RAW
 <pre><code class="ruby">
@@ -485,7 +485,7 @@
 
     assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
   end
-  
+
   def test_wiki_links_in_tables
     to_test = {"|[[Page|Link title]]|[[Other Page|Other title]]|\n|Cell 21|[[Last page]]|" =>
                  '<tr><td><a href="/projects/ecookbook/wiki/Page" class="wiki-page new">Link title</a></td>' +
@@ -495,7 +495,7 @@
     @project = Project.find(1)
     to_test.each { |text, result| assert_equal "<table>#{result}</table>", textilizable(text).gsub(/[\t\n]/, '') }
   end
-  
+
   def test_text_formatting
     to_test = {'*_+bold, italic and underline+_*' => '<strong><em><ins>bold, italic and underline</ins></em></strong>',
                '(_text within parentheses_)' => '(<em>text within parentheses</em>)',
@@ -505,12 +505,12 @@
               }
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
   end
-  
+
   def test_wiki_horizontal_rule
     assert_equal '<hr />', textilizable('---')
     assert_equal '<p>Dashes: ---</p>', textilizable('Dashes: ---')
   end
-  
+
   def test_footnotes
     raw = <<-RAW
 This is some text[1].
@@ -525,7 +525,14 @@
 
     assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
   end
-  
+
+  def test_headings
+    raw = 'h1. Some heading'
+    expected = %|<a name="Some-heading"></a>\n<h1 >Some heading<a href="#Some-heading" class="wiki-anchor">&para;</a></h1>|
+
+    assert_equal expected, textilizable(raw)
+  end
+
   def test_table_of_content
     raw = <<-RAW
 {{toc}}
@@ -559,8 +566,8 @@
     expected =  '<ul class="toc">' +
                   '<li><a href="#Title">Title</a>' +
                     '<ul>' +
-                      '<li><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' + 
-                      '<li><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' + 
+                      '<li><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' +
+                      '<li><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' +
                       '<li><a href="#Subtitle-with-red-text">Subtitle with red text</a>' +
                         '<ul>' +
                           '<li><a href="#Subtitle-with-some-modifiers">Subtitle with some modifiers</a></li>' +
@@ -583,7 +590,7 @@
     @project = Project.find(1)
     assert textilizable(raw).gsub("\n", "").include?(expected), textilizable(raw)
   end
-  
+
   def test_table_of_content_should_contain_included_page_headings
     raw = <<-RAW
 {{toc}}
@@ -595,125 +602,20 @@
 
     expected = '<ul class="toc">' +
                '<li><a href="#Included">Included</a></li>' +
-               '<li><a href="#Child-page-1">Child page 1</a></li>' + 
+               '<li><a href="#Child-page-1">Child page 1</a></li>' +
                '</ul>'
 
     @project = Project.find(1)
     assert textilizable(raw).gsub("\n", "").include?(expected)
   end
-  
-  def test_blockquote
-    # orig raw text
-    raw = <<-RAW
-John said:
-> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.
-> Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
-> * Donec odio lorem,
-> * sagittis ac,
-> * malesuada in,
-> * adipiscing eu, dolor.
->
-> >Nulla varius pulvinar diam. Proin id arcu id lorem scelerisque condimentum. Proin vehicula turpis vitae lacus.
-> Proin a tellus. Nam vel neque.
 
-He's right.
-RAW
-    
-    # expected html
-    expected = <<-EXPECTED
-<p>John said:</p>
-<blockquote>
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.
-Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
-<ul>
-  <li>Donec odio lorem,</li>
-  <li>sagittis ac,</li>
-  <li>malesuada in,</li>
-  <li>adipiscing eu, dolor.</li>
-</ul>
-<blockquote>
-<p>Nulla varius pulvinar diam. Proin id arcu id lorem scelerisque condimentum. Proin vehicula turpis vitae lacus.</p>
-</blockquote>
-<p>Proin a tellus. Nam vel neque.</p>
-</blockquote>
-<p>He's right.</p>
-EXPECTED
-    
-    assert_equal expected.gsub(%r{\s+}, ''), textilizable(raw).gsub(%r{\s+}, '')
-  end
-  
-  def test_table
-    raw = <<-RAW
-This is a table with empty cells:
-
-|cell11|cell12||
-|cell21||cell23|
-|cell31|cell32|cell33|
-RAW
-
-    expected = <<-EXPECTED
-<p>This is a table with empty cells:</p>
-
-<table>
-  <tr><td>cell11</td><td>cell12</td><td></td></tr>
-  <tr><td>cell21</td><td></td><td>cell23</td></tr>
-  <tr><td>cell31</td><td>cell32</td><td>cell33</td></tr>
-</table>
-EXPECTED
-
-    assert_equal expected.gsub(%r{\s+}, ''), textilizable(raw).gsub(%r{\s+}, '')
-  end
-  
-  def test_table_with_line_breaks
-    raw = <<-RAW
-This is a table with line breaks:
-
-|cell11
-continued|cell12||
-|-cell21-||cell23
-cell23 line2
-cell23 *line3*|
-|cell31|cell32
-cell32 line2|cell33|
-
-RAW
-
-    expected = <<-EXPECTED
-<p>This is a table with line breaks:</p>
-
-<table>
-  <tr>
-    <td>cell11<br />continued</td>
-    <td>cell12</td>
-    <td></td>
-  </tr>
-  <tr>
-    <td><del>cell21</del></td>
-    <td></td>
-    <td>cell23<br/>cell23 line2<br/>cell23 <strong>line3</strong></td>
-  </tr>
-  <tr>
-    <td>cell31</td>
-    <td>cell32<br/>cell32 line2</td>
-    <td>cell33</td>
-  </tr>
-</table>
-EXPECTED
-
-    assert_equal expected.gsub(%r{\s+}, ''), textilizable(raw).gsub(%r{\s+}, '')
-  end
-  
-  def test_textile_should_not_mangle_brackets
-    assert_equal '<p>[msg1][msg2]</p>', textilizable('[msg1][msg2]')
-  end
-  
   def test_default_formatter
     Setting.text_formatting = 'unknown'
     text = 'a *link*: http://www.example.net/'
     assert_equal '<p>a *link*: <a href="http://www.example.net/">http://www.example.net/</a></p>', textilizable(text)
     Setting.text_formatting = 'textile'
   end
-  
+
   def test_due_date_distance_in_words
     to_test = { Date.today => 'Due in 0 days',
                 Date.today + 1 => 'Due in 1 day',
@@ -728,7 +630,7 @@
       assert_equal expected, due_date_distance_in_words(date)
     end
   end
-  
+
   def test_avatar
     # turn on avatars
     Setting.gravatar_enabled = '1'
@@ -736,25 +638,25 @@
     assert avatar('jsmith <jsmith@somenet.foo>').include?(Digest::MD5.hexdigest('jsmith@somenet.foo'))
     assert_nil avatar('jsmith')
     assert_nil avatar(nil)
-    
+
     # turn off avatars
     Setting.gravatar_enabled = '0'
     assert_equal '', avatar(User.find_by_mail('jsmith@somenet.foo'))
   end
-  
+
   def test_link_to_user
     user = User.find(2)
     t = link_to_user(user)
     assert_equal "<a href=\"/users/2\">#{ user.name }</a>", t
   end
-                                      
+
   def test_link_to_user_should_not_link_to_locked_user
     user = User.find(5)
     assert user.locked?
     t = link_to_user(user)
     assert_equal user.name, t
   end
-                                                                          
+
   def test_link_to_user_should_not_link_to_anonymous
     user = User.anonymous
     assert user.anonymous?
--- a/test/unit/helpers/.svn/text-base/custom_fields_helper_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/helpers/.svn/text-base/custom_fields_helper_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -26,4 +26,21 @@
     assert_equal 'Yes', format_value('1', 'bool')
     assert_equal 'No', format_value('0', 'bool')
   end
+  
+  def test_unknow_field_format_should_be_edited_as_string
+    field = CustomField.new(:field_format => 'foo')
+    value = CustomValue.new(:value => 'bar', :custom_field => field)
+    field.id = 52
+    
+    assert_equal '<input id="object_custom_field_values_52" name="object[custom_field_values][52]" type="text" value="bar" />',
+      custom_field_tag('object', value)
+  end
+  
+  def test_unknow_field_format_should_be_bulk_edited_as_string
+    field = CustomField.new(:field_format => 'foo')
+    field.id = 52
+    
+    assert_equal '<input id="object_custom_field_values_52" name="object[custom_field_values][52]" type="text" value="" />',
+      custom_field_tag_for_bulk_edit('object', field)
+  end
 end
--- a/test/unit/helpers/.svn/text-base/issues_helper_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/helpers/.svn/text-base/issues_helper_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -44,6 +44,29 @@
     @request ||= ActionController::TestRequest.new
   end
 
+  def test_issue_heading
+    assert_equal "Bug #1", issue_heading(Issue.find(1))
+  end
+
+  def test_issues_destroy_confirmation_message_with_one_root_issue
+    assert_equal l(:text_issues_destroy_confirmation), issues_destroy_confirmation_message(Issue.find(1))
+  end
+
+  def test_issues_destroy_confirmation_message_with_an_arrayt_of_root_issues
+    assert_equal l(:text_issues_destroy_confirmation), issues_destroy_confirmation_message(Issue.find([1, 2]))
+  end
+
+  def test_issues_destroy_confirmation_message_with_one_parent_issue
+    Issue.find(2).update_attribute :parent_issue_id, 1
+    assert_equal l(:text_issues_destroy_confirmation) + "\n" + l(:text_issues_destroy_descendants_confirmation, :count => 1),
+      issues_destroy_confirmation_message(Issue.find(1))
+  end
+
+  def test_issues_destroy_confirmation_message_with_one_parent_issue_and_its_child
+    Issue.find(2).update_attribute :parent_issue_id, 1
+    assert_equal l(:text_issues_destroy_confirmation), issues_destroy_confirmation_message(Issue.find([1, 2]))
+  end
+
   context "IssuesHelper#show_detail" do
     context "with no_html" do
       should 'show a changing attribute' do
--- a/test/unit/helpers/.svn/text-base/repository_helper_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/helpers/.svn/text-base/repository_helper_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -24,7 +24,7 @@
     with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
       s1 = "Texte encod\xc3\xa9"
       s2 = "Texte encod\xe9"
-      s3 = s2
+      s3 = s2.dup
       if s1.respond_to?(:force_encoding)
         s1.force_encoding("UTF-8")
         s2.force_encoding("ASCII-8BIT")
@@ -39,7 +39,7 @@
     with_settings :repositories_encodings => 'UTF-8,EUC-JP' do
       s1 = "\xe3\x83\xac\xe3\x83\x83\xe3\x83\x89\xe3\x83\x9e\xe3\x82\xa4\xe3\x83\xb3"
       s2 = "\xa5\xec\xa5\xc3\xa5\xc9\xa5\xde\xa5\xa4\xa5\xf3"
-      s3 = s2
+      s3 = s2.dup
       if s1.respond_to?(:force_encoding)
         s1.force_encoding("UTF-8")
         s2.force_encoding("ASCII-8BIT")
@@ -54,7 +54,7 @@
     with_settings :repositories_encodings => 'ISO-8859-1' do
       s1 = "\xc3\x82\xc2\x80"
       s2 = "\xC2\x80"
-      s3 = s2
+      s3 = s2.dup
       if s1.respond_to?(:force_encoding)
         s1.force_encoding("UTF-8")
         s2.force_encoding("ASCII-8BIT")
@@ -64,5 +64,53 @@
       assert_equal s1, to_utf8(s3)
     end
   end
+
+  def test_to_utf8_blank_string
+    assert_equal "",  to_utf8("")
+    assert_equal nil, to_utf8(nil)
+  end
+
+  def test_to_utf8_returns_ascii_as_utf8
+    s1 = "ASCII"
+    s2 = s1.dup
+    if s1.respond_to?(:force_encoding)
+      s1.force_encoding("UTF-8")
+      s2.force_encoding("ISO-8859-1")
+    end
+    str1 = to_utf8(s1)
+    str2 = to_utf8(s2)
+    assert_equal s1, str1
+    assert_equal s1, str2
+    if s1.respond_to?(:force_encoding)
+      assert_equal "UTF-8", str1.encoding.to_s
+      assert_equal "UTF-8", str2.encoding.to_s
+    end
+  end
+
+  def test_to_utf8_invalid_utf8_sequences_should_be_stripped
+    with_settings :repositories_encodings => '' do
+      # s1 = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
+      s1 = "Texte encod\xe9 en ISO-8859-1."
+      s1.force_encoding("ASCII-8BIT") if s1.respond_to?(:force_encoding)
+      str = to_utf8(s1)
+      if str.respond_to?(:force_encoding)
+        assert str.valid_encoding?
+        assert_equal "UTF-8", str.encoding.to_s
+      end
+      assert_equal "Texte encod? en ISO-8859-1.", str
+    end
+  end
+
+  def test_to_utf8_invalid_utf8_sequences_should_be_stripped_ja_jis
+    with_settings :repositories_encodings => 'ISO-2022-JP' do
+      s1 = "test\xb5\xfetest\xb5\xfe"
+      s1.force_encoding("ASCII-8BIT") if s1.respond_to?(:force_encoding)
+      str = to_utf8(s1)
+      if str.respond_to?(:force_encoding)
+        assert str.valid_encoding?
+        assert_equal "UTF-8", str.encoding.to_s
+      end
+      assert_equal "test??test??", str
+    end
+  end
 end
-
--- a/test/unit/helpers/application_helper_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/helpers/application_helper_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -18,9 +18,9 @@
 require File.expand_path('../../../test_helper', __FILE__)
 
 class ApplicationHelperTest < ActionView::TestCase
-  
+
   fixtures :projects, :roles, :enabled_modules, :users,
-                      :repositories, :changesets, 
+                      :repositories, :changesets,
                       :trackers, :issue_statuses, :issues, :versions, :documents,
                       :wikis, :wiki_pages, :wiki_contents,
                       :boards, :messages,
@@ -35,11 +35,11 @@
     context "authorized user" do
       should "be tested"
     end
-    
+
     context "unauthorized user" do
       should "be tested"
     end
-    
+
     should "allow using the :controller and :action for the target link" do
       User.current = User.find_by_login('admin')
 
@@ -48,9 +48,9 @@
                                        {:controller => 'issues', :action => 'edit', :id => Issue.first.id})
       assert_match /href/, response
     end
-    
+
   end
-  
+
   def test_auto_links
     to_test = {
       'http://foo.bar' => '<a class="external" href="http://foo.bar">http://foo.bar</a>',
@@ -84,12 +84,12 @@
     }
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
   end
-  
+
   def test_auto_mailto
-    assert_equal '<p><a class="email" href="mailto:test@foo.bar">test@foo.bar</a></p>', 
+    assert_equal '<p><a class="email" href="mailto:test@foo.bar">test@foo.bar</a></p>',
       textilizable('test@foo.bar')
   end
-  
+
   def test_inline_images
     to_test = {
       '!http://foo.bar/image.jpg!' => '<img src="http://foo.bar/image.jpg" alt="" />',
@@ -102,7 +102,7 @@
     }
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
   end
-  
+
   def test_inline_images_inside_tags
     raw = <<-RAW
 h1. !foo.png! Heading
@@ -115,7 +115,7 @@
     assert textilizable(raw).include?('<img src="foo.png" alt="" />')
     assert textilizable(raw).include?('<img src="bar.gif" alt="" />')
   end
-  
+
   def test_attached_images
     to_test = {
       'Inline image: !logo.gif!' => 'Inline image: <img src="/attachments/download/3" title="This is a logo" alt="This is a logo" />',
@@ -128,7 +128,7 @@
     attachments = Attachment.find(:all)
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text, :attachments => attachments) }
   end
-  
+
   def test_textile_external_links
     to_test = {
       'This is a "link":http://foo.bar' => 'This is a <a href="http://foo.bar" class="external">link</a>',
@@ -149,27 +149,27 @@
   end
 
   def test_redmine_links
-    issue_link = link_to('#3', {:controller => 'issues', :action => 'show', :id => 3}, 
+    issue_link = link_to('#3', {:controller => 'issues', :action => 'show', :id => 3},
                                :class => 'issue status-1 priority-1 overdue', :title => 'Error 281 when updating a recipe (New)')
-    
+
     changeset_link = link_to('r1', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 1},
                                    :class => 'changeset', :title => 'My very first commit')
     changeset_link2 = link_to('r2', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 2},
                                     :class => 'changeset', :title => 'This commit fixes #1, #2 and references #1 & #3')
-    
+
     document_link = link_to('Test document', {:controller => 'documents', :action => 'show', :id => 1},
                                              :class => 'document')
-    
+
     version_link = link_to('1.0', {:controller => 'versions', :action => 'show', :id => 2},
                                   :class => 'version')
 
     message_url = {:controller => 'messages', :action => 'show', :board_id => 1, :id => 4}
-    
+
     project_url = {:controller => 'projects', :action => 'show', :id => 'subproject1'}
-    
+
     source_url = {:controller => 'repositories', :action => 'entry', :id => 'ecookbook', :path => ['some', 'file']}
     source_url_with_ext = {:controller => 'repositories', :action => 'entry', :id => 'ecookbook', :path => ['some', 'file.ext']}
-    
+
     to_test = {
       # tickets
       '#3, [#3], (#3) and #3.'      => "#{issue_link}, [#{issue_link}], (#{issue_link}) and #{issue_link}.",
@@ -224,14 +224,14 @@
     @project = Project.find(1)
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text), "#{text} failed" }
   end
-  
+
   def test_cross_project_redmine_links
     source_link = link_to('ecookbook:source:/some/file', {:controller => 'repositories', :action => 'entry', :id => 'ecookbook', :path => ['some', 'file']},
       :class => 'source')
-    
+
     changeset_link = link_to('ecookbook:r2', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 2},
       :class => 'changeset', :title => 'This commit fixes #1, #2 and references #1 & #3')
-                                   
+
     to_test = {
       # documents
       'document:"Test document"'              => 'document:"Test document"',
@@ -345,7 +345,7 @@
     }
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text, :attachments => Issue.find(3).attachments), "#{text} failed" }
   end
-  
+
   def test_wiki_links
     to_test = {
       '[[CookBook documentation]]' => '<a href="/projects/ecookbook/wiki/CookBook_documentation" class="wiki-page">CookBook documentation</a>',
@@ -374,7 +374,7 @@
     @project = Project.find(1)
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
   end
-  
+
   def test_html_tags
     to_test = {
       "<div>content</div>" => "<p>&lt;div&gt;content&lt;/div&gt;</p>",
@@ -398,7 +398,7 @@
     }
     to_test.each { |text, result| assert_equal result, textilizable(text) }
   end
-  
+
   def test_allowed_html_tags
     to_test = {
       "<pre>preformatted text</pre>" => "<pre>preformatted text</pre>",
@@ -407,7 +407,7 @@
     }
     to_test.each { |text, result| assert_equal result, textilizable(text) }
   end
-  
+
   def test_pre_tags
     raw = <<-RAW
 Before
@@ -426,10 +426,10 @@
 </pre>
 <p>After</p>
 EXPECTED
-    
+
     assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
   end
-  
+
   def test_pre_content_should_not_parse_wiki_and_redmine_links
     raw = <<-RAW
 [[CookBook documentation]]
@@ -452,11 +452,11 @@
 #1
 </pre>
 EXPECTED
-                                 
+
     @project = Project.find(1)
     assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
   end
-  
+
   def test_non_closing_pre_blocks_should_be_closed
     raw = <<-RAW
 <pre><code>
@@ -466,11 +466,11 @@
 <pre><code>
 </code></pre>
 EXPECTED
-                                 
+
     @project = Project.find(1)
     assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
   end
-  
+
   def test_syntax_highlight
     raw = <<-RAW
 <pre><code class="ruby">
@@ -485,7 +485,7 @@
 
     assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
   end
-  
+
   def test_wiki_links_in_tables
     to_test = {"|[[Page|Link title]]|[[Other Page|Other title]]|\n|Cell 21|[[Last page]]|" =>
                  '<tr><td><a href="/projects/ecookbook/wiki/Page" class="wiki-page new">Link title</a></td>' +
@@ -495,7 +495,7 @@
     @project = Project.find(1)
     to_test.each { |text, result| assert_equal "<table>#{result}</table>", textilizable(text).gsub(/[\t\n]/, '') }
   end
-  
+
   def test_text_formatting
     to_test = {'*_+bold, italic and underline+_*' => '<strong><em><ins>bold, italic and underline</ins></em></strong>',
                '(_text within parentheses_)' => '(<em>text within parentheses</em>)',
@@ -505,12 +505,12 @@
               }
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
   end
-  
+
   def test_wiki_horizontal_rule
     assert_equal '<hr />', textilizable('---')
     assert_equal '<p>Dashes: ---</p>', textilizable('Dashes: ---')
   end
-  
+
   def test_footnotes
     raw = <<-RAW
 This is some text[1].
@@ -525,7 +525,14 @@
 
     assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
   end
-  
+
+  def test_headings
+    raw = 'h1. Some heading'
+    expected = %|<a name="Some-heading"></a>\n<h1 >Some heading<a href="#Some-heading" class="wiki-anchor">&para;</a></h1>|
+
+    assert_equal expected, textilizable(raw)
+  end
+
   def test_table_of_content
     raw = <<-RAW
 {{toc}}
@@ -559,8 +566,8 @@
     expected =  '<ul class="toc">' +
                   '<li><a href="#Title">Title</a>' +
                     '<ul>' +
-                      '<li><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' + 
-                      '<li><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' + 
+                      '<li><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' +
+                      '<li><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' +
                       '<li><a href="#Subtitle-with-red-text">Subtitle with red text</a>' +
                         '<ul>' +
                           '<li><a href="#Subtitle-with-some-modifiers">Subtitle with some modifiers</a></li>' +
@@ -583,7 +590,7 @@
     @project = Project.find(1)
     assert textilizable(raw).gsub("\n", "").include?(expected), textilizable(raw)
   end
-  
+
   def test_table_of_content_should_contain_included_page_headings
     raw = <<-RAW
 {{toc}}
@@ -595,125 +602,20 @@
 
     expected = '<ul class="toc">' +
                '<li><a href="#Included">Included</a></li>' +
-               '<li><a href="#Child-page-1">Child page 1</a></li>' + 
+               '<li><a href="#Child-page-1">Child page 1</a></li>' +
                '</ul>'
 
     @project = Project.find(1)
     assert textilizable(raw).gsub("\n", "").include?(expected)
   end
-  
-  def test_blockquote
-    # orig raw text
-    raw = <<-RAW
-John said:
-> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.
-> Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
-> * Donec odio lorem,
-> * sagittis ac,
-> * malesuada in,
-> * adipiscing eu, dolor.
->
-> >Nulla varius pulvinar diam. Proin id arcu id lorem scelerisque condimentum. Proin vehicula turpis vitae lacus.
-> Proin a tellus. Nam vel neque.
 
-He's right.
-RAW
-    
-    # expected html
-    expected = <<-EXPECTED
-<p>John said:</p>
-<blockquote>
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.
-Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
-<ul>
-  <li>Donec odio lorem,</li>
-  <li>sagittis ac,</li>
-  <li>malesuada in,</li>
-  <li>adipiscing eu, dolor.</li>
-</ul>
-<blockquote>
-<p>Nulla varius pulvinar diam. Proin id arcu id lorem scelerisque condimentum. Proin vehicula turpis vitae lacus.</p>
-</blockquote>
-<p>Proin a tellus. Nam vel neque.</p>
-</blockquote>
-<p>He's right.</p>
-EXPECTED
-    
-    assert_equal expected.gsub(%r{\s+}, ''), textilizable(raw).gsub(%r{\s+}, '')
-  end
-  
-  def test_table
-    raw = <<-RAW
-This is a table with empty cells:
-
-|cell11|cell12||
-|cell21||cell23|
-|cell31|cell32|cell33|
-RAW
-
-    expected = <<-EXPECTED
-<p>This is a table with empty cells:</p>
-
-<table>
-  <tr><td>cell11</td><td>cell12</td><td></td></tr>
-  <tr><td>cell21</td><td></td><td>cell23</td></tr>
-  <tr><td>cell31</td><td>cell32</td><td>cell33</td></tr>
-</table>
-EXPECTED
-
-    assert_equal expected.gsub(%r{\s+}, ''), textilizable(raw).gsub(%r{\s+}, '')
-  end
-  
-  def test_table_with_line_breaks
-    raw = <<-RAW
-This is a table with line breaks:
-
-|cell11
-continued|cell12||
-|-cell21-||cell23
-cell23 line2
-cell23 *line3*|
-|cell31|cell32
-cell32 line2|cell33|
-
-RAW
-
-    expected = <<-EXPECTED
-<p>This is a table with line breaks:</p>
-
-<table>
-  <tr>
-    <td>cell11<br />continued</td>
-    <td>cell12</td>
-    <td></td>
-  </tr>
-  <tr>
-    <td><del>cell21</del></td>
-    <td></td>
-    <td>cell23<br/>cell23 line2<br/>cell23 <strong>line3</strong></td>
-  </tr>
-  <tr>
-    <td>cell31</td>
-    <td>cell32<br/>cell32 line2</td>
-    <td>cell33</td>
-  </tr>
-</table>
-EXPECTED
-
-    assert_equal expected.gsub(%r{\s+}, ''), textilizable(raw).gsub(%r{\s+}, '')
-  end
-  
-  def test_textile_should_not_mangle_brackets
-    assert_equal '<p>[msg1][msg2]</p>', textilizable('[msg1][msg2]')
-  end
-  
   def test_default_formatter
     Setting.text_formatting = 'unknown'
     text = 'a *link*: http://www.example.net/'
     assert_equal '<p>a *link*: <a href="http://www.example.net/">http://www.example.net/</a></p>', textilizable(text)
     Setting.text_formatting = 'textile'
   end
-  
+
   def test_due_date_distance_in_words
     to_test = { Date.today => 'Due in 0 days',
                 Date.today + 1 => 'Due in 1 day',
@@ -728,7 +630,7 @@
       assert_equal expected, due_date_distance_in_words(date)
     end
   end
-  
+
   def test_avatar
     # turn on avatars
     Setting.gravatar_enabled = '1'
@@ -736,25 +638,25 @@
     assert avatar('jsmith <jsmith@somenet.foo>').include?(Digest::MD5.hexdigest('jsmith@somenet.foo'))
     assert_nil avatar('jsmith')
     assert_nil avatar(nil)
-    
+
     # turn off avatars
     Setting.gravatar_enabled = '0'
     assert_equal '', avatar(User.find_by_mail('jsmith@somenet.foo'))
   end
-  
+
   def test_link_to_user
     user = User.find(2)
     t = link_to_user(user)
     assert_equal "<a href=\"/users/2\">#{ user.name }</a>", t
   end
-                                      
+
   def test_link_to_user_should_not_link_to_locked_user
     user = User.find(5)
     assert user.locked?
     t = link_to_user(user)
     assert_equal user.name, t
   end
-                                                                          
+
   def test_link_to_user_should_not_link_to_anonymous
     user = User.anonymous
     assert user.anonymous?
--- a/test/unit/helpers/custom_fields_helper_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/helpers/custom_fields_helper_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -26,4 +26,21 @@
     assert_equal 'Yes', format_value('1', 'bool')
     assert_equal 'No', format_value('0', 'bool')
   end
+  
+  def test_unknow_field_format_should_be_edited_as_string
+    field = CustomField.new(:field_format => 'foo')
+    value = CustomValue.new(:value => 'bar', :custom_field => field)
+    field.id = 52
+    
+    assert_equal '<input id="object_custom_field_values_52" name="object[custom_field_values][52]" type="text" value="bar" />',
+      custom_field_tag('object', value)
+  end
+  
+  def test_unknow_field_format_should_be_bulk_edited_as_string
+    field = CustomField.new(:field_format => 'foo')
+    field.id = 52
+    
+    assert_equal '<input id="object_custom_field_values_52" name="object[custom_field_values][52]" type="text" value="" />',
+      custom_field_tag_for_bulk_edit('object', field)
+  end
 end
--- a/test/unit/helpers/issues_helper_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/helpers/issues_helper_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -44,6 +44,29 @@
     @request ||= ActionController::TestRequest.new
   end
 
+  def test_issue_heading
+    assert_equal "Bug #1", issue_heading(Issue.find(1))
+  end
+
+  def test_issues_destroy_confirmation_message_with_one_root_issue
+    assert_equal l(:text_issues_destroy_confirmation), issues_destroy_confirmation_message(Issue.find(1))
+  end
+
+  def test_issues_destroy_confirmation_message_with_an_arrayt_of_root_issues
+    assert_equal l(:text_issues_destroy_confirmation), issues_destroy_confirmation_message(Issue.find([1, 2]))
+  end
+
+  def test_issues_destroy_confirmation_message_with_one_parent_issue
+    Issue.find(2).update_attribute :parent_issue_id, 1
+    assert_equal l(:text_issues_destroy_confirmation) + "\n" + l(:text_issues_destroy_descendants_confirmation, :count => 1),
+      issues_destroy_confirmation_message(Issue.find(1))
+  end
+
+  def test_issues_destroy_confirmation_message_with_one_parent_issue_and_its_child
+    Issue.find(2).update_attribute :parent_issue_id, 1
+    assert_equal l(:text_issues_destroy_confirmation), issues_destroy_confirmation_message(Issue.find([1, 2]))
+  end
+
   context "IssuesHelper#show_detail" do
     context "with no_html" do
       should 'show a changing attribute' do
--- a/test/unit/helpers/repository_helper_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/helpers/repository_helper_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -24,7 +24,7 @@
     with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
       s1 = "Texte encod\xc3\xa9"
       s2 = "Texte encod\xe9"
-      s3 = s2
+      s3 = s2.dup
       if s1.respond_to?(:force_encoding)
         s1.force_encoding("UTF-8")
         s2.force_encoding("ASCII-8BIT")
@@ -39,7 +39,7 @@
     with_settings :repositories_encodings => 'UTF-8,EUC-JP' do
       s1 = "\xe3\x83\xac\xe3\x83\x83\xe3\x83\x89\xe3\x83\x9e\xe3\x82\xa4\xe3\x83\xb3"
       s2 = "\xa5\xec\xa5\xc3\xa5\xc9\xa5\xde\xa5\xa4\xa5\xf3"
-      s3 = s2
+      s3 = s2.dup
       if s1.respond_to?(:force_encoding)
         s1.force_encoding("UTF-8")
         s2.force_encoding("ASCII-8BIT")
@@ -54,7 +54,7 @@
     with_settings :repositories_encodings => 'ISO-8859-1' do
       s1 = "\xc3\x82\xc2\x80"
       s2 = "\xC2\x80"
-      s3 = s2
+      s3 = s2.dup
       if s1.respond_to?(:force_encoding)
         s1.force_encoding("UTF-8")
         s2.force_encoding("ASCII-8BIT")
@@ -64,5 +64,53 @@
       assert_equal s1, to_utf8(s3)
     end
   end
+
+  def test_to_utf8_blank_string
+    assert_equal "",  to_utf8("")
+    assert_equal nil, to_utf8(nil)
+  end
+
+  def test_to_utf8_returns_ascii_as_utf8
+    s1 = "ASCII"
+    s2 = s1.dup
+    if s1.respond_to?(:force_encoding)
+      s1.force_encoding("UTF-8")
+      s2.force_encoding("ISO-8859-1")
+    end
+    str1 = to_utf8(s1)
+    str2 = to_utf8(s2)
+    assert_equal s1, str1
+    assert_equal s1, str2
+    if s1.respond_to?(:force_encoding)
+      assert_equal "UTF-8", str1.encoding.to_s
+      assert_equal "UTF-8", str2.encoding.to_s
+    end
+  end
+
+  def test_to_utf8_invalid_utf8_sequences_should_be_stripped
+    with_settings :repositories_encodings => '' do
+      # s1 = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
+      s1 = "Texte encod\xe9 en ISO-8859-1."
+      s1.force_encoding("ASCII-8BIT") if s1.respond_to?(:force_encoding)
+      str = to_utf8(s1)
+      if str.respond_to?(:force_encoding)
+        assert str.valid_encoding?
+        assert_equal "UTF-8", str.encoding.to_s
+      end
+      assert_equal "Texte encod? en ISO-8859-1.", str
+    end
+  end
+
+  def test_to_utf8_invalid_utf8_sequences_should_be_stripped_ja_jis
+    with_settings :repositories_encodings => 'ISO-2022-JP' do
+      s1 = "test\xb5\xfetest\xb5\xfe"
+      s1.force_encoding("ASCII-8BIT") if s1.respond_to?(:force_encoding)
+      str = to_utf8(s1)
+      if str.respond_to?(:force_encoding)
+        assert str.valid_encoding?
+        assert_equal "UTF-8", str.encoding.to_s
+      end
+      assert_equal "test??test??", str
+    end
+  end
 end
-
--- a/test/unit/issue_nested_set_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/issue_nested_set_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,166 +21,166 @@
   fixtures :projects, :users, :members, :member_roles, :roles,
            :trackers, :projects_trackers,
            :versions,
-           :issue_statuses, :issue_categories, :issue_relations, :workflows, 
+           :issue_statuses, :issue_categories, :issue_relations, :workflows,
            :enumerations,
            :issues,
            :custom_fields, :custom_fields_projects, :custom_fields_trackers, :custom_values,
            :time_entries
 
   self.use_transactional_fixtures = false
-  
+
   def test_create_root_issue
     issue1 = create_issue!
     issue2 = create_issue!
     issue1.reload
     issue2.reload
-    
+
     assert_equal [issue1.id, nil, 1, 2], [issue1.root_id, issue1.parent_id, issue1.lft, issue1.rgt]
     assert_equal [issue2.id, nil, 1, 2], [issue2.root_id, issue2.parent_id, issue2.lft, issue2.rgt]
   end
-  
+
   def test_create_child_issue
     parent = create_issue!
     child =  create_issue!(:parent_issue_id => parent.id)
     parent.reload
     child.reload
-    
+
     assert_equal [parent.id, nil, 1, 4], [parent.root_id, parent.parent_id, parent.lft, parent.rgt]
     assert_equal [parent.id, parent.id, 2, 3], [child.root_id, child.parent_id, child.lft, child.rgt]
   end
-  
+
   def test_creating_a_child_in_different_project_should_not_validate
     issue = create_issue!
     child = Issue.new(:project_id => 2, :tracker_id => 1, :author_id => 1, :subject => 'child', :parent_issue_id => issue.id)
     assert !child.save
     assert_not_nil child.errors.on(:parent_issue_id)
   end
-  
+
   def test_move_a_root_to_child
     parent1 = create_issue!
     parent2 = create_issue!
     child = create_issue!(:parent_issue_id => parent1.id)
-    
+
     parent2.parent_issue_id = parent1.id
     parent2.save!
     child.reload
     parent1.reload
     parent2.reload
-    
+
     assert_equal [parent1.id, 1, 6], [parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [parent1.id, 4, 5], [parent2.root_id, parent2.lft, parent2.rgt]
     assert_equal [parent1.id, 2, 3], [child.root_id, child.lft, child.rgt]
   end
-  
+
   def test_move_a_child_to_root
     parent1 = create_issue!
     parent2 = create_issue!
     child =   create_issue!(:parent_issue_id => parent1.id)
-    
+
     child.parent_issue_id = nil
     child.save!
     child.reload
     parent1.reload
     parent2.reload
-    
+
     assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [parent2.id, 1, 2], [parent2.root_id, parent2.lft, parent2.rgt]
     assert_equal [child.id, 1, 2], [child.root_id, child.lft, child.rgt]
   end
-  
+
   def test_move_a_child_to_another_issue
     parent1 = create_issue!
     parent2 = create_issue!
     child =   create_issue!(:parent_issue_id => parent1.id)
-    
+
     child.parent_issue_id = parent2.id
     child.save!
     child.reload
     parent1.reload
     parent2.reload
-    
+
     assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [parent2.id, 1, 4], [parent2.root_id, parent2.lft, parent2.rgt]
     assert_equal [parent2.id, 2, 3], [child.root_id, child.lft, child.rgt]
   end
-  
+
   def test_move_a_child_with_descendants_to_another_issue
     parent1 = create_issue!
     parent2 = create_issue!
     child =   create_issue!(:parent_issue_id => parent1.id)
     grandchild = create_issue!(:parent_issue_id => child.id)
-    
+
     parent1.reload
     parent2.reload
     child.reload
     grandchild.reload
-    
+
     assert_equal [parent1.id, 1, 6], [parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [parent2.id, 1, 2], [parent2.root_id, parent2.lft, parent2.rgt]
     assert_equal [parent1.id, 2, 5], [child.root_id, child.lft, child.rgt]
     assert_equal [parent1.id, 3, 4], [grandchild.root_id, grandchild.lft, grandchild.rgt]
-    
+
     child.reload.parent_issue_id = parent2.id
     child.save!
     child.reload
     grandchild.reload
     parent1.reload
     parent2.reload
-    
+
     assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [parent2.id, 1, 6], [parent2.root_id, parent2.lft, parent2.rgt]
     assert_equal [parent2.id, 2, 5], [child.root_id, child.lft, child.rgt]
     assert_equal [parent2.id, 3, 4], [grandchild.root_id, grandchild.lft, grandchild.rgt]
   end
-  
+
   def test_move_a_child_with_descendants_to_another_project
     parent1 = create_issue!
     child =   create_issue!(:parent_issue_id => parent1.id)
     grandchild = create_issue!(:parent_issue_id => child.id)
-        
+
     assert child.reload.move_to_project(Project.find(2))
     child.reload
     grandchild.reload
     parent1.reload
-    
+
     assert_equal [1, parent1.id, 1, 2], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [2, child.id, 1, 4], [child.project_id, child.root_id, child.lft, child.rgt]
     assert_equal [2, child.id, 2, 3], [grandchild.project_id, grandchild.root_id, grandchild.lft, grandchild.rgt]
   end
-  
+
   def test_invalid_move_to_another_project
     parent1 = create_issue!
     child =   create_issue!(:parent_issue_id => parent1.id)
     grandchild = create_issue!(:parent_issue_id => child.id, :tracker_id => 2)
     Project.find(2).tracker_ids = [1]
-    
+
     parent1.reload
     assert_equal [1, parent1.id, 1, 6], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
-    
+
     # child can not be moved to Project 2 because its child is on a disabled tracker
     assert_equal false, Issue.find(child.id).move_to_project(Project.find(2))
     child.reload
     grandchild.reload
     parent1.reload
-    
+
     # no change
     assert_equal [1, parent1.id, 1, 6], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
     assert_equal [1, parent1.id, 2, 5], [child.project_id, child.root_id, child.lft, child.rgt]
     assert_equal [1, parent1.id, 3, 4], [grandchild.project_id, grandchild.root_id, grandchild.lft, grandchild.rgt]
   end
-  
+
   def test_moving_an_issue_to_a_descendant_should_not_validate
     parent1 = create_issue!
     parent2 = create_issue!
     child =   create_issue!(:parent_issue_id => parent1.id)
     grandchild = create_issue!(:parent_issue_id => child.id)
-    
+
     child.reload
     child.parent_issue_id = grandchild.id
     assert !child.save
     assert_not_nil child.errors.on(:parent_issue_id)
   end
-  
+
   def test_moving_an_issue_should_keep_valid_relations_only
     issue1 = create_issue!
     issue2 = create_issue!
@@ -196,17 +196,17 @@
     assert !IssueRelation.exists?(r2.id)
     assert IssueRelation.exists?(r3.id)
   end
-  
+
   def test_destroy_should_destroy_children
     issue1 = create_issue!
     issue2 = create_issue!
     issue3 = create_issue!(:parent_issue_id => issue2.id)
     issue4 = create_issue!(:parent_issue_id => issue1.id)
-    
+
     issue3.init_journal(User.find(2))
     issue3.subject = 'child with journal'
     issue3.save!
-    
+
     assert_difference 'Issue.count', -2 do
       assert_difference 'Journal.count', -1 do
         assert_difference 'JournalDetail.count', -1 do
@@ -214,7 +214,7 @@
         end
       end
     end
-    
+
     issue1.reload
     issue4.reload
     assert !Issue.exists?(issue2.id)
@@ -222,7 +222,17 @@
     assert_equal [issue1.id, 1, 4], [issue1.root_id, issue1.lft, issue1.rgt]
     assert_equal [issue1.id, 2, 3], [issue4.root_id, issue4.lft, issue4.rgt]
   end
-  
+
+  def test_destroy_parent_issue_updated_during_children_destroy
+    parent = create_issue!
+    create_issue!(:start_date => Date.today, :parent_issue_id => parent.id)
+    create_issue!(:start_date => 2.days.from_now, :parent_issue_id => parent.id)
+
+    assert_difference 'Issue.count', -3 do
+      Issue.find(parent.id).destroy
+    end
+  end
+
   def test_destroy_child_issue_with_children
     root = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'root')
     child = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'child', :parent_issue_id => root.id)
@@ -230,7 +240,7 @@
     leaf.init_journal(User.find(2))
     leaf.subject = 'leaf with journal'
     leaf.save!
-    
+
     assert_difference 'Issue.count', -2 do
       assert_difference 'Journal.count', -1 do
         assert_difference 'JournalDetail.count', -1 do
@@ -238,11 +248,11 @@
         end
       end
     end
-    
+
     root = Issue.find(root.id)
     assert root.leaf?, "Root issue is not a leaf (lft: #{root.lft}, rgt: #{root.rgt})"
   end
-  
+
   def test_parent_priority_should_be_the_highest_child_priority
     parent = create_issue!(:priority => IssuePriority.find_by_name('Normal'))
     # Create children
@@ -261,7 +271,7 @@
     child3.save!
     assert_equal 'Normal', parent.reload.priority.name
   end
-  
+
   def test_parent_dates_should_be_lowest_start_and_highest_due_dates
     parent = create_issue!
     create_issue!(:start_date => '2010-01-25', :due_date => '2010-02-15', :parent_issue_id => parent.id)
@@ -271,22 +281,22 @@
     assert_equal Date.parse('2010-01-25'), parent.start_date
     assert_equal Date.parse('2010-02-22'), parent.due_date
   end
-  
+
   def test_parent_done_ratio_should_be_average_done_ratio_of_leaves
     parent = create_issue!
     create_issue!(:done_ratio => 20, :parent_issue_id => parent.id)
     assert_equal 20, parent.reload.done_ratio
     create_issue!(:done_ratio => 70, :parent_issue_id => parent.id)
     assert_equal 45, parent.reload.done_ratio
-    
+
     child = create_issue!(:done_ratio => 0, :parent_issue_id => parent.id)
     assert_equal 30, parent.reload.done_ratio
-    
+
     create_issue!(:done_ratio => 30, :parent_issue_id => child.id)
     assert_equal 30, child.reload.done_ratio
     assert_equal 40, parent.reload.done_ratio
   end
-  
+
   def test_parent_done_ratio_should_be_weighted_by_estimated_times_if_any
     parent = create_issue!
     create_issue!(:estimated_hours => 10, :done_ratio => 20, :parent_issue_id => parent.id)
@@ -294,7 +304,7 @@
     create_issue!(:estimated_hours => 20, :done_ratio => 50, :parent_issue_id => parent.id)
     assert_equal (50 * 20 + 20 * 10) / 30, parent.reload.done_ratio
   end
-  
+
   def test_parent_estimate_should_be_sum_of_leaves
     parent = create_issue!
     create_issue!(:estimated_hours => nil, :parent_issue_id => parent.id)
@@ -328,7 +338,7 @@
     parent.reload
     assert_equal [Date.parse('2010-06-02'), Date.parse('2010-06-10')], [parent.start_date, parent.due_date]
   end
-  
+
   def test_project_copy_should_copy_issue_tree
     p = Project.create!(:name => 'Tree copy', :identifier => 'tree-copy', :tracker_ids => [1, 2])
     i1 = create_issue!(:project_id => p.id, :subject => 'i1')
@@ -339,7 +349,7 @@
     c = Project.new(:name => 'Copy', :identifier => 'copy', :tracker_ids => [1, 2])
     c.copy(p, :only => 'issues')
     c.reload
-    
+
     assert_equal 5, c.issues.count
     ic1, ic2, ic3, ic4, ic5 = c.issues.find(:all, :order => 'subject')
     assert ic1.root?
@@ -348,7 +358,7 @@
     assert_equal ic2, ic4.parent
     assert ic5.root?
   end
-  
+
   # Helper that creates an issue with default attributes
   def create_issue!(attributes={})
     Issue.create!({:project_id => 1, :tracker_id => 1, :author_id => 1, :subject => 'test'}.merge(attributes))
--- a/test/unit/issue_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/issue_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -5,12 +5,12 @@
 # modify it under the terms of the 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.
@@ -22,7 +22,7 @@
            :trackers, :projects_trackers,
            :enabled_modules,
            :versions,
-           :issue_statuses, :issue_categories, :issue_relations, :workflows, 
+           :issue_statuses, :issue_categories, :issue_relations, :workflows,
            :enumerations,
            :issues,
            :custom_fields, :custom_fields_projects, :custom_fields_trackers, :custom_values,
@@ -34,17 +34,17 @@
     issue.reload
     assert_equal 1.5, issue.estimated_hours
   end
-  
+
   def test_create_minimal
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 3, :status_id => 1, :priority => IssuePriority.all.first, :subject => 'test_create')
     assert issue.save
     assert issue.description.nil?
   end
-  
+
   def test_create_with_required_custom_field
     field = IssueCustomField.find_by_name('Database')
     field.update_attribute(:is_required, true)
-    
+
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => 'test_create', :description => 'IssueTest#test_create_with_required_custom_field')
     assert issue.available_custom_fields.include?(field)
     # No value for the custom field
@@ -64,38 +64,82 @@
     issue.reload
     assert_equal 'PostgreSQL', issue.custom_value_for(field).value
   end
-  
+
+  def assert_visibility_match(user, issues)
+    assert_equal issues.collect(&:id).sort, Issue.all.select {|issue| issue.visible?(user)}.collect(&:id).sort
+  end
+
   def test_visible_scope_for_anonymous
     # Anonymous user should see issues of public projects only
     issues = Issue.visible(User.anonymous).all
     assert issues.any?
     assert_nil issues.detect {|issue| !issue.project.is_public?}
+    assert_nil issues.detect {|issue| issue.is_private?}
+    assert_visibility_match User.anonymous, issues
+  end
+
+  def test_visible_scope_for_anonymous_with_own_issues_visibility
+    Role.anonymous.update_attribute :issues_visibility, 'own'
+    Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => User.anonymous.id, :subject => 'Issue by anonymous')
+
+    issues = Issue.visible(User.anonymous).all
+    assert issues.any?
+    assert_nil issues.detect {|issue| issue.author != User.anonymous}
+    assert_visibility_match User.anonymous, issues
+  end
+
+  def test_visible_scope_for_anonymous_without_view_issues_permissions
     # Anonymous user should not see issues without permission
     Role.anonymous.remove_permission!(:view_issues)
     issues = Issue.visible(User.anonymous).all
     assert issues.empty?
+    assert_visibility_match User.anonymous, issues
   end
-  
-  def test_visible_scope_for_user
+
+  def test_visible_scope_for_non_member
     user = User.find(9)
     assert user.projects.empty?
     # Non member user should see issues of public projects only
     issues = Issue.visible(user).all
     assert issues.any?
     assert_nil issues.detect {|issue| !issue.project.is_public?}
+    assert_nil issues.detect {|issue| issue.is_private?}
+    assert_visibility_match user, issues
+  end
+
+  def test_visible_scope_for_non_member_with_own_issues_visibility
+    Role.non_member.update_attribute :issues_visibility, 'own'
+    Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 9, :subject => 'Issue by non member')
+    user = User.find(9)
+
+    issues = Issue.visible(user).all
+    assert issues.any?
+    assert_nil issues.detect {|issue| issue.author != user}
+    assert_visibility_match user, issues
+  end
+
+  def test_visible_scope_for_non_member_without_view_issues_permissions
     # Non member user should not see issues without permission
     Role.non_member.remove_permission!(:view_issues)
-    user.reload
+    user = User.find(9)
+    assert user.projects.empty?
     issues = Issue.visible(user).all
     assert issues.empty?
+    assert_visibility_match user, issues
+  end
+
+  def test_visible_scope_for_member
+    user = User.find(9)
     # User should see issues of projects for which he has view_issues permissions only
-    Member.create!(:principal => user, :project_id => 2, :role_ids => [1])
-    user.reload
+    Role.non_member.remove_permission!(:view_issues)
+    Member.create!(:principal => user, :project_id => 3, :role_ids => [2])
     issues = Issue.visible(user).all
     assert issues.any?
-    assert_nil issues.detect {|issue| issue.project_id != 2}
+    assert_nil issues.detect {|issue| issue.project_id != 3}
+    assert_nil issues.detect {|issue| issue.is_private?}
+    assert_visibility_match user, issues
   end
-  
+
   def test_visible_scope_for_admin
     user = User.find(1)
     user.members.each(&:destroy)
@@ -104,25 +148,48 @@
     assert issues.any?
     # Admin should see issues on private projects that he does not belong to
     assert issues.detect {|issue| !issue.project.is_public?}
+    # Admin should see private issues of other users
+    assert issues.detect {|issue| issue.is_private? && issue.author != user}
+    assert_visibility_match user, issues
   end
-  
+
+  def test_visible_scope_with_project
+    project = Project.find(1)
+    issues = Issue.visible(User.find(2), :project => project).all
+    projects = issues.collect(&:project).uniq
+    assert_equal 1, projects.size
+    assert_equal project, projects.first
+  end
+
+  def test_visible_scope_with_project_and_subprojects
+    project = Project.find(1)
+    issues = Issue.visible(User.find(2), :project => project, :with_subprojects => true).all
+    projects = issues.collect(&:project).uniq
+    assert projects.size > 1
+    assert_equal [], projects.select {|p| !p.is_or_is_descendant_of?(project)}
+  end
+
+  def test_visible_and_nested_set_scopes
+    assert_equal 0, Issue.find(1).descendants.visible.all.size
+  end
+
   def test_errors_full_messages_should_include_custom_fields_errors
     field = IssueCustomField.find_by_name('Database')
-    
+
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => 'test_create', :description => 'IssueTest#test_create_with_required_custom_field')
     assert issue.available_custom_fields.include?(field)
     # Invalid value
     issue.custom_field_values = { field.id => 'SQLServer' }
-    
+
     assert !issue.valid?
     assert_equal 1, issue.errors.full_messages.size
     assert_equal "Database #{I18n.translate('activerecord.errors.messages.inclusion')}", issue.errors.full_messages.first
   end
-  
+
   def test_update_issue_with_required_custom_field
     field = IssueCustomField.find_by_name('Database')
     field.update_attribute(:is_required, true)
-    
+
     issue = Issue.find(1)
     assert_nil issue.custom_value_for(field)
     assert issue.available_custom_fields.include?(field)
@@ -137,23 +204,23 @@
     issue.reload
     assert_equal 'PostgreSQL', issue.custom_value_for(field).value
   end
-  
+
   def test_should_not_update_attributes_if_custom_fields_validation_fails
     issue = Issue.find(1)
     field = IssueCustomField.find_by_name('Database')
     assert issue.available_custom_fields.include?(field)
-    
+
     issue.custom_field_values = { field.id => 'Invalid' }
     issue.subject = 'Should be not be saved'
     assert !issue.save
-    
+
     issue.reload
     assert_equal "Can't print recipes", issue.subject
   end
-  
+
   def test_should_not_recreate_custom_values_objects_on_update
     field = IssueCustomField.find_by_name('Database')
-    
+
     issue = Issue.find(1)
     issue.custom_field_values = { field.id => 'PostgreSQL' }
     assert issue.save
@@ -164,14 +231,14 @@
     issue.reload
     assert_equal custom_value.id, issue.custom_value_for(field).id
   end
-  
+
   def test_assigning_tracker_id_should_reload_custom_fields_values
     issue = Issue.new(:project => Project.find(1))
     assert issue.custom_field_values.empty?
     issue.tracker_id = 1
     assert issue.custom_field_values.any?
   end
-  
+
   def test_assigning_attributes_should_assign_tracker_id_first
     attributes = ActiveSupport::OrderedHash.new
     attributes['custom_field_values'] = { '1' => 'MySQL' }
@@ -181,40 +248,38 @@
     assert_not_nil issue.custom_value_for(1)
     assert_equal 'MySQL', issue.custom_value_for(1).value
   end
-  
+
   def test_should_update_issue_with_disabled_tracker
     p = Project.find(1)
     issue = Issue.find(1)
-    
+
     p.trackers.delete(issue.tracker)
     assert !p.trackers.include?(issue.tracker)
-    
+
     issue.reload
     issue.subject = 'New subject'
     assert issue.save
   end
-  
+
   def test_should_not_set_a_disabled_tracker
     p = Project.find(1)
     p.trackers.delete(Tracker.find(2))
-      
+
     issue = Issue.find(1)
     issue.tracker_id = 2
     issue.subject = 'New subject'
     assert !issue.save
     assert_not_nil issue.errors.on(:tracker_id)
   end
-  
+
   def test_category_based_assignment
     issue = Issue.create(:project_id => 1, :tracker_id => 1, :author_id => 3, :status_id => 1, :priority => IssuePriority.all.first, :subject => 'Assignment test', :description => 'Assignment test', :category_id => 1)
     assert_equal IssueCategory.find(1).assigned_to, issue.assigned_to
   end
-  
-  
-  
+
   def test_new_statuses_allowed_to
     Workflow.delete_all
-    
+
     Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 2, :author => false, :assignee => false)
     Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3, :author => true, :assignee => false)
     Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4, :author => false, :assignee => true)
@@ -223,20 +288,20 @@
     role = Role.find(1)
     tracker = Tracker.find(1)
     user = User.find(2)
-    
+
     issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1)
     assert_equal [1, 2], issue.new_statuses_allowed_to(user).map(&:id)
-    
+
     issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user)
     assert_equal [1, 2, 3], issue.new_statuses_allowed_to(user).map(&:id)
-    
+
     issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :assigned_to => user)
     assert_equal [1, 2, 4], issue.new_statuses_allowed_to(user).map(&:id)
-    
+
     issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user, :assigned_to => user)
     assert_equal [1, 2, 3, 4, 5], issue.new_statuses_allowed_to(user).map(&:id)
   end
-  
+
   def test_copy
     issue = Issue.new.copy_from(1)
     assert issue.save
@@ -250,13 +315,13 @@
   def test_copy_should_copy_status
     orig = Issue.find(8)
     assert orig.status != IssueStatus.default
-    
+
     issue = Issue.new.copy_from(orig)
     assert issue.save
     issue.reload
     assert_equal orig.status, issue.status
   end
-  
+
   def test_should_close_duplicates
     # Create 3 issues
     issue1 = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :priority => IssuePriority.all.first, :subject => 'Duplicates test', :description => 'Duplicates test')
@@ -265,37 +330,37 @@
     assert issue2.save
     issue3 = issue1.clone
     assert issue3.save
-    
+
     # 2 is a dupe of 1
     IssueRelation.create(:issue_from => issue2, :issue_to => issue1, :relation_type => IssueRelation::TYPE_DUPLICATES)
     # And 3 is a dupe of 2
     IssueRelation.create(:issue_from => issue3, :issue_to => issue2, :relation_type => IssueRelation::TYPE_DUPLICATES)
     # And 3 is a dupe of 1 (circular duplicates)
     IssueRelation.create(:issue_from => issue3, :issue_to => issue1, :relation_type => IssueRelation::TYPE_DUPLICATES)
-        
+
     assert issue1.reload.duplicates.include?(issue2)
-    
+
     # Closing issue 1
     issue1.init_journal(User.find(:first), "Closing issue1")
     issue1.status = IssueStatus.find :first, :conditions => {:is_closed => true}
     assert issue1.save
     # 2 and 3 should be also closed
     assert issue2.reload.closed?
-    assert issue3.reload.closed?    
+    assert issue3.reload.closed?
   end
-  
+
   def test_should_not_close_duplicated_issue
     # Create 3 issues
     issue1 = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :priority => IssuePriority.all.first, :subject => 'Duplicates test', :description => 'Duplicates test')
     assert issue1.save
     issue2 = issue1.clone
     assert issue2.save
-    
+
     # 2 is a dupe of 1
     IssueRelation.create(:issue_from => issue2, :issue_to => issue1, :relation_type => IssueRelation::TYPE_DUPLICATES)
     # 2 is a dup of 1 but 1 is not a duplicate of 2
     assert !issue2.reload.duplicates.include?(issue1)
-    
+
     # Closing issue 2
     issue2.init_journal(User.find(:first), "Closing issue2")
     issue2.status = IssueStatus.find :first, :conditions => {:is_closed => true}
@@ -303,57 +368,57 @@
     # 1 should not be also closed
     assert !issue1.reload.closed?
   end
-  
+
   def test_assignable_versions
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :fixed_version_id => 1, :subject => 'New issue')
     assert_equal ['open'], issue.assignable_versions.collect(&:status).uniq
   end
-  
+
   def test_should_not_be_able_to_assign_a_new_issue_to_a_closed_version
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :fixed_version_id => 1, :subject => 'New issue')
     assert !issue.save
     assert_not_nil issue.errors.on(:fixed_version_id)
   end
-  
+
   def test_should_not_be_able_to_assign_a_new_issue_to_a_locked_version
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :fixed_version_id => 2, :subject => 'New issue')
     assert !issue.save
     assert_not_nil issue.errors.on(:fixed_version_id)
   end
-  
+
   def test_should_be_able_to_assign_a_new_issue_to_an_open_version
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :fixed_version_id => 3, :subject => 'New issue')
     assert issue.save
   end
-  
+
   def test_should_be_able_to_update_an_issue_assigned_to_a_closed_version
     issue = Issue.find(11)
     assert_equal 'closed', issue.fixed_version.status
     issue.subject = 'Subject changed'
     assert issue.save
   end
-  
+
   def test_should_not_be_able_to_reopen_an_issue_assigned_to_a_closed_version
     issue = Issue.find(11)
     issue.status_id = 1
     assert !issue.save
     assert_not_nil issue.errors.on_base
   end
-  
+
   def test_should_be_able_to_reopen_and_reassign_an_issue_assigned_to_a_closed_version
     issue = Issue.find(11)
     issue.status_id = 1
     issue.fixed_version_id = 3
     assert issue.save
   end
-  
+
   def test_should_be_able_to_reopen_an_issue_assigned_to_a_locked_version
     issue = Issue.find(12)
     assert_equal 'locked', issue.fixed_version.status
     issue.status_id = 1
     assert issue.save
   end
-  
+
   def test_move_to_another_project_with_same_category
     issue = Issue.find(1)
     assert issue.move_to_project(Project.find(2))
@@ -364,7 +429,7 @@
     # Make sure time entries were move to the target project
     assert_equal 2, issue.time_entries.first.project_id
   end
-  
+
   def test_move_to_another_project_without_same_category
     issue = Issue.find(2)
     assert issue.move_to_project(Project.find(2))
@@ -373,7 +438,7 @@
     # Category cleared
     assert_nil issue.category_id
   end
-  
+
   def test_move_to_another_project_should_clear_fixed_version_when_not_shared
     issue = Issue.find(1)
     issue.update_attribute(:fixed_version_id, 1)
@@ -383,7 +448,7 @@
     # Cleared fixed_version
     assert_equal nil, issue.fixed_version
   end
-  
+
   def test_move_to_another_project_should_keep_fixed_version_when_shared_with_the_target_project
     issue = Issue.find(1)
     issue.update_attribute(:fixed_version_id, 4)
@@ -393,7 +458,7 @@
     # Keep fixed_version
     assert_equal 4, issue.fixed_version_id
   end
-  
+
   def test_move_to_another_project_should_clear_fixed_version_when_not_shared_with_the_target_project
     issue = Issue.find(1)
     issue.update_attribute(:fixed_version_id, 1)
@@ -403,7 +468,7 @@
     # Cleared fixed_version
     assert_equal nil, issue.fixed_version
   end
-  
+
   def test_move_to_another_project_should_keep_fixed_version_when_shared_systemwide
     issue = Issue.find(1)
     issue.update_attribute(:fixed_version_id, 7)
@@ -413,7 +478,7 @@
     # Keep fixed_version
     assert_equal 7, issue.fixed_version_id
   end
-  
+
   def test_move_to_another_project_with_disabled_tracker
     issue = Issue.find(1)
     target = Project.find(2)
@@ -423,7 +488,7 @@
     issue.reload
     assert_equal 1, issue.project_id
   end
-  
+
   def test_copy_to_the_same_project
     issue = Issue.find(1)
     copy = nil
@@ -434,7 +499,7 @@
     assert_equal issue.project, copy.project
     assert_equal "125", copy.custom_value_for(2).value
   end
-  
+
   def test_copy_to_another_project_and_tracker
     issue = Issue.find(1)
     copy = nil
@@ -456,6 +521,11 @@
         @copy = nil
       end
 
+      should "not create a journal" do
+        @copy = @issue.move_to_project(Project.find(3), Tracker.find(2), {:copy => true, :attributes => {:assigned_to_id => 3}})
+        assert_equal 0, @copy.reload.journals.size
+      end
+
       should "allow assigned_to changes" do
         @copy = @issue.move_to_project(Project.find(3), Tracker.find(2), {:copy => true, :attributes => {:assigned_to_id => 3}})
         assert_equal 3, @copy.assigned_to_id
@@ -478,9 +548,29 @@
 
         assert_equal date, @copy.due_date
       end
+
+      should "set current user as author" do
+        User.current = User.find(9)
+        @copy = @issue.move_to_project(Project.find(3), Tracker.find(2), {:copy => true, :attributes => {}})
+
+        assert_equal User.current, @copy.author
+      end
+
+      should "keep journal notes" do
+        date = Date.today
+        notes = "Notes added when copying"
+        User.current = User.find(9)
+        @issue.init_journal(User.current, notes)
+        @copy = @issue.move_to_project(Project.find(3), Tracker.find(2), {:copy => true, :attributes => {:start_date => date}})
+
+        assert_equal 1, @copy.journals.size
+        journal = @copy.journals.first
+        assert_equal 0, journal.details.size
+        assert_equal notes, journal.notes
+      end
     end
   end
-  
+
   def test_recipients_should_not_include_users_that_cannot_view_the_issue
     issue = Issue.find(12)
     assert issue.recipients.include?(issue.author.mail)
@@ -497,50 +587,50 @@
     assert issue.watched_by?(user)
     assert !issue.watcher_recipients.include?(user.mail)
   end
-  
+
   def test_issue_destroy
     Issue.find(1).destroy
     assert_nil Issue.find_by_id(1)
     assert_nil TimeEntry.find_by_issue_id(1)
   end
-  
+
   def test_blocked
     blocked_issue = Issue.find(9)
     blocking_issue = Issue.find(10)
-     
+
     assert blocked_issue.blocked?
     assert !blocking_issue.blocked?
   end
-  
+
   def test_blocked_issues_dont_allow_closed_statuses
     blocked_issue = Issue.find(9)
-  
+
     allowed_statuses = blocked_issue.new_statuses_allowed_to(users(:users_002))
     assert !allowed_statuses.empty?
     closed_statuses = allowed_statuses.select {|st| st.is_closed?}
     assert closed_statuses.empty?
   end
-  
+
   def test_unblocked_issues_allow_closed_statuses
     blocking_issue = Issue.find(10)
-  
+
     allowed_statuses = blocking_issue.new_statuses_allowed_to(users(:users_002))
     assert !allowed_statuses.empty?
     closed_statuses = allowed_statuses.select {|st| st.is_closed?}
     assert !closed_statuses.empty?
   end
-  
+
   def test_rescheduling_an_issue_should_reschedule_following_issue
     issue1 = Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => '-', :start_date => Date.today, :due_date => Date.today + 2)
     issue2 = Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => '-', :start_date => Date.today, :due_date => Date.today + 2)
     IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES)
     assert_equal issue1.due_date + 1, issue2.reload.start_date
-    
+
     issue1.due_date = Date.today + 5
     issue1.save!
     assert_equal issue1.due_date + 1, issue2.reload.start_date
   end
-  
+
   def test_overdue
     assert Issue.new(:due_date => 1.day.ago.to_date).overdue?
     assert !Issue.new(:due_date => Date.today).overdue?
@@ -587,13 +677,13 @@
     should "not show the issue author twice" do
       assignable_user_ids = Issue.find(1).assignable_users.collect(&:id)
       assert_equal 2, assignable_user_ids.length
-      
+
       assignable_user_ids.each do |user_id|
         assert_equal 1, assignable_user_ids.select {|i| i == user_id}.length, "User #{user_id} appears more or less than once"
       end
     end
   end
-  
+
   def test_create_should_send_email_notification
     ActionMailer::Base.deliveries.clear
     issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 3, :status_id => 1, :priority => IssuePriority.all.first, :subject => 'test_create', :estimated_hours => '1:30')
@@ -606,13 +696,13 @@
     ActionMailer::Base.deliveries.clear
     issue = Issue.find(1)
     stale = Issue.find(1)
-    
+
     issue.init_journal(User.find(1))
     issue.subject = 'Subjet update'
     assert issue.save
     assert_equal 1, ActionMailer::Base.deliveries.size
     ActionMailer::Base.deliveries.clear
-    
+
     stale.init_journal(User.find(1))
     stale.subject = 'Another subjet update'
     assert_raise ActiveRecord::StaleObjectError do
@@ -620,14 +710,14 @@
     end
     assert ActionMailer::Base.deliveries.empty?
   end
-  
+
   def test_journalized_description
     IssueCustomField.delete_all
-    
+
     i = Issue.first
     old_description = i.description
     new_description = "This is the new description"
-    
+
     i.init_journal(User.find(2))
     i.description = new_description
     assert_difference 'Journal.count', 1 do
@@ -635,7 +725,7 @@
         i.save!
       end
     end
-    
+
     detail = JournalDetail.first(:order => 'id DESC')
     assert_equal i, detail.journal.journalized
     assert_equal 'attr', detail.property
@@ -643,7 +733,7 @@
     assert_equal old_description, detail.old_value
     assert_equal new_description, detail.value
   end
-  
+
   def test_saving_twice_should_not_duplicate_journal_details
     i = Issue.find(:first)
     i.init_journal(User.find(2), 'Some notes')
@@ -673,7 +763,7 @@
     assert IssueRelation.create!(:issue_from => Issue.find(1), :issue_to => Issue.find(2), :relation_type => IssueRelation::TYPE_PRECEDES)
     assert IssueRelation.create!(:issue_from => Issue.find(2), :issue_to => Issue.find(3), :relation_type => IssueRelation::TYPE_PRECEDES)
     assert IssueRelation.create!(:issue_from => Issue.find(3), :issue_to => Issue.find(8), :relation_type => IssueRelation::TYPE_PRECEDES)
-    
+
     assert_equal [2, 3, 8], Issue.find(1).all_dependent_issues.collect(&:id).sort
   end
 
@@ -683,10 +773,22 @@
     assert IssueRelation.create!(:issue_from => Issue.find(2), :issue_to => Issue.find(3), :relation_type => IssueRelation::TYPE_PRECEDES)
     # Validation skipping
     assert IssueRelation.new(:issue_from => Issue.find(3), :issue_to => Issue.find(1), :relation_type => IssueRelation::TYPE_PRECEDES).save(false)
-    
+
     assert_equal [2, 3], Issue.find(1).all_dependent_issues.collect(&:id).sort
   end
-  
+
+  def test_all_dependent_issues_with_persistent_multiple_circular_dependencies
+    IssueRelation.delete_all
+    assert IssueRelation.create!(:issue_from => Issue.find(1), :issue_to => Issue.find(2), :relation_type => IssueRelation::TYPE_RELATES)
+    assert IssueRelation.create!(:issue_from => Issue.find(2), :issue_to => Issue.find(3), :relation_type => IssueRelation::TYPE_RELATES)
+    assert IssueRelation.create!(:issue_from => Issue.find(3), :issue_to => Issue.find(8), :relation_type => IssueRelation::TYPE_RELATES)
+    # Validation skipping
+    assert IssueRelation.new(:issue_from => Issue.find(8), :issue_to => Issue.find(2), :relation_type => IssueRelation::TYPE_RELATES).save(false)
+    assert IssueRelation.new(:issue_from => Issue.find(3), :issue_to => Issue.find(1), :relation_type => IssueRelation::TYPE_RELATES).save(false)
+
+    assert_equal [2, 3, 8], Issue.find(1).all_dependent_issues.collect(&:id).sort
+  end
+
   context "#done_ratio" do
     setup do
       @issue = Issue.find(1)
@@ -696,12 +798,12 @@
       @issue_status2 = IssueStatus.find(2)
       @issue_status2.update_attribute(:default_done_ratio, 0)
     end
-    
+
     context "with Setting.issue_done_ratio using the issue_field" do
       setup do
         Setting.issue_done_ratio = 'issue_field'
       end
-      
+
       should "read the issue's field" do
         assert_equal 0, @issue.done_ratio
         assert_equal 30, @issue2.done_ratio
@@ -712,7 +814,7 @@
       setup do
         Setting.issue_done_ratio = 'issue_status'
       end
-      
+
       should "read the Issue Status's default done ratio" do
         assert_equal 50, @issue.done_ratio
         assert_equal 0, @issue2.done_ratio
@@ -729,12 +831,12 @@
       @issue_status2 = IssueStatus.find(2)
       @issue_status2.update_attribute(:default_done_ratio, 0)
     end
-    
+
     context "with Setting.issue_done_ratio using the issue_field" do
       setup do
         Setting.issue_done_ratio = 'issue_field'
       end
-      
+
       should "not change the issue" do
         @issue.update_done_ratio_from_issue_status
         @issue2.update_done_ratio_from_issue_status
@@ -748,7 +850,7 @@
       setup do
         Setting.issue_done_ratio = 'issue_status'
       end
-      
+
       should "change the issue's done ratio" do
         @issue.update_done_ratio_from_issue_status
         @issue2.update_done_ratio_from_issue_status
@@ -760,59 +862,66 @@
   end
 
   test "#by_tracker" do
+    User.current = User.anonymous
     groups = Issue.by_tracker(Project.find(1))
     assert_equal 3, groups.size
     assert_equal 7, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
 
   test "#by_version" do
+    User.current = User.anonymous
     groups = Issue.by_version(Project.find(1))
     assert_equal 3, groups.size
     assert_equal 3, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
 
   test "#by_priority" do
+    User.current = User.anonymous
     groups = Issue.by_priority(Project.find(1))
     assert_equal 4, groups.size
     assert_equal 7, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
 
   test "#by_category" do
+    User.current = User.anonymous
     groups = Issue.by_category(Project.find(1))
     assert_equal 2, groups.size
     assert_equal 3, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
 
   test "#by_assigned_to" do
+    User.current = User.anonymous
     groups = Issue.by_assigned_to(Project.find(1))
     assert_equal 2, groups.size
     assert_equal 2, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
 
   test "#by_author" do
+    User.current = User.anonymous
     groups = Issue.by_author(Project.find(1))
     assert_equal 4, groups.size
     assert_equal 7, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
 
   test "#by_subproject" do
+    User.current = User.anonymous
     groups = Issue.by_subproject(Project.find(1))
-    assert_equal 2, groups.size
-    assert_equal 5, groups.inject(0) {|sum, group| sum + group['total'].to_i}
+    # Private descendant not visible
+    assert_equal 1, groups.size
+    assert_equal 2, groups.inject(0) {|sum, group| sum + group['total'].to_i}
   end
-  
-  
+
   context ".allowed_target_projects_on_move" do
     should "return all active projects for admin users" do
       User.current = User.find(1)
       assert_equal Project.active.count, Issue.allowed_target_projects_on_move.size
     end
-    
+
     should "return allowed projects for non admin users" do
       User.current = User.find(2)
       Role.non_member.remove_permission! :move_issues
       assert_equal 3, Issue.allowed_target_projects_on_move.size
-      
+
       Role.non_member.add_permission! :move_issues
       assert_equal Project.active.count, Issue.allowed_target_projects_on_move.size
     end
@@ -826,7 +935,7 @@
 
   def test_on_active_projects_scope
     assert Project.find(2).archive
-    
+
     before = Issue.on_active_project.length
     # test inclusion to results
     issue = Issue.generate_for_project!(Project.find(1), :tracker => Project.find(2).trackers.first)
@@ -845,7 +954,7 @@
       @assignee = User.generate_with_protected!
       @issue = Issue.generate_for_project!(@project, :assigned_to => @assignee, :author => @author)
     end
-    
+
     should "include project recipients" do
       assert @project.recipients.present?
       @project.recipients.each do |project_recipient|
@@ -857,7 +966,7 @@
       assert @issue.author, "No author set for Issue"
       assert @issue.recipients.include?(@issue.author.mail)
     end
-    
+
     should "include the assigned to user if the assigned to user is active" do
       assert @issue.assigned_to, "No assigned_to set for Issue"
       assert @issue.recipients.include?(@issue.assigned_to.mail)
--- a/test/unit/journal_observer_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/journal_observer_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -36,6 +36,17 @@
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
 
+  def test_create_should_not_send_email_notification_with_notify_set_to_false
+    Setting.notified_events = ['issue_updated']
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    journal = issue.init_journal(user, issue)
+    journal.notify = false
+
+    assert journal.save
+    assert_equal 0, ActionMailer::Base.deliveries.size
+  end
+
   def test_create_should_not_send_email_notification_without_issue_updated
     Setting.notified_events = []
     issue = Issue.find(:first)
@@ -64,7 +75,7 @@
     user = User.find(:first)
     journal = issue.init_journal(user, issue)
     journal.notes = 'This update has a note'
-    
+
     assert journal.save
     assert_equal 0, ActionMailer::Base.deliveries.size
   end
@@ -87,7 +98,7 @@
     user = User.find(:first)
     issue.init_journal(user, issue)
     issue.status = IssueStatus.last
-    
+
     assert issue.save
     assert_equal 0, ActionMailer::Base.deliveries.size
   end
@@ -110,9 +121,8 @@
     user = User.find(:first)
     issue.init_journal(user, issue)
     issue.priority = IssuePriority.last
-    
+
     assert issue.save
     assert_equal 0, ActionMailer::Base.deliveries.size
   end
-
 end
--- a/test/unit/journal_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/journal_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -18,7 +18,7 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class JournalTest < ActiveSupport::TestCase
-  fixtures :issues, :issue_statuses, :journals, :journal_details
+  fixtures :projects, :issues, :issue_statuses, :journals, :journal_details, :users, :members, :member_roles
 
   def setup
     @journal = Journal.find 1
@@ -34,9 +34,9 @@
     status = @journal.new_status
     assert_not_nil status
     assert_kind_of IssueStatus, status
-    assert_equal 2, status.id 
+    assert_equal 2, status.id
   end
-  
+
   def test_create_should_send_email_notification
     ActionMailer::Base.deliveries.clear
     issue = Issue.find(:first)
@@ -47,4 +47,44 @@
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
 
+  def test_visible_scope_for_anonymous
+    # Anonymous user should see issues of public projects only
+    journals = Journal.visible(User.anonymous).all
+    assert journals.any?
+    assert_nil journals.detect {|journal| !journal.issue.project.is_public?}
+    # Anonymous user should not see issues without permission
+    Role.anonymous.remove_permission!(:view_issues)
+    journals = Journal.visible(User.anonymous).all
+    assert journals.empty?
+  end
+
+  def test_visible_scope_for_user
+    user = User.find(9)
+    assert user.projects.empty?
+    # Non member user should see issues of public projects only
+    journals = Journal.visible(user).all
+    assert journals.any?
+    assert_nil journals.detect {|journal| !journal.issue.project.is_public?}
+    # Non member user should not see issues without permission
+    Role.non_member.remove_permission!(:view_issues)
+    user.reload
+    journals = Journal.visible(user).all
+    assert journals.empty?
+    # User should see issues of projects for which he has view_issues permissions only
+    Member.create!(:principal => user, :project_id => 1, :role_ids => [1])
+    user.reload
+    journals = Journal.visible(user).all
+    assert journals.any?
+    assert_nil journals.detect {|journal| journal.issue.project_id != 1}
+  end
+
+  def test_visible_scope_for_admin
+    user = User.find(1)
+    user.members.each(&:destroy)
+    assert user.projects.empty?
+    journals = Journal.visible(user).all
+    assert journals.any?
+    # Admin should see issues on private projects that he does not belong to
+    assert journals.detect {|journal| !journal.issue.project.is_public?}
+  end
 end
--- a/test/unit/lib/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,11 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/4964/trunk/test/unit/lib
+V 52
+/svn/!svn/ver/5878/branches/1.2-stable/test/unit/lib
 END
-redmine_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine_test.rb
-END
--- a/test/unit/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/unit/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/unit/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-28T14:12:47.115180Z
-4964
+2011-05-21T02:40:19.290757Z
+5871
 tmaruyama
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 eec42202798f1936d0e12c27f43f9add
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/unit/lib/redmine/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,83 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4964/trunk/test/unit/lib/redmine
+V 60
+/svn/!svn/ver/5878/branches/1.2-stable/test/unit/lib/redmine
 END
-wiki_formatting.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/wiki_formatting.rb
-END
-menu_manager_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/menu_manager_test.rb
-END
-plugin_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/plugin_test.rb
-END
-i18n_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4894/trunk/test/unit/lib/redmine/i18n_test.rb
-END
-hook_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/hook_test.rb
-END
-access_control_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/access_control_test.rb
-END
-safe_attributes_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/safe_attributes_test.rb
-END
-themes_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/themes_test.rb
-END
-configuration_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4949/trunk/test/unit/lib/redmine/configuration_test.rb
-END
-mime_type_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/mime_type_test.rb
-END
-ciphering_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4950/trunk/test/unit/lib/redmine/ciphering_test.rb
-END
-unified_diff_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4929/trunk/test/unit/lib/redmine/unified_diff_test.rb
-END
-notifiable_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/notifiable_test.rb
-END
--- a/test/unit/lib/redmine/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/unit/lib/redmine
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-28T14:12:47.115180Z
-4964
+2011-05-21T02:40:19.290757Z
+5871
 tmaruyama
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-4368129679eec86fab2cd631de3b8cc5
-2011-02-20T14:56:37.399906Z
-4894
-jplang
+2011-06-06T13:17:46.000000Z
+f51e2bdf18df778a4462c9a477c720d5
+2011-05-08T07:12:34.399007Z
+5707
+tmaruyama
 has-props
 
 
@@ -58,7 +58,10 @@
 
 
 
-4952
+5261
+
+export
+dir
 
 scm
 dir
@@ -69,7 +72,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 761d6ebcd277ba4a1d0a2216a7fe8925
 2010-12-12T23:24:34.194336Z
 4509
@@ -103,7 +106,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 2e952466cca65bea9ea095ad2ec01811
 2010-12-12T23:24:34.194336Z
 4509
@@ -137,7 +140,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 161e4b78a0d1cdfd67d5bd54f6480726
 2010-12-12T23:24:34.194336Z
 4509
@@ -180,7 +183,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 d2f2e4457ed4eda1b5efb8a41a3de255
 2010-12-12T23:24:34.194336Z
 4509
@@ -214,7 +217,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 1a6043d0994b5fb4a09f3962ab5542ce
 2010-12-12T23:24:34.194336Z
 4509
@@ -248,7 +251,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 22afe4f1981d3d856beef3275f95f243
 2010-12-12T23:24:34.194336Z
 4509
@@ -282,7 +285,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 6b610cfc1e3e51f457eea06a6e6fb9a0
 2010-12-12T23:24:34.194336Z
 4509
@@ -316,7 +319,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 6682bde90d30369ef1d27b806391134f
 2010-12-12T23:24:34.194336Z
 4509
@@ -353,7 +356,7 @@
 
 
 
-2011-03-03T11:40:17.000000Z
+2011-06-06T13:15:00.000000Z
 d96ffe5035b073e1dffdb3f01fe8e06e
 2011-02-25T14:30:05.998365Z
 4949
@@ -387,7 +390,7 @@
 
 
 
-2011-03-03T11:40:17.000000Z
+2011-06-06T13:15:00.000000Z
 c2c353211cdd7cf9a87b9102e26b8d14
 2011-02-26T13:09:25.657748Z
 4950
@@ -421,11 +424,11 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-6b58d3612b430c0757566b1cd6bfcda0
-2011-02-23T07:03:45.049119Z
-4929
-tmaruyama
+2011-06-06T13:18:32.000000Z
+a821efaefd2d94d0b1be4ac66a0f6b7a
+2011-03-11T20:23:29.177962Z
+5094
+jplang
 has-props
 
 
@@ -447,7 +450,7 @@
 
 
 
-2455
+4750
 
 notifiable_test.rb
 file
@@ -455,11 +458,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-562f9308fbaa71c0ef605a5cfe24d3a5
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:18:32.000000Z
+56129dfa45c8b7d521d0d0dcf534c307
+2011-03-04T14:32:58.878627Z
+5003
+jplang
 
 
 
@@ -481,5 +484,5 @@
 
 
 
-1328
+1347
 
--- a/test/unit/lib/redmine/.svn/text-base/i18n_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/.svn/text-base/i18n_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,25 +20,25 @@
 class Redmine::I18nTest < ActiveSupport::TestCase
   include Redmine::I18n
   include ActionView::Helpers::NumberHelper
-  
+
   def setup
     @hook_module = Redmine::Hook
   end
-  
+
   def test_date_format_default
     set_language_if_valid 'en'
     today = Date.today
-    Setting.date_format = ''    
+    Setting.date_format = ''
     assert_equal I18n.l(today), format_date(today)
   end
-  
+
   def test_date_format
     set_language_if_valid 'en'
     today = Date.today
     Setting.date_format = '%d %m %Y'
     assert_equal today.strftime('%d %m %Y'), format_date(today)
   end
-  
+
   def test_date_and_time_for_each_language
     Setting.date_format = ''
     valid_languages.each do |lang|
@@ -47,17 +47,19 @@
         format_date(Date.today)
         format_time(Time.now)
         format_time(Time.now, false)
-        assert_not_equal 'default', ::I18n.l(Date.today, :format => :default), "date.formats.default missing in #{lang}"
-        assert_not_equal 'time',    ::I18n.l(Time.now, :format => :time),      "time.formats.time missing in #{lang}"
+        assert_not_equal 'default', ::I18n.l(Date.today, :format => :default),
+                         "date.formats.default missing in #{lang}"
+        assert_not_equal 'time',    ::I18n.l(Time.now, :format => :time),
+                         "time.formats.time missing in #{lang}"
       end
       assert l('date.day_names').is_a?(Array)
       assert_equal 7, l('date.day_names').size
-      
+
       assert l('date.month_names').is_a?(Array)
       assert_equal 13, l('date.month_names').size
     end
   end
-  
+
   def test_time_format
     set_language_if_valid 'en'
     now = Time.parse('2011-02-20 15:45:22')
@@ -66,14 +68,13 @@
         assert_equal '02/20/2011 15:45', format_time(now)
         assert_equal '15:45', format_time(now, false)
       end
-      
       with_settings :date_format => '%Y-%m-%d' do
         assert_equal '2011-02-20 15:45', format_time(now)
         assert_equal '15:45', format_time(now, false)
       end
     end
   end
-  
+
   def test_time_format_default
     set_language_if_valid 'en'
     now = Time.parse('2011-02-20 15:45:22')
@@ -82,14 +83,13 @@
         assert_equal '02/20/2011 03:45 pm', format_time(now)
         assert_equal '03:45 pm', format_time(now, false)
       end
-      
       with_settings :date_format => '%Y-%m-%d' do
         assert_equal '2011-02-20 03:45 pm', format_time(now)
         assert_equal '03:45 pm', format_time(now, false)
       end
     end
   end
-  
+
   def test_time_format
     set_language_if_valid 'en'
     now = Time.now
@@ -98,16 +98,16 @@
     assert_equal now.strftime('%d %m %Y %H %M'), format_time(now)
     assert_equal now.strftime('%H %M'), format_time(now, false)
   end
-  
+
   def test_utc_time_format
     set_language_if_valid 'en'
-    now = Time.now.utc
+    now = Time.now
     Setting.date_format = '%d %m %Y'
     Setting.time_format = '%H %M'
-    assert_equal Time.now.strftime('%d %m %Y %H %M'), format_time(now)
-    assert_equal Time.now.strftime('%H %M'), format_time(now, false)
+    assert_equal now.strftime('%d %m %Y %H %M'), format_time(now.utc)
+    assert_equal now.strftime('%H %M'), format_time(now.utc, false)
   end
-  
+
   def test_number_to_human_size_for_each_language
     valid_languages.each do |lang|
       set_language_if_valid lang
@@ -116,12 +116,12 @@
       end
     end
   end
-  
+
   def test_valid_languages
     assert valid_languages.is_a?(Array)
     assert valid_languages.first.is_a?(Symbol)
   end
-  
+
   def test_valid_language
     to_test = {'fr' => :fr,
                'Fr' => :fr,
@@ -129,21 +129,31 @@
                'zh-tw' => :"zh-TW",
                'zh-TW' => :"zh-TW",
                'zh-ZZ' => nil }
-    
     to_test.each {|lang, expected| assert_equal expected, find_language(lang)}
   end
-  
+
   def test_fallback
     ::I18n.backend.store_translations(:en, {:untranslated => "Untranslated string"})
     ::I18n.locale = 'en'
     assert_equal "Untranslated string", l(:untranslated)
     ::I18n.locale = 'fr'
     assert_equal "Untranslated string", l(:untranslated)
-    
+
     ::I18n.backend.store_translations(:fr, {:untranslated => "Pas de traduction"})
     ::I18n.locale = 'en'
     assert_equal "Untranslated string", l(:untranslated)
     ::I18n.locale = 'fr'
     assert_equal "Pas de traduction", l(:untranslated)
   end
+
+  def test_utf8
+    set_language_if_valid 'ja'
+    str_ja_yes  = "\xe3\x81\xaf\xe3\x81\x84"
+    i18n_ja_yes = l(:general_text_Yes)
+    if str_ja_yes.respond_to?(:force_encoding)
+      str_ja_yes.force_encoding('UTF-8')
+      assert_equal "UTF-8", i18n_ja_yes.encoding.to_s
+    end
+    assert_equal str_ja_yes, i18n_ja_yes
+  end
 end
--- a/test/unit/lib/redmine/.svn/text-base/notifiable_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/.svn/text-base/notifiable_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -22,9 +22,9 @@
   end
 
   def test_all
-    assert_equal 11, Redmine::Notifiable.all.length
+    assert_equal 12, Redmine::Notifiable.all.length
 
-    %w(issue_added issue_updated issue_note_added issue_status_updated issue_priority_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable|
+    %w(issue_added issue_updated issue_note_added issue_status_updated issue_priority_updated news_added news_comment_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable|
       assert Redmine::Notifiable.all.collect(&:name).include?(notifiable), "missing #{notifiable}"
     end
   end
--- a/test/unit/lib/redmine/.svn/text-base/unified_diff_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/.svn/text-base/unified_diff_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -34,6 +34,63 @@
     assert_equal 2, diff.size
   end
   
+  def test_inline_partials
+    diff = Redmine::UnifiedDiff.new(read_diff_fixture('partials.diff'))
+    assert_equal 1, diff.size
+    diff = diff.first
+    assert_equal 43, diff.size
+    
+    assert_equal [51, -1], diff[0].offsets
+    assert_equal [51, -1], diff[1].offsets
+    assert_equal 'Lorem ipsum dolor sit amet, consectetur adipiscing <span>elit</span>', diff[0].html_line
+    assert_equal 'Lorem ipsum dolor sit amet, consectetur adipiscing <span>xx</span>', diff[1].html_line
+    
+    assert_nil diff[2].offsets
+    assert_equal 'Praesent et sagittis dui. Vivamus ac diam diam', diff[2].html_line
+    
+    assert_equal [0, -14], diff[3].offsets
+    assert_equal [0, -14], diff[4].offsets
+    assert_equal '<span>Ut sed</span> auctor justo', diff[3].html_line
+    assert_equal '<span>xxx</span> auctor justo', diff[4].html_line
+    
+    assert_equal [13, -19], diff[6].offsets
+    assert_equal [13, -19], diff[7].offsets
+    
+    assert_equal [24, -8], diff[9].offsets
+    assert_equal [24, -8], diff[10].offsets
+    
+    assert_equal [37, -1], diff[12].offsets
+    assert_equal [37, -1], diff[13].offsets
+    
+    assert_equal [0, -38], diff[15].offsets
+    assert_equal [0, -38], diff[16].offsets
+  end
+  
+  def test_side_by_side_partials
+    diff = Redmine::UnifiedDiff.new(read_diff_fixture('partials.diff'), :type => 'sbs')
+    assert_equal 1, diff.size
+    diff = diff.first
+    assert_equal 32, diff.size
+    
+    assert_equal [51, -1], diff[0].offsets
+    assert_equal 'Lorem ipsum dolor sit amet, consectetur adipiscing <span>elit</span>', diff[0].html_line_left
+    assert_equal 'Lorem ipsum dolor sit amet, consectetur adipiscing <span>xx</span>', diff[0].html_line_right
+    
+    assert_nil diff[1].offsets
+    assert_equal 'Praesent et sagittis dui. Vivamus ac diam diam', diff[1].html_line_left
+    assert_equal 'Praesent et sagittis dui. Vivamus ac diam diam', diff[1].html_line_right
+    
+    assert_equal [0, -14], diff[2].offsets
+    assert_equal '<span>Ut sed</span> auctor justo', diff[2].html_line_left
+    assert_equal '<span>xxx</span> auctor justo', diff[2].html_line_right
+
+    assert_equal [13, -19], diff[4].offsets
+    assert_equal [24, -8], diff[6].offsets
+    assert_equal [37, -1], diff[8].offsets
+    assert_equal [0, -38], diff[10].offsets
+    
+  end
+  
   def test_line_starting_with_dashes
     diff = Redmine::UnifiedDiff.new(<<-DIFF
 --- old.txt Wed Nov 11 14:24:58 2009
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/export/pdf_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,101 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
+require File.expand_path('../../../../../test_helper', __FILE__)
+require 'iconv'
+
+class PdfTest < ActiveSupport::TestCase
+  include Redmine::I18n
+
+  def test_fix_text_encoding_nil
+    set_language_if_valid 'ja'
+    assert_equal 'CP932', l(:general_pdf_encoding)
+    if RUBY_VERSION < '1.9'
+      ic = Iconv.new(l(:general_pdf_encoding), 'UTF-8')
+    end
+    assert_equal '', Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, nil)
+  end
+
+  def test_rdm_pdf_iconv_cannot_convert_ja_cp932
+    set_language_if_valid 'ja'
+    assert_equal 'CP932', l(:general_pdf_encoding)
+    if RUBY_VERSION < '1.9'
+      ic = Iconv.new(l(:general_pdf_encoding), 'UTF-8')
+    end
+    utf8_txt_1  = "\xe7\x8b\x80\xe6\x85\x8b"
+    utf8_txt_2  = "\xe7\x8b\x80\xe6\x85\x8b\xe7\x8b\x80"
+    utf8_txt_3  = "\xe7\x8b\x80\xe7\x8b\x80\xe6\x85\x8b\xe7\x8b\x80"
+    if utf8_txt_1.respond_to?(:force_encoding)
+      txt_1 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_1)
+      txt_2 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_2)
+      txt_3 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_3)
+      assert_equal "?\x91\xd4", txt_1
+      assert_equal "?\x91\xd4?", txt_2
+      assert_equal "??\x91\xd4?", txt_3
+      assert_equal "ASCII-8BIT", txt_1.encoding.to_s
+      assert_equal "ASCII-8BIT", txt_2.encoding.to_s
+      assert_equal "ASCII-8BIT", txt_3.encoding.to_s
+    else
+      assert_equal "???\x91\xd4",
+                   Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_1)
+      assert_equal "???\x91\xd4???",
+                   Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_2)
+      assert_equal "??????\x91\xd4???",
+                   Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_3)
+    end
+  end
+
+  def test_rdm_pdf_iconv_invalid_utf8_should_be_replaced_en
+    set_language_if_valid 'en'
+    assert_equal 'UTF-8', l(:general_pdf_encoding)
+    str1 = "Texte encod\xe9 en ISO-8859-1"
+    str2 = "\xe9a\xe9b\xe9c\xe9d\xe9e test"
+    str1.force_encoding("UTF-8") if str1.respond_to?(:force_encoding)
+    str2.force_encoding("ASCII-8BIT") if str2.respond_to?(:force_encoding)
+    if RUBY_VERSION < '1.9'
+      ic = Iconv.new(l(:general_pdf_encoding), 'UTF-8')
+    end
+    txt_1 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, str1)
+    txt_2 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, str2)
+    if txt_1.respond_to?(:force_encoding)
+      assert_equal "ASCII-8BIT", txt_1.encoding.to_s
+      assert_equal "ASCII-8BIT", txt_2.encoding.to_s
+    end
+    assert_equal "Texte encod? en ISO-8859-1", txt_1
+    assert_equal "?a?b?c?d?e test", txt_2
+  end
+
+  def test_rdm_pdf_iconv_invalid_utf8_should_be_replaced_ja
+    set_language_if_valid 'ja'
+    assert_equal 'CP932', l(:general_pdf_encoding)
+    str1 = "Texte encod\xe9 en ISO-8859-1"
+    str2 = "\xe9a\xe9b\xe9c\xe9d\xe9e test"
+    str1.force_encoding("UTF-8") if str1.respond_to?(:force_encoding)
+    str2.force_encoding("ASCII-8BIT") if str2.respond_to?(:force_encoding)
+    if RUBY_VERSION < '1.9'
+      ic = Iconv.new(l(:general_pdf_encoding), 'UTF-8')
+    end
+    txt_1 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, str1)
+    txt_2 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, str2)
+    if txt_1.respond_to?(:force_encoding)
+      assert_equal "ASCII-8BIT", txt_1.encoding.to_s
+      assert_equal "ASCII-8BIT", txt_2.encoding.to_s
+    end
+    assert_equal "Texte encod? en ISO-8859-1", txt_1
+    assert_equal "?a?b?c?d?e test", txt_2
+  end
+end
--- a/test/unit/lib/redmine/helpers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/helpers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/helpers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/unit/lib/redmine/helpers
 http://redmine.rubyforge.org/svn
 
 
 
-2010-12-29T20:29:42.467534Z
-4582
+2011-03-28T17:35:20.425352Z
+5236
 jplang
 
 
@@ -26,16 +26,50 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
+calendar_test.rb
+file
+
+
+
+
+2011-06-06T13:18:32.000000Z
+5d9bda2d9476a944a5ff5e2c61cb41c8
+2011-03-27T16:49:35.269584Z
+5231
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2371
+
 gantt_test.rb
 file
 
 
 
 
-2011-03-03T11:05:08.000000Z
-1d6b4373836fef676ab3a28235c140b8
-2010-12-29T20:29:42.467534Z
-4582
+2011-06-06T13:18:32.000000Z
+7eeeaf89c44d3c361193d131cc931b9b
+2011-03-28T17:35:20.425352Z
+5236
 jplang
 
 
@@ -58,5 +92,5 @@
 
 
 
-28117
+29243
 
--- a/test/unit/lib/redmine/helpers/.svn/text-base/gantt_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/helpers/.svn/text-base/gantt_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -95,15 +95,9 @@
     setup do
       create_gantt
     end
-    
-    should "clear the @query.project so cross-project issues and versions can be counted" do
-      assert @gantt.query.project
-      @gantt.number_of_rows_on_project(@project)
-      assert_nil @gantt.query.project
-    end
 
-    should "count 1 for the project itself" do
-      assert_equal 1, @gantt.number_of_rows_on_project(@project)
+    should "count 0 for an empty the project" do
+      assert_equal 0, @gantt.number_of_rows_on_project(@project)
     end
 
     should "count the number of issues without a version" do
@@ -111,12 +105,6 @@
       assert_equal 2, @gantt.number_of_rows_on_project(@project)
     end
 
-    should "count the number of versions" do
-      @project.versions << Version.generate!
-      @project.versions << Version.generate!
-      assert_equal 3, @gantt.number_of_rows_on_project(@project)
-    end
-
     should "count the number of issues on versions, including cross-project" do
       version = Version.generate!
       @project.versions << version
@@ -124,21 +112,6 @@
       
       assert_equal 3, @gantt.number_of_rows_on_project(@project)
     end
-    
-    should "recursive and count the number of rows on each subproject" do
-      @project.versions << Version.generate! # +1
-
-      @subproject = Project.generate!(:enabled_module_names => ['issue_tracking']) # +1
-      @subproject.set_parent!(@project)
-      @subproject.issues << Issue.generate_for_project!(@subproject) # +1
-      @subproject.issues << Issue.generate_for_project!(@subproject) # +1
-
-      @subsubproject = Project.generate!(:enabled_module_names => ['issue_tracking']) # +1
-      @subsubproject.set_parent!(@subproject)
-      @subsubproject.issues << Issue.generate_for_project!(@subsubproject) # +1
-
-      assert_equal 7, @gantt.number_of_rows_on_project(@project) # +1 for self
-    end
   end
 
   # TODO: more of an integration test
@@ -183,6 +156,18 @@
         @response.body = @gantt.subjects
         assert_select "div.version-name[style*=left:24px]"
       end
+      
+      context "without assigned issues" do
+        setup do
+          @version = Version.generate!(:effective_date => 2.week.from_now.to_date, :sharing => 'none', :name => 'empty_version')
+          @project.versions << @version
+        end
+      
+        should "not be rendered" do
+          @response.body = @gantt.subjects
+          assert_select "div.version-name a", :text => /#{@version.name}/, :count => 0
+        end
+      end
     end
   
     context "issue" do
@@ -196,6 +181,31 @@
         assert_select "div.issue-subject[style*=left:44px]"
       end
       
+      context "assigned to a shared version of another project" do
+        setup do
+          p = Project.generate!
+          p.trackers << @tracker
+          p.enabled_module_names = [:issue_tracking]
+          @shared_version = Version.generate!(:sharing => 'system')
+          p.versions << @shared_version
+          # Reassign the issue to a shared version of another project
+          
+          @issue = Issue.generate!(:fixed_version => @shared_version,
+                                   :subject => "gantt#assigned_to_shared_version",
+                                   :tracker => @tracker,
+                                   :project => @project,
+                                   :done_ratio => 30,
+                                   :start_date => Date.yesterday,
+                                   :due_date => 1.week.from_now.to_date)
+          @project.issues << @issue
+        end
+        
+        should "be rendered" do
+          @response.body = @gantt.subjects
+          assert_select "div.issue-subject", /#{@issue.subject}/
+        end
+      end
+      
       context "with subtasks" do
         setup do
           attrs = {:project => @project, :tracker => @tracker, :fixed_version => @version}
@@ -537,9 +547,9 @@
           assert_select "div.version.task_done[style*=left:28px]", true, @response.body
         end
 
-        should "Be the total done width of the version"  do
+        should "be the total done width of the version"  do
           @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
-          assert_select "div.version.task_done[style*=width:18px]", true, @response.body
+          assert_select "div.version.task_done[style*=width:16px]", true, @response.body
         end
       end
 
@@ -697,9 +707,10 @@
           assert_select "div.task_done[style*=left:28px]", true, @response.body
         end
 
-        should "Be the total done width of the issue"  do
+        should "be the total done width of the issue"  do
           @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
-          assert_select "div.task_done[style*=width:18px]", true, @response.body
+          # 15 days * 4 px * 30% - 2 px for borders = 16 px
+          assert_select "div.task_done[style*=width:16px]", true, @response.body
         end
 
         should "not be the total done width if the chart starts after issue start date"  do
@@ -707,7 +718,24 @@
           
           @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
           assert_select "div.task_done[style*=left:0px]", true, @response.body
-          assert_select "div.task_done[style*=width:10px]", true, @response.body
+          assert_select "div.task_done[style*=width:8px]", true, @response.body
+        end
+        
+        context "for completed issue" do
+          setup do
+            @issue.done_ratio = 100
+          end
+
+          should "be the total width of the issue"  do
+            @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
+            assert_select "div.task_done[style*=width:58px]", true, @response.body
+          end
+  
+          should "be the total width of the issue with due_date=start_date"  do
+            @issue.due_date = @issue.start_date
+            @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
+            assert_select "div.task_done[style*=width:2px]", true, @response.body
+          end
         end
       end
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/helpers/calendar_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,63 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the 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.
+
+require File.expand_path('../../../../../test_helper', __FILE__)
+
+class CalendarTest < ActiveSupport::TestCase
+  
+  def test_monthly
+    c = Redmine::Helpers::Calendar.new(Date.today, :fr, :month)
+    assert_equal [1, 7], [c.startdt.cwday, c.enddt.cwday]
+    
+    c = Redmine::Helpers::Calendar.new('2007-07-14'.to_date, :fr, :month)
+    assert_equal ['2007-06-25'.to_date, '2007-08-05'.to_date], [c.startdt, c.enddt]   
+     
+    c = Redmine::Helpers::Calendar.new(Date.today, :en, :month)
+    assert_equal [7, 6], [c.startdt.cwday, c.enddt.cwday]
+  end
+
+  def test_weekly
+    c = Redmine::Helpers::Calendar.new(Date.today, :fr, :week)
+    assert_equal [1, 7], [c.startdt.cwday, c.enddt.cwday]
+    
+    c = Redmine::Helpers::Calendar.new('2007-07-14'.to_date, :fr, :week)
+    assert_equal ['2007-07-09'.to_date, '2007-07-15'.to_date], [c.startdt, c.enddt]
+
+    c = Redmine::Helpers::Calendar.new(Date.today, :en, :week)
+    assert_equal [7, 6], [c.startdt.cwday, c.enddt.cwday]
+  end
+  
+  def test_monthly_start_day
+    [1, 6, 7].each do |day|
+      with_settings :start_of_week => day do
+        c = Redmine::Helpers::Calendar.new(Date.today, :en, :month)
+        assert_equal day , c.startdt.cwday
+        assert_equal (day + 5) % 7 + 1, c.enddt.cwday
+      end
+    end
+  end
+  
+  def test_weekly_start_day
+    [1, 6, 7].each do |day|
+      with_settings :start_of_week => day do
+        c = Redmine::Helpers::Calendar.new(Date.today, :en, :week)
+        assert_equal day, c.startdt.cwday
+        assert_equal (day + 5) % 7 + 1, c.enddt.cwday
+      end
+    end
+  end
+end
--- a/test/unit/lib/redmine/helpers/gantt_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/helpers/gantt_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -95,15 +95,9 @@
     setup do
       create_gantt
     end
-    
-    should "clear the @query.project so cross-project issues and versions can be counted" do
-      assert @gantt.query.project
-      @gantt.number_of_rows_on_project(@project)
-      assert_nil @gantt.query.project
-    end
 
-    should "count 1 for the project itself" do
-      assert_equal 1, @gantt.number_of_rows_on_project(@project)
+    should "count 0 for an empty the project" do
+      assert_equal 0, @gantt.number_of_rows_on_project(@project)
     end
 
     should "count the number of issues without a version" do
@@ -111,12 +105,6 @@
       assert_equal 2, @gantt.number_of_rows_on_project(@project)
     end
 
-    should "count the number of versions" do
-      @project.versions << Version.generate!
-      @project.versions << Version.generate!
-      assert_equal 3, @gantt.number_of_rows_on_project(@project)
-    end
-
     should "count the number of issues on versions, including cross-project" do
       version = Version.generate!
       @project.versions << version
@@ -124,21 +112,6 @@
       
       assert_equal 3, @gantt.number_of_rows_on_project(@project)
     end
-    
-    should "recursive and count the number of rows on each subproject" do
-      @project.versions << Version.generate! # +1
-
-      @subproject = Project.generate!(:enabled_module_names => ['issue_tracking']) # +1
-      @subproject.set_parent!(@project)
-      @subproject.issues << Issue.generate_for_project!(@subproject) # +1
-      @subproject.issues << Issue.generate_for_project!(@subproject) # +1
-
-      @subsubproject = Project.generate!(:enabled_module_names => ['issue_tracking']) # +1
-      @subsubproject.set_parent!(@subproject)
-      @subsubproject.issues << Issue.generate_for_project!(@subsubproject) # +1
-
-      assert_equal 7, @gantt.number_of_rows_on_project(@project) # +1 for self
-    end
   end
 
   # TODO: more of an integration test
@@ -183,6 +156,18 @@
         @response.body = @gantt.subjects
         assert_select "div.version-name[style*=left:24px]"
       end
+      
+      context "without assigned issues" do
+        setup do
+          @version = Version.generate!(:effective_date => 2.week.from_now.to_date, :sharing => 'none', :name => 'empty_version')
+          @project.versions << @version
+        end
+      
+        should "not be rendered" do
+          @response.body = @gantt.subjects
+          assert_select "div.version-name a", :text => /#{@version.name}/, :count => 0
+        end
+      end
     end
   
     context "issue" do
@@ -196,6 +181,31 @@
         assert_select "div.issue-subject[style*=left:44px]"
       end
       
+      context "assigned to a shared version of another project" do
+        setup do
+          p = Project.generate!
+          p.trackers << @tracker
+          p.enabled_module_names = [:issue_tracking]
+          @shared_version = Version.generate!(:sharing => 'system')
+          p.versions << @shared_version
+          # Reassign the issue to a shared version of another project
+          
+          @issue = Issue.generate!(:fixed_version => @shared_version,
+                                   :subject => "gantt#assigned_to_shared_version",
+                                   :tracker => @tracker,
+                                   :project => @project,
+                                   :done_ratio => 30,
+                                   :start_date => Date.yesterday,
+                                   :due_date => 1.week.from_now.to_date)
+          @project.issues << @issue
+        end
+        
+        should "be rendered" do
+          @response.body = @gantt.subjects
+          assert_select "div.issue-subject", /#{@issue.subject}/
+        end
+      end
+      
       context "with subtasks" do
         setup do
           attrs = {:project => @project, :tracker => @tracker, :fixed_version => @version}
@@ -537,9 +547,9 @@
           assert_select "div.version.task_done[style*=left:28px]", true, @response.body
         end
 
-        should "Be the total done width of the version"  do
+        should "be the total done width of the version"  do
           @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
-          assert_select "div.version.task_done[style*=width:18px]", true, @response.body
+          assert_select "div.version.task_done[style*=width:16px]", true, @response.body
         end
       end
 
@@ -697,9 +707,10 @@
           assert_select "div.task_done[style*=left:28px]", true, @response.body
         end
 
-        should "Be the total done width of the issue"  do
+        should "be the total done width of the issue"  do
           @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
-          assert_select "div.task_done[style*=width:18px]", true, @response.body
+          # 15 days * 4 px * 30% - 2 px for borders = 16 px
+          assert_select "div.task_done[style*=width:16px]", true, @response.body
         end
 
         should "not be the total done width if the chart starts after issue start date"  do
@@ -707,7 +718,24 @@
           
           @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
           assert_select "div.task_done[style*=left:0px]", true, @response.body
-          assert_select "div.task_done[style*=width:10px]", true, @response.body
+          assert_select "div.task_done[style*=width:8px]", true, @response.body
+        end
+        
+        context "for completed issue" do
+          setup do
+            @issue.done_ratio = 100
+          end
+
+          should "be the total width of the issue"  do
+            @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
+            assert_select "div.task_done[style*=width:58px]", true, @response.body
+          end
+  
+          should "be the total width of the issue with due_date=start_date"  do
+            @issue.due_date = @issue.start_date
+            @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
+            assert_select "div.task_done[style*=width:2px]", true, @response.body
+          end
         end
       end
 
--- a/test/unit/lib/redmine/i18n_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/i18n_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,25 +20,25 @@
 class Redmine::I18nTest < ActiveSupport::TestCase
   include Redmine::I18n
   include ActionView::Helpers::NumberHelper
-  
+
   def setup
     @hook_module = Redmine::Hook
   end
-  
+
   def test_date_format_default
     set_language_if_valid 'en'
     today = Date.today
-    Setting.date_format = ''    
+    Setting.date_format = ''
     assert_equal I18n.l(today), format_date(today)
   end
-  
+
   def test_date_format
     set_language_if_valid 'en'
     today = Date.today
     Setting.date_format = '%d %m %Y'
     assert_equal today.strftime('%d %m %Y'), format_date(today)
   end
-  
+
   def test_date_and_time_for_each_language
     Setting.date_format = ''
     valid_languages.each do |lang|
@@ -47,17 +47,19 @@
         format_date(Date.today)
         format_time(Time.now)
         format_time(Time.now, false)
-        assert_not_equal 'default', ::I18n.l(Date.today, :format => :default), "date.formats.default missing in #{lang}"
-        assert_not_equal 'time',    ::I18n.l(Time.now, :format => :time),      "time.formats.time missing in #{lang}"
+        assert_not_equal 'default', ::I18n.l(Date.today, :format => :default),
+                         "date.formats.default missing in #{lang}"
+        assert_not_equal 'time',    ::I18n.l(Time.now, :format => :time),
+                         "time.formats.time missing in #{lang}"
       end
       assert l('date.day_names').is_a?(Array)
       assert_equal 7, l('date.day_names').size
-      
+
       assert l('date.month_names').is_a?(Array)
       assert_equal 13, l('date.month_names').size
     end
   end
-  
+
   def test_time_format
     set_language_if_valid 'en'
     now = Time.parse('2011-02-20 15:45:22')
@@ -66,14 +68,13 @@
         assert_equal '02/20/2011 15:45', format_time(now)
         assert_equal '15:45', format_time(now, false)
       end
-      
       with_settings :date_format => '%Y-%m-%d' do
         assert_equal '2011-02-20 15:45', format_time(now)
         assert_equal '15:45', format_time(now, false)
       end
     end
   end
-  
+
   def test_time_format_default
     set_language_if_valid 'en'
     now = Time.parse('2011-02-20 15:45:22')
@@ -82,14 +83,13 @@
         assert_equal '02/20/2011 03:45 pm', format_time(now)
         assert_equal '03:45 pm', format_time(now, false)
       end
-      
       with_settings :date_format => '%Y-%m-%d' do
         assert_equal '2011-02-20 03:45 pm', format_time(now)
         assert_equal '03:45 pm', format_time(now, false)
       end
     end
   end
-  
+
   def test_time_format
     set_language_if_valid 'en'
     now = Time.now
@@ -98,16 +98,16 @@
     assert_equal now.strftime('%d %m %Y %H %M'), format_time(now)
     assert_equal now.strftime('%H %M'), format_time(now, false)
   end
-  
+
   def test_utc_time_format
     set_language_if_valid 'en'
-    now = Time.now.utc
+    now = Time.now
     Setting.date_format = '%d %m %Y'
     Setting.time_format = '%H %M'
-    assert_equal Time.now.strftime('%d %m %Y %H %M'), format_time(now)
-    assert_equal Time.now.strftime('%H %M'), format_time(now, false)
+    assert_equal now.strftime('%d %m %Y %H %M'), format_time(now.utc)
+    assert_equal now.strftime('%H %M'), format_time(now.utc, false)
   end
-  
+
   def test_number_to_human_size_for_each_language
     valid_languages.each do |lang|
       set_language_if_valid lang
@@ -116,12 +116,12 @@
       end
     end
   end
-  
+
   def test_valid_languages
     assert valid_languages.is_a?(Array)
     assert valid_languages.first.is_a?(Symbol)
   end
-  
+
   def test_valid_language
     to_test = {'fr' => :fr,
                'Fr' => :fr,
@@ -129,21 +129,31 @@
                'zh-tw' => :"zh-TW",
                'zh-TW' => :"zh-TW",
                'zh-ZZ' => nil }
-    
     to_test.each {|lang, expected| assert_equal expected, find_language(lang)}
   end
-  
+
   def test_fallback
     ::I18n.backend.store_translations(:en, {:untranslated => "Untranslated string"})
     ::I18n.locale = 'en'
     assert_equal "Untranslated string", l(:untranslated)
     ::I18n.locale = 'fr'
     assert_equal "Untranslated string", l(:untranslated)
-    
+
     ::I18n.backend.store_translations(:fr, {:untranslated => "Pas de traduction"})
     ::I18n.locale = 'en'
     assert_equal "Untranslated string", l(:untranslated)
     ::I18n.locale = 'fr'
     assert_equal "Pas de traduction", l(:untranslated)
   end
+
+  def test_utf8
+    set_language_if_valid 'ja'
+    str_ja_yes  = "\xe3\x81\xaf\xe3\x81\x84"
+    i18n_ja_yes = l(:general_text_Yes)
+    if str_ja_yes.respond_to?(:force_encoding)
+      str_ja_yes.force_encoding('UTF-8')
+      assert_equal "UTF-8", i18n_ja_yes.encoding.to_s
+    end
+    assert_equal str_ja_yes, i18n_ja_yes
+  end
 end
--- a/test/unit/lib/redmine/menu_manager/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/menu_manager/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/menu_manager
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/unit/lib/redmine/menu_manager
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 fdf6a6902bb3de694d7a4fabbdfe2798
 2010-12-12T23:24:34.194336Z
 4509
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 fdde38850555e88b18c742d7d15be035
 2010-12-12T23:24:34.194336Z
 4509
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 18c96ac64de73c38eb9d766226b34ca7
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/unit/lib/redmine/notifiable_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/notifiable_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -22,9 +22,9 @@
   end
 
   def test_all
-    assert_equal 11, Redmine::Notifiable.all.length
+    assert_equal 12, Redmine::Notifiable.all.length
 
-    %w(issue_added issue_updated issue_note_added issue_status_updated issue_priority_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable|
+    %w(issue_added issue_updated issue_note_added issue_status_updated issue_priority_updated news_added news_comment_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable|
       assert Redmine::Notifiable.all.collect(&:name).include?(notifiable), "missing #{notifiable}"
     end
   end
--- a/test/unit/lib/redmine/scm/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/scm
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/unit/lib/redmine/scm
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-28T14:12:47.115180Z
-4964
+2011-05-21T02:40:19.290757Z
+5871
 tmaruyama
 
 
--- a/test/unit/lib/redmine/scm/adapters/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/scm/adapters
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/unit/lib/redmine/scm/adapters
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-28T14:12:47.115180Z
-4964
+2011-05-21T02:40:19.290757Z
+5871
 tmaruyama
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-f0de1284b35555e358dcb810fff1e7e5
-2011-02-15T02:12:39.628343Z
-4825
+2011-06-06T13:17:45.000000Z
+f557b1bd1a675ea916f153007ba3b63b
+2011-05-13T06:18:18.001804Z
+5782
 tmaruyama
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-2221
+2171
 
 bazaar_adapter_test.rb
 file
@@ -66,10 +66,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-2f30e1187cf8e155707fdf3ff7925f55
-2011-02-15T11:05:33.284244Z
-4836
+2011-06-06T13:17:45.000000Z
+ce4b0da1349db40b4d1f5e5c2585b578
+2011-04-25T02:02:44.186808Z
+5547
 tmaruyama
 
 
@@ -92,7 +92,7 @@
 
 
 
-1755
+1747
 
 git_adapter_test.rb
 file
@@ -100,10 +100,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-3d2db23c9a95bf5342365aa4580873c7
-2011-02-28T14:12:47.115180Z
-4964
+2011-06-06T13:17:45.000000Z
+022aa22cafe189955d72292f45719d27
+2011-05-21T02:40:19.290757Z
+5871
 tmaruyama
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-4592
+14511
 
 mercurial_adapter_test.rb
 file
@@ -134,10 +134,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-20194ed3de36e9107b3279bb4ae596e9
-2011-02-18T07:15:58.762873Z
-4875
+2011-06-06T13:17:45.000000Z
+8b5bb34f0a1bcb7d72c08d8002fdf8c9
+2011-05-21T02:38:56.933725Z
+5869
 tmaruyama
 has-props
 
@@ -160,7 +160,7 @@
 
 
 
-10201
+13973
 
 filesystem_adapter_test.rb
 file
@@ -168,11 +168,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-61cf9f9a3628f6766845641d99adaa83
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:17:45.000000Z
+197d39b6a381ea2c7170ffb12e726b07
+2011-05-21T02:18:07.305370Z
+5865
+tmaruyama
 has-props
 
 
@@ -194,7 +194,7 @@
 
 
 
-1449
+2071
 
 cvs_adapter_test.rb
 file
@@ -202,10 +202,10 @@
 
 
 
-2011-03-03T11:40:17.000000Z
-ddf3ab1a187f29d3e377f684c2c0f18c
-2011-02-15T08:04:11.026838Z
-4832
+2011-06-06T13:17:45.000000Z
+b54bd12ccb2aacffac79b6374356647b
+2011-05-21T02:19:38.840190Z
+5867
 tmaruyama
 
 
@@ -228,7 +228,7 @@
 
 
 
-1844
+2835
 
 darcs_adapter_test.rb
 file
@@ -236,10 +236,10 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-3a836e9a54b113ed5fe6490ce88ebebe
-2011-01-23T04:17:03.473127Z
-4748
+2011-06-06T13:17:45.000000Z
+21e4028794985d0780acfc26daaf4b6f
+2011-05-13T06:15:57.056758Z
+5779
 tmaruyama
 
 
@@ -262,5 +262,5 @@
 
 
 
-1649
+1643
 
--- a/test/unit/lib/redmine/scm/adapters/.svn/text-base/bazaar_adapter_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/bazaar_adapter_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -7,7 +7,7 @@
     REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/bazaar_repository'
     REPOSITORY_PATH.gsub!(/\/+/, '/')
 
-    if File.directory?(REPOSITORY_PATH)  
+    if File.directory?(REPOSITORY_PATH)
       def setup
         @adapter = Redmine::Scm::Adapters::BazaarAdapter.new(REPOSITORY_PATH)
       end
@@ -25,7 +25,7 @@
         cat = @adapter.cat('directory/document.txt')
         assert cat =~ /Write the contents of a file as of a given revision to standard output/
       end
-    
+
       def test_annotate
         annotate = @adapter.annotate('doc-mkdir.txt')
         assert_equal 17, annotate.lines.size
@@ -45,10 +45,8 @@
       def test_fake; assert true end
     end
   end
-
 rescue LoadError
   class BazaarMochaFake < ActiveSupport::TestCase
     def test_fake; assert(false, "Requires mocha to run those tests")  end
   end
 end
-
--- a/test/unit/lib/redmine/scm/adapters/.svn/text-base/cvs_adapter_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/cvs_adapter_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 require File.expand_path('../../../../../../test_helper', __FILE__)
 begin
   require 'mocha'
-  
+
   class CvsAdapterTest < ActiveSupport::TestCase
-    
+
     REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/cvs_repository'
     REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
     MODULE_NAME = 'test'
 
-    if File.directory?(REPOSITORY_PATH)  
+    if File.directory?(REPOSITORY_PATH)
       def setup
         @adapter = Redmine::Scm::Adapters::CvsAdapter.new(MODULE_NAME, REPOSITORY_PATH)
       end
@@ -24,19 +24,43 @@
 
       def test_revisions_all
         cnt = 0
-        @adapter.revisions('', nil, nil, :with_paths => true) do |revision|
+        @adapter.revisions('', nil, nil, :log_encoding => 'UTF-8') do |revision|
           cnt += 1
         end
-        assert_equal 14, cnt
+        assert_equal 16, cnt
       end
 
       def test_revisions_from_rev3
         rev3_committed_on = Time.gm(2007, 12, 13, 16, 27, 22)
         cnt = 0
-        @adapter.revisions('', rev3_committed_on, nil, :with_paths => true) do |revision|
+        @adapter.revisions('', rev3_committed_on, nil, :log_encoding => 'UTF-8') do |revision|
           cnt += 1
         end
-        assert_equal 2, cnt
+        assert_equal 4, cnt
+      end
+
+      def test_entries_rev3
+        rev3_committed_on = Time.gm(2007, 12, 13, 16, 27, 22)
+        entries = @adapter.entries('sources', rev3_committed_on)
+        assert_equal 2, entries.size
+        assert_equal entries[0].name, "watchers_controller.rb"
+        assert_equal entries[0].lastrev.time, Time.gm(2007, 12, 13, 16, 27, 22)
+      end
+
+      def test_path_encoding_default_utf8
+        adpt1 = Redmine::Scm::Adapters::CvsAdapter.new(
+                                  MODULE_NAME,
+                                  REPOSITORY_PATH
+                                )
+        assert_equal "UTF-8", adpt1.path_encoding
+        adpt2 = Redmine::Scm::Adapters::CvsAdapter.new(
+                                  MODULE_NAME,
+                                  REPOSITORY_PATH,
+                                  nil,
+                                  nil,
+                                  ""
+                                )
+        assert_equal "UTF-8", adpt2.path_encoding
       end
 
       private
--- a/test/unit/lib/redmine/scm/adapters/.svn/text-base/darcs_adapter_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/darcs_adapter_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,9 +1,9 @@
 require File.expand_path('../../../../../../test_helper', __FILE__)
 begin
   require 'mocha'
-  
+
   class DarcsAdapterTest < ActiveSupport::TestCase
-    
+
     REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/darcs_repository'
 
     if File.directory?(REPOSITORY_PATH)
--- a/test/unit/lib/redmine/scm/adapters/.svn/text-base/filesystem_adapter_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/filesystem_adapter_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,42 +1,53 @@
 
 require File.expand_path('../../../../../../test_helper', __FILE__)
 
+class FilesystemAdapterTest < ActiveSupport::TestCase
 
-class FilesystemAdapterTest < ActiveSupport::TestCase
-  
-  REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/filesystem_repository'  
-  
-  if File.directory?(REPOSITORY_PATH)    
+  REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/filesystem_repository'
+
+  if File.directory?(REPOSITORY_PATH)
     def setup
       @adapter = Redmine::Scm::Adapters::FilesystemAdapter.new(REPOSITORY_PATH)
     end
-    
+
     def test_entries
-      assert_equal 2, @adapter.entries.size
-      assert_equal ["dir", "test"], @adapter.entries.collect(&:name)
-      assert_equal ["dir", "test"], @adapter.entries(nil).collect(&:name)
-      assert_equal ["dir", "test"], @adapter.entries("/").collect(&:name)
+      assert_equal 3, @adapter.entries.size
+      assert_equal ["dir", "japanese", "test"], @adapter.entries.collect(&:name)
+      assert_equal ["dir", "japanese", "test"], @adapter.entries(nil).collect(&:name)
+      assert_equal ["dir", "japanese", "test"], @adapter.entries("/").collect(&:name)
       ["dir", "/dir", "/dir/", "dir/"].each do |path|
         assert_equal ["subdir", "dirfile"], @adapter.entries(path).collect(&:name)
       end
       # If y try to use "..", the path is ignored
       ["/../","dir/../", "..", "../", "/..", "dir/.."].each do |path|
-        assert_equal ["dir", "test"], @adapter.entries(path).collect(&:name), ".. must be ignored in path argument"
+        assert_equal ["dir", "japanese", "test"], @adapter.entries(path).collect(&:name),
+             ".. must be ignored in path argument"
       end
     end
-    
+
     def test_cat
       assert_equal "TEST CAT\n", @adapter.cat("test")
       assert_equal "TEST CAT\n", @adapter.cat("/test")
       # Revision number is ignored
       assert_equal "TEST CAT\n", @adapter.cat("/test", 1)
     end
-    
+
+    def test_path_encoding_default_utf8
+      adpt1 = Redmine::Scm::Adapters::FilesystemAdapter.new(
+                                  REPOSITORY_PATH
+                                )
+      assert_equal "UTF-8", adpt1.path_encoding
+      adpt2 = Redmine::Scm::Adapters::FilesystemAdapter.new(
+                                  REPOSITORY_PATH,
+                                  nil,
+                                  nil,
+                                  nil,
+                                  ""
+                                )
+      assert_equal "UTF-8", adpt2.path_encoding
+    end
   else
     puts "Filesystem test repository NOT FOUND. Skipping unit tests !!! See doc/RUNNING_TESTS."
     def test_fake; assert true end
   end
-  
 end
-
-
--- a/test/unit/lib/redmine/scm/adapters/.svn/text-base/git_adapter_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/git_adapter_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -12,10 +12,35 @@
 
     FELIX_UTF8 = "Felix Schäfer"
     FELIX_HEX  = "Felix Sch\xC3\xA4fer"
+    CHAR_1_HEX = "\xc3\x9c"
+
+    ## Ruby uses ANSI api to fork a process on Windows.
+    ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
+    ## and these are incompatible with ASCII.
+    # WINDOWS_PASS = Redmine::Platform.mswin?
+    WINDOWS_PASS = false
 
     if File.directory?(REPOSITORY_PATH)
       def setup
-        @adapter = Redmine::Scm::Adapters::GitAdapter.new(REPOSITORY_PATH)
+        adapter_class = Redmine::Scm::Adapters::GitAdapter
+        assert adapter_class
+        assert adapter_class.client_command
+        assert_equal true, adapter_class.client_available
+        assert_equal true, adapter_class.client_version_above?([1])
+        assert_equal true, adapter_class.client_version_above?([1, 0])
+
+        @adapter = Redmine::Scm::Adapters::GitAdapter.new(
+                      REPOSITORY_PATH,
+                      nil,
+                      nil,
+                      nil,
+                      'ISO-8859-1'
+                      )
+        assert @adapter
+        @char_1        = CHAR_1_HEX.dup
+        if @char_1.respond_to?(:force_encoding)
+          @char_1.force_encoding('UTF-8')
+        end
       end
 
       def test_scm_version
@@ -28,17 +53,151 @@
       end
 
       def test_branches
-        assert_equal @adapter.branches, ['master', 'test-latin-1', 'test_branch']
+        assert_equal  [
+              'latin-1-path-encoding',
+              'master',
+              'test-latin-1',
+              'test_branch',
+            ], @adapter.branches
+      end
+
+      def test_tags
+        assert_equal  [
+              "tag00.lightweight",
+              "tag01.annotated",
+            ], @adapter.tags
       end
 
       def test_getting_all_revisions
-        assert_equal 16, @adapter.revisions('',nil,nil,:all => true).length
+        assert_equal 21, @adapter.revisions('',nil,nil,:all => true).length
       end
 
       def test_getting_certain_revisions
         assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
       end
 
+      def test_revisions_reverse
+        revs1 = @adapter.revisions('',nil,nil,{:all => true, :reverse => true })
+        assert_equal 21, revs1.length
+        assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[0].identifier
+        assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[20].identifier
+      end
+
+      def test_revisions_reverse_with_time
+        since2 = Time.gm(2010, 9, 30, 0, 0, 0)
+        revs2  = @adapter.revisions('', nil, nil,
+                                    {:all => true, :since => since2, :reverse => true})
+        assert_equal 6, revs2.length
+        assert_equal '67e7792ce20ccae2e4bb73eed09bb397819c8834', revs2[0].identifier
+        assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[5].identifier
+      end
+
+      def test_revisions_master_all
+        revs1 = []
+        @adapter.revisions('', nil, "master",{}) do |rev|
+          revs1 << rev
+        end
+        assert_equal 15, revs1.length
+        assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 0].identifier
+        assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
+
+        revs2 = []
+        @adapter.revisions('', nil, "master",
+                                    {:reverse => true}) do |rev|
+          revs2 << rev
+        end
+        assert_equal 15, revs2.length
+        assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
+        assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
+      end
+
+      def test_revisions_master_merged_rev
+        revs1 = []
+        @adapter.revisions('',
+                           "713f4944648826f558cf548222f813dabe7cbb04",
+                           "master",
+                           {:reverse => true}) do |rev|
+          revs1 << rev
+        end
+        assert_equal 8, revs1.length
+        assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', revs1[ 0].identifier
+        assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 1].identifier
+        # 4a07fe31b is not a child of 713f49446
+        assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 2].identifier
+        # Merged revision
+        assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 3].identifier
+        assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
+
+        revs2 = []
+        @adapter.revisions('',
+                           "fba357b886984ee71185ad2065e65fc0417d9b92",
+                           "master",
+                           {:reverse => true}) do |rev|
+          revs2 << rev
+        end
+        assert_equal 7, revs2.length
+        assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs2[ 0].identifier
+        # 4a07fe31b is not a child of fba357b8869
+        assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs2[ 1].identifier
+        # Merged revision
+        assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs2[ 2].identifier
+        assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
+      end
+
+      def test_revisions_branch_latin_1_path_encoding_all
+        revs1 = []
+        @adapter.revisions('', nil, "latin-1-path-encoding",{}) do |rev|
+          revs1 << rev
+        end
+        assert_equal 8, revs1.length
+        assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[ 0].identifier
+        assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
+
+        revs2 = []
+        @adapter.revisions('', nil, "latin-1-path-encoding",
+                                    {:reverse => true}) do |rev|
+          revs2 << rev
+        end
+        assert_equal 8, revs2.length
+        assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
+        assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
+      end
+
+      def test_revisions_branch_latin_1_path_encoding_with_rev
+        revs1 = []
+        @adapter.revisions('',
+                           '7234cb2750b63f47bff735edc50a1c0a433c2518',
+                           "latin-1-path-encoding",
+                           {:reverse => true}) do |rev|
+          revs1 << rev
+        end
+        assert_equal 7, revs1.length
+        assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 0].identifier
+        assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
+
+        revs2 = []
+        @adapter.revisions('',
+                           '57ca437c0acbbcb749821fdf3726a1367056d364',
+                           "latin-1-path-encoding",
+                           {:reverse => true}) do |rev|
+          revs2 << rev
+        end
+        assert_equal 3, revs2.length
+        assert_equal '4fc55c43bf3d3dc2efb66145365ddc17639ce81e', revs2[ 0].identifier
+        assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
+      end
+
+      def test_revisions_invalid_rev
+        revs1 = []
+        @adapter.revisions('',
+                                    '1234abcd',
+                                    "master",
+                                    {:reverse => true}) do |rev|
+          revs1 << rev
+        end
+        assert_equal [], revs1
+      end
+
       def test_getting_revisions_with_spaces_in_filename
         assert_equal 1, @adapter.revisions("filemane with spaces.txt",
                                            nil, nil, :all => true).length
@@ -60,7 +219,8 @@
         annotate = @adapter.annotate('sources/watchers_controller.rb')
         assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
         assert_equal 41, annotate.lines.size
-        assert_equal "# This program is free software; you can redistribute it and/or", annotate.lines[4].strip
+        assert_equal "# This program is free software; you can redistribute it and/or",
+                     annotate.lines[4].strip
         assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
                       annotate.revisions[4].identifier
         assert_equal "jsmith", annotate.revisions[4].author
@@ -84,8 +244,8 @@
       def test_last_rev_with_spaces_in_filename
         last_rev = @adapter.lastrev("filemane with spaces.txt",
                                     "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
-        str_felix_utf8 = FELIX_UTF8
-        str_felix_hex  = FELIX_HEX
+        str_felix_utf8 = FELIX_UTF8.dup
+        str_felix_hex  = FELIX_HEX.dup
         last_rev_author = last_rev.author
         if last_rev_author.respond_to?(:force_encoding)
           last_rev_author.force_encoding('UTF-8')
@@ -99,6 +259,96 @@
         assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
       end
 
+      def test_latin_1_path
+        if WINDOWS_PASS
+          #
+        else
+          p2 = "latin-1-dir/test-#{@char_1}-2.txt"
+          ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
+            assert @adapter.diff(p2, r1)
+            assert @adapter.cat(p2, r1)
+            assert_equal 1, @adapter.annotate(p2, r1).lines.length
+            ['64f1f3e89ad1cb57976ff0ad99a107012ba3481d', '64f1f3e89ad1cb5797'].each do |r2|
+              assert @adapter.diff(p2, r1, r2)
+            end
+          end
+        end
+      end
+
+      def test_entries_tag
+        entries1 = @adapter.entries(nil, 'tag01.annotated',
+                                    options = {:report_last_commit => true})
+        assert entries1
+        assert_equal 3, entries1.size
+        assert_equal 'sources', entries1[1].name
+        assert_equal 'sources', entries1[1].path
+        assert_equal 'dir', entries1[1].kind
+        readme = entries1[2]
+        assert_equal 'README', readme.name
+        assert_equal 'README', readme.path
+        assert_equal 'file', readme.kind
+        assert_equal 27, readme.size
+        assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', readme.lastrev.identifier
+        assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
+      end
+
+      def test_entries_branch
+        entries1 = @adapter.entries(nil, 'test_branch',
+                                    options = {:report_last_commit => true})
+        assert entries1
+        assert_equal 4, entries1.size
+        assert_equal 'sources', entries1[1].name
+        assert_equal 'sources', entries1[1].path
+        assert_equal 'dir', entries1[1].kind
+        readme = entries1[2]
+        assert_equal 'README', readme.name
+        assert_equal 'README', readme.path
+        assert_equal 'file', readme.kind
+        assert_equal 159, readme.size
+        assert_equal '713f4944648826f558cf548222f813dabe7cbb04', readme.lastrev.identifier
+        assert_equal Time.gm(2009, 6, 19, 4, 37, 23), readme.lastrev.time
+      end
+
+      def test_entries_latin_1_files
+        entries1 = @adapter.entries('latin-1-dir', '64f1f3e8')
+        assert entries1
+        assert_equal 3, entries1.size
+        f1 = entries1[1]
+        assert_equal "test-#{@char_1}-2.txt", f1.name
+        assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
+        assert_equal 'file', f1.kind
+      end
+
+      def test_entries_latin_1_dir
+        if WINDOWS_PASS
+          #
+        else
+          entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir",
+                                      '1ca7f5ed')
+          assert entries1
+          assert_equal 3, entries1.size
+          f1 = entries1[1]
+          assert_equal "test-#{@char_1}-2.txt", f1.name
+          assert_equal "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-2.txt", f1.path
+          assert_equal 'file', f1.kind
+        end
+      end
+
+      def test_path_encoding_default_utf8
+        adpt1 = Redmine::Scm::Adapters::GitAdapter.new(
+                                  REPOSITORY_PATH
+                                )
+        assert_equal "UTF-8", adpt1.path_encoding
+        adpt2 = Redmine::Scm::Adapters::GitAdapter.new(
+                                  REPOSITORY_PATH,
+                                  nil,
+                                  nil,
+                                  nil,
+                                  ""
+                                )
+        assert_equal "UTF-8", adpt2.path_encoding
+      end
+
       private
 
       def test_scm_version_for(scm_command_version, version)
@@ -117,4 +367,3 @@
     def test_fake; assert(false, "Requires mocha to run those tests")  end
   end
 end
-
--- a/test/unit/lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -4,16 +4,40 @@
 
   class MercurialAdapterTest < ActiveSupport::TestCase
 
-    HELPERS_DIR = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
-    TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
+    HELPERS_DIR        = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
+    TEMPLATE_NAME      = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
     TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION
 
-    REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
+    REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') +
+                         '/tmp/test/mercurial_repository'
+
+    CHAR_1_HEX = "\xc3\x9c"
 
     if File.directory?(REPOSITORY_PATH)
       def setup
-        @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(REPOSITORY_PATH)
+        adapter_class = Redmine::Scm::Adapters::MercurialAdapter
+        assert adapter_class
+        assert adapter_class.client_command
+        assert_equal true, adapter_class.client_available
+        assert_equal true, adapter_class.client_version_above?([0, 9, 5])
+
+        @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(
+                              REPOSITORY_PATH,
+                              nil,
+                              nil,
+                              nil,
+                             'ISO-8859-1')
         @diff_c_support = true
+        @char_1        = CHAR_1_HEX.dup
+        @tag_char_1    = "tag-#{CHAR_1_HEX}-00"
+        @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
+        @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
+        if @tag_char_1.respond_to?(:force_encoding)
+          @char_1.force_encoding('UTF-8')
+          @tag_char_1.force_encoding('UTF-8')
+          @branch_char_0.force_encoding('UTF-8')
+          @branch_char_1.force_encoding('UTF-8')
+        end
       end
 
       def test_hgversion
@@ -49,8 +73,8 @@
           adp = Redmine::Scm::Adapters::MercurialAdapter.new(repo)
           repo_path =  adp.info.root_url.gsub(/\\/, "/")
           assert_equal REPOSITORY_PATH, repo_path
-          assert_equal '16', adp.info.lastrev.revision
-          assert_equal '4cddb4e45f52',adp.info.lastrev.scmid
+          assert_equal '28', adp.info.lastrev.revision
+          assert_equal '3ae45e2d177d',adp.info.lastrev.scmid
         end
       end
 
@@ -97,7 +121,7 @@
 
       def test_diff_made_by_revision
         if @diff_c_support
-          [16, '16', '4cddb4e45f52'].each do |r1|
+          [24, '24', '4cddb4e45f52'].each do |r1|
             diff1 = @adapter.diff(nil, r1)
             assert_equal 5, diff1.size
             buf = diff1[4].gsub(/\r\n|\r|\n/, "")
@@ -219,27 +243,110 @@
       end
 
       def test_tags
-        assert_equal ['tag_test.00', 'tag-init-revision'], @adapter.tags
+        assert_equal [@tag_char_1, 'tag_test.00', 'tag-init-revision'], @adapter.tags
       end
 
       def test_tagmap
-        tm = { 'tag_test.00'       => '6987191f453a',
-               'tag-init-revision' => '0885933ad4f6' }
+        tm = {
+          @tag_char_1         => 'adf805632193',
+          'tag_test.00'       => '6987191f453a',
+          'tag-init-revision' => '0885933ad4f6',
+          }
         assert_equal tm, @adapter.tagmap
       end
 
       def test_branches
-        assert_equal ['default', 'branch (1)[2]&,%.-3_4', 'test-branch-00'],
-                     @adapter.branches
+        assert_equal [
+            'default',
+            @branch_char_1,
+            'branch (1)[2]&,%.-3_4',
+            @branch_char_0,
+            'test_branch.latin-1',
+            'test-branch-00',
+          ], @adapter.branches
       end
 
       def test_branchmap
-        bm = { 'default'               => '4cddb4e45f52',
-               'branch (1)[2]&,%.-3_4' => '933ca60293d7',
-               'test-branch-00'        => '3a330eb32958' }
+        bm = {
+           'default'               => '3ae45e2d177d',
+           'test_branch.latin-1'   => 'c2ffe7da686a',
+           'branch (1)[2]&,%.-3_4' => 'afc61e85bde7',
+           'test-branch-00'        => '3a330eb32958',
+           @branch_char_0          => 'c8d3e4887474',
+           @branch_char_1          => '7bbf4c738e71',
+         }
         assert_equal bm, @adapter.branchmap
       end
 
+      def test_path_space
+        p = 'README (1)[2]&,%.-3_4'
+        [15, '933ca60293d7'].each do |r1|
+          assert @adapter.diff(p, r1)
+          assert @adapter.cat(p, r1)
+          assert_equal 1, @adapter.annotate(p, r1).lines.length
+          [25, 'afc61e85bde7'].each do |r2|
+            assert @adapter.diff(p, r1, r2)
+          end
+        end
+      end
+
+      def test_tag_non_ascii
+        p = "latin-1-dir/test-#{@char_1}-1.txt"
+        assert @adapter.cat(p, @tag_char_1)
+        assert_equal 1, @adapter.annotate(p, @tag_char_1).lines.length
+      end
+
+      def test_branch_non_ascii
+        p = "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-1.txt"
+        assert @adapter.cat(p, @branch_char_1)
+        assert_equal 1, @adapter.annotate(p, @branch_char_1).lines.length
+      end
+
+      def test_nodes_in_branch
+         [
+            'default',
+            @branch_char_1,
+            'branch (1)[2]&,%.-3_4',
+            @branch_char_0,
+            'test_branch.latin-1',
+            'test-branch-00',
+               ].each do |bra|
+          nib0 = @adapter.nodes_in_branch(bra)
+          assert nib0
+          nib1 = @adapter.nodes_in_branch(bra, :limit => 1)
+          assert_equal 1, nib1.size
+          case bra
+            when 'branch (1)[2]&,%.-3_4'
+              assert_equal 3, nib0.size
+              assert_equal nib0[0], 'afc61e85bde7'
+              nib2 = @adapter.nodes_in_branch(bra, :limit => 2)
+              assert_equal 2, nib2.size
+              assert_equal nib2[1], '933ca60293d7'
+            when @branch_char_1
+              assert_equal 2, nib0.size
+              assert_equal nib0[1], '08ff3227303e'
+              nib2 = @adapter.nodes_in_branch(bra, :limit => 1)
+              assert_equal 1, nib2.size
+              assert_equal nib2[0], '7bbf4c738e71'
+          end
+        end
+      end
+
+      def test_path_encoding_default_utf8
+        adpt1 = Redmine::Scm::Adapters::MercurialAdapter.new(
+                                  REPOSITORY_PATH
+                                )
+        assert_equal "UTF-8", adpt1.path_encoding
+        adpt2 = Redmine::Scm::Adapters::MercurialAdapter.new(
+                                  REPOSITORY_PATH,
+                                  nil,
+                                  nil,
+                                  nil,
+                                  ""
+                                )
+        assert_equal "UTF-8", adpt2.path_encoding
+      end
+
       private
 
       def test_hgversion_for(hgversion, version)
@@ -257,10 +364,8 @@
       def test_fake; assert true end
     end
   end
-
 rescue LoadError
   class MercurialMochaFake < ActiveSupport::TestCase
     def test_fake; assert(false, "Requires mocha to run those tests")  end
   end
 end
-
--- a/test/unit/lib/redmine/scm/adapters/.svn/text-base/subversion_adapter_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/subversion_adapter_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,11 +21,10 @@
   require 'mocha'
 
   class SubversionAdapterTest < ActiveSupport::TestCase
-  
+
     if repository_configured?('subversion')
       def setup
-        repo_path = "file://#{self.class.repository_path('subversion')}"
-        @adapter = Redmine::Scm::Adapters::SubversionAdapter.new(repo_path)
+        @adapter = Redmine::Scm::Adapters::SubversionAdapter.new(self.class.subversion_repository_url)
       end
 
       def test_client_version
--- a/test/unit/lib/redmine/scm/adapters/bazaar_adapter_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/bazaar_adapter_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -7,7 +7,7 @@
     REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/bazaar_repository'
     REPOSITORY_PATH.gsub!(/\/+/, '/')
 
-    if File.directory?(REPOSITORY_PATH)  
+    if File.directory?(REPOSITORY_PATH)
       def setup
         @adapter = Redmine::Scm::Adapters::BazaarAdapter.new(REPOSITORY_PATH)
       end
@@ -25,7 +25,7 @@
         cat = @adapter.cat('directory/document.txt')
         assert cat =~ /Write the contents of a file as of a given revision to standard output/
       end
-    
+
       def test_annotate
         annotate = @adapter.annotate('doc-mkdir.txt')
         assert_equal 17, annotate.lines.size
@@ -45,10 +45,8 @@
       def test_fake; assert true end
     end
   end
-
 rescue LoadError
   class BazaarMochaFake < ActiveSupport::TestCase
     def test_fake; assert(false, "Requires mocha to run those tests")  end
   end
 end
-
--- a/test/unit/lib/redmine/scm/adapters/cvs_adapter_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/cvs_adapter_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 require File.expand_path('../../../../../../test_helper', __FILE__)
 begin
   require 'mocha'
-  
+
   class CvsAdapterTest < ActiveSupport::TestCase
-    
+
     REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/cvs_repository'
     REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
     MODULE_NAME = 'test'
 
-    if File.directory?(REPOSITORY_PATH)  
+    if File.directory?(REPOSITORY_PATH)
       def setup
         @adapter = Redmine::Scm::Adapters::CvsAdapter.new(MODULE_NAME, REPOSITORY_PATH)
       end
@@ -24,19 +24,43 @@
 
       def test_revisions_all
         cnt = 0
-        @adapter.revisions('', nil, nil, :with_paths => true) do |revision|
+        @adapter.revisions('', nil, nil, :log_encoding => 'UTF-8') do |revision|
           cnt += 1
         end
-        assert_equal 14, cnt
+        assert_equal 16, cnt
       end
 
       def test_revisions_from_rev3
         rev3_committed_on = Time.gm(2007, 12, 13, 16, 27, 22)
         cnt = 0
-        @adapter.revisions('', rev3_committed_on, nil, :with_paths => true) do |revision|
+        @adapter.revisions('', rev3_committed_on, nil, :log_encoding => 'UTF-8') do |revision|
           cnt += 1
         end
-        assert_equal 2, cnt
+        assert_equal 4, cnt
+      end
+
+      def test_entries_rev3
+        rev3_committed_on = Time.gm(2007, 12, 13, 16, 27, 22)
+        entries = @adapter.entries('sources', rev3_committed_on)
+        assert_equal 2, entries.size
+        assert_equal entries[0].name, "watchers_controller.rb"
+        assert_equal entries[0].lastrev.time, Time.gm(2007, 12, 13, 16, 27, 22)
+      end
+
+      def test_path_encoding_default_utf8
+        adpt1 = Redmine::Scm::Adapters::CvsAdapter.new(
+                                  MODULE_NAME,
+                                  REPOSITORY_PATH
+                                )
+        assert_equal "UTF-8", adpt1.path_encoding
+        adpt2 = Redmine::Scm::Adapters::CvsAdapter.new(
+                                  MODULE_NAME,
+                                  REPOSITORY_PATH,
+                                  nil,
+                                  nil,
+                                  ""
+                                )
+        assert_equal "UTF-8", adpt2.path_encoding
       end
 
       private
--- a/test/unit/lib/redmine/scm/adapters/darcs_adapter_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/darcs_adapter_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,9 +1,9 @@
 require File.expand_path('../../../../../../test_helper', __FILE__)
 begin
   require 'mocha'
-  
+
   class DarcsAdapterTest < ActiveSupport::TestCase
-    
+
     REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/darcs_repository'
 
     if File.directory?(REPOSITORY_PATH)
--- a/test/unit/lib/redmine/scm/adapters/filesystem_adapter_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/filesystem_adapter_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,42 +1,53 @@
 
 require File.expand_path('../../../../../../test_helper', __FILE__)
 
+class FilesystemAdapterTest < ActiveSupport::TestCase
 
-class FilesystemAdapterTest < ActiveSupport::TestCase
-  
-  REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/filesystem_repository'  
-  
-  if File.directory?(REPOSITORY_PATH)    
+  REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/filesystem_repository'
+
+  if File.directory?(REPOSITORY_PATH)
     def setup
       @adapter = Redmine::Scm::Adapters::FilesystemAdapter.new(REPOSITORY_PATH)
     end
-    
+
     def test_entries
-      assert_equal 2, @adapter.entries.size
-      assert_equal ["dir", "test"], @adapter.entries.collect(&:name)
-      assert_equal ["dir", "test"], @adapter.entries(nil).collect(&:name)
-      assert_equal ["dir", "test"], @adapter.entries("/").collect(&:name)
+      assert_equal 3, @adapter.entries.size
+      assert_equal ["dir", "japanese", "test"], @adapter.entries.collect(&:name)
+      assert_equal ["dir", "japanese", "test"], @adapter.entries(nil).collect(&:name)
+      assert_equal ["dir", "japanese", "test"], @adapter.entries("/").collect(&:name)
       ["dir", "/dir", "/dir/", "dir/"].each do |path|
         assert_equal ["subdir", "dirfile"], @adapter.entries(path).collect(&:name)
       end
       # If y try to use "..", the path is ignored
       ["/../","dir/../", "..", "../", "/..", "dir/.."].each do |path|
-        assert_equal ["dir", "test"], @adapter.entries(path).collect(&:name), ".. must be ignored in path argument"
+        assert_equal ["dir", "japanese", "test"], @adapter.entries(path).collect(&:name),
+             ".. must be ignored in path argument"
       end
     end
-    
+
     def test_cat
       assert_equal "TEST CAT\n", @adapter.cat("test")
       assert_equal "TEST CAT\n", @adapter.cat("/test")
       # Revision number is ignored
       assert_equal "TEST CAT\n", @adapter.cat("/test", 1)
     end
-    
+
+    def test_path_encoding_default_utf8
+      adpt1 = Redmine::Scm::Adapters::FilesystemAdapter.new(
+                                  REPOSITORY_PATH
+                                )
+      assert_equal "UTF-8", adpt1.path_encoding
+      adpt2 = Redmine::Scm::Adapters::FilesystemAdapter.new(
+                                  REPOSITORY_PATH,
+                                  nil,
+                                  nil,
+                                  nil,
+                                  ""
+                                )
+      assert_equal "UTF-8", adpt2.path_encoding
+    end
   else
     puts "Filesystem test repository NOT FOUND. Skipping unit tests !!! See doc/RUNNING_TESTS."
     def test_fake; assert true end
   end
-  
 end
-
-
--- a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -12,10 +12,35 @@
 
     FELIX_UTF8 = "Felix Schäfer"
     FELIX_HEX  = "Felix Sch\xC3\xA4fer"
+    CHAR_1_HEX = "\xc3\x9c"
+
+    ## Ruby uses ANSI api to fork a process on Windows.
+    ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
+    ## and these are incompatible with ASCII.
+    # WINDOWS_PASS = Redmine::Platform.mswin?
+    WINDOWS_PASS = false
 
     if File.directory?(REPOSITORY_PATH)
       def setup
-        @adapter = Redmine::Scm::Adapters::GitAdapter.new(REPOSITORY_PATH)
+        adapter_class = Redmine::Scm::Adapters::GitAdapter
+        assert adapter_class
+        assert adapter_class.client_command
+        assert_equal true, adapter_class.client_available
+        assert_equal true, adapter_class.client_version_above?([1])
+        assert_equal true, adapter_class.client_version_above?([1, 0])
+
+        @adapter = Redmine::Scm::Adapters::GitAdapter.new(
+                      REPOSITORY_PATH,
+                      nil,
+                      nil,
+                      nil,
+                      'ISO-8859-1'
+                      )
+        assert @adapter
+        @char_1        = CHAR_1_HEX.dup
+        if @char_1.respond_to?(:force_encoding)
+          @char_1.force_encoding('UTF-8')
+        end
       end
 
       def test_scm_version
@@ -28,17 +53,151 @@
       end
 
       def test_branches
-        assert_equal @adapter.branches, ['master', 'test-latin-1', 'test_branch']
+        assert_equal  [
+              'latin-1-path-encoding',
+              'master',
+              'test-latin-1',
+              'test_branch',
+            ], @adapter.branches
+      end
+
+      def test_tags
+        assert_equal  [
+              "tag00.lightweight",
+              "tag01.annotated",
+            ], @adapter.tags
       end
 
       def test_getting_all_revisions
-        assert_equal 16, @adapter.revisions('',nil,nil,:all => true).length
+        assert_equal 21, @adapter.revisions('',nil,nil,:all => true).length
       end
 
       def test_getting_certain_revisions
         assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
       end
 
+      def test_revisions_reverse
+        revs1 = @adapter.revisions('',nil,nil,{:all => true, :reverse => true })
+        assert_equal 21, revs1.length
+        assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[0].identifier
+        assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[20].identifier
+      end
+
+      def test_revisions_reverse_with_time
+        since2 = Time.gm(2010, 9, 30, 0, 0, 0)
+        revs2  = @adapter.revisions('', nil, nil,
+                                    {:all => true, :since => since2, :reverse => true})
+        assert_equal 6, revs2.length
+        assert_equal '67e7792ce20ccae2e4bb73eed09bb397819c8834', revs2[0].identifier
+        assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[5].identifier
+      end
+
+      def test_revisions_master_all
+        revs1 = []
+        @adapter.revisions('', nil, "master",{}) do |rev|
+          revs1 << rev
+        end
+        assert_equal 15, revs1.length
+        assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 0].identifier
+        assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
+
+        revs2 = []
+        @adapter.revisions('', nil, "master",
+                                    {:reverse => true}) do |rev|
+          revs2 << rev
+        end
+        assert_equal 15, revs2.length
+        assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
+        assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
+      end
+
+      def test_revisions_master_merged_rev
+        revs1 = []
+        @adapter.revisions('',
+                           "713f4944648826f558cf548222f813dabe7cbb04",
+                           "master",
+                           {:reverse => true}) do |rev|
+          revs1 << rev
+        end
+        assert_equal 8, revs1.length
+        assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', revs1[ 0].identifier
+        assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 1].identifier
+        # 4a07fe31b is not a child of 713f49446
+        assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 2].identifier
+        # Merged revision
+        assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 3].identifier
+        assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
+
+        revs2 = []
+        @adapter.revisions('',
+                           "fba357b886984ee71185ad2065e65fc0417d9b92",
+                           "master",
+                           {:reverse => true}) do |rev|
+          revs2 << rev
+        end
+        assert_equal 7, revs2.length
+        assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs2[ 0].identifier
+        # 4a07fe31b is not a child of fba357b8869
+        assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs2[ 1].identifier
+        # Merged revision
+        assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs2[ 2].identifier
+        assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
+      end
+
+      def test_revisions_branch_latin_1_path_encoding_all
+        revs1 = []
+        @adapter.revisions('', nil, "latin-1-path-encoding",{}) do |rev|
+          revs1 << rev
+        end
+        assert_equal 8, revs1.length
+        assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[ 0].identifier
+        assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
+
+        revs2 = []
+        @adapter.revisions('', nil, "latin-1-path-encoding",
+                                    {:reverse => true}) do |rev|
+          revs2 << rev
+        end
+        assert_equal 8, revs2.length
+        assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
+        assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
+      end
+
+      def test_revisions_branch_latin_1_path_encoding_with_rev
+        revs1 = []
+        @adapter.revisions('',
+                           '7234cb2750b63f47bff735edc50a1c0a433c2518',
+                           "latin-1-path-encoding",
+                           {:reverse => true}) do |rev|
+          revs1 << rev
+        end
+        assert_equal 7, revs1.length
+        assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 0].identifier
+        assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
+
+        revs2 = []
+        @adapter.revisions('',
+                           '57ca437c0acbbcb749821fdf3726a1367056d364',
+                           "latin-1-path-encoding",
+                           {:reverse => true}) do |rev|
+          revs2 << rev
+        end
+        assert_equal 3, revs2.length
+        assert_equal '4fc55c43bf3d3dc2efb66145365ddc17639ce81e', revs2[ 0].identifier
+        assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
+      end
+
+      def test_revisions_invalid_rev
+        revs1 = []
+        @adapter.revisions('',
+                                    '1234abcd',
+                                    "master",
+                                    {:reverse => true}) do |rev|
+          revs1 << rev
+        end
+        assert_equal [], revs1
+      end
+
       def test_getting_revisions_with_spaces_in_filename
         assert_equal 1, @adapter.revisions("filemane with spaces.txt",
                                            nil, nil, :all => true).length
@@ -60,7 +219,8 @@
         annotate = @adapter.annotate('sources/watchers_controller.rb')
         assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
         assert_equal 41, annotate.lines.size
-        assert_equal "# This program is free software; you can redistribute it and/or", annotate.lines[4].strip
+        assert_equal "# This program is free software; you can redistribute it and/or",
+                     annotate.lines[4].strip
         assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
                       annotate.revisions[4].identifier
         assert_equal "jsmith", annotate.revisions[4].author
@@ -84,8 +244,8 @@
       def test_last_rev_with_spaces_in_filename
         last_rev = @adapter.lastrev("filemane with spaces.txt",
                                     "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
-        str_felix_utf8 = FELIX_UTF8
-        str_felix_hex  = FELIX_HEX
+        str_felix_utf8 = FELIX_UTF8.dup
+        str_felix_hex  = FELIX_HEX.dup
         last_rev_author = last_rev.author
         if last_rev_author.respond_to?(:force_encoding)
           last_rev_author.force_encoding('UTF-8')
@@ -99,6 +259,96 @@
         assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
       end
 
+      def test_latin_1_path
+        if WINDOWS_PASS
+          #
+        else
+          p2 = "latin-1-dir/test-#{@char_1}-2.txt"
+          ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
+            assert @adapter.diff(p2, r1)
+            assert @adapter.cat(p2, r1)
+            assert_equal 1, @adapter.annotate(p2, r1).lines.length
+            ['64f1f3e89ad1cb57976ff0ad99a107012ba3481d', '64f1f3e89ad1cb5797'].each do |r2|
+              assert @adapter.diff(p2, r1, r2)
+            end
+          end
+        end
+      end
+
+      def test_entries_tag
+        entries1 = @adapter.entries(nil, 'tag01.annotated',
+                                    options = {:report_last_commit => true})
+        assert entries1
+        assert_equal 3, entries1.size
+        assert_equal 'sources', entries1[1].name
+        assert_equal 'sources', entries1[1].path
+        assert_equal 'dir', entries1[1].kind
+        readme = entries1[2]
+        assert_equal 'README', readme.name
+        assert_equal 'README', readme.path
+        assert_equal 'file', readme.kind
+        assert_equal 27, readme.size
+        assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', readme.lastrev.identifier
+        assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
+      end
+
+      def test_entries_branch
+        entries1 = @adapter.entries(nil, 'test_branch',
+                                    options = {:report_last_commit => true})
+        assert entries1
+        assert_equal 4, entries1.size
+        assert_equal 'sources', entries1[1].name
+        assert_equal 'sources', entries1[1].path
+        assert_equal 'dir', entries1[1].kind
+        readme = entries1[2]
+        assert_equal 'README', readme.name
+        assert_equal 'README', readme.path
+        assert_equal 'file', readme.kind
+        assert_equal 159, readme.size
+        assert_equal '713f4944648826f558cf548222f813dabe7cbb04', readme.lastrev.identifier
+        assert_equal Time.gm(2009, 6, 19, 4, 37, 23), readme.lastrev.time
+      end
+
+      def test_entries_latin_1_files
+        entries1 = @adapter.entries('latin-1-dir', '64f1f3e8')
+        assert entries1
+        assert_equal 3, entries1.size
+        f1 = entries1[1]
+        assert_equal "test-#{@char_1}-2.txt", f1.name
+        assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
+        assert_equal 'file', f1.kind
+      end
+
+      def test_entries_latin_1_dir
+        if WINDOWS_PASS
+          #
+        else
+          entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir",
+                                      '1ca7f5ed')
+          assert entries1
+          assert_equal 3, entries1.size
+          f1 = entries1[1]
+          assert_equal "test-#{@char_1}-2.txt", f1.name
+          assert_equal "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-2.txt", f1.path
+          assert_equal 'file', f1.kind
+        end
+      end
+
+      def test_path_encoding_default_utf8
+        adpt1 = Redmine::Scm::Adapters::GitAdapter.new(
+                                  REPOSITORY_PATH
+                                )
+        assert_equal "UTF-8", adpt1.path_encoding
+        adpt2 = Redmine::Scm::Adapters::GitAdapter.new(
+                                  REPOSITORY_PATH,
+                                  nil,
+                                  nil,
+                                  nil,
+                                  ""
+                                )
+        assert_equal "UTF-8", adpt2.path_encoding
+      end
+
       private
 
       def test_scm_version_for(scm_command_version, version)
@@ -117,4 +367,3 @@
     def test_fake; assert(false, "Requires mocha to run those tests")  end
   end
 end
-
--- a/test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -4,16 +4,40 @@
 
   class MercurialAdapterTest < ActiveSupport::TestCase
 
-    HELPERS_DIR = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
-    TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
+    HELPERS_DIR        = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
+    TEMPLATE_NAME      = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
     TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION
 
-    REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
+    REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') +
+                         '/tmp/test/mercurial_repository'
+
+    CHAR_1_HEX = "\xc3\x9c"
 
     if File.directory?(REPOSITORY_PATH)
       def setup
-        @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(REPOSITORY_PATH)
+        adapter_class = Redmine::Scm::Adapters::MercurialAdapter
+        assert adapter_class
+        assert adapter_class.client_command
+        assert_equal true, adapter_class.client_available
+        assert_equal true, adapter_class.client_version_above?([0, 9, 5])
+
+        @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(
+                              REPOSITORY_PATH,
+                              nil,
+                              nil,
+                              nil,
+                             'ISO-8859-1')
         @diff_c_support = true
+        @char_1        = CHAR_1_HEX.dup
+        @tag_char_1    = "tag-#{CHAR_1_HEX}-00"
+        @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
+        @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
+        if @tag_char_1.respond_to?(:force_encoding)
+          @char_1.force_encoding('UTF-8')
+          @tag_char_1.force_encoding('UTF-8')
+          @branch_char_0.force_encoding('UTF-8')
+          @branch_char_1.force_encoding('UTF-8')
+        end
       end
 
       def test_hgversion
@@ -49,8 +73,8 @@
           adp = Redmine::Scm::Adapters::MercurialAdapter.new(repo)
           repo_path =  adp.info.root_url.gsub(/\\/, "/")
           assert_equal REPOSITORY_PATH, repo_path
-          assert_equal '16', adp.info.lastrev.revision
-          assert_equal '4cddb4e45f52',adp.info.lastrev.scmid
+          assert_equal '28', adp.info.lastrev.revision
+          assert_equal '3ae45e2d177d',adp.info.lastrev.scmid
         end
       end
 
@@ -97,7 +121,7 @@
 
       def test_diff_made_by_revision
         if @diff_c_support
-          [16, '16', '4cddb4e45f52'].each do |r1|
+          [24, '24', '4cddb4e45f52'].each do |r1|
             diff1 = @adapter.diff(nil, r1)
             assert_equal 5, diff1.size
             buf = diff1[4].gsub(/\r\n|\r|\n/, "")
@@ -219,27 +243,110 @@
       end
 
       def test_tags
-        assert_equal ['tag_test.00', 'tag-init-revision'], @adapter.tags
+        assert_equal [@tag_char_1, 'tag_test.00', 'tag-init-revision'], @adapter.tags
       end
 
       def test_tagmap
-        tm = { 'tag_test.00'       => '6987191f453a',
-               'tag-init-revision' => '0885933ad4f6' }
+        tm = {
+          @tag_char_1         => 'adf805632193',
+          'tag_test.00'       => '6987191f453a',
+          'tag-init-revision' => '0885933ad4f6',
+          }
         assert_equal tm, @adapter.tagmap
       end
 
       def test_branches
-        assert_equal ['default', 'branch (1)[2]&,%.-3_4', 'test-branch-00'],
-                     @adapter.branches
+        assert_equal [
+            'default',
+            @branch_char_1,
+            'branch (1)[2]&,%.-3_4',
+            @branch_char_0,
+            'test_branch.latin-1',
+            'test-branch-00',
+          ], @adapter.branches
       end
 
       def test_branchmap
-        bm = { 'default'               => '4cddb4e45f52',
-               'branch (1)[2]&,%.-3_4' => '933ca60293d7',
-               'test-branch-00'        => '3a330eb32958' }
+        bm = {
+           'default'               => '3ae45e2d177d',
+           'test_branch.latin-1'   => 'c2ffe7da686a',
+           'branch (1)[2]&,%.-3_4' => 'afc61e85bde7',
+           'test-branch-00'        => '3a330eb32958',
+           @branch_char_0          => 'c8d3e4887474',
+           @branch_char_1          => '7bbf4c738e71',
+         }
         assert_equal bm, @adapter.branchmap
       end
 
+      def test_path_space
+        p = 'README (1)[2]&,%.-3_4'
+        [15, '933ca60293d7'].each do |r1|
+          assert @adapter.diff(p, r1)
+          assert @adapter.cat(p, r1)
+          assert_equal 1, @adapter.annotate(p, r1).lines.length
+          [25, 'afc61e85bde7'].each do |r2|
+            assert @adapter.diff(p, r1, r2)
+          end
+        end
+      end
+
+      def test_tag_non_ascii
+        p = "latin-1-dir/test-#{@char_1}-1.txt"
+        assert @adapter.cat(p, @tag_char_1)
+        assert_equal 1, @adapter.annotate(p, @tag_char_1).lines.length
+      end
+
+      def test_branch_non_ascii
+        p = "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-1.txt"
+        assert @adapter.cat(p, @branch_char_1)
+        assert_equal 1, @adapter.annotate(p, @branch_char_1).lines.length
+      end
+
+      def test_nodes_in_branch
+         [
+            'default',
+            @branch_char_1,
+            'branch (1)[2]&,%.-3_4',
+            @branch_char_0,
+            'test_branch.latin-1',
+            'test-branch-00',
+               ].each do |bra|
+          nib0 = @adapter.nodes_in_branch(bra)
+          assert nib0
+          nib1 = @adapter.nodes_in_branch(bra, :limit => 1)
+          assert_equal 1, nib1.size
+          case bra
+            when 'branch (1)[2]&,%.-3_4'
+              assert_equal 3, nib0.size
+              assert_equal nib0[0], 'afc61e85bde7'
+              nib2 = @adapter.nodes_in_branch(bra, :limit => 2)
+              assert_equal 2, nib2.size
+              assert_equal nib2[1], '933ca60293d7'
+            when @branch_char_1
+              assert_equal 2, nib0.size
+              assert_equal nib0[1], '08ff3227303e'
+              nib2 = @adapter.nodes_in_branch(bra, :limit => 1)
+              assert_equal 1, nib2.size
+              assert_equal nib2[0], '7bbf4c738e71'
+          end
+        end
+      end
+
+      def test_path_encoding_default_utf8
+        adpt1 = Redmine::Scm::Adapters::MercurialAdapter.new(
+                                  REPOSITORY_PATH
+                                )
+        assert_equal "UTF-8", adpt1.path_encoding
+        adpt2 = Redmine::Scm::Adapters::MercurialAdapter.new(
+                                  REPOSITORY_PATH,
+                                  nil,
+                                  nil,
+                                  nil,
+                                  ""
+                                )
+        assert_equal "UTF-8", adpt2.path_encoding
+      end
+
       private
 
       def test_hgversion_for(hgversion, version)
@@ -257,10 +364,8 @@
       def test_fake; assert true end
     end
   end
-
 rescue LoadError
   class MercurialMochaFake < ActiveSupport::TestCase
     def test_fake; assert(false, "Requires mocha to run those tests")  end
   end
 end
-
--- a/test/unit/lib/redmine/scm/adapters/subversion_adapter_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/subversion_adapter_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -21,11 +21,10 @@
   require 'mocha'
 
   class SubversionAdapterTest < ActiveSupport::TestCase
-  
+
     if repository_configured?('subversion')
       def setup
-        repo_path = "file://#{self.class.repository_path('subversion')}"
-        @adapter = Redmine::Scm::Adapters::SubversionAdapter.new(repo_path)
+        @adapter = Redmine::Scm::Adapters::SubversionAdapter.new(self.class.subversion_repository_url)
       end
 
       def test_client_version
--- a/test/unit/lib/redmine/unified_diff_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/unified_diff_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -34,6 +34,63 @@
     assert_equal 2, diff.size
   end
   
+  def test_inline_partials
+    diff = Redmine::UnifiedDiff.new(read_diff_fixture('partials.diff'))
+    assert_equal 1, diff.size
+    diff = diff.first
+    assert_equal 43, diff.size
+    
+    assert_equal [51, -1], diff[0].offsets
+    assert_equal [51, -1], diff[1].offsets
+    assert_equal 'Lorem ipsum dolor sit amet, consectetur adipiscing <span>elit</span>', diff[0].html_line
+    assert_equal 'Lorem ipsum dolor sit amet, consectetur adipiscing <span>xx</span>', diff[1].html_line
+    
+    assert_nil diff[2].offsets
+    assert_equal 'Praesent et sagittis dui. Vivamus ac diam diam', diff[2].html_line
+    
+    assert_equal [0, -14], diff[3].offsets
+    assert_equal [0, -14], diff[4].offsets
+    assert_equal '<span>Ut sed</span> auctor justo', diff[3].html_line
+    assert_equal '<span>xxx</span> auctor justo', diff[4].html_line
+    
+    assert_equal [13, -19], diff[6].offsets
+    assert_equal [13, -19], diff[7].offsets
+    
+    assert_equal [24, -8], diff[9].offsets
+    assert_equal [24, -8], diff[10].offsets
+    
+    assert_equal [37, -1], diff[12].offsets
+    assert_equal [37, -1], diff[13].offsets
+    
+    assert_equal [0, -38], diff[15].offsets
+    assert_equal [0, -38], diff[16].offsets
+  end
+  
+  def test_side_by_side_partials
+    diff = Redmine::UnifiedDiff.new(read_diff_fixture('partials.diff'), :type => 'sbs')
+    assert_equal 1, diff.size
+    diff = diff.first
+    assert_equal 32, diff.size
+    
+    assert_equal [51, -1], diff[0].offsets
+    assert_equal 'Lorem ipsum dolor sit amet, consectetur adipiscing <span>elit</span>', diff[0].html_line_left
+    assert_equal 'Lorem ipsum dolor sit amet, consectetur adipiscing <span>xx</span>', diff[0].html_line_right
+    
+    assert_nil diff[1].offsets
+    assert_equal 'Praesent et sagittis dui. Vivamus ac diam diam', diff[1].html_line_left
+    assert_equal 'Praesent et sagittis dui. Vivamus ac diam diam', diff[1].html_line_right
+    
+    assert_equal [0, -14], diff[2].offsets
+    assert_equal '<span>Ut sed</span> auctor justo', diff[2].html_line_left
+    assert_equal '<span>xxx</span> auctor justo', diff[2].html_line_right
+
+    assert_equal [13, -19], diff[4].offsets
+    assert_equal [24, -8], diff[6].offsets
+    assert_equal [37, -1], diff[8].offsets
+    assert_equal [0, -38], diff[10].offsets
+    
+  end
+  
   def test_line_starting_with_dashes
     diff = Redmine::UnifiedDiff.new(<<-DIFF
 --- old.txt Wed Nov 11 14:24:58 2009
--- a/test/unit/lib/redmine/views/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/views/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/views
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/unit/lib/redmine/views
 http://redmine.rubyforge.org/svn
 
 
--- a/test/unit/lib/redmine/views/builders/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/views/builders/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/views/builders
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/unit/lib/redmine/views/builders
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 0eb241e5c91856b3340cf4d848c39119
 2010-12-12T23:24:34.194336Z
 4509
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 aed14e6bc3e5bb08380fe6954d273a6c
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/unit/lib/redmine/wiki_formatting/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/wiki_formatting/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,17 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/wiki_formatting
+V 76
+/svn/!svn/ver/5878/branches/1.2-stable/test/unit/lib/redmine/wiki_formatting
 END
-textile_formatter_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 88
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb
-END
-macros_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/wiki_formatting/macros_test.rb
-END
--- a/test/unit/lib/redmine/wiki_formatting/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/wiki_formatting/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/wiki_formatting
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/test/unit/lib/redmine/wiki_formatting
 http://redmine.rubyforge.org/svn
 
 
 
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-03-14T20:35:36.619571Z
+5133
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:08.000000Z
-5acd95498f8f2e52e8ad2b70961a21ad
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-06-06T13:17:45.000000Z
+577e7247310738d58d7399685323ba1f
+2011-03-14T20:35:36.619571Z
+5133
+jplang
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-3473
+6180
 
 macros_test.rb
 file
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:08.000000Z
+2011-06-06T13:15:00.000000Z
 41000dcb1febd4ce59305bb36a369cf0
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/unit/lib/redmine/wiki_formatting/.svn/text-base/textile_formatter_test.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/wiki_formatting/.svn/text-base/textile_formatter_test.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -64,12 +64,18 @@
       '@<Location /redmine>@'    => '<code>&lt;Location /redmine&gt;</code>'
     )
   end
-  
+
   def test_escaping
     assert_html_output(
       'this is a <script>'      => 'this is a &lt;script&gt;'
     )
   end
+
+  def test_use_of_backslashes_followed_by_numbers_in_headers
+    assert_html_output({
+      'h1. 2009\02\09'      => '<h1>2009\02\09</h1>'
+    }, false)
+  end
   
   def test_double_dashes_should_not_strikethrough
     assert_html_output(
@@ -86,11 +92,120 @@
     )
   end
   
+  def test_blockquote
+    # orig raw text
+    raw = <<-RAW
+John said:
+> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.
+> Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
+> * Donec odio lorem,
+> * sagittis ac,
+> * malesuada in,
+> * adipiscing eu, dolor.
+>
+> >Nulla varius pulvinar diam. Proin id arcu id lorem scelerisque condimentum. Proin vehicula turpis vitae lacus.
+> Proin a tellus. Nam vel neque.
+
+He's right.
+RAW
+    
+    # expected html
+    expected = <<-EXPECTED
+<p>John said:</p>
+<blockquote>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.<br />
+Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
+<ul>
+  <li>Donec odio lorem,</li>
+  <li>sagittis ac,</li>
+  <li>malesuada in,</li>
+  <li>adipiscing eu, dolor.</li>
+</ul>
+<blockquote>
+<p>Nulla varius pulvinar diam. Proin id arcu id lorem scelerisque condimentum. Proin vehicula turpis vitae lacus.</p>
+</blockquote>
+<p>Proin a tellus. Nam vel neque.</p>
+</blockquote>
+<p>He's right.</p>
+EXPECTED
+    
+    assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
+  end
+  
+  def test_table
+    raw = <<-RAW
+This is a table with empty cells:
+
+|cell11|cell12||
+|cell21||cell23|
+|cell31|cell32|cell33|
+RAW
+
+    expected = <<-EXPECTED
+<p>This is a table with empty cells:</p>
+
+<table>
+  <tr><td>cell11</td><td>cell12</td><td></td></tr>
+  <tr><td>cell21</td><td></td><td>cell23</td></tr>
+  <tr><td>cell31</td><td>cell32</td><td>cell33</td></tr>
+</table>
+EXPECTED
+
+    assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
+  end
+  
+  def test_table_with_line_breaks
+    raw = <<-RAW
+This is a table with line breaks:
+
+|cell11
+continued|cell12||
+|-cell21-||cell23
+cell23 line2
+cell23 *line3*|
+|cell31|cell32
+cell32 line2|cell33|
+
+RAW
+
+    expected = <<-EXPECTED
+<p>This is a table with line breaks:</p>
+
+<table>
+  <tr>
+    <td>cell11<br />continued</td>
+    <td>cell12</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td><del>cell21</del></td>
+    <td></td>
+    <td>cell23<br/>cell23 line2<br/>cell23 <strong>line3</strong></td>
+  </tr>
+  <tr>
+    <td>cell31</td>
+    <td>cell32<br/>cell32 line2</td>
+    <td>cell33</td>
+  </tr>
+</table>
+EXPECTED
+
+    assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
+  end
+  
+  def test_textile_should_not_mangle_brackets
+    assert_equal '<p>[msg1][msg2]</p>', to_html('[msg1][msg2]')
+  end
+  
   private
   
-  def assert_html_output(to_test)
+  def assert_html_output(to_test, expect_paragraph = true)
     to_test.each do |text, expected|
-      assert_equal "<p>#{expected}</p>", @formatter.new(text).to_html, "Formatting the following text failed:\n===\n#{text}\n===\n"
+      assert_equal(( expect_paragraph ? "<p>#{expected}</p>" : expected ), @formatter.new(text).to_html, "Formatting the following text failed:\n===\n#{text}\n===\n")
     end
   end
+  
+  def to_html(text)
+    @formatter.new(text).to_html
+  end
 end
--- a/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -64,12 +64,18 @@
       '@<Location /redmine>@'    => '<code>&lt;Location /redmine&gt;</code>'
     )
   end
-  
+
   def test_escaping
     assert_html_output(
       'this is a <script>'      => 'this is a &lt;script&gt;'
     )
   end
+
+  def test_use_of_backslashes_followed_by_numbers_in_headers
+    assert_html_output({
+      'h1. 2009\02\09'      => '<h1>2009\02\09</h1>'
+    }, false)
+  end
   
   def test_double_dashes_should_not_strikethrough
     assert_html_output(
@@ -86,11 +92,120 @@
     )
   end
   
+  def test_blockquote
+    # orig raw text
+    raw = <<-RAW
+John said:
+> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.
+> Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
+> * Donec odio lorem,
+> * sagittis ac,
+> * malesuada in,
+> * adipiscing eu, dolor.
+>
+> >Nulla varius pulvinar diam. Proin id arcu id lorem scelerisque condimentum. Proin vehicula turpis vitae lacus.
+> Proin a tellus. Nam vel neque.
+
+He's right.
+RAW
+    
+    # expected html
+    expected = <<-EXPECTED
+<p>John said:</p>
+<blockquote>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.<br />
+Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
+<ul>
+  <li>Donec odio lorem,</li>
+  <li>sagittis ac,</li>
+  <li>malesuada in,</li>
+  <li>adipiscing eu, dolor.</li>
+</ul>
+<blockquote>
+<p>Nulla varius pulvinar diam. Proin id arcu id lorem scelerisque condimentum. Proin vehicula turpis vitae lacus.</p>
+</blockquote>
+<p>Proin a tellus. Nam vel neque.</p>
+</blockquote>
+<p>He's right.</p>
+EXPECTED
+    
+    assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
+  end
+  
+  def test_table
+    raw = <<-RAW
+This is a table with empty cells:
+
+|cell11|cell12||
+|cell21||cell23|
+|cell31|cell32|cell33|
+RAW
+
+    expected = <<-EXPECTED
+<p>This is a table with empty cells:</p>
+
+<table>
+  <tr><td>cell11</td><td>cell12</td><td></td></tr>
+  <tr><td>cell21</td><td></td><td>cell23</td></tr>
+  <tr><td>cell31</td><td>cell32</td><td>cell33</td></tr>
+</table>
+EXPECTED
+
+    assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
+  end
+  
+  def test_table_with_line_breaks
+    raw = <<-RAW
+This is a table with line breaks:
+
+|cell11
+continued|cell12||
+|-cell21-||cell23
+cell23 line2
+cell23 *line3*|
+|cell31|cell32
+cell32 line2|cell33|
+
+RAW
+
+    expected = <<-EXPECTED
+<p>This is a table with line breaks:</p>
+
+<table>
+  <tr>
+    <td>cell11<br />continued</td>
+    <td>cell12</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td><del>cell21</del></td>
+    <td></td>
+    <td>cell23<br/>cell23 line2<br/>cell23 <strong>line3</strong></td>
+  </tr>
+  <tr>
+    <td>cell31</td>
+    <td>cell32<br/>cell32 line2</td>
+    <td>cell33</td>
+  </tr>
+</table>
+EXPECTED
+
+    assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
+  end
+  
+  def test_textile_should_not_mangle_brackets
+    assert_equal '<p>[msg1][msg2]</p>', to_html('[msg1][msg2]')
+  end
+  
   private
   
-  def assert_html_output(to_test)
+  def assert_html_output(to_test, expect_paragraph = true)
     to_test.each do |text, expected|
-      assert_equal "<p>#{expected}</p>", @formatter.new(text).to_html, "Formatting the following text failed:\n===\n#{text}\n===\n"
+      assert_equal(( expect_paragraph ? "<p>#{expected}</p>" : expected ), @formatter.new(text).to_html, "Formatting the following text failed:\n===\n#{text}\n===\n")
     end
   end
+  
+  def to_html(text)
+    @formatter.new(text).to_html
+  end
 end
--- a/test/unit/mail_handler_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/mail_handler_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,18 +1,18 @@
 # encoding: utf-8
 #
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,7 +20,7 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class MailHandlerTest < ActiveSupport::TestCase
-  fixtures :users, :projects, 
+  fixtures :users, :projects,
                    :enabled_modules,
                    :roles,
                    :members,
@@ -39,14 +39,14 @@
                    :custom_fields_projects,
                    :boards,
                    :messages
-  
+
   FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures/mail_handler'
-  
+
   def setup
     ActionMailer::Base.deliveries.clear
     Setting.notified_events = Redmine::Notifiable.all.collect(&:name)
   end
-  
+
   def test_add_issue
     ActionMailer::Base.deliveries.clear
     # This email contains: 'Project: onlinestore'
@@ -70,12 +70,13 @@
     # keywords should be removed from the email body
     assert !issue.description.match(/^Project:/i)
     assert !issue.description.match(/^Status:/i)
+    assert !issue.description.match(/^Start Date:/i)
     # Email notification should be sent
     mail = ActionMailer::Base.deliveries.last
     assert_not_nil mail
     assert mail.subject.include?('New ticket on a given project')
   end
-  
+
   def test_add_issue_with_default_tracker
     # This email contains: 'Project: onlinestore'
     issue = submit_email('ticket_on_given_project.eml', :issue => {:tracker => 'Support request'})
@@ -94,7 +95,7 @@
     assert_equal Project.find(2), issue.project
     assert_equal IssueStatus.find_by_name("Resolved"), issue.status
   end
-  
+
   def test_add_issue_with_attributes_override
     issue = submit_email('ticket_with_attributes.eml', :allow_override => 'tracker,category,priority')
     assert issue.is_a?(Issue)
@@ -108,7 +109,7 @@
     assert_equal 'Urgent', issue.priority.to_s
     assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
   end
-  
+
   def test_add_issue_with_partial_attributes_override
     issue = submit_email('ticket_with_attributes.eml', :issue => {:priority => 'High'}, :allow_override => ['tracker'])
     assert issue.is_a?(Issue)
@@ -122,7 +123,7 @@
     assert_equal 'High', issue.priority.to_s
     assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
   end
-  
+
   def test_add_issue_with_spaces_between_attribute_and_separator
     issue = submit_email('ticket_with_spaces_between_attribute_and_separator.eml', :allow_override => 'tracker,category,priority')
     assert issue.is_a?(Issue)
@@ -137,7 +138,6 @@
     assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
   end
 
-  
   def test_add_issue_with_attachment_to_specific_project
     issue = submit_email('ticket_with_attachment.eml', :issue => {:project => 'onlinestore'})
     assert issue.is_a?(Issue)
@@ -153,7 +153,7 @@
     assert_equal 'image/jpeg', issue.attachments.first.content_type
     assert_equal 10790, issue.attachments.first.filesize
   end
-  
+
   def test_add_issue_with_custom_fields
     issue = submit_email('ticket_with_custom_fields.eml', :issue => {:project => 'onlinestore'})
     assert issue.is_a?(Issue)
@@ -163,7 +163,7 @@
     assert_equal 'Value for a custom field', issue.custom_value_for(CustomField.find_by_name('Searchable field')).value
     assert !issue.description.match(/^searchable field:/i)
   end
-  
+
   def test_add_issue_with_cc
     issue = submit_email('ticket_with_cc.eml', :issue => {:project => 'ecookbook'})
     assert issue.is_a?(Issue)
@@ -172,13 +172,13 @@
     assert issue.watched_by?(User.find_by_mail('dlopper@somenet.foo'))
     assert_equal 1, issue.watcher_user_ids.size
   end
-  
+
   def test_add_issue_by_unknown_user
     assert_no_difference 'User.count' do
       assert_equal false, submit_email('ticket_by_unknown_user.eml', :issue => {:project => 'ecookbook'})
     end
   end
-  
+
   def test_add_issue_by_anonymous_user
     Role.anonymous.add_permission!(:add_issues)
     assert_no_difference 'User.count' do
@@ -196,7 +196,7 @@
       assert issue.author.anonymous?
     end
   end
-  
+
   def test_add_issue_by_anonymous_user_on_private_project
     Role.anonymous.add_permission!(:add_issues)
     assert_no_difference 'User.count' do
@@ -205,7 +205,7 @@
       end
     end
   end
-  
+
   def test_add_issue_by_anonymous_user_on_private_project_without_permission_check
     assert_no_difference 'User.count' do
       assert_difference 'Issue.count' do
@@ -217,7 +217,7 @@
       end
     end
   end
-  
+
   def test_add_issue_by_created_user
     Setting.default_language = 'en'
     assert_difference 'User.count' do
@@ -227,7 +227,7 @@
       assert_equal 'john.doe@somenet.foo', issue.author.mail
       assert_equal 'John', issue.author.firstname
       assert_equal 'Doe', issue.author.lastname
-    
+
       # account information
       email = ActionMailer::Base.deliveries.first
       assert_not_nil email
@@ -237,7 +237,7 @@
       assert_equal issue.author, User.try_to_login(login, password)
     end
   end
-  
+
   def test_add_issue_without_from_header
     Role.anonymous.add_permission!(:add_issues)
     assert_equal false, submit_email('ticket_without_from_header.eml')
@@ -270,7 +270,7 @@
     assert_equal 'Urgent', issue.priority.to_s
     assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
   end
-  
+
   def test_add_issue_with_japanese_keywords
     tracker = Tracker.create!(:name => '開発')
     Project.find(1).trackers << tracker
@@ -294,7 +294,7 @@
     assert issue.is_a?(Issue)
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_add_issue_note
     journal = submit_email('ticket_reply.eml')
     assert journal.is_a?(Journal)
@@ -318,6 +318,9 @@
     assert_equal '2010-12-31', issue.due_date.to_s
     assert_equal User.find_by_login('jsmith'), issue.assigned_to
     assert_equal "52.6", issue.custom_value_for(CustomField.find_by_name('Float field')).value
+    # keywords should be removed from the email body
+    assert !journal.notes.match(/^Status:/i)
+    assert !journal.notes.match(/^Start Date:/i)
   end
 
   def test_add_issue_note_should_send_email_notification
@@ -326,7 +329,7 @@
     assert journal.is_a?(Journal)
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_add_issue_note_should_not_set_defaults
     journal = submit_email('ticket_reply.eml', :issue => {:tracker => 'Support request', :priority => 'High'})
     assert journal.is_a?(Journal)
@@ -334,7 +337,7 @@
     assert_equal 'Feature request', journal.issue.tracker.name
     assert_equal 'Normal', journal.issue.priority.name
   end
-  
+
   def test_reply_to_a_message
     m = submit_email('message_reply.eml')
     assert m.is_a?(Message)
@@ -344,7 +347,7 @@
     # The email replies to message #2 which is part of the thread of message #1
     assert_equal Message.find(1), m.parent
   end
-  
+
   def test_reply_to_a_message_by_subject
     m = submit_email('message_reply_by_subject.eml')
     assert m.is_a?(Message)
@@ -353,7 +356,7 @@
     assert_equal 'Reply to the first post', m.subject
     assert_equal Message.find(1), m.parent
   end
-  
+
   def test_should_strip_tags_of_html_only_emails
     issue = submit_email('ticket_html_only.eml', :issue => {:project => 'ecookbook'})
     assert issue.is_a?(Issue)
@@ -381,7 +384,6 @@
       setup do
         Setting.mail_handler_body_delimiters = '---'
       end
-
       should "truncate the email at the delimiter for the issue" do
         issue = submit_email('ticket_on_given_project.eml')
         assert_issue_created(issue)
@@ -396,39 +398,32 @@
       setup do
         Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
       end
-
       should "truncate the email at the delimiter with the quoted reply symbols (>)" do
         journal = submit_email('issue_update_with_quoted_reply_above.eml')
         assert journal.is_a?(Journal)
         assert journal.notes.include?('An update to the issue by the sender.')
         assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---"))
         assert !journal.notes.include?('Looks like the JSON api for projects was missed.')
+      end
+    end
 
-      end
-
-    end
-    
     context "with multiple quoted replies (e.g. reply to a reply of a Redmine email notification)" do
       setup do
         Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
       end
-
       should "truncate the email at the delimiter with the quoted reply symbols (>)" do
         journal = submit_email('issue_update_with_multiple_quoted_reply_above.eml')
         assert journal.is_a?(Journal)
         assert journal.notes.include?('An update to the issue by the sender.')
         assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---"))
         assert !journal.notes.include?('Looks like the JSON api for projects was missed.')
-
       end
-
     end
 
     context "with multiple strings" do
       setup do
         Setting.mail_handler_body_delimiters = "---\nBREAK"
       end
-
       should "truncate the email at the first delimiter found (BREAK)" do
         issue = submit_email('ticket_on_given_project.eml')
         assert_issue_created(issue)
@@ -440,7 +435,7 @@
       end
     end
   end
-  
+
   def test_email_with_long_subject_line
     issue = submit_email('ticket_with_long_subject.eml')
     assert issue.is_a?(Issue)
@@ -448,7 +443,7 @@
   end
 
   private
-  
+
   def submit_email(filename, options={})
     raw = IO.read(File.join(FIXTURES_PATH, filename))
     MailHandler.receive(raw, options)
--- a/test/unit/mailer_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/mailer_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -20,12 +20,13 @@
 class MailerTest < ActiveSupport::TestCase
   include Redmine::I18n
   include ActionController::Assertions::SelectorAssertions
-  fixtures :projects, :enabled_modules, :issues, :users, :members, :member_roles, :roles, :documents, :attachments, :news, :tokens, :journals, :journal_details, :changesets, :trackers, :issue_statuses, :enumerations, :messages, :boards, :repositories
+  fixtures :all
   
   def setup
     ActionMailer::Base.deliveries.clear
     Setting.host_name = 'mydomain.foo'
     Setting.protocol = 'http'
+    Setting.plain_text_mail = '0'
   end
   
   def test_generated_links_in_emails
@@ -278,6 +279,9 @@
     assert Mailer.deliver_attachments_added(attachements)
     assert_not_nil last_email.bcc
     assert last_email.bcc.any?
+    assert_select_email do
+      assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
+    end
   end
   
   def test_project_file_added
@@ -285,6 +289,9 @@
     assert Mailer.deliver_attachments_added(attachements)
     assert_not_nil last_email.bcc
     assert last_email.bcc.any?
+    assert_select_email do
+      assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
+    end
   end
   
   def test_news_added
@@ -295,6 +302,14 @@
     end
   end
   
+  def test_news_comment_added
+    comment = Comment.find(2)
+    valid_languages.each do |lang|
+      Setting.default_language = lang.to_s
+      assert Mailer.deliver_news_comment_added(comment)
+    end
+  end
+  
   def test_message_posted
     message = Message.find(:first)
     recipients = ([message.root] + message.root.children).collect {|m| m.author.mail if m.author}
@@ -425,9 +440,6 @@
           end
         end
       end
-      
     end
-    
   end
-  
 end
--- a/test/unit/project_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/project_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -182,6 +182,41 @@
     assert_nil Issue.first(:conditions => {:project_id => @ecookbook.id})
   end
   
+  def test_destroying_root_projects_should_clear_data
+    Project.roots.each do |root|
+      root.destroy
+    end
+    
+    assert_equal 0, Project.count, "Projects were not deleted: #{Project.all.inspect}"
+    assert_equal 0, Member.count, "Members were not deleted: #{Member.all.inspect}"
+    assert_equal 0, MemberRole.count
+    assert_equal 0, Issue.count
+    assert_equal 0, Journal.count
+    assert_equal 0, JournalDetail.count
+    assert_equal 0, Attachment.count
+    assert_equal 0, EnabledModule.count
+    assert_equal 0, IssueCategory.count
+    assert_equal 0, IssueRelation.count
+    assert_equal 0, Board.count
+    assert_equal 0, Message.count
+    assert_equal 0, News.count
+    assert_equal 0, Query.count(:conditions => "project_id IS NOT NULL")
+    assert_equal 0, Repository.count
+    assert_equal 0, Changeset.count
+    assert_equal 0, Change.count
+    assert_equal 0, Comment.count
+    assert_equal 0, TimeEntry.count
+    assert_equal 0, Version.count
+    assert_equal 0, Watcher.count
+    assert_equal 0, Wiki.count
+    assert_equal 0, WikiPage.count
+    assert_equal 0, WikiContent.count
+    assert_equal 0, WikiContent::Version.count
+    assert_equal 0, Project.connection.select_all("SELECT * FROM projects_trackers").size
+    assert_equal 0, Project.connection.select_all("SELECT * FROM custom_fields_projects").size
+    assert_equal 0, CustomValue.count(:conditions => {:customized_type => ['Project', 'Issue', 'TimeEntry', 'Version']})
+  end
+  
   def test_move_an_orphan_project_to_a_root_project
     sub = Project.find(2)
     sub.set_parent! @ecookbook
@@ -553,6 +588,14 @@
     assert_nil Project.next_identifier
   end
   
+  def test_enabled_module_names
+    with_settings :default_projects_modules => ['issue_tracking', 'repository'] do
+      project = Project.new
+      
+      project.enabled_module_names = %w(issue_tracking news)
+      assert_equal %w(issue_tracking news), project.enabled_module_names.sort
+    end
+  end
 
   def test_enabled_module_names_should_not_recreate_enabled_modules
     project = Project.find(1)
--- a/test/unit/query_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/query_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -191,6 +191,29 @@
     result.each {|issue| assert issue.subject.downcase.include?('unable') }
   end
   
+  def test_range_for_this_week_with_week_starting_on_monday
+    I18n.locale = :fr
+    assert_equal '1', I18n.t(:general_first_day_of_week)
+    
+    Date.stubs(:today).returns(Date.parse('2011-04-29'))
+    
+    query = Query.new(:project => Project.find(1), :name => '_')
+    query.add_filter('due_date', 'w', [''])
+    assert query.statement.match(/issues\.due_date > '2011-04-24 23:59:59(\.9+)?' AND issues\.due_date <= '2011-05-01 23:59:59(\.9+)?/), "range not found in #{query.statement}"
+    I18n.locale = :en
+  end
+  
+  def test_range_for_this_week_with_week_starting_on_sunday
+    I18n.locale = :en
+    assert_equal '7', I18n.t(:general_first_day_of_week)
+    
+    Date.stubs(:today).returns(Date.parse('2011-04-29'))
+    
+    query = Query.new(:project => Project.find(1), :name => '_')
+    query.add_filter('due_date', 'w', [''])
+    assert query.statement.match(/issues\.due_date > '2011-04-23 23:59:59(\.9+)?' AND issues\.due_date <= '2011-04-30 23:59:59(\.9+)?/), "range not found in #{query.statement}"
+  end
+  
   def test_operator_does_not_contains
     query = Query.new(:project => Project.find(1), :name => '_')
     query.add_filter('subject', '!~', ['uNable'])
@@ -218,6 +241,14 @@
     User.current = nil
   end
   
+  def test_statement_should_be_nil_with_no_filters
+    q = Query.new(:name => '_')
+    q.filters = {}
+    
+    assert q.valid?
+    assert_nil q.statement
+  end
+  
   def test_default_columns
     q = Query.new
     assert !q.columns.empty? 
--- a/test/unit/repository_bazaar_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/repository_bazaar_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -71,6 +71,34 @@
       assert_equal 'file', entries.last.kind
       assert_equal 'edit.png', entries.last.name
     end
+
+    def test_previous
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('3')
+      assert_equal @repository.find_changeset_by_name('2'), changeset.previous
+    end
+
+    def test_previous_nil
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('1')
+      assert_nil changeset.previous
+    end
+
+    def test_next
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('2')
+      assert_equal @repository.find_changeset_by_name('3'), changeset.next
+    end
+
+    def test_next_nil
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('4')
+      assert_nil changeset.next
+    end
   else
     puts "Bazaar test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/repository_cvs_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/repository_cvs_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,36 +19,37 @@
 require 'pp'
 class RepositoryCvsTest < ActiveSupport::TestCase
   fixtures :projects
-  
+
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/cvs_repository'
   REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
   # CVS module
-  MODULE_NAME = 'test'
-  
+  MODULE_NAME    = 'test'
+  CHANGESETS_NUM = 7
+
   def setup
     @project = Project.find(3)
-    @repository = Repository::Cvs.create(:project => @project, 
+    @repository = Repository::Cvs.create(:project  => @project,
                                          :root_url => REPOSITORY_PATH,
-                                         :url => MODULE_NAME,
+                                         :url      => MODULE_NAME,
                                          :log_encoding => 'UTF-8')
     assert @repository
   end
-  
-  if File.directory?(REPOSITORY_PATH)  
+
+  if File.directory?(REPOSITORY_PATH)
     def test_fetch_changesets_from_scratch
       assert_equal 0, @repository.changesets.count
       @repository.fetch_changesets
       @repository.reload
-      
-      assert_equal 5, @repository.changesets.count
-      assert_equal 14, @repository.changes.count
+
+      assert_equal CHANGESETS_NUM, @repository.changesets.count
+      assert_equal 16, @repository.changes.count
       assert_not_nil @repository.changesets.find_by_comments('Two files changed')
 
       r2 = @repository.changesets.find_by_revision('2')
       assert_equal 'v1-20071213-162510', r2.scmid
     end
-    
+
     def test_fetch_changesets_incremental
       assert_equal 0, @repository.changesets.count
       @repository.fetch_changesets
@@ -69,26 +70,98 @@
 
       @repository.fetch_changesets
       @repository.reload
-      assert_equal 5, @repository.changesets.count
+      assert_equal CHANGESETS_NUM, @repository.changesets.count
 
-      assert_equal %w|5 4 3 2 1|, @repository.changesets.collect(&:revision)
-      rev5_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
+      assert_equal %w|7 6 5 4 3 2 1|, @repository.changesets.collect(&:revision)
+      rev5_commit = @repository.changesets.find_by_revision('5')
       assert_equal 'HEAD-20071213-163001', rev5_commit.scmid
        # 2007-12-14 01:30:01 +0900
       rev5_committed_on = Time.gm(2007, 12, 13, 16, 30, 1)
       assert_equal rev5_committed_on, rev5_commit.committed_on
     end
-    
+
     def test_deleted_files_should_not_be_listed
       assert_equal 0, @repository.changesets.count
       @repository.fetch_changesets
       @repository.reload
-      assert_equal 5, @repository.changesets.count
+      assert_equal CHANGESETS_NUM, @repository.changesets.count
 
       entries = @repository.entries('sources')
       assert entries.detect {|e| e.name == 'watchers_controller.rb'}
       assert_nil entries.detect {|e| e.name == 'welcome_controller.rb'}
     end
+
+    def test_entries_rev3
+      @repository.fetch_changesets
+      @repository.reload
+      entries = @repository.entries('', '3')
+      assert_equal 3, entries.size
+      assert_equal entries[2].name, "README"
+      assert_equal entries[2].lastrev.time, Time.gm(2007, 12, 13, 16, 27, 22)
+      assert_equal entries[2].lastrev.identifier, '3'
+      assert_equal entries[2].lastrev.revision, '3'
+      assert_equal entries[2].lastrev.author, 'LANG'
+    end
+
+    def test_entries_invalid_path
+      @repository.fetch_changesets
+      @repository.reload
+      assert_nil @repository.entries('missing')
+      assert_nil @repository.entries('missing', '3')
+    end
+
+    def test_entries_invalid_revision
+      @repository.fetch_changesets
+      @repository.reload
+      assert_nil @repository.entries('', '123')
+    end
+
+    def test_cat
+      @repository.fetch_changesets
+      @repository.reload
+      buf = @repository.cat('README')
+      assert buf
+      lines = buf.split("\n")
+      assert_equal 3, lines.length
+      buf = lines[1].gsub(/\r$/, "")
+      assert_equal 'with one change', buf
+      buf = @repository.cat('README', '1')
+      assert buf
+      lines = buf.split("\n")
+      assert_equal 1, lines.length
+      buf = lines[0].gsub(/\r$/, "")
+      assert_equal 'CVS test repository', buf
+      assert_nil @repository.cat('missing.rb')
+
+      # sources/welcome_controller.rb is removed at revision 5.
+      assert @repository.cat('sources/welcome_controller.rb', '4')
+      assert @repository.cat('sources/welcome_controller.rb', '5').blank?
+
+      # invalid revision
+      assert @repository.cat('README', '123').blank?
+    end
+
+    def test_annotate
+      @repository.fetch_changesets
+      @repository.reload
+      ann = @repository.annotate('README')
+      assert ann
+      assert_equal 3, ann.revisions.length
+      assert_equal '1.2', ann.revisions[1].revision
+      assert_equal 'LANG', ann.revisions[1].author
+      assert_equal 'with one change', ann.lines[1]
+
+      ann = @repository.annotate('README', '1')
+      assert ann
+      assert_equal 1, ann.revisions.length
+      assert_equal '1.1', ann.revisions[0].revision
+      assert_equal 'LANG', ann.revisions[0].author
+      assert_equal 'CVS test repository', ann.lines[0]
+
+     # invalid revision
+     assert_nil @repository.annotate('README', '123')
+   end
+
   else
     puts "CVS test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/repository_darcs_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/repository_darcs_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -52,6 +52,12 @@
       assert_equal 6, @repository.changesets.count
     end
 
+    def test_entries_invalid_revision
+      @repository.fetch_changesets
+      @repository.reload
+      assert_nil @repository.entries('', '123')
+    end
+
     def test_deleted_files_should_not_be_listed
       @repository.fetch_changesets
       @repository.reload
--- a/test/unit/repository_filesystem_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/repository_filesystem_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,34 +19,36 @@
 
 class RepositoryFilesystemTest < ActiveSupport::TestCase
   fixtures :projects
-  
+
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/filesystem_repository'
-  
+
   def setup
-    @project = Project.find(1)
+    @project = Project.find(3)
     Setting.enabled_scm << 'Filesystem' unless Setting.enabled_scm.include?('Filesystem')
-    assert @repository = Repository::Filesystem.create(:project => @project, :url => REPOSITORY_PATH)
+    @repository = Repository::Filesystem.create(
+                               :project => @project,
+                               :url     => REPOSITORY_PATH
+                                 )
+    assert @repository
   end
-  
-  if File.directory?(REPOSITORY_PATH)  
+
+  if File.directory?(REPOSITORY_PATH)
     def test_fetch_changesets
       @repository.fetch_changesets
       @repository.reload
-      
       assert_equal 0, @repository.changesets.count
       assert_equal 0, @repository.changes.count
     end
-        
+
     def test_entries
-      assert_equal 2, @repository.entries("", 2).size
+      assert_equal 3, @repository.entries("", 2).size
       assert_equal 2, @repository.entries("dir", 3).size
     end
 
     def test_cat
       assert_equal "TEST CAT\n", @repository.scm.cat("test")
     end
-
   else
     puts "Filesystem test repository NOT FOUND. Skipping unit tests !!! See doc/RUNNING_TESTS."
     def test_fake; assert true end
--- a/test/unit/repository_git_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/repository_git_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -25,21 +25,43 @@
   REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
 
   FELIX_HEX  = "Felix Sch\xC3\xA4fer"
+  CHAR_1_HEX = "\xc3\x9c"
 
-  def setup
-    Setting.commit_logs_encoding = 'UTF-8'
-    @project = Project.find(3)
-    @repository = Repository::Git.create(:project => @project, :url => REPOSITORY_PATH)
-    assert @repository
-  end
+  ## Ruby uses ANSI api to fork a process on Windows.
+  ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
+  ## and these are incompatible with ASCII.
+  # WINDOWS_PASS = Redmine::Platform.mswin?
+  WINDOWS_PASS = false
 
-  if File.directory?(REPOSITORY_PATH)  
+  if File.directory?(REPOSITORY_PATH)
+    def setup
+      klass = Repository::Git
+      assert_equal "Git", klass.scm_name
+      assert klass.scm_adapter_class
+      assert_not_equal "", klass.scm_command
+      assert_equal true, klass.scm_available
+
+      @project = Project.find(3)
+      @repository = Repository::Git.create(
+                        :project       => @project,
+                        :url           => REPOSITORY_PATH,
+                        :path_encoding => 'ISO-8859-1'
+                        )
+      assert @repository
+      @char_1        = CHAR_1_HEX.dup
+      if @char_1.respond_to?(:force_encoding)
+        @char_1.force_encoding('UTF-8')
+      end
+    end
+
     def test_fetch_changesets_from_scratch
+      assert_nil @repository.extra_info
+
       @repository.fetch_changesets
       @repository.reload
 
-      assert_equal 16, @repository.changesets.count
-      assert_equal 25, @repository.changes.count
+      assert_equal 21, @repository.changesets.count
+      assert_equal 33, @repository.changes.count
 
       commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
       assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
@@ -54,27 +76,265 @@
       change = commit.changes.sort_by(&:path).first
       assert_equal "README", change.path
       assert_equal "A", change.action
+
+      assert_equal 4, @repository.extra_info["branches"].size
     end
-    
+
     def test_fetch_changesets_incremental
       @repository.fetch_changesets
-      # Remove the 3 latest changesets
-      @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy)
+      @repository.reload
+      assert_equal 21, @repository.changesets.count
+      assert_equal 33, @repository.changes.count
+      extra_info_db = @repository.extra_info["branches"]
+      assert_equal 4, extra_info_db.size
+      assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
+                    extra_info_db["latin-1-path-encoding"]["last_scmid"]
+      assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
+                    extra_info_db["master"]["last_scmid"]
+
+      del_revs = [
+          "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
+          "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
+          "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
+          "deff712f05a90d96edbd70facc47d944be5897e3",
+          "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
+          "7e61ac704deecde634b51e59daa8110435dcb3da",
+         ]
+      @repository.changesets.each do |rev|
+        rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
+      end
       @repository.reload
       cs1 = @repository.changesets
-      assert_equal 13, cs1.count
-
-      rev_a_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
-      assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.revision
-      # Mon Jul 5 22:34:26 2010 +0200
-      rev_a_committed_on = Time.gm(2010, 7, 5, 20, 34, 26)
-      assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.scmid
-      assert_equal rev_a_committed_on, rev_a_commit.committed_on
-      latest_rev = @repository.latest_changeset
-      assert_equal rev_a_committed_on, latest_rev.committed_on
+      assert_equal 15, cs1.count
+      h = @repository.extra_info.dup
+      h["branches"]["master"]["last_scmid"] =
+            "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
+      @repository.merge_extra_info(h)
+      @repository.save
+      @repository.reload
+      extra_info_db_1 = @repository.extra_info["branches"]
+      assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
+                    extra_info_db_1["master"]["last_scmid"]
 
       @repository.fetch_changesets
-      assert_equal 16, @repository.changesets.count
+      assert_equal 21, @repository.changesets.count
+    end
+
+    def test_fetch_changesets_invalid_rev
+      @repository.fetch_changesets
+      @repository.reload
+      assert_equal 21, @repository.changesets.count
+      assert_equal 33, @repository.changes.count
+      extra_info_db = @repository.extra_info["branches"]
+      assert_equal 4, extra_info_db.size
+      assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
+                    extra_info_db["latin-1-path-encoding"]["last_scmid"]
+      assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
+                    extra_info_db["master"]["last_scmid"]
+
+      del_revs = [
+          "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
+          "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
+          "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
+          "deff712f05a90d96edbd70facc47d944be5897e3",
+          "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
+          "7e61ac704deecde634b51e59daa8110435dcb3da",
+         ]
+      @repository.changesets.each do |rev|
+        rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
+      end
+      @repository.reload
+      cs1 = @repository.changesets
+      assert_equal 15, cs1.count
+      h = @repository.extra_info.dup
+      h["branches"]["master"]["last_scmid"] =
+            "abcd1234efgh"
+      @repository.merge_extra_info(h)
+      @repository.save
+      @repository.reload
+      extra_info_db_1 = @repository.extra_info["branches"]
+      assert_equal "abcd1234efgh",
+                    extra_info_db_1["master"]["last_scmid"]
+
+      @repository.fetch_changesets
+      assert_equal 15, @repository.changesets.count
+    end
+
+    def test_db_consistent_ordering_init
+      assert_nil @repository.extra_info
+      @repository.fetch_changesets
+      @repository.reload
+      assert_equal 1, @repository.extra_info["db_consistent"]["ordering"]
+    end
+
+    def test_db_consistent_ordering_before_1_2
+      assert_nil @repository.extra_info
+      @repository.fetch_changesets
+      @repository.reload
+      assert_equal 21, @repository.changesets.count
+      assert_not_nil @repository.extra_info
+      @repository.write_attribute(:extra_info, nil)
+      @repository.save
+      assert_nil @repository.extra_info
+      assert_equal 21, @repository.changesets.count
+      @repository.fetch_changesets
+      @repository.reload
+      assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
+
+      del_revs = [
+          "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
+          "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
+          "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
+          "deff712f05a90d96edbd70facc47d944be5897e3",
+          "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
+          "7e61ac704deecde634b51e59daa8110435dcb3da",
+         ]
+      @repository.changesets.each do |rev|
+        rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
+      end
+      @repository.reload
+      cs1 = @repository.changesets
+      assert_equal 15, cs1.count
+      assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
+      h = @repository.extra_info.dup
+      h["branches"]["master"]["last_scmid"] =
+            "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
+      @repository.merge_extra_info(h)
+      @repository.save
+      @repository.reload
+      extra_info_db_1 = @repository.extra_info["branches"]
+      assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
+                    extra_info_db_1["master"]["last_scmid"]
+
+      @repository.fetch_changesets
+      assert_equal 21, @repository.changesets.count
+      assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
+    end
+
+    def test_latest_changesets
+      @repository.fetch_changesets
+      @repository.reload
+      # with limit
+      changesets = @repository.latest_changesets('', nil, 2)
+      assert_equal 2, changesets.size
+
+      # with path
+      changesets = @repository.latest_changesets('images', nil)
+      assert_equal [
+              'deff712f05a90d96edbd70facc47d944be5897e3',
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', nil)
+      assert_equal [
+              '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf',
+              '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8',
+              '713f4944648826f558cf548222f813dabe7cbb04',
+              '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      # with path, revision and limit
+      changesets = @repository.latest_changesets('images', '899a15dba')
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('images', '899a15dba', 1)
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', '899a15dba')
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', '899a15dba', 1)
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+          ], changesets.collect(&:revision)
+
+      # with path, tag and limit
+      changesets = @repository.latest_changesets('images', 'tag01.annotated')
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('images', 'tag01.annotated', 1)
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', 'tag01.annotated')
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', 'tag01.annotated', 1)
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+          ], changesets.collect(&:revision)
+
+      # with path, branch and limit
+      changesets = @repository.latest_changesets('images', 'test_branch')
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('images', 'test_branch', 1)
+      assert_equal [
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', 'test_branch')
+      assert_equal [
+              '713f4944648826f558cf548222f813dabe7cbb04',
+              '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
+              '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
+              '7234cb2750b63f47bff735edc50a1c0a433c2518',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', 'test_branch', 2)
+      assert_equal [
+              '713f4944648826f558cf548222f813dabe7cbb04',
+              '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
+          ], changesets.collect(&:revision)
+
+      # latin-1 encoding path
+      changesets = @repository.latest_changesets(
+                    "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
+      assert_equal [
+              '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
+              '4fc55c43bf3d3dc2efb66145365ddc17639ce81e',
+          ], changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets(
+                    "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89', 1)
+      assert_equal [
+              '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
+          ], changesets.collect(&:revision)
+    end
+
+    def test_latest_changesets_latin_1_dir
+      if WINDOWS_PASS
+        #
+      else
+        @repository.fetch_changesets
+        @repository.reload
+        changesets = @repository.latest_changesets(
+                    "latin-1-dir/test-#{@char_1}-subdir", '1ca7f5ed')
+        assert_equal [
+              '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127',
+          ], changesets.collect(&:revision)
+      end
     end
 
     def test_find_changeset_by_name
@@ -97,14 +357,16 @@
     def test_identifier
       @repository.fetch_changesets
       @repository.reload
-      c = @repository.changesets.find_by_revision('7234cb2750b63f47bff735edc50a1c0a433c2518')
+      c = @repository.changesets.find_by_revision(
+                          '7234cb2750b63f47bff735edc50a1c0a433c2518')
       assert_equal c.scmid, c.identifier
     end
 
     def test_format_identifier
       @repository.fetch_changesets
       @repository.reload
-      c = @repository.changesets.find_by_revision('7234cb2750b63f47bff735edc50a1c0a433c2518')
+      c = @repository.changesets.find_by_revision(
+                          '7234cb2750b63f47bff735edc50a1c0a433c2518')
       assert_equal '7234cb27', c.format_identifier
     end
 
@@ -121,13 +383,54 @@
     def test_log_utf8
       @repository.fetch_changesets
       @repository.reload
-      str_felix_hex  = FELIX_HEX
+      str_felix_hex  = FELIX_HEX.dup
       if str_felix_hex.respond_to?(:force_encoding)
           str_felix_hex.force_encoding('UTF-8')
       end
-      c = @repository.changesets.find_by_revision('ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
+      c = @repository.changesets.find_by_revision(
+                        'ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
       assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
     end
+
+    def test_previous
+      @repository.fetch_changesets
+      @repository.reload
+      %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
+        changeset = @repository.find_changeset_by_name(r1)
+        %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
+          assert_equal @repository.find_changeset_by_name(r2), changeset.previous
+        end
+      end
+    end
+
+    def test_previous_nil
+      @repository.fetch_changesets
+      @repository.reload
+      %w|7234cb2750b63f47bff735edc50a1c0a433c2518 7234cb2|.each do |r1|
+        changeset = @repository.find_changeset_by_name(r1)
+        assert_nil changeset.previous
+      end
+    end
+
+    def test_next
+      @repository.fetch_changesets
+      @repository.reload
+      %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
+        changeset = @repository.find_changeset_by_name(r2)
+        %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
+        assert_equal @repository.find_changeset_by_name(r1), changeset.next
+        end
+      end
+    end
+
+    def test_next_nil
+      @repository.fetch_changesets
+      @repository.reload
+      %w|67e7792ce20ccae2e4bb73eed09bb397819c8834 67e7792ce20cca|.each do |r1|
+        changeset = @repository.find_changeset_by_name(r1)
+        assert_nil changeset.next
+      end
+    end
   else
     puts "Git test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/repository_mercurial_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/repository_mercurial_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,22 +19,45 @@
 
 class RepositoryMercurialTest < ActiveSupport::TestCase
   fixtures :projects
-  
+
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
 
-  def setup
-    @project = Project.find(3)
-    @repository = Repository::Mercurial.create(:project => @project, :url => REPOSITORY_PATH)
-    assert @repository
-  end
+  CHAR_1_HEX = "\xc3\x9c"
 
-  if File.directory?(REPOSITORY_PATH)  
+  if File.directory?(REPOSITORY_PATH)
+
+    def setup
+      klass = Repository::Mercurial
+      assert_equal "Mercurial", klass.scm_name
+      assert klass.scm_adapter_class
+      assert_not_equal "", klass.scm_command
+      assert_equal true, klass.scm_available
+
+      @project = Project.find(3)
+      @repository = Repository::Mercurial.create(
+                      :project => @project,
+                      :url     => REPOSITORY_PATH,
+                      :path_encoding => 'ISO-8859-1'
+                      )
+      assert @repository
+      @char_1        = CHAR_1_HEX.dup
+      @tag_char_1    = "tag-#{CHAR_1_HEX}-00"
+      @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
+      @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
+      if @char_1.respond_to?(:force_encoding)
+        @char_1.force_encoding('UTF-8')
+        @tag_char_1.force_encoding('UTF-8')
+        @branch_char_0.force_encoding('UTF-8')
+        @branch_char_1.force_encoding('UTF-8')
+      end
+    end
+
     def test_fetch_changesets_from_scratch
       @repository.fetch_changesets
       @repository.reload
-      assert_equal 17, @repository.changesets.count
-      assert_equal 25, @repository.changes.count
+      assert_equal 29, @repository.changesets.count
+      assert_equal 37, @repository.changes.count
       assert_equal "Initial import.\nThe repository contains 3 files.",
                    @repository.changesets.find_by_revision('0').comments
     end
@@ -45,9 +68,9 @@
       @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 2}
       @repository.reload
       assert_equal 3, @repository.changesets.count
-      
+
       @repository.fetch_changesets
-      assert_equal 17, @repository.changesets.count
+      assert_equal 29, @repository.changesets.count
     end
 
     def test_isodatesec
@@ -77,14 +100,69 @@
 
       # with_limit
       changesets = @repository.latest_changesets('', nil, 2)
-      assert_equal @repository.latest_changesets('', nil)[0, 2], changesets
+      assert_equal %w|28 27|, changesets.collect(&:revision)
 
       # with_filepath
-      changesets = @repository.latest_changesets('/sql_escape/percent%dir/percent%file1.txt', nil)
+      changesets = @repository.latest_changesets(
+                      '/sql_escape/percent%dir/percent%file1.txt', nil)
       assert_equal %w|11 10 9|, changesets.collect(&:revision)
 
-      changesets = @repository.latest_changesets('/sql_escape/underscore_dir/understrike_file.txt', nil)
+      changesets = @repository.latest_changesets(
+                      '/sql_escape/underscore_dir/understrike_file.txt', nil)
       assert_equal %w|12 9|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README', nil)
+      assert_equal %w|28 17 8 6 1 0|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README','8')
+      assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('README','8', 2)
+      assert_equal %w|8 6|, changesets.collect(&:revision)
+
+      # with_dirpath
+      changesets = @repository.latest_changesets('images', nil)
+      assert_equal %w|1 0|, changesets.collect(&:revision)
+
+      path = 'sql_escape/percent%dir'
+      changesets = @repository.latest_changesets(path, nil)
+      assert_equal %w|13 11 10 9|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets(path, '11')
+      assert_equal %w|11 10 9|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets(path, '11', 2)
+      assert_equal %w|11 10|, changesets.collect(&:revision)
+
+      path = 'sql_escape/underscore_dir'
+      changesets = @repository.latest_changesets(path, nil)
+      assert_equal %w|13 12 9|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets(path, '12')
+      assert_equal %w|12 9|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets(path, '12', 1)
+      assert_equal %w|12|, changesets.collect(&:revision)
+
+      # tag
+      changesets = @repository.latest_changesets('', 'tag_test.00')
+      assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('', 'tag_test.00', 2)
+      assert_equal %w|5 4|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('sources', 'tag_test.00')
+      assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
+      assert_equal %w|4 3|, changesets.collect(&:revision)
+
+      # named branch
+      changesets = @repository.latest_changesets('', @branch_char_1)
+      assert_equal %w|27 26|, changesets.collect(&:revision)
+
+      changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1)
+      assert_equal %w|27|, changesets.collect(&:revision)
     end
 
     def test_copied_files
@@ -99,6 +177,7 @@
       assert_equal 'A', c1[0].action
       assert_equal '/sql_escape/percent%dir/percentfile1.txt',  c1[0].path
       assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
+      assert_equal '3a330eb32958', c1[0].from_revision
 
       assert_equal 'A', c1[1].action
       assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
@@ -111,6 +190,15 @@
       assert_equal 'A', c2[0].action
       assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
       assert_equal '/README', c2[0].from_path
+      assert_equal '933ca60293d7', c2[0].from_revision
+
+      cs3 = @repository.changesets.find_by_revision('19')
+      c3  = cs3.changes
+      assert_equal 1, c3.size
+      assert_equal 'A', c3[0].action
+      assert_equal "/latin-1-dir/test-#{@char_1}-1.txt",  c3[0].path
+      assert_equal "/latin-1-dir/test-#{@char_1}.txt",    c3[0].from_path
+      assert_equal '5d9891a1b425', c3[0].from_revision
     end
 
     def test_find_changeset_by_name
@@ -159,41 +247,44 @@
       assert_equal 'abc400bb8672', c.event_url[:rev]
     end
 
-    def test_latest_changesets_with_limit
+    def test_previous
       @repository.fetch_changesets
       @repository.reload
-      changesets = @repository.latest_changesets('', nil, 2)
-      assert_equal @repository.latest_changesets('', nil)[0, 2], changesets
+      %w|28 3ae45e2d177d 3ae45|.each do |r1|
+        changeset = @repository.find_changeset_by_name(r1)
+        %w|27 7bbf4c738e71 7bbf|.each do |r2|
+          assert_equal @repository.find_changeset_by_name(r2), changeset.previous
+        end
+      end
     end
 
-    def test_latest_changesets_with_filepath
+    def test_previous_nil
       @repository.fetch_changesets
       @repository.reload
-      changesets = @repository.latest_changesets('README', nil)
-      assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
-
-      path = 'sql_escape/percent%dir/percent%file1.txt'
-      changesets = @repository.latest_changesets(path, nil)
-      assert_equal %w|11 10 9|, changesets.collect(&:revision)
-
-      path = 'sql_escape/underscore_dir/understrike_file.txt'
-      changesets = @repository.latest_changesets(path, nil)
-      assert_equal %w|12 9|, changesets.collect(&:revision)
+      %w|0 0885933ad4f6 0885|.each do |r1|
+        changeset = @repository.find_changeset_by_name(r1)
+        assert_nil changeset.previous
+      end
     end
 
-    def test_latest_changesets_with_dirpath
+    def test_next
       @repository.fetch_changesets
       @repository.reload
-      changesets = @repository.latest_changesets('images', nil)
-      assert_equal %w|1 0|, changesets.collect(&:revision)
+      %w|27 7bbf4c738e71 7bbf|.each do |r2|
+        changeset = @repository.find_changeset_by_name(r2)
+        %w|28 3ae45e2d177d 3ae45|.each do |r1|
+        assert_equal @repository.find_changeset_by_name(r1), changeset.next
+        end
+      end
+    end
 
-      path = 'sql_escape/percent%dir'
-      changesets = @repository.latest_changesets(path, nil)
-      assert_equal %w|13 11 10 9|, changesets.collect(&:revision)
-
-      path = 'sql_escape/underscore_dir'
-      changesets = @repository.latest_changesets(path, nil)
-      assert_equal %w|13 12 9|, changesets.collect(&:revision)
+    def test_next_nil
+      @repository.fetch_changesets
+      @repository.reload
+      %w|28 3ae45e2d177d 3ae45|.each do |r1|
+        changeset = @repository.find_changeset_by_name(r1)
+        assert_nil changeset.next
+      end
     end
   else
     puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
--- a/test/unit/repository_subversion_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/repository_subversion_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -18,47 +18,48 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class RepositorySubversionTest < ActiveSupport::TestCase
-  fixtures :projects, :repositories, :enabled_modules, :users, :roles 
-  
+  fixtures :projects, :repositories, :enabled_modules, :users, :roles
+
   def setup
     @project = Project.find(3)
-    assert @repository = Repository::Subversion.create(:project => @project,
-             :url => "file://#{self.class.repository_path('subversion')}")
+    @repository = Repository::Subversion.create(:project => @project,
+             :url => self.class.subversion_repository_url)
+    assert @repository
   end
-  
+
   if repository_configured?('subversion')
     def test_fetch_changesets_from_scratch
       @repository.fetch_changesets
       @repository.reload
-      
+
       assert_equal 11, @repository.changesets.count
       assert_equal 20, @repository.changes.count
       assert_equal 'Initial import.', @repository.changesets.find_by_revision('1').comments
     end
-    
+
     def test_fetch_changesets_incremental
       @repository.fetch_changesets
       # Remove changesets with revision > 5
       @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 5}
       @repository.reload
       assert_equal 5, @repository.changesets.count
-      
+
       @repository.fetch_changesets
       assert_equal 11, @repository.changesets.count
     end
-    
+
     def test_latest_changesets
       @repository.fetch_changesets
-      
+
       # with limit
       changesets = @repository.latest_changesets('', nil, 2)
       assert_equal 2, changesets.size
       assert_equal @repository.latest_changesets('', nil).slice(0,2), changesets
-      
+
       # with path
       changesets = @repository.latest_changesets('subversion_test/folder', nil)
       assert_equal ["10", "9", "7", "6", "5", "2"], changesets.collect(&:revision)
-      
+
       # with path and revision
       changesets = @repository.latest_changesets('subversion_test/folder', 8)
       assert_equal ["7", "6", "5", "2"], changesets.collect(&:revision)
@@ -67,7 +68,7 @@
     def test_directory_listing_with_square_brackets_in_path
       @repository.fetch_changesets
       @repository.reload
-      
+
       entries = @repository.entries('subversion_test/[folder_with_brackets]')
       assert_not_nil entries, 'Expect to find entries in folder_with_brackets'
       assert_equal 1, entries.size, 'Expect one entry in folder_with_brackets'
@@ -76,7 +77,9 @@
 
     def test_directory_listing_with_square_brackets_in_base
       @project = Project.find(3)
-      @repository = Repository::Subversion.create(:project => @project, :url => "file:///#{self.class.repository_path('subversion')}/subversion_test/[folder_with_brackets]")
+      @repository = Repository::Subversion.create(
+                          :project => @project,
+                          :url => "file:///#{self.class.repository_path('subversion')}/subversion_test/[folder_with_brackets]")
 
       @repository.fetch_changesets
       @repository.reload
@@ -143,17 +146,13 @@
         s1 = "\xC2\x80"
         s2 = "\xc3\x82\xc2\x80"
         if s1.respond_to?(:force_encoding)
-          s3 = s1
-          s4 = s2
-          s1.force_encoding('ASCII-8BIT')
-          s2.force_encoding('ASCII-8BIT')
-          s3.force_encoding('ISO-8859-1')
-          s4.force_encoding('UTF-8')
-          assert_equal s3.encode('UTF-8'), s4
+          s1.force_encoding('ISO-8859-1')
+          s2.force_encoding('UTF-8')
+          assert_equal s1.encode('UTF-8'), s2
         end
         c = Changeset.new(:repository => @repository,
-                          :comments=>s2,
-                          :revision=>'123',
+                          :comments   => s2,
+                          :revision   => '123',
                           :committed_on => Time.now)
         assert c.save
         assert_equal s2, c.comments
--- a/test/unit/repository_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/repository_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -33,97 +33,109 @@
            :member_roles,
            :roles,
            :enumerations
-  
+
   def setup
     @repository = Project.find(1).repository
   end
-  
+
   def test_create
     repository = Repository::Subversion.new(:project => Project.find(3))
     assert !repository.save
-  
+
     repository.url = "svn://localhost"
     assert repository.save
     repository.reload
-    
+
     project = Project.find(3)
     assert_equal repository, project.repository
   end
-  
+
   def test_destroy
     changesets = Changeset.count(:all, :conditions => "repository_id = 10")
-    changes = Change.count(:all, :conditions => "repository_id = 10", :include => :changeset)
+    changes = Change.count(:all, :conditions => "repository_id = 10",
+                           :include => :changeset)
     assert_difference 'Changeset.count', -changesets do
       assert_difference 'Change.count', -changes do
         Repository.find(10).destroy
       end
     end
   end
-  
+
   def test_should_not_create_with_disabled_scm
     # disable Subversion
     with_settings :enabled_scm => ['Darcs', 'Git'] do
-      repository = Repository::Subversion.new(:project => Project.find(3), :url => "svn://localhost")
+      repository = Repository::Subversion.new(
+                      :project => Project.find(3), :url => "svn://localhost")
       assert !repository.save
-      assert_equal I18n.translate('activerecord.errors.messages.invalid'), repository.errors.on(:type)
+      assert_equal I18n.translate('activerecord.errors.messages.invalid'),
+                                  repository.errors.on(:type)
     end
   end
-  
+
   def test_scan_changesets_for_issue_ids
     Setting.default_language = 'en'
     Setting.notified_events = ['issue_added','issue_updated']
-    
+
     # choosing a status to apply to fix issues
-    Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
+    Setting.commit_fix_status_id = IssueStatus.find(
+                                     :first,
+                                     :conditions => ["is_closed = ?", true]).id
     Setting.commit_fix_done_ratio = "90"
     Setting.commit_ref_keywords = 'refs , references, IssueID'
     Setting.commit_fix_keywords = 'fixes , closes'
     Setting.default_language = 'en'
     ActionMailer::Base.deliveries.clear
-    
+
     # make sure issue 1 is not already closed
     fixed_issue = Issue.find(1)
     assert !fixed_issue.status.is_closed?
     old_status = fixed_issue.status
-        
+
     Repository.scan_changesets_for_issue_ids
     assert_equal [101, 102], Issue.find(3).changeset_ids
-    
+
     # fixed issues
     fixed_issue.reload
     assert fixed_issue.status.is_closed?
     assert_equal 90, fixed_issue.done_ratio
     assert_equal [101], fixed_issue.changeset_ids
-    
+
     # issue change
     journal = fixed_issue.journals.find(:first, :order => 'created_on desc')
     assert_equal User.find_by_login('dlopper'), journal.user
     assert_equal 'Applied in changeset r2.', journal.notes
-    
+
     # 2 email notifications
     assert_equal 2, ActionMailer::Base.deliveries.size
     mail = ActionMailer::Base.deliveries.first
     assert_kind_of TMail::Mail, mail
-    assert mail.subject.starts_with?("[#{fixed_issue.project.name} - #{fixed_issue.tracker.name} ##{fixed_issue.id}]")
-    assert mail.body.include?("Status changed from #{old_status} to #{fixed_issue.status}")
-    
+    assert mail.subject.starts_with?(
+        "[#{fixed_issue.project.name} - #{fixed_issue.tracker.name} ##{fixed_issue.id}]")
+    assert mail.body.include?(
+        "Status changed from #{old_status} to #{fixed_issue.status}")
+
     # ignoring commits referencing an issue of another project
     assert_equal [], Issue.find(4).changesets
   end
-  
+
   def test_for_changeset_comments_strip
-    repository = Repository::Mercurial.create( :project => Project.find( 4 ), :url => '/foo/bar/baz' )
+    repository = Repository::Mercurial.create(
+                    :project => Project.find( 4 ),
+                    :url => '/foo/bar/baz' )
     comment = <<-COMMENT
     This is a loooooooooooooooooooooooooooong comment                                                   
                                                                                                        
                                                                                             
     COMMENT
     changeset = Changeset.new(
-      :comments => comment, :commit_date => Time.now, :revision => 0, :scmid => 'f39b7922fb3c',
-      :committer => 'foo <foo@example.com>', :committed_on => Time.now, :repository => repository )
+      :comments => comment, :commit_date => Time.now,
+      :revision => 0, :scmid => 'f39b7922fb3c',
+      :committer => 'foo <foo@example.com>',
+      :committed_on => Time.now, :repository => repository )
     assert( changeset.save )
     assert_not_equal( comment, changeset.comments )
-    assert_equal( 'This is a loooooooooooooooooooooooooooong comment', changeset.comments )
+    assert_equal( 'This is a loooooooooooooooooooooooooooong comment',
+                  changeset.comments )
   end
 
   def test_for_urls_strip
@@ -134,29 +146,93 @@
         :log_encoding => 'UTF-8')
     assert repository.save
     repository.reload
-    assert_equal ':pserver:login:password@host:/path/to/the/repository', repository.url
+    assert_equal ':pserver:login:password@host:/path/to/the/repository',
+                  repository.url
     assert_equal 'foo', repository.root_url
   end
 
   def test_manual_user_mapping
     assert_no_difference "Changeset.count(:conditions => 'user_id <> 2')" do
-      c = Changeset.create!(:repository => @repository, :committer => 'foo', :committed_on => Time.now, :revision => 100, :comments => 'Committed by foo.')
+      c = Changeset.create!(
+              :repository => @repository,
+              :committer => 'foo',
+              :committed_on => Time.now,
+              :revision => 100,
+              :comments => 'Committed by foo.'
+            )
       assert_nil c.user
       @repository.committer_ids = {'foo' => '2'}
       assert_equal User.find(2), c.reload.user
       # committer is now mapped
-      c = Changeset.create!(:repository => @repository, :committer => 'foo', :committed_on => Time.now, :revision => 101, :comments => 'Another commit by foo.')
+      c = Changeset.create!(
+              :repository => @repository,
+              :committer => 'foo',
+              :committed_on => Time.now,
+              :revision => 101,
+              :comments => 'Another commit by foo.'
+            )
       assert_equal User.find(2), c.user
     end
   end
-  
+
   def test_auto_user_mapping_by_username
-    c = Changeset.create!(:repository => @repository, :committer => 'jsmith', :committed_on => Time.now, :revision => 100, :comments => 'Committed by john.')
+    c = Changeset.create!(
+          :repository   => @repository,
+          :committer    => 'jsmith',
+          :committed_on => Time.now,
+          :revision     => 100,
+          :comments     => 'Committed by john.'
+        )
     assert_equal User.find(2), c.user
   end
-  
+
   def test_auto_user_mapping_by_email
-    c = Changeset.create!(:repository => @repository, :committer => 'john <jsmith@somenet.foo>', :committed_on => Time.now, :revision => 100, :comments => 'Committed by john.')
+    c = Changeset.create!(
+          :repository   => @repository,
+          :committer    => 'john <jsmith@somenet.foo>',
+          :committed_on => Time.now,
+          :revision     => 100,
+          :comments     => 'Committed by john.'
+        )
     assert_equal User.find(2), c.user
   end
+
+  def test_filesystem_avaialbe
+    klass = Repository::Filesystem
+    assert klass.scm_adapter_class
+    assert_equal true, klass.scm_available
+  end
+
+  def test_merge_extra_info
+    repo = Repository::Subversion.new(:project => Project.find(3))
+    assert !repo.save
+    repo.url = "svn://localhost"
+    assert repo.save
+    repo.reload
+    project = Project.find(3)
+    assert_equal repo, project.repository
+    assert_nil repo.extra_info
+    h1 = {"test_1" => {"test_11" => "test_value_11"}}
+    repo.merge_extra_info(h1)
+    assert_equal h1, repo.extra_info
+    h2 = {"test_2" => {
+                   "test_21" => "test_value_21",
+                   "test_22" => "test_value_22",
+                  }}
+    repo.merge_extra_info(h2)
+    assert_equal (h = {"test_11" => "test_value_11"}),
+                 repo.extra_info["test_1"]
+    assert_equal "test_value_21",
+                 repo.extra_info["test_2"]["test_21"]
+    h3 = {"test_2" => {
+                   "test_23" => "test_value_23",
+                   "test_24" => "test_value_24",
+                  }}
+    repo.merge_extra_info(h3)
+    assert_equal (h = {"test_11" => "test_value_11"}),
+                 repo.extra_info["test_1"]
+    assert_nil repo.extra_info["test_2"]["test_21"]
+    assert_equal "test_value_23",
+                 repo.extra_info["test_2"]["test_23"]
+  end
 end
--- a/test/unit/role_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/role_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -49,6 +49,13 @@
     assert ! role.permissions.include?(perm[0])
     assert_equal size - 2, role.permissions.size
   end
+  
+  def test_name
+    I18n.locale = 'fr'
+    assert_equal 'Manager', Role.find(1).name
+    assert_equal 'Anonyme', Role.anonymous.name
+    assert_equal 'Non membre', Role.non_member.name
+  end
 
   context "#anonymous" do
     should "return the anonymous role" do
--- a/test/unit/search_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/search_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -19,7 +19,7 @@
 
 class SearchTest < ActiveSupport::TestCase
   fixtures :users,
-           :members, 
+           :members,
            :member_roles,
            :projects,
            :roles,
@@ -38,23 +38,23 @@
     @changeset_keyword = '%very first commit%'
     @changeset = Changeset.find(100)
   end
-  
+
   def test_search_by_anonymous
     User.current = nil
-    
+
     r = Issue.search(@issue_keyword).first
     assert r.include?(@issue)
     r = Changeset.search(@changeset_keyword).first
     assert r.include?(@changeset)
-    
+
     # Removes the :view_changesets permission from Anonymous role
     remove_permission Role.anonymous, :view_changesets
-    
+
     r = Issue.search(@issue_keyword).first
     assert r.include?(@issue)
     r = Changeset.search(@changeset_keyword).first
     assert !r.include?(@changeset)
-    
+
     # Make the project private
     @project.update_attribute :is_public, false
     r = Issue.search(@issue_keyword).first
@@ -62,24 +62,24 @@
     r = Changeset.search(@changeset_keyword).first
     assert !r.include?(@changeset)
   end
-  
+
   def test_search_by_user
     User.current = User.find_by_login('rhill')
     assert User.current.memberships.empty?
-    
+
     r = Issue.search(@issue_keyword).first
     assert r.include?(@issue)
     r = Changeset.search(@changeset_keyword).first
     assert r.include?(@changeset)
-    
+
     # Removes the :view_changesets permission from Non member role
     remove_permission Role.non_member, :view_changesets
-    
+
     r = Issue.search(@issue_keyword).first
     assert r.include?(@issue)
     r = Changeset.search(@changeset_keyword).first
     assert !r.include?(@changeset)
-    
+
     # Make the project private
     @project.update_attribute :is_public, false
     r = Issue.search(@issue_keyword).first
@@ -87,11 +87,11 @@
     r = Changeset.search(@changeset_keyword).first
     assert !r.include?(@changeset)
   end
-  
+
   def test_search_by_allowed_member
     User.current = User.find_by_login('jsmith')
     assert User.current.projects.include?(@project)
-    
+
     r = Issue.search(@issue_keyword).first
     assert r.include?(@issue)
     r = Changeset.search(@changeset_keyword).first
@@ -109,10 +109,10 @@
     # Removes the :view_changesets permission from user's and non member role
     remove_permission Role.find(1), :view_changesets
     remove_permission Role.non_member, :view_changesets
-    
+
     User.current = User.find_by_login('jsmith')
     assert User.current.projects.include?(@project)
-    
+
     r = Issue.search(@issue_keyword).first
     assert r.include?(@issue)
     r = Changeset.search(@changeset_keyword).first
@@ -125,18 +125,18 @@
     r = Changeset.search(@changeset_keyword).first
     assert !r.include?(@changeset)
   end
-  
+
   def test_search_issue_with_multiple_hits_in_journals
     i = Issue.find(1)
     assert_equal 2, i.journals.count(:all, :conditions => "notes LIKE '%notes%'")
-    
+
     r = Issue.search('%notes%').first
     assert_equal 1, r.size
     assert_equal i, r.first
   end
-  
+
   private
-  
+
   def remove_permission(role, permission)
     role.permissions = role.permissions - [ permission ]
     role.save
--- a/test/unit/setting_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/setting_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -18,27 +18,27 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class SettingTest < ActiveSupport::TestCase
-  
+
   def test_read_default
     assert_equal "Redmine", Setting.app_title
     assert Setting.self_registration?
     assert !Setting.login_required?
   end
-  
+
   def test_update
     Setting.app_title = "My title"
     assert_equal "My title", Setting.app_title
     # make sure db has been updated (INSERT)
     assert_equal "My title", Setting.find_by_name('app_title').value
-    
+
     Setting.app_title = "My other title"
     assert_equal "My other title", Setting.app_title
     # make sure db has been updated (UPDATE)
     assert_equal "My other title", Setting.find_by_name('app_title').value
   end
-  
+
   def test_serialized_setting
-    Setting.notified_events = ['issue_added', 'issue_updated', 'news_added']    
+    Setting.notified_events = ['issue_added', 'issue_updated', 'news_added']
     assert_equal ['issue_added', 'issue_updated', 'news_added'], Setting.notified_events
     assert_equal ['issue_added', 'issue_updated', 'news_added'], Setting.find_by_name('notified_events').value
   end
--- a/test/unit/time_entry_activity_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/time_entry_activity_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -23,10 +23,10 @@
   def test_should_be_an_enumeration
     assert TimeEntryActivity.ancestors.include?(Enumeration)
   end
-  
+
   def test_objects_count
     assert_equal 3, TimeEntryActivity.find_by_name("Design").objects_count
-    assert_equal 1, TimeEntryActivity.find_by_name("Development").objects_count
+    assert_equal 2, TimeEntryActivity.find_by_name("Development").objects_count
   end
 
   def test_option_name
--- a/test/unit/user_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/user_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -522,6 +522,23 @@
     assert_nil @dlopper.roles_for_project(Project.find(2)).detect {|role| role.member?}
   end
   
+  def test_projects_by_role_for_user_with_role
+    user = User.find(2)
+    assert_kind_of Hash, user.projects_by_role
+    assert_equal 2, user.projects_by_role.size
+    assert_equal [1,5], user.projects_by_role[Role.find(1)].collect(&:id).sort
+    assert_equal [2], user.projects_by_role[Role.find(2)].collect(&:id).sort
+  end
+  
+  def test_projects_by_role_for_user_with_no_role
+    user = User.generate!
+    assert_equal({}, user.projects_by_role)
+  end
+  
+  def test_projects_by_role_for_anonymous
+    assert_equal({}, User.anonymous.projects_by_role)
+  end
+
   def test_valid_notification_options
     # without memberships
     assert_equal 5, User.find(7).valid_notification_options.size
--- a/test/unit/watcher_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/watcher_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -47,12 +47,44 @@
     assert Issue.watched_by(@user).include?(@issue)
   end
   
+  def test_watcher_users
+    watcher_users = Issue.find(2).watcher_users
+    assert_kind_of Array, watcher_users
+    assert_kind_of User, watcher_users.first
+  end
+  
+  def test_watcher_users_should_not_validate_user
+    User.update_all("firstname = ''", "id=1")
+    @user.reload
+    assert !@user.valid?
+    
+    issue = Issue.new(:project => Project.find(1), :tracker_id => 1, :subject => "test", :author => User.find(2))
+    issue.watcher_users << @user
+    issue.save!
+    assert issue.watched_by?(@user)
+  end
+  
   def test_watcher_user_ids
+    assert_equal [1, 3], Issue.find(2).watcher_user_ids.sort
+  end
+  
+  def test_watcher_user_ids=
     issue = Issue.new
     issue.watcher_user_ids = ['1', '3']
     assert issue.watched_by?(User.find(1))
   end
   
+  def test_addable_watcher_users
+    addable_watcher_users = @issue.addable_watcher_users
+    assert_kind_of Array, addable_watcher_users
+    assert_kind_of User, addable_watcher_users.first
+  end
+  
+  def test_addable_watcher_users_should_not_include_user_that_cannot_view_the_object
+    issue = Issue.new(:project => Project.find(1), :is_private => true)
+    assert_nil issue.addable_watcher_users.detect {|user| !issue.visible?(user)}
+  end
+  
   def test_recipients
     @issue.watchers.delete_all
     @issue.reload
@@ -60,15 +92,15 @@
     assert @issue.watcher_recipients.empty?
     assert @issue.add_watcher(@user)
 
-    @user.mail_notification = true
-    @user.save    
+    @user.mail_notification = 'all'
+    @user.save!
     @issue.reload
     assert @issue.watcher_recipients.include?(@user.mail)
 
-    @user.mail_notification = false
-    @user.save    
+    @user.mail_notification = 'none'
+    @user.save!
     @issue.reload
-    assert @issue.watcher_recipients.include?(@user.mail)
+    assert !@issue.watcher_recipients.include?(@user.mail)
   end
   
   def test_unwatch
--- a/test/unit/wiki_content_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/wiki_content_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -24,13 +24,13 @@
     @wiki = Wiki.find(1)
     @page = @wiki.pages.first
   end
-  
+
   def test_create
-    page = WikiPage.new(:wiki => @wiki, :title => "Page")  
+    page = WikiPage.new(:wiki => @wiki, :title => "Page")
     page.content = WikiContent.new(:text => "Content text", :author => User.find(1), :comments => "My comment")
     assert page.save
     page.reload
-    
+
     content = page.content
     assert_kind_of WikiContent, content
     assert_equal 1, content.version
@@ -40,14 +40,14 @@
     assert_equal User.find(1), content.author
     assert_equal content.text, content.versions.last.text
   end
-  
+
   def test_create_should_send_email_notification
     Setting.notified_events = ['wiki_content_added']
     ActionMailer::Base.deliveries.clear
-    page = WikiPage.new(:wiki => @wiki, :title => "A new page")  
+    page = WikiPage.new(:wiki => @wiki, :title => "A new page")
     page.content = WikiContent.new(:text => "Content text", :author => User.find(1), :comments => "My comment")
     assert page.save
-    
+
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
 
@@ -60,26 +60,26 @@
     assert_equal version_count+1, content.version
     assert_equal version_count+1, content.versions.length
   end
-  
+
   def test_update_should_send_email_notification
     Setting.notified_events = ['wiki_content_updated']
     ActionMailer::Base.deliveries.clear
     content = @page.content
     content.text = "My new content"
     assert content.save
-    
+
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_fetch_history
     assert !@page.content.versions.empty?
     @page.content.versions.each do |version|
       assert_kind_of String, version.text
     end
   end
-  
+
   def test_large_text_should_not_be_truncated_to_64k
-    page = WikiPage.new(:wiki => @wiki, :title => "Big page")  
+    page = WikiPage.new(:wiki => @wiki, :title => "Big page")
     page.content = WikiContent.new(:text => "a" * 500.kilobyte, :author => User.find(1))
     assert page.save
     page.reload
--- a/test/unit/wiki_page_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/wiki_page_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -24,45 +24,45 @@
     @wiki = Wiki.find(1)
     @page = @wiki.pages.first
   end
-  
+
   def test_create
     page = WikiPage.new(:wiki => @wiki)
     assert !page.save
     assert_equal 1, page.errors.count
-  
+
     page.title = "Page"
     assert page.save
     page.reload
     assert !page.protected?
-    
+
     @wiki.reload
     assert @wiki.pages.include?(page)
   end
-  
+
   def test_sidebar_should_be_protected_by_default
     page = @wiki.find_or_new_page('sidebar')
     assert page.new_record?
     assert page.protected?
   end
-  
+
   def test_find_or_new_page
     page = @wiki.find_or_new_page("CookBook documentation")
     assert_kind_of WikiPage, page
     assert !page.new_record?
-    
+
     page = @wiki.find_or_new_page("Non existing page")
     assert_kind_of WikiPage, page
     assert page.new_record?
   end
-  
+
   def test_parent_title
     page = WikiPage.find_by_title('Another_page')
     assert_nil page.parent_title
-    
+
     page = WikiPage.find_by_title('Page_with_an_inline_image')
     assert_equal 'CookBook documentation', page.parent_title
   end
-  
+
   def test_assign_parent
     page = WikiPage.find_by_title('Another_page')
     page.parent_title = 'CookBook documentation'
@@ -70,7 +70,7 @@
     page.reload
     assert_equal WikiPage.find_by_title('CookBook_documentation'), page.parent
   end
-  
+
   def test_unassign_parent
     page = WikiPage.find_by_title('Page_with_an_inline_image')
     page.parent_title = ''
@@ -78,10 +78,10 @@
     page.reload
     assert_nil page.parent
   end
-  
+
   def test_parent_validation
     page = WikiPage.find_by_title('CookBook_documentation')
-    
+
     # A page that doesn't exist
     page.parent_title = 'Unknown title'
     assert !page.save
@@ -98,7 +98,7 @@
     page.parent_title = 'Another_page'
     assert page.save
   end
-  
+
   def test_destroy
     page = WikiPage.find(1)
     page.destroy
@@ -107,18 +107,25 @@
     assert WikiContent.find_all_by_page_id(1).empty?
     assert WikiContent.versioned_class.find_all_by_page_id(1).empty?
   end
-  
+
   def test_destroy_should_not_nullify_children
     page = WikiPage.find(2)
     child_ids = page.child_ids
     assert child_ids.any?
     page.destroy
     assert_nil WikiPage.find_by_id(2)
-    
+
     children = WikiPage.find_all_by_id(child_ids)
     assert_equal child_ids.size, children.size
     children.each do |child|
       assert_nil child.parent_id
     end
   end
+
+  def test_updated_on_eager_load
+    page = WikiPage.with_updated_on.first
+    assert page.is_a?(WikiPage)
+    assert_not_nil page.read_attribute(:updated_on)
+    assert_equal page.content.updated_on, page.updated_on
+  end
 end
--- a/test/unit/wiki_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/wiki_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,18 +1,18 @@
 # encoding: utf-8
 #
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the 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.
@@ -20,13 +20,13 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class WikiTest < ActiveSupport::TestCase
-  fixtures :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions
-  
+  fixtures :projects, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions
+
   def test_create
     wiki = Wiki.new(:project => Project.find(2))
     assert !wiki.save
     assert_equal 1, wiki.errors.count
-  
+
     wiki.start_page = "Start page"
     assert wiki.save
   end
@@ -38,38 +38,64 @@
     @wiki.reload
     assert_equal "Another start page", @wiki.start_page
   end
-  
-  def test_find_page
+
+  def test_find_page_should_not_be_case_sensitive
     wiki = Wiki.find(1)
     page = WikiPage.find(2)
-    
+
     assert_equal page, wiki.find_page('Another_page')
     assert_equal page, wiki.find_page('Another page')
     assert_equal page, wiki.find_page('ANOTHER page')
-    
+  end
+
+  def test_find_page_with_cyrillic_characters
+    wiki = Wiki.find(1)
     page = WikiPage.find(10)
     assert_equal page, wiki.find_page('Этика_менеджмента')
   end
-  
+
+  def test_find_page_with_backslashes
+    wiki = Wiki.find(1)
+    page = WikiPage.generate!(:wiki => wiki, :title => '2009\\02\\09')
+    assert_equal page, wiki.find_page('2009\\02\\09')
+  end
+
+  def test_find_page_without_redirect
+    wiki = Wiki.find(1)
+    page = wiki.find_page('Another_page')
+    assert_not_nil page
+    assert_equal 'Another_page', page.title
+    assert_equal false, wiki.page_found_with_redirect?
+  end
+
+  def test_find_page_with_redirect
+    wiki = Wiki.find(1)
+    WikiRedirect.create!(:wiki => wiki, :title => 'Old_title', :redirects_to => 'Another_page')
+    page = wiki.find_page('Old_title')
+    assert_not_nil page
+    assert_equal 'Another_page', page.title
+    assert_equal true, wiki.page_found_with_redirect?
+  end
+
   def test_titleize
     assert_equal 'Page_title_with_CAPITALES', Wiki.titleize('page title with CAPITALES')
     assert_equal 'テスト', Wiki.titleize('テスト')
   end
-  
+
   context "#sidebar" do
     setup do
       @wiki = Wiki.find(1)
     end
-    
+
     should "return nil if undefined" do
       assert_nil @wiki.sidebar
     end
-    
+
     should "return a WikiPage if defined" do
       page = @wiki.pages.new(:title => 'Sidebar')
       page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar')
       page.save!
-      
+
       assert_kind_of WikiPage, @wiki.sidebar
       assert_equal 'Sidebar', @wiki.sidebar.title
     end
--- a/tmp/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/tmp/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/tmp
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/tmp
 http://redmine.rubyforge.org/svn
 
 
--- a/tmp/cache/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/tmp/cache/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/tmp/cache
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/tmp/cache
 http://redmine.rubyforge.org/svn
 
 
--- a/tmp/sessions/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/tmp/sessions/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/tmp/sessions
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/tmp/sessions
 http://redmine.rubyforge.org/svn
 
 
--- a/tmp/sockets/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/tmp/sockets/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/tmp/sockets
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/tmp/sockets
 http://redmine.rubyforge.org/svn
 
 
--- a/tmp/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/tmp/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/tmp/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/tmp/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-06-08T02:07:30.275769Z
 2784
--- a/vendor/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 31
-/svn/!svn/ver/4891/trunk/vendor
+V 45
+/svn/!svn/ver/5945/branches/1.2-stable/vendor
 END
--- a/vendor/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-20T14:26:23.957459Z
-4891
+2011-05-29T07:18:05.033755Z
+5945
 jplang
 has-props
 
--- a/vendor/gems/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 36
-/svn/!svn/ver/4739/trunk/vendor/gems
-END
--- a/vendor/gems/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/gems/coderay-0.9.7/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7
-END
-LICENSE
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/LICENSE
-END
-Rakefile
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/Rakefile
-END
-.specification
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/.specification
-END
-FOLDERS
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/FOLDERS
-END
--- a/vendor/gems/coderay-0.9.7/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/coderay-0.9.7/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/coderay-0.9.7
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 071d975e884a936b40eab0b865ea4da1
 2011-01-22T13:18:01.557255Z
 4739
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 18ea6850e44c2180fe121b906b0ce27a
 2011-01-22T13:18:01.557255Z
 4739
@@ -109,7 +109,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 a3bbd9c0481e784e38ef28afc8aa3242
 2011-01-22T13:18:01.557255Z
 4739
@@ -143,7 +143,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 f11c3e40d9b35de767926748e7278f47
 2011-01-22T13:18:01.557255Z
 4739
--- a/vendor/gems/coderay-0.9.7/bin/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/bin
-END
-coderay_stylesheet
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/bin/coderay_stylesheet
-END
-coderay
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/bin/coderay
-END
--- a/vendor/gems/coderay-0.9.7/bin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/coderay-0.9.7/bin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/bin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/coderay-0.9.7/bin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 b20628204e37bb6fd444b1f1992d2c1a
 2011-01-22T13:18:01.557255Z
 4739
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 db4ee9313184e2922a606b55ff92f4f7
 2011-01-22T13:18:01.557255Z
 4739
--- a/vendor/gems/coderay-0.9.7/lib/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib
-END
-coderay.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay.rb
-END
-README
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/README
-END
--- a/vendor/gems/coderay-0.9.7/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/coderay-0.9.7/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 30374cf2e229cc996eaba18502af97c5
 2011-01-22T13:18:01.557255Z
 4739
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 046bf12ae0bcbb0b55fc3c4c993680d2
 2011-01-22T13:18:01.557255Z
 4739
--- a/vendor/gems/coderay-0.9.7/lib/coderay/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay
-END
-token_classes.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/token_classes.rb
-END
-encoder.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoder.rb
-END
-style.rb
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/style.rb
-END
-tokens.rb
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/tokens.rb
-END
-duo.rb
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/duo.rb
-END
-scanner.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanner.rb
-END
-for_redcloth.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/for_redcloth.rb
-END
--- a/vendor/gems/coderay-0.9.7/lib/coderay/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/coderay-0.9.7/lib/coderay
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 4f17211f3874899049db6111ef282a3b
 2011-01-22T13:18:01.557255Z
 4739
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 f0ead48eaa86c8b4d6a5587e9b5450ca
 2011-01-22T13:18:01.557255Z
 4739
@@ -106,7 +106,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 409fa492a5470a8bed5ae969f270decf
 2011-01-22T13:18:01.557255Z
 4739
@@ -143,7 +143,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 d45c9094dd69e538d44b7099955b9fda
 2011-01-22T13:18:01.557255Z
 4739
@@ -177,7 +177,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 b33e5b83e354c09655f46d37ae662f64
 2011-01-22T13:18:01.557255Z
 4739
@@ -211,7 +211,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 ec67701318cc8701d0554802f07ee6e1
 2011-01-22T13:18:01.557255Z
 4739
@@ -248,7 +248,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 d216c2f1c7a84a23ce3feff0b1358d60
 2011-01-22T13:18:01.557255Z
 4739
--- a/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders
-END
-div.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/div.rb
-END
-text.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/text.rb
-END
-filter.rb
-K 25
-svn:wc:ra_dav:version-url
-V 81
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/filter.rb
-END
-debug.rb
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/debug.rb
-END
-lines_of_code.rb
-K 25
-svn:wc:ra_dav:version-url
-V 88
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/lines_of_code.rb
-END
-count.rb
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/count.rb
-END
-xml.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/xml.rb
-END
-span.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/span.rb
-END
-yaml.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/yaml.rb
-END
-html.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html.rb
-END
-term.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/term.rb
-END
-statistic.rb
-K 25
-svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/statistic.rb
-END
-comment_filter.rb
-K 25
-svn:wc:ra_dav:version-url
-V 89
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/comment_filter.rb
-END
-json.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/json.rb
-END
-token_class_filter.rb
-K 25
-svn:wc:ra_dav:version-url
-V 93
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/token_class_filter.rb
-END
-null.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/null.rb
-END
-page.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/page.rb
-END
-_map.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/_map.rb
-END
--- a/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/coderay-0.9.7/lib/coderay/encoders
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 f0c5be15265facadc46889fbbc2613f1
 2011-01-22T13:18:01.557255Z
 4739
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 2914ed90921556a01a79f3fb6d549b09
 2011-01-22T13:18:01.557255Z
 4739
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 08591bbd1f20dc7dce67030a294d1636
 2011-01-22T13:18:01.557255Z
 4739
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 9e878089035fe9ad88c808bd1a15cf7a
 2011-01-22T13:18:01.557255Z
 4739
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 966e154458fb6c665b6d62aa90d07e18
 2011-01-22T13:18:01.557255Z
 4739
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 c262d84ddbdf37e99ff6bcf6dd6a66c2
 2011-01-22T13:18:01.557255Z
 4739
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 ada7effba81bbc28f41efeaef69dcc51
 2011-01-22T13:18:01.557255Z
 4739
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 e4228be45ad0f818a0e125caee838d56
 2011-01-22T13:18:01.557255Z
 4739
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 04c428b240ef44de896ad15827cf51df
 2011-01-22T13:18:01.557255Z
 4739
@@ -341,7 +341,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 e672d4f425422c57f935f24df3df9a0d
 2011-01-22T13:18:01.557255Z
 4739
@@ -375,7 +375,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 422a51cd181de3cc0a55aba7f9915c18
 2011-01-22T13:18:01.557255Z
 4739
@@ -409,7 +409,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 49017735ef679f73dd65795e30d8e5c7
 2011-01-22T13:18:01.557255Z
 4739
@@ -443,7 +443,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 32f2d1a9db6f58636d3946a43b5a60f0
 2011-01-22T13:18:01.557255Z
 4739
@@ -477,7 +477,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 86a2dcae2ef0a971f70386c3b794469f
 2011-01-22T13:18:01.557255Z
 4739
@@ -511,7 +511,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 9c9dcf3ba3f2effa5ebd4cd37417db36
 2011-01-22T13:18:01.557255Z
 4739
@@ -545,7 +545,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 e59791dbcdce328f09240e7e5c8b3d0e
 2011-01-22T13:18:01.557255Z
 4739
@@ -579,7 +579,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 26da5aef43dc8731fbd63dcffea259bf
 2011-01-22T13:18:01.557255Z
 4739
@@ -613,7 +613,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 964d7ee16d213ab2e41418257f1eb8aa
 2011-01-22T13:18:01.557255Z
 4739
--- a/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html
-END
-output.rb
-K 25
-svn:wc:ra_dav:version-url
-V 86
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/output.rb
-END
-numerization.rb
-K 25
-svn:wc:ra_dav:version-url
-V 92
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/numerization.rb
-END
-css.rb
-K 25
-svn:wc:ra_dav:version-url
-V 83
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/css.rb
-END
--- a/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 8d0cea50dc9e6743bd10a8e0c6f1db17
 2011-01-22T13:18:01.557255Z
 4739
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 a5e204ed674c970d0aea6d1d9dbfd18e
 2011-01-22T13:18:01.557255Z
 4739
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 aa931c09ed5f16abfed3b7c99f0f684d
 2011-01-22T13:18:01.557255Z
 4739
--- a/vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/helpers
-END
-plugin.rb
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/helpers/plugin.rb
-END
-file_type.rb
-K 25
-svn:wc:ra_dav:version-url
-V 83
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/helpers/file_type.rb
-END
-gzip_simple.rb
-K 25
-svn:wc:ra_dav:version-url
-V 85
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/helpers/gzip_simple.rb
-END
-word_list.rb
-K 25
-svn:wc:ra_dav:version-url
-V 83
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/helpers/word_list.rb
-END
--- a/vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/helpers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/coderay-0.9.7/lib/coderay/helpers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 a8ef4aea22392cc4012ee679fc1d15ba
 2011-01-22T13:18:01.557255Z
 4739
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 107e3d46dc60830e87b1a4ce4d467ce8
 2011-01-22T13:18:01.557255Z
 4739
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 ffacc98651f60a6fe698427bbc3c3c86
 2011-01-22T13:18:01.557255Z
 4739
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 86d05af27cbe342789f28ed543956aa5
 2011-01-22T13:18:01.557255Z
 4739
--- a/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 71
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners
-END
-java_script-0.9.6.rb
-K 25
-svn:wc:ra_dav:version-url
-V 92
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java_script-0.9.6.rb
-END
-java.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java.rb
-END
-python.rb
-K 25
-svn:wc:ra_dav:version-url
-V 81
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/python.rb
-END
-ruby.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby.rb
-END
-cpp.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/cpp.rb
-END
-c.rb
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/c.rb
-END
-groovy.rb
-K 25
-svn:wc:ra_dav:version-url
-V 81
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/groovy.rb
-END
-debug.rb
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/debug.rb
-END
-rhtml.rb
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/rhtml.rb
-END
-php.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/php.rb
-END
-css.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/css.rb
-END
-sql.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/sql.rb
-END
-xml.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/xml.rb
-END
-yaml.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/yaml.rb
-END
-scheme.rb
-K 25
-svn:wc:ra_dav:version-url
-V 81
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/scheme.rb
-END
-html.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/html.rb
-END
-java_script.rb
-K 25
-svn:wc:ra_dav:version-url
-V 86
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java_script.rb
-END
-delphi.rb
-K 25
-svn:wc:ra_dav:version-url
-V 81
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/delphi.rb
-END
-nitro_xhtml.rb
-K 25
-svn:wc:ra_dav:version-url
-V 86
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/nitro_xhtml.rb
-END
-diff.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/diff.rb
-END
-plaintext.rb
-K 25
-svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/plaintext.rb
-END
-json.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/json.rb
-END
-_map.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/_map.rb
-END
--- a/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/coderay-0.9.7/lib/coderay/scanners
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 a10b4406847a27622a61c041420dab5a
 2011-01-22T13:18:01.557255Z
 4739
@@ -72,7 +72,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 35c0803e396fa14a42c6b8645ca7d557
 2011-01-22T13:18:01.557255Z
 4739
@@ -106,7 +106,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 939e009d9b197cb6437646be82c02982
 2011-01-22T13:18:01.557255Z
 4739
@@ -140,7 +140,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 cb032992b032fd9cbc93500496d0b038
 2011-01-22T13:18:01.557255Z
 4739
@@ -174,7 +174,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 afc4a4b0842e5efdafe98f6c5a10810e
 2011-01-22T13:18:01.557255Z
 4739
@@ -208,7 +208,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 299db2bdce8368d0bc6d90f5839c87ee
 2011-01-22T13:18:01.557255Z
 4739
@@ -242,7 +242,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 7fc1acca7ff04fa00160349b3a1b543e
 2011-01-22T13:18:01.557255Z
 4739
@@ -276,7 +276,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 94bdd6c948cb9c3d21ef94a5cec19e05
 2011-01-22T13:18:01.557255Z
 4739
@@ -310,7 +310,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 ff2e0cad09ef6ba12b2da44e90a25367
 2011-01-22T13:18:01.557255Z
 4739
@@ -344,7 +344,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 2de3bd0694a6b52343618c14654c5366
 2011-01-22T13:18:01.557255Z
 4739
@@ -378,7 +378,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 d3c931a5468c723bd8458b4a73d44943
 2011-01-22T13:18:01.557255Z
 4739
@@ -412,7 +412,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 917467cab834f202a455ec0e8be68508
 2011-01-22T13:18:01.557255Z
 4739
@@ -446,7 +446,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 798309ac45aa9d4ccc159242f3a6f150
 2011-01-22T13:18:01.557255Z
 4739
@@ -480,7 +480,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 f62eab25adbef42e92cad3f5463f91ac
 2011-01-22T13:18:01.557255Z
 4739
@@ -514,7 +514,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 1f93d8c4375c7e7b740c42210e0c6edb
 2011-01-22T13:18:01.557255Z
 4739
@@ -548,7 +548,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 f6c296bbb33704ec2a03725b01e06719
 2011-01-22T13:18:01.557255Z
 4739
@@ -582,7 +582,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 31360b9ad9e408df15eb2abf84d17c8a
 2011-01-22T13:18:01.557255Z
 4739
@@ -616,7 +616,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 182116a4525447d4faed874dfb790277
 2011-01-22T13:18:01.557255Z
 4739
@@ -650,7 +650,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 f7d82e60f68fe6c9d46b63e63f6ec9f6
 2011-01-22T13:18:01.557255Z
 4739
@@ -684,7 +684,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 c5932e739b44b0e92f093dfb70cf9de4
 2011-01-22T13:18:01.557255Z
 4739
@@ -718,7 +718,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 ae16e40b3db78a5d8c793165085f5db9
 2011-01-22T13:18:01.557255Z
 4739
@@ -752,7 +752,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 c34c4d83c7c8cb15bc7209bd36da654e
 2011-01-22T13:18:01.557255Z
 4739
@@ -786,7 +786,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 b3eadcc78242cf25ba0ab3205d6a2b61
 2011-01-22T13:18:01.557255Z
 4739
--- a/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java
-END
-builtin_types.rb
-K 25
-svn:wc:ra_dav:version-url
-V 93
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/builtin_types.rb
-END
--- a/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 2522414597cbbef27fad175c20c8a556
 2011-01-22T13:18:01.557255Z
 4739
--- a/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby
-END
-patterns.rb
-K 25
-svn:wc:ra_dav:version-url
-V 88
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/patterns.rb
-END
--- a/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 e9ee13edf8cacf235b977434e09649dc
 2011-01-22T13:18:01.557255Z
 4739
--- a/vendor/gems/coderay-0.9.7/lib/coderay/styles/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 69
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/styles
-END
-cycnus.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/styles/cycnus.rb
-END
-murphy.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/styles/murphy.rb
-END
-_map.rb
-K 25
-svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/styles/_map.rb
-END
--- a/vendor/gems/coderay-0.9.7/lib/coderay/styles/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/styles/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/styles
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/coderay-0.9.7/lib/coderay/styles
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 59c9814fd238510473d64b6182ce4b6b
 2011-01-22T13:18:01.557255Z
 4739
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 8d8b1bc00f865483efa1de4ebb6157b3
 2011-01-22T13:18:01.557255Z
 4739
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 9b92a72b99db4496e76665edb7b38c00
 2011-01-22T13:18:01.557255Z
 4739
--- a/vendor/gems/coderay-0.9.7/test/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test
-END
--- a/vendor/gems/coderay-0.9.7/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/coderay-0.9.7/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/coderay-0.9.7/test
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/gems/coderay-0.9.7/test/functional/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional
-END
-for_redcloth.rbc
-K 25
-svn:wc:ra_dav:version-url
-V 83
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/for_redcloth.rbc
-END
-vhdl.rb
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/vhdl.rb
-END
-vhdl.rbc
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/vhdl.rbc
-END
-basic.rb
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/basic.rb
-END
-basic.rbc
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/basic.rbc
-END
-load_plugin_scanner.rb
-K 25
-svn:wc:ra_dav:version-url
-V 89
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/load_plugin_scanner.rb
-END
-word_list.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/word_list.rb
-END
-load_plugin_scanner.rbc
-K 25
-svn:wc:ra_dav:version-url
-V 90
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/load_plugin_scanner.rbc
-END
-suite.rb
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/suite.rb
-END
-word_list.rbc
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/word_list.rbc
-END
-for_redcloth.rb
-K 25
-svn:wc:ra_dav:version-url
-V 82
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/for_redcloth.rb
-END
-suite.rbc
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/suite.rbc
-END
--- a/vendor/gems/coderay-0.9.7/test/functional/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/test/functional
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/coderay-0.9.7/test/functional
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 060e0137b69ee9015c13d2a7b52f7ba5
 2011-01-22T13:18:01.557255Z
 4739
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 68592e4216555f25218f67641cd04879
 2011-01-22T13:18:01.557255Z
 4739
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 756a012d3c51e759ecf3aba421b79d26
 2011-01-22T13:18:01.557255Z
 4739
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 4c2c76c7fec083da0817c917495fe273
 2011-01-22T13:18:01.557255Z
 4739
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 2dc7e681d05b65ad084db2cb31db57a4
 2011-01-22T13:18:01.557255Z
 4739
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 9bb16867dc01035932f0ce2491457d4a
 2011-01-22T13:18:01.557255Z
 4739
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 a1077af2bb080972689e1c7c1b00f5cd
 2011-01-22T13:18:01.557255Z
 4739
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 a7da576f27c98ef97a1845982ed43fd8
 2011-01-22T13:18:01.557255Z
 4739
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 c5ad97b377df804994bb80e0d903a954
 2011-01-22T13:18:01.557255Z
 4739
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 bb7279f9b4099e57f551ae9992e03128
 2011-01-22T13:18:01.557255Z
 4739
@@ -372,7 +372,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 dc96a8219c522571f990cfe3702a428f
 2011-01-22T13:18:01.557255Z
 4739
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 534ae63cbcff177038141b589f7fd0fa
 2011-01-22T13:18:01.557255Z
 4739
--- a/vendor/gems/rubytree-0.5.2/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/rubytree-0.5.2/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/rubytree-0.5.2
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 48b46ff6764d5b76e1ad138669923aff
 2009-11-25T05:36:44.792571Z
 3090
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 954df52967073c3833d9c565bb4b1ea8
 2009-11-25T05:36:44.792571Z
 3090
@@ -103,7 +103,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 f3e96d4b9eeb3d0c4d841c7c7ea6259c
 2009-11-25T05:36:44.792571Z
 3090
@@ -137,7 +137,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 7a9a6ee34490c5d9c4148c7cf8f85034
 2009-11-25T05:36:44.792571Z
 3090
@@ -171,7 +171,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 82301a43d2504d992ba1cfd7839b2d7e
 2009-11-25T05:36:44.792571Z
 3090
@@ -208,7 +208,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 b15b8164d281daa7c7028cdda9635950
 2009-11-25T05:36:44.792571Z
 3090
@@ -242,7 +242,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 25d0fdd6b9633f784544a5c000dc1351
 2009-11-25T05:36:44.792571Z
 3090
@@ -276,7 +276,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 13d490389c788748b3931b9e09b2b4d4
 2009-11-25T05:36:44.792571Z
 3090
@@ -310,7 +310,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 5906fb8bdb4197fe19171f795952ed9d
 2009-11-25T05:36:44.792571Z
 3090
--- a/vendor/gems/rubytree-0.5.2/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/rubytree-0.5.2/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/rubytree-0.5.2/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 46e46766767dc3a96b3019d385a5af83
 2009-11-25T05:36:44.792571Z
 3090
--- a/vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/lib/tree
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/rubytree-0.5.2/lib/tree
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 54320f0ffbb41fa9d99ab2d617636ea1
 2009-11-25T05:36:44.792571Z
 3090
--- a/vendor/gems/rubytree-0.5.2/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/gems/rubytree-0.5.2/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/rubytree-0.5.2/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 bd5257614b958bab00916feffc4fa9ae
 2009-11-25T05:36:44.792571Z
 3090
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 b9b4a1d43e859491e80fb1e2c7499d20
 2009-11-25T05:36:44.792571Z
 3090
--- a/vendor/plugins/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 39
-/svn/!svn/ver/4891/trunk/vendor/plugins
+V 53
+/svn/!svn/ver/5945/branches/1.2-stable/vendor/plugins
 END
--- a/vendor/plugins/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-20T14:26:23.957459Z
-4891
+2011-05-29T07:18:05.033755Z
+5945
 jplang
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/acts_as_activity_provider/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/acts_as_activity_provider
+END
--- a/vendor/plugins/acts_as_activity_provider/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_activity_provider/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_activity_provider
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_activity_provider
 http://redmine.rubyforge.org/svn
 
 
 
-2008-12-08T18:20:26.452857Z
-2114
+2011-04-05T12:52:20.839202Z
+5325
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 779d73c171dc111df084a0798cca73e2
 2008-07-27T17:54:09.197937Z
 1701
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/acts_as_activity_provider/lib/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 83
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/acts_as_activity_provider/lib
+END
+acts_as_activity_provider.rb
+K 25
+svn:wc:ra_dav:version-url
+V 112
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/acts_as_activity_provider/lib/acts_as_activity_provider.rb
+END
--- a/vendor/plugins/acts_as_activity_provider/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_activity_provider/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_activity_provider/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_activity_provider/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2008-12-08T18:20:26.452857Z
-2114
+2011-04-05T12:52:20.839202Z
+5325
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:12.000000Z
-21fbeb28c4ce556d2534306b96be9497
-2008-12-08T18:20:26.452857Z
-2114
+2011-06-06T13:20:52.000000Z
+59f4bcfa68e4f7d5f4d881d01a9ba8be
+2011-04-05T12:52:20.839202Z
+5325
 jplang
 has-props
 
@@ -58,5 +58,5 @@
 
 
 
-3534
+3971
 
--- a/vendor/plugins/acts_as_activity_provider/lib/.svn/text-base/acts_as_activity_provider.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_activity_provider/lib/.svn/text-base/acts_as_activity_provider.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -36,7 +36,6 @@
           # We store these options in activity_provider_options hash
           event_type = options.delete(:type) || self.name.underscore.pluralize
           
-          options[:permission] = "view_#{self.name.underscore.pluralize}".to_sym unless options.has_key?(:permission)
           options[:timestamp] ||= "#{table_name}.created_on"
           options[:find_options] ||= {}
           options[:author_key] = "#{table_name}.#{options[:author_key]}" if options[:author_key].is_a?(Symbol)
@@ -60,20 +59,31 @@
             if from && to
               cond.add(["#{provider_options[:timestamp]} BETWEEN ? AND ?", from, to])
             end
+            
             if options[:author]
               return [] if provider_options[:author_key].nil?
               cond.add(["#{provider_options[:author_key]} = ?", options[:author].id])
             end
-            cond.add(Project.allowed_to_condition(user, provider_options[:permission], options)) if provider_options[:permission]
-            scope_options[:conditions] = cond.conditions
+            
             if options[:limit]
               # id and creation time should be in same order in most cases
               scope_options[:order] = "#{table_name}.id DESC"
               scope_options[:limit] = options[:limit]
             end
             
+            scope = self
+            if provider_options.has_key?(:permission)
+              cond.add(Project.allowed_to_condition(user, provider_options[:permission] || :view_project, options))
+            elsif respond_to?(:visible)
+              scope = scope.visible(user, options)
+            else
+              ActiveSupport::Deprecation.warn "acts_as_activity_provider with implicit :permission option is deprecated. Add a visible scope to the #{self.name} model or use explicit :permission option."
+              cond.add(Project.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym, options))
+            end
+            scope_options[:conditions] = cond.conditions
+            
             with_scope(:find => scope_options) do
-              find(:all, provider_options[:find_options].dup)
+              scope.find(:all, provider_options[:find_options].dup)
             end
           end
         end
--- a/vendor/plugins/acts_as_activity_provider/lib/acts_as_activity_provider.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_activity_provider/lib/acts_as_activity_provider.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -36,7 +36,6 @@
           # We store these options in activity_provider_options hash
           event_type = options.delete(:type) || self.name.underscore.pluralize
           
-          options[:permission] = "view_#{self.name.underscore.pluralize}".to_sym unless options.has_key?(:permission)
           options[:timestamp] ||= "#{table_name}.created_on"
           options[:find_options] ||= {}
           options[:author_key] = "#{table_name}.#{options[:author_key]}" if options[:author_key].is_a?(Symbol)
@@ -60,20 +59,31 @@
             if from && to
               cond.add(["#{provider_options[:timestamp]} BETWEEN ? AND ?", from, to])
             end
+            
             if options[:author]
               return [] if provider_options[:author_key].nil?
               cond.add(["#{provider_options[:author_key]} = ?", options[:author].id])
             end
-            cond.add(Project.allowed_to_condition(user, provider_options[:permission], options)) if provider_options[:permission]
-            scope_options[:conditions] = cond.conditions
+            
             if options[:limit]
               # id and creation time should be in same order in most cases
               scope_options[:order] = "#{table_name}.id DESC"
               scope_options[:limit] = options[:limit]
             end
             
+            scope = self
+            if provider_options.has_key?(:permission)
+              cond.add(Project.allowed_to_condition(user, provider_options[:permission] || :view_project, options))
+            elsif respond_to?(:visible)
+              scope = scope.visible(user, options)
+            else
+              ActiveSupport::Deprecation.warn "acts_as_activity_provider with implicit :permission option is deprecated. Add a visible scope to the #{self.name} model or use explicit :permission option."
+              cond.add(Project.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym, options))
+            end
+            scope_options[:conditions] = cond.conditions
+            
             with_scope(:find => scope_options) do
-              find(:all, provider_options[:find_options].dup)
+              scope.find(:all, provider_options[:find_options].dup)
             end
           end
         end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/acts_as_attachable/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/acts_as_attachable
+END
--- a/vendor/plugins/acts_as_attachable/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_attachable/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_attachable
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_attachable
 http://redmine.rubyforge.org/svn
 
 
 
-2010-03-03T17:05:00.967826Z
-3528
-edavis10
+2011-04-15T13:23:13.506236Z
+5466
+jplang
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b215588c95e69b4bb8f91ad91606bfbe
 2008-12-09T16:54:46.963649Z
 2116
--- a/vendor/plugins/acts_as_attachable/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_attachable/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_attachable/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_attachable/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2010-03-03T17:05:00.967826Z
-3528
-edavis10
+2011-04-15T13:23:13.506236Z
+5466
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:12.000000Z
-982227c44f1fe848c8aeed862ea027f3
-2010-03-03T17:05:00.967826Z
-3528
-edavis10
+2011-06-06T13:18:33.000000Z
+0c00ea7475f5fb3e2232c35f4747e2d2
+2011-04-15T13:23:13.506236Z
+5466
+jplang
 has-props
 
 
@@ -58,5 +58,5 @@
 
 
 
-2387
+2515
 
--- a/vendor/plugins/acts_as_attachable/lib/.svn/text-base/acts_as_attachable.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_attachable/lib/.svn/text-base/acts_as_attachable.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -44,11 +44,13 @@
         end
         
         def attachments_visible?(user=User.current)
-          user.allowed_to?(self.class.attachable_options[:view_permission], self.project)
+          (respond_to?(:visible?) ? visible?(user) : true) &&
+            user.allowed_to?(self.class.attachable_options[:view_permission], self.project)
         end
         
         def attachments_deletable?(user=User.current)
-          user.allowed_to?(self.class.attachable_options[:delete_permission], self.project)
+          (respond_to?(:visible?) ? visible?(user) : true) &&
+            user.allowed_to?(self.class.attachable_options[:delete_permission], self.project)
         end
 
         def initialize_unsaved_attachments
--- a/vendor/plugins/acts_as_attachable/lib/acts_as_attachable.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_attachable/lib/acts_as_attachable.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -44,11 +44,13 @@
         end
         
         def attachments_visible?(user=User.current)
-          user.allowed_to?(self.class.attachable_options[:view_permission], self.project)
+          (respond_to?(:visible?) ? visible?(user) : true) &&
+            user.allowed_to?(self.class.attachable_options[:view_permission], self.project)
         end
         
         def attachments_deletable?(user=User.current)
-          user.allowed_to?(self.class.attachable_options[:delete_permission], self.project)
+          (respond_to?(:visible?) ? visible?(user) : true) &&
+            user.allowed_to?(self.class.attachable_options[:delete_permission], self.project)
         end
 
         def initialize_unsaved_attachments
--- a/vendor/plugins/acts_as_customizable/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_customizable/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,11 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/4891/trunk/vendor/plugins/acts_as_customizable
+V 74
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/acts_as_customizable
 END
-init.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/1592/trunk/vendor/plugins/acts_as_customizable/init.rb
-END
--- a/vendor/plugins/acts_as_customizable/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_customizable/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_customizable
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_customizable
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-20T14:26:23.957459Z
-4891
+2011-04-01T13:44:58.700463Z
+5272
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 0d1f178b7636d6712b38304954530928
 2008-06-27T20:13:56.888432Z
 1592
--- a/vendor/plugins/acts_as_customizable/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_customizable/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_customizable/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_customizable/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2011-02-20T14:26:23.957459Z
-4891
+2011-04-01T13:44:58.700463Z
+5272
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:40:18.000000Z
-2a7f0cd4a6b5d7f58a12567604697208
-2011-02-20T14:26:23.957459Z
-4891
+2011-06-06T13:18:33.000000Z
+d72670b67576182b51bf4d8b4096cac8
+2011-04-01T13:44:58.700463Z
+5272
 jplang
 has-props
 
@@ -58,5 +58,5 @@
 
 
 
-4469
+4490
 
--- a/vendor/plugins/acts_as_customizable/lib/.svn/text-base/acts_as_customizable.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_customizable/lib/.svn/text-base/acts_as_customizable.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -75,7 +75,7 @@
         end
         
         def custom_field_values
-          @custom_field_values ||= available_custom_fields.collect { |x| custom_values.detect { |v| v.custom_field == x } || custom_values.build(:custom_field => x, :value => nil) }
+          @custom_field_values ||= available_custom_fields.collect { |x| custom_values.detect { |v| v.custom_field == x } || custom_values.build(:customized => self, :custom_field => x, :value => nil) }
         end
         
         def visible_custom_field_values
--- a/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -75,7 +75,7 @@
         end
         
         def custom_field_values
-          @custom_field_values ||= available_custom_fields.collect { |x| custom_values.detect { |v| v.custom_field == x } || custom_values.build(:custom_field => x, :value => nil) }
+          @custom_field_values ||= available_custom_fields.collect { |x| custom_values.detect { |v| v.custom_field == x } || custom_values.build(:customized => self, :custom_field => x, :value => nil) }
         end
         
         def visible_custom_field_values
--- a/vendor/plugins/acts_as_event/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_event/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_event
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_event
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 60df7ab698ddd0c3701bb0efbb8233cf
 2007-08-29T16:52:35.680643Z
 674
--- a/vendor/plugins/acts_as_event/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_event/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_event/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_event/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 ca8e33777d59976db870f71defe5f66d
 2010-04-30T10:45:21.145380Z
 3703
--- a/vendor/plugins/acts_as_list/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_list/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_list
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 0bdbdc825f80fda1a94852a82b68ffd4
 2007-12-10T17:58:07.273873Z
 975
@@ -72,7 +72,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 42212b5cb681c9888d56f9c0f36e1e02
 2007-12-10T17:58:07.273873Z
 975
--- a/vendor/plugins/acts_as_list/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_list/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_list/lib
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/acts_as_list/lib/active_record/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_list/lib/active_record/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib/active_record
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_list/lib/active_record
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib/active_record/acts
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_list/lib/active_record/acts
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 a3ee41e8bed56868bc2e4ab2cb7df73a
 2009-02-26T09:21:41.696815Z
 2526
--- a/vendor/plugins/acts_as_list/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_list/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_list/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3d41debf5c631e88295d337507c3b5b6
 2007-12-10T17:58:07.273873Z
 975
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/acts_as_searchable/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/acts_as_searchable
+END
--- a/vendor/plugins/acts_as_searchable/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_searchable/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_searchable
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_searchable
 http://redmine.rubyforge.org/svn
 
 
 
-2010-02-17T20:20:51.097274Z
-3445
+2011-04-05T12:55:19.162428Z
+5327
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 7512fe68c7dfbb57e956d22b9aa8f8ed
 2007-09-27T17:28:22.154371Z
 766
--- a/vendor/plugins/acts_as_searchable/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_searchable/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_searchable/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_searchable/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2010-02-17T20:20:51.097274Z
-3445
+2011-04-05T12:55:19.162428Z
+5327
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:12.000000Z
-f282f30a34a9560d7ef3d5883aba5fe9
-2010-02-17T20:20:51.097274Z
-3445
+2011-06-06T13:18:33.000000Z
+4dd9ab6c2387d779d21e2fac9727e70f
+2011-04-05T12:55:19.162428Z
+5327
 jplang
 has-props
 
@@ -58,5 +58,5 @@
 
 
 
-5937
+6360
 
--- a/vendor/plugins/acts_as_searchable/lib/.svn/text-base/acts_as_searchable.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_searchable/lib/.svn/text-base/acts_as_searchable.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -45,9 +45,6 @@
           searchable_options[:date_column] ||= "#{table_name}.created_on"
           searchable_options[:order_column] ||= searchable_options[:date_column]
           
-          # Permission needed to search this model
-          searchable_options[:permission] = "view_#{self.name.underscore.pluralize}".to_sym unless searchable_options.has_key?(:permission)
-          
           # Should we search custom fields on this model ?
           searchable_options[:search_custom_fields] = !reflect_on_association(:custom_values).nil?
           
@@ -65,6 +62,8 @@
           # projects argument can be either nil (will search all projects), a project or an array of projects
           # Returns the results and the results count
           def search(tokens, projects=nil, options={})
+            # TODO: make user an argument
+            user = User.current
             tokens = [] << tokens unless tokens.is_a?(Array)
             projects = [] << projects unless projects.nil? || projects.is_a?(Array)
             
@@ -99,18 +98,27 @@
             
             find_options[:conditions] = [sql, * (tokens.collect {|w| "%#{w.downcase}%"} * token_clauses.size).sort]
             
+            scope = self
             project_conditions = []
-            project_conditions << (searchable_options[:permission].nil? ? Project.visible_by(User.current) :
-                                                 Project.allowed_to_condition(User.current, searchable_options[:permission]))
+            if searchable_options.has_key?(:permission)
+              project_conditions << Project.allowed_to_condition(user, searchable_options[:permission] || :view_project)
+            elsif respond_to?(:visible)
+              scope = scope.visible(user)
+            else
+              ActiveSupport::Deprecation.warn "acts_as_searchable with implicit :permission option is deprecated. Add a visible scope to the #{self.name} model or use explicit :permission option."
+              project_conditions << Project.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym)
+            end
+            # TODO: use visible scope options instead
             project_conditions << "#{searchable_options[:project_key]} IN (#{projects.collect(&:id).join(',')})" unless projects.nil?
+            project_conditions = project_conditions.empty? ? nil : project_conditions.join(' AND ')
             
             results = []
             results_count = 0
             
-            with_scope(:find => {:conditions => project_conditions.join(' AND ')}) do
+            with_scope(:find => {:conditions => project_conditions}) do
               with_scope(:find => find_options) do
-                results_count = count(:all)
-                results = find(:all, limit_options)
+                results_count = scope.count(:all)
+                results = scope.find(:all, limit_options)
               end
             end
             [results, results_count]
--- a/vendor/plugins/acts_as_searchable/lib/acts_as_searchable.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_searchable/lib/acts_as_searchable.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -45,9 +45,6 @@
           searchable_options[:date_column] ||= "#{table_name}.created_on"
           searchable_options[:order_column] ||= searchable_options[:date_column]
           
-          # Permission needed to search this model
-          searchable_options[:permission] = "view_#{self.name.underscore.pluralize}".to_sym unless searchable_options.has_key?(:permission)
-          
           # Should we search custom fields on this model ?
           searchable_options[:search_custom_fields] = !reflect_on_association(:custom_values).nil?
           
@@ -65,6 +62,8 @@
           # projects argument can be either nil (will search all projects), a project or an array of projects
           # Returns the results and the results count
           def search(tokens, projects=nil, options={})
+            # TODO: make user an argument
+            user = User.current
             tokens = [] << tokens unless tokens.is_a?(Array)
             projects = [] << projects unless projects.nil? || projects.is_a?(Array)
             
@@ -99,18 +98,27 @@
             
             find_options[:conditions] = [sql, * (tokens.collect {|w| "%#{w.downcase}%"} * token_clauses.size).sort]
             
+            scope = self
             project_conditions = []
-            project_conditions << (searchable_options[:permission].nil? ? Project.visible_by(User.current) :
-                                                 Project.allowed_to_condition(User.current, searchable_options[:permission]))
+            if searchable_options.has_key?(:permission)
+              project_conditions << Project.allowed_to_condition(user, searchable_options[:permission] || :view_project)
+            elsif respond_to?(:visible)
+              scope = scope.visible(user)
+            else
+              ActiveSupport::Deprecation.warn "acts_as_searchable with implicit :permission option is deprecated. Add a visible scope to the #{self.name} model or use explicit :permission option."
+              project_conditions << Project.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym)
+            end
+            # TODO: use visible scope options instead
             project_conditions << "#{searchable_options[:project_key]} IN (#{projects.collect(&:id).join(',')})" unless projects.nil?
+            project_conditions = project_conditions.empty? ? nil : project_conditions.join(' AND ')
             
             results = []
             results_count = 0
             
-            with_scope(:find => {:conditions => project_conditions.join(' AND ')}) do
+            with_scope(:find => {:conditions => project_conditions}) do
               with_scope(:find => find_options) do
-                results_count = count(:all)
-                results = find(:all, limit_options)
+                results_count = scope.count(:all)
+                results = scope.find(:all, limit_options)
               end
             end
             [results, results_count]
--- a/vendor/plugins/acts_as_tree/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_tree/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_tree
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 77667cb4c41516750075eefb98896a93
 2007-12-10T17:58:07.273873Z
 975
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 581c104f87fe90cfe9a7d1d41d77c84f
 2007-12-10T17:58:07.273873Z
 975
@@ -106,7 +106,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 918c85e850eb84259c178529b9aafd62
 2007-12-10T17:58:07.273873Z
 975
--- a/vendor/plugins/acts_as_tree/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_tree/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_tree/lib
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/acts_as_tree/lib/active_record/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_tree/lib/active_record/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib/active_record
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_tree/lib/active_record
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib/active_record/acts
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_tree/lib/active_record/acts
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 544900d884182d6888334ce14323bef0
 2009-04-21T12:19:56.547537Z
 2676
--- a/vendor/plugins/acts_as_tree/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_tree/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_tree/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2007-12-10T17:58:07.273873Z
 975
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2007-12-10T17:58:07.273873Z
 975
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2007-12-10T17:58:07.273873Z
 975
@@ -137,7 +137,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 7bd3d48984d0e563b9f5e20ca8fdff81
 2007-12-10T17:58:07.273873Z
 975
--- a/vendor/plugins/acts_as_tree/test/fixtures/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_tree/test/fixtures/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/test/fixtures
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_tree/test/fixtures
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2007-12-10T17:58:07.273873Z
 975
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2007-12-10T17:58:07.273873Z
 975
--- a/vendor/plugins/acts_as_versioned/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_versioned/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_versioned
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 8aae554c93cc60ef98cb3da2dd7c1b4b
 2007-03-04T13:40:21.895320Z
 290
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 1f57ce7fac2d625797b9ec6d6480cf5b
 2008-07-04T17:58:14.743502Z
 1623
@@ -103,7 +103,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 1d117218f55938f9c75f1f814a4915d1
 2007-03-04T13:40:21.895320Z
 290
@@ -140,7 +140,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3aa6f483cf322e248d4a1281160f8845
 2007-03-04T13:40:21.895320Z
 290
@@ -174,7 +174,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e4ba7226e637685b5cca7a9cc5c05af2
 2007-03-04T13:40:21.895320Z
 290
@@ -208,7 +208,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 06ee73d1b4ad386b681f88b9326a0685
 2007-03-04T13:40:21.895320Z
 290
--- a/vendor/plugins/acts_as_versioned/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_versioned/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_versioned/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 474fc02132fce15712540924bb7b22cf
 2008-07-04T17:58:14.743502Z
 1623
--- a/vendor/plugins/acts_as_versioned/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_versioned/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_versioned/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 8a2eaa42c29dc84e0c018e78c99987f1
 2008-07-04T17:58:14.743502Z
 1623
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 df4118ed0edd4b3a0bae0cbb3b7a8a6b
 2007-03-04T13:40:21.895320Z
 290
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 99f5a4aa22b79a8f8c7521a0b1e9ec3e
 2008-07-04T17:58:14.743502Z
 1623
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 c5ac373bf98e48576df3a63ab4349883
 2007-03-04T13:40:21.895320Z
 290
@@ -171,7 +171,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 eb28101ab94f672b3a99998fc03f0d38
 2008-07-04T17:58:14.743502Z
 1623
--- a/vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test/fixtures
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_versioned/test/fixtures
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6052582a74186e97a71e6d50ff1c3558
 2007-03-04T13:40:21.895320Z
 290
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 35aca448cc30c958ad2f3a8130903701
 2007-03-04T13:40:21.895320Z
 290
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 df240cb0129f29834aea167ea97df5c9
 2007-03-04T13:40:21.895320Z
 290
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3e63e88f04d92531412a5e328670313d
 2007-03-04T13:40:21.895320Z
 290
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 9e0c65a239dc63caf3ba5b61e5acd86b
 2007-03-04T13:40:21.895320Z
 290
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 c9631a233cff08e617f783f2c5d4ebcb
 2007-03-04T13:40:21.895320Z
 290
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6cbb9a0d4b22160edce9cdd270943fcd
 2008-07-04T17:58:14.743502Z
 1623
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 7845068722476900746d101729c30187
 2007-03-04T13:40:21.895320Z
 290
@@ -307,7 +307,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ebfb47357586fa12e4524a65ba0a714a
 2007-03-04T13:40:21.895320Z
 290
@@ -341,7 +341,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 a93535c95869678b16df898b8de4259f
 2007-03-04T13:40:21.895320Z
 290
--- a/vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test/fixtures/migrations
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_versioned/test/fixtures/migrations
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 8fca6192aeeba1c8456bd6ac6199839f
 2007-03-04T13:40:21.895320Z
 290
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/acts_as_watchable/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/5945/branches/1.2-stable/vendor/plugins/acts_as_watchable
+END
--- a/vendor/plugins/acts_as_watchable/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_watchable/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_watchable
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_watchable
 http://redmine.rubyforge.org/svn
 
 
 
-2010-06-20T18:41:30.111362Z
-3803
-edavis10
+2011-05-29T07:18:05.033755Z
+5945
+jplang
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 7051267daa625f991f2b604afde255ff
 2007-04-21T12:08:31.130506Z
 453
--- a/vendor/plugins/acts_as_watchable/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_watchable/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_watchable/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_watchable/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2010-06-20T18:41:30.111362Z
-3803
-edavis10
+2011-05-29T07:18:05.033755Z
+5945
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-03-03T11:05:12.000000Z
-30f73616865f02dadce09f9511269b70
-2010-06-20T18:41:30.111362Z
-3803
-edavis10
+2011-06-06T13:18:33.000000Z
+3b3a89183c72eb8f1ef981156b502ca9
+2011-05-29T07:18:05.033755Z
+5945
+jplang
 has-props
 
 
@@ -58,5 +58,5 @@
 
 
 
-2265
+2489
 
--- a/vendor/plugins/acts_as_watchable/lib/.svn/text-base/acts_as_watchable.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_watchable/lib/.svn/text-base/acts_as_watchable.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -13,7 +13,7 @@
           
           class_eval do
             has_many :watchers, :as => :watchable, :dependent => :delete_all
-            has_many :watcher_users, :through => :watchers, :source => :user
+            has_many :watcher_users, :through => :watchers, :source => :user, :validate => false
             
             named_scope :watched_by, lambda { |user_id|
               { :include => :watchers,
@@ -31,7 +31,11 @@
         
         # Returns an array of users that are proposed as watchers
         def addable_watcher_users
-          self.project.users.sort - self.watcher_users
+          users = self.project.users.sort - self.watcher_users
+          if respond_to?(:visible?)
+            users.reject! {|user| !visible?(user)}
+          end
+          users
         end
         
         # Adds user as a watcher
@@ -58,7 +62,8 @@
         # Returns an array of watchers' email addresses
         def watcher_recipients
           notified = watcher_users.active
-
+          notified.reject! {|user| user.mail_notification == 'none'}
+          
           if respond_to?(:visible?)
             notified.reject! {|user| !visible?(user)}
           end
--- a/vendor/plugins/acts_as_watchable/lib/acts_as_watchable.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/acts_as_watchable/lib/acts_as_watchable.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -13,7 +13,7 @@
           
           class_eval do
             has_many :watchers, :as => :watchable, :dependent => :delete_all
-            has_many :watcher_users, :through => :watchers, :source => :user
+            has_many :watcher_users, :through => :watchers, :source => :user, :validate => false
             
             named_scope :watched_by, lambda { |user_id|
               { :include => :watchers,
@@ -31,7 +31,11 @@
         
         # Returns an array of users that are proposed as watchers
         def addable_watcher_users
-          self.project.users.sort - self.watcher_users
+          users = self.project.users.sort - self.watcher_users
+          if respond_to?(:visible?)
+            users.reject! {|user| !visible?(user)}
+          end
+          users
         end
         
         # Adds user as a watcher
@@ -58,7 +62,8 @@
         # Returns an array of watchers' email addresses
         def watcher_recipients
           notified = watcher_users.active
-
+          notified.reject! {|user| user.mail_notification == 'none'}
+          
           if respond_to?(:visible?)
             notified.reject! {|user| !visible?(user)}
           end
--- a/vendor/plugins/awesome_nested_set/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,35 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4735/trunk/vendor/plugins/awesome_nested_set
+V 72
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/awesome_nested_set
 END
-awesome_nested_set.gemspec
-K 25
-svn:wc:ra_dav:version-url
-V 85
-/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/awesome_nested_set.gemspec
-END
-Rakefile
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/Rakefile
-END
-README.rdoc
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/README.rdoc
-END
-init.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/init.rb
-END
-MIT-LICENSE
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/MIT-LICENSE
-END
--- a/vendor/plugins/awesome_nested_set/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-22T11:46:15.415880Z
-4735
+2011-04-12T16:31:00.547886Z
+5441
 jplang
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 c1f9a7c7c81a0c9150d260757c895ab3
 2008-12-20T12:22:38.158335Z
 2149
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 75ea4a8e8109afdbce9214ac3e9aa40a
 2008-12-20T12:22:38.158335Z
 2149
@@ -103,7 +103,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 5d897290320b00753c366c59f40b213e
 2008-12-20T12:22:38.158335Z
 2149
@@ -137,7 +137,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 af5f1806895c92bb03e8855a96d13a64
 2008-12-20T12:22:38.158335Z
 2149
@@ -174,7 +174,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 ba826ae68593d063b726b4e66dcb1e8f
 2008-12-20T12:22:38.158335Z
 2149
--- a/vendor/plugins/awesome_nested_set/lib/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/lib/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,11 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4735/trunk/vendor/plugins/awesome_nested_set/lib
+V 76
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/awesome_nested_set/lib
 END
 awesome_nested_set.rb
 K 25
 svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/4735/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb
+V 98
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb
 END
--- a/vendor/plugins/awesome_nested_set/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-22T11:46:15.415880Z
-4735
+2011-04-12T16:31:00.547886Z
+5441
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-03-03T11:05:12.000000Z
-30e0732ab58f6380af97e08261871486
-2011-01-22T11:46:15.415880Z
-4735
+2011-06-06T13:20:52.000000Z
+1930a187dbd0635d534b5afb1a9957ba
+2011-04-12T16:31:00.547886Z
+5441
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-21619
+21882
 
 awesome_nested_set
 dir
--- a/vendor/plugins/awesome_nested_set/lib/.svn/text-base/awesome_nested_set.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/lib/.svn/text-base/awesome_nested_set.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -425,7 +425,7 @@
         # the base ActiveRecord class, using the :scope declared in the acts_as_nested_set
         # declaration.
         def nested_set_scope
-          options = {:order => quoted_left_column_name}
+          options = {:order => "#{self.class.table_name}.#{quoted_left_column_name}"}
           scopes = Array(acts_as_nested_set_options[:scope])
           options[:conditions] = scopes.inject({}) do |conditions,attr|
             conditions.merge attr => self[attr]
@@ -444,11 +444,12 @@
         # Prunes a branch off of the tree, shifting all of the elements on the right
         # back to the left so the counts still work.
         def prune_from_tree
-          return if right.nil? || left.nil? || !self.class.exists?(id)
+          return if right.nil? || left.nil? || leaf? || !self.class.exists?(id)
 
           delete_method = acts_as_nested_set_options[:dependent] == :destroy ?
             :destroy_all : :delete_all
 
+          # TODO: should destroy children (not descendants) when deleted_method is :destroy_all
           self.class.base_class.transaction do
             reload_nested_set
             nested_set_scope.send(delete_method,
@@ -466,6 +467,9 @@
               ["#{quoted_right_column_name} >= ?", right]
             )
           end
+          
+          # Reload is needed because children may have updated their parent (self) during deletion.
+          reload
         end
 
         # reload left, right, and parent
--- a/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -425,7 +425,7 @@
         # the base ActiveRecord class, using the :scope declared in the acts_as_nested_set
         # declaration.
         def nested_set_scope
-          options = {:order => quoted_left_column_name}
+          options = {:order => "#{self.class.table_name}.#{quoted_left_column_name}"}
           scopes = Array(acts_as_nested_set_options[:scope])
           options[:conditions] = scopes.inject({}) do |conditions,attr|
             conditions.merge attr => self[attr]
@@ -444,11 +444,12 @@
         # Prunes a branch off of the tree, shifting all of the elements on the right
         # back to the left so the counts still work.
         def prune_from_tree
-          return if right.nil? || left.nil? || !self.class.exists?(id)
+          return if right.nil? || left.nil? || leaf? || !self.class.exists?(id)
 
           delete_method = acts_as_nested_set_options[:dependent] == :destroy ?
             :destroy_all : :delete_all
 
+          # TODO: should destroy children (not descendants) when deleted_method is :destroy_all
           self.class.base_class.transaction do
             reload_nested_set
             nested_set_scope.send(delete_method,
@@ -466,6 +467,9 @@
               ["#{quoted_right_column_name} >= ?", right]
             )
           end
+          
+          # Reload is needed because children may have updated their parent (self) during deletion.
+          reload
         end
 
         # reload left, right, and parent
--- a/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/lib/awesome_nested_set
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d15393e7ec4757df0e53641d9a8d76f4
 2008-12-20T12:22:38.158335Z
 2149
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d4a9622144313fa6b56117a6c1f11e61
 2008-12-20T12:22:38.158335Z
 2149
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 cebe8bf25e6f479251be38c80a246574
 2008-12-20T12:22:38.158335Z
 2149
--- a/vendor/plugins/awesome_nested_set/rails/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/rails/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/rails
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/rails
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:13.000000Z
+2011-06-06T13:15:00.000000Z
 d5995cbfa2abdc12b57c44d69dc0085b
 2008-12-20T12:22:38.158335Z
 2149
--- a/vendor/plugins/awesome_nested_set/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 41b65aff686211d45ba085c1b0791218
 2008-12-20T12:22:38.158335Z
 2149
@@ -75,7 +75,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d177339aefb3c4a8f280efff48c974b6
 2008-12-20T12:22:38.158335Z
 2149
--- a/vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/awesome_nested_set
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/test/awesome_nested_set
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 03a414e3247544a5a2334aed005764f3
 2008-12-20T12:22:38.158335Z
 2149
--- a/vendor/plugins/awesome_nested_set/test/db/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/test/db/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/db
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/test/db
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ae23aecda935bb66e29aa4f02ea9de0a
 2008-12-20T12:22:38.158335Z
 2149
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 359889e11314c2969bdf7e37475bdc62
 2008-12-20T12:22:38.158335Z
 2149
--- a/vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/fixtures
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/test/fixtures
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 460e90d6f219f339e8e4c64aaae0063c
 2008-12-20T12:22:38.158335Z
 2149
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 4b6a06e11c21a3aadd09e60dee443110
 2008-12-20T12:22:38.158335Z
 2149
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e4eb5dbc7f2a2aa2fee79dba9210e769
 2008-12-20T12:22:38.158335Z
 2149
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e8b507fd94ed89b9997c3f9f137290cf
 2008-12-20T12:22:38.158335Z
 2149
--- a/vendor/plugins/classic_pagination/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/classic_pagination/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/classic_pagination
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b14424b71d2f606a775061237c8226f1
 2007-12-10T17:58:07.273873Z
 975
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 181539722e198d92992a94f40310f4fc
 2007-12-10T17:58:07.273873Z
 975
@@ -106,7 +106,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3ef206f381b42341342908fcc0001210
 2007-12-09T21:53:46.068689Z
 966
@@ -140,7 +140,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 1c88d6bc27aa809cd6ef26543c18b1e6
 2007-12-10T17:58:07.273873Z
 975
@@ -174,7 +174,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f1df690ff1ea0da74f8fe161f50722ad
 2007-12-10T17:58:07.273873Z
 975
--- a/vendor/plugins/classic_pagination/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/classic_pagination/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/classic_pagination/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 535b7515c14fb3964e97be32c2d36415
 2007-12-10T17:58:07.273873Z
 975
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d770c57066726c423cc9de4ca5b552cd
 2008-12-14T15:36:59.418123Z
 2134
--- a/vendor/plugins/classic_pagination/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/classic_pagination/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/classic_pagination/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 50c7fabeb3d6728ce24eada59d5b2b67
 2007-12-10T17:58:07.273873Z
 975
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 0a02d28a37b53a8e19af7935db5be1a8
 2007-12-10T17:58:07.273873Z
 975
@@ -103,7 +103,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 597b7501984a5ecd10242163d06c33e7
 2007-12-10T17:58:07.273873Z
 975
--- a/vendor/plugins/classic_pagination/test/fixtures/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/classic_pagination/test/fixtures/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/test/fixtures
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/classic_pagination/test/fixtures
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 4e923be7fd534a67635192bcfcbed5cf
 2007-12-10T17:58:07.273873Z
 975
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 021192cd31a5c3a39cbe7bd14144425a
 2007-12-10T17:58:07.273873Z
 975
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 5953f128689c82c1d5c9ab2709a682e4
 2007-12-10T17:58:07.273873Z
 975
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 cc2715c9793cffccefbac86e97dd5a08
 2007-12-10T17:58:07.273873Z
 975
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 92e8d8a3cd6b419bdabbafc91be07b13
 2007-12-10T17:58:07.273873Z
 975
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 182661632986d51f75c49d74b19df40c
 2007-12-10T17:58:07.273873Z
 975
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f1bf372057211d4a6d86499e561d903c
 2007-12-10T17:58:07.273873Z
 975
@@ -270,7 +270,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 98f978d0e16223524ee8dc769136a3c4
 2007-12-10T17:58:07.273873Z
 975
@@ -304,7 +304,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3605b2a8f1cf10cbc34343bd7c49330d
 2007-12-10T17:58:07.273873Z
 975
@@ -338,7 +338,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 dccebb95780c20b896fe26306d904e9d
 2007-12-10T17:58:07.273873Z
 975
@@ -372,7 +372,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 318c27008dc35148da64e32ff9bf53c7
 2007-12-10T17:58:07.273873Z
 975
@@ -406,7 +406,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 78b664b5dbb72751888e7f6bf4cd12f8
 2007-12-09T21:53:46.068689Z
 966
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/engines/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/engines
+END
--- a/vendor/plugins/engines/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,14 +1,14 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines
 http://redmine.rubyforge.org/svn
 
 
 
-2010-11-14T16:24:21.989522Z
-4406
+2011-03-24T18:46:12.279245Z
+5216
 jplang
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b8328004b1bb94c84d90c0839cd7d41d
 2009-09-13T17:14:35.707881Z
 2887
@@ -63,16 +63,13 @@
 
 8492
 
-tasks
-dir
-
 .gitignore
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 a523ea1465a566ae38fba96a99506ff3
 2008-07-12T10:17:14.809831Z
 1654
@@ -106,7 +103,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f653a768811758cee11e21d4de00b381
 2009-10-07T16:43:50.656336Z
 2904
@@ -140,7 +137,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e4f81ba26f0b10a838b3336ba263aaa5
 2009-09-13T17:14:35.707881Z
 2887
@@ -177,7 +174,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 41bb5eeb2864cd46438eefb1cb048c4d
 2009-02-21T11:04:50.579477Z
 2493
@@ -214,7 +211,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6e112fd6d07885bef3fd5bd537fc1409
 2008-07-12T10:17:14.809831Z
 1654
@@ -248,7 +245,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 18cc761cb69b7735ecf0cdb0d9b6d640
 2009-09-13T17:14:35.707881Z
 2887
@@ -282,7 +279,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 7e25f2cbded59c24735a20510040bb74
 2008-07-12T10:17:14.809831Z
 1654
--- a/vendor/plugins/engines/generators/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/generators/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/generators
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/generators/plugin_migration/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/generators/plugin_migration/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators/plugin_migration
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/generators/plugin_migration
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3f4805cb1e4a8b8a3ed180f22d81c285
 2010-11-14T16:24:21.989522Z
 4406
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d796f61555b36ef9941ea049c94df06b
 2008-07-12T10:17:14.809831Z
 1654
--- a/vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators/plugin_migration/templates
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/generators/plugin_migration/templates
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 0b30f95c4244242093ded274caf9e4a8
 2008-07-12T10:17:14.809831Z
 1654
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/engines/lib/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/engines/lib
+END
--- a/vendor/plugins/engines/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-17T04:06:40.671348Z
-4094
-edavis10
+2011-03-24T18:46:12.279245Z
+5216
+jplang
 
 
 
@@ -26,6 +26,9 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
+tasks
+dir
+
 engines
 dir
 
@@ -35,7 +38,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b9128ad79c06e8c2eb2474a7f9edf60d
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/lib/engines/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/lib/engines/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/lib/engines
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f5e61f1312a19bdac20f06b7529eaa98
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d084e8ccb3edfb9f481f2626ee9e57e1
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 a2cb2f3c517fbe62ab1277e44b0a05ed
 2009-02-21T11:04:50.579477Z
 2493
--- a/vendor/plugins/engines/lib/engines/plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/lib/engines/plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines/plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/lib/engines/plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 2adca63e7c7d7c38a91953458e893bb2
 2008-07-12T10:17:14.809831Z
 1654
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 21ac938bcf4f86e62ec21e9803cfd76e
 2009-02-21T11:04:50.579477Z
 2493
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 38eaf6e3b113f74daa0669c67261cc72
 2009-09-13T17:14:35.707881Z
 2887
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d68941171066743dd63a174b5f270f66
 2008-07-12T10:17:14.809831Z
 1654
--- a/vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines/rails_extensions
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/lib/engines/rails_extensions
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3e26c9fe2cd009cb5e81f6ccea3f012c
 2009-02-21T11:04:50.579477Z
 2493
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 c5a5e8b469c1e3fefcc5bedca9f4ac82
 2010-09-17T04:06:40.671348Z
 4094
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6e29697f02c187c9033624422365044a
 2009-02-21T11:04:50.579477Z
 2493
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f26da6a18ffcc7b846838f038a0abea4
 2008-07-12T10:17:14.809831Z
 1654
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 8f8e408b9f1a72af1cc5232ddb888266
 2009-02-21T11:04:50.579477Z
 2493
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/engines/lib/tasks/engines.rake	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,281 @@
+# This code lets us redefine existing Rake tasks, which is extremely
+# handy for modifying existing Rails rake tasks.
+# Credit for the original snippet of code goes to Jeremy Kemper
+# http://pastie.caboo.se/9620
+unless Rake::TaskManager.methods.include?('redefine_task')
+  module Rake
+    module TaskManager
+      def redefine_task(task_class, args, &block)
+        task_name, arg_names, deps = resolve_args([args])
+        task_name = task_class.scope_name(@scope, task_name)
+        deps = [deps] unless deps.respond_to?(:to_ary)
+        deps = deps.collect {|d| d.to_s }
+        task = @tasks[task_name.to_s] = task_class.new(task_name, self)
+        task.application = self
+        task.add_description(@last_description)
+        @last_description = nil
+        task.enhance(deps, &block)
+        task
+      end
+      
+    end
+    class Task
+      class << self
+        def redefine_task(args, &block)
+          Rake.application.redefine_task(self, [args], &block)
+        end
+      end
+    end
+  end
+end
+
+namespace :db do
+  namespace :migrate do
+    desc 'Migrate database and plugins to current status.'
+    task :all => [ 'db:migrate', 'db:migrate:plugins' ]
+    
+    desc 'Migrate plugins to current status.'
+    task :plugins => :environment do
+      Engines.plugins.each do |plugin|
+        next unless plugin.respond_to?(:migration_directory)
+        next unless File.exists? plugin.migration_directory
+        puts "Migrating plugin #{plugin.name} ..."
+        plugin.migrate
+      end
+    end
+
+    desc 'For engines coming from Rails version < 2.0 or for those previously updated to work with Sven Fuch\'s fork of engines, you need to upgrade the schema info table'
+    task :upgrade_plugin_migrations => :environment do
+      svens_fork_table_name = 'plugin_schema_migrations'
+      
+      # Check if app was previously using Sven's fork
+      if ActiveRecord::Base.connection.table_exists?(svens_fork_table_name)
+        old_sm_table = svens_fork_table_name
+      else
+        old_sm_table = ActiveRecord::Migrator.proper_table_name(Engines.schema_info_table)
+      end
+      
+      unless ActiveRecord::Base.connection.table_exists?(old_sm_table)
+        abort "Cannot find old migration table - assuming nothing needs to be done"
+      end
+      
+      # There are two forms of the engines schema info - pre-fix_plugin_migrations and post
+      # We need to figure this out before we continue.
+      
+      results = ActiveRecord::Base.connection.select_rows(
+        "SELECT version, plugin_name FROM #{old_sm_table}"
+      ).uniq
+      
+      def insert_new_version(plugin_name, version)
+        version_string = "#{version}-#{plugin_name}"
+        new_sm_table = ActiveRecord::Migrator.schema_migrations_table_name
+        
+        # Check if the row already exists for some reason - maybe run this task more than once.
+        return if ActiveRecord::Base.connection.select_rows("SELECT * FROM #{new_sm_table} WHERE version = #{version_string.dump.gsub("\"", "'")}").size > 0
+        
+        puts "Inserting new version #{version} for plugin #{plugin_name}.."
+        ActiveRecord::Base.connection.insert("INSERT INTO #{new_sm_table} (version) VALUES (#{version_string.dump.gsub("\"", "'")})")
+      end
+      
+      # We need to figure out if they already used "fix_plugin_migrations"
+      versions = {}
+      results.each do |r|
+        versions[r[1]] ||= []
+        versions[r[1]] << r[0].to_i
+      end
+      
+      if versions.values.find{ |v| v.size > 1 } == nil
+        puts "Fixing migration info"
+        # We only have one listed migration per plugin - this is pre-fix_plugin_migrations,
+        # so we build all versions required. In this case, all migrations should 
+        versions.each do |plugin_name, version|
+          version = version[0] # There is only one version
+          
+          # We have to make an assumption that numeric migrations won't get this long..
+          # I'm not sure if there is a better assumption, it should work in all
+          # current cases.. (touch wood..)
+          if version.to_s.size < "YYYYMMDDHHMMSS".size
+            # Insert version records for each migration
+            (1..version).each do |v|
+             insert_new_version(plugin_name, v)
+            end
+          else
+            # If the plugin is new-format "YYYYMMDDHHMMSS", we just copy it across... 
+            # The case in which this occurs is very rare..
+            insert_new_version(plugin_name, version)
+          end
+        end
+      else
+        puts "Moving migration info"
+        # We have multiple migrations listed per plugin - thus we can assume they have
+        # already applied fix_plugin_migrations - we just copy it across verbatim
+        versions.each do |plugin_name, version|
+          version.each { |v| insert_new_version(plugin_name, v) }
+        end
+      end
+      
+      puts "Migration info successfully migrated - removing old schema info table"
+      ActiveRecord::Base.connection.drop_table(old_sm_table)
+    end
+    
+    desc 'Migrate a specified plugin.'
+    task(:plugin => :environment) do
+      name = ENV['NAME']
+      if plugin = Engines.plugins[name]
+        version = ENV['VERSION']
+        puts "Migrating #{plugin.name} to " + (version ? "version #{version}" : 'latest version') + " ..."
+        plugin.migrate(version ? version.to_i : nil)
+      else
+        puts "Plugin #{name} does not exist."
+      end
+    end
+  end
+end
+
+
+namespace :db do  
+  namespace :fixtures do
+    namespace :plugins do
+      
+      desc "Load plugin fixtures into the current environment's database."
+      task :load => :environment do
+        require 'active_record/fixtures'
+        ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
+        Dir.glob(File.join(RAILS_ROOT, 'vendor', 'plugins', ENV['PLUGIN'] || '**', 
+                 'test', 'fixtures', '*.yml')).each do |fixture_file|
+          Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*'))
+        end
+      end
+      
+    end
+  end
+end
+
+# this is just a modification of the original task in railties/lib/tasks/documentation.rake, 
+# because the default task doesn't support subdirectories like <plugin>/app or
+# <plugin>/component. These tasks now include every file under a plugin's load paths (see
+# Plugin#load_paths).
+namespace :doc do
+
+  plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }
+
+  namespace :plugins do
+
+    # Define doc tasks for each plugin
+    plugins.each do |plugin|
+      desc "Create plugin documentation for '#{plugin}'"
+      Rake::Task.redefine_task(plugin => :environment) do
+        plugin_base   = RAILS_ROOT + "/vendor/plugins/#{plugin}"
+        options       = []
+        files         = Rake::FileList.new
+        options << "-o doc/plugins/#{plugin}"
+        options << "--title '#{plugin.titlecase} Plugin Documentation'"
+        options << '--line-numbers' << '--inline-source'
+        options << '-T html'
+
+        # Include every file in the plugin's load_paths (see Plugin#load_paths)
+        if Engines.plugins[plugin]
+          files.include("#{plugin_base}/{#{Engines.plugins[plugin].load_paths.join(",")}}/**/*.rb")
+        end
+        if File.exists?("#{plugin_base}/README")
+          files.include("#{plugin_base}/README")    
+          options << "--main '#{plugin_base}/README'"
+        end
+        files.include("#{plugin_base}/CHANGELOG") if File.exists?("#{plugin_base}/CHANGELOG")
+
+        if files.empty?
+          puts "No source files found in #{plugin_base}. No documentation will be generated."
+        else
+          options << files.to_s
+          sh %(rdoc #{options * ' '})
+        end
+      end
+    end
+  end
+end
+
+
+
+namespace :test do
+  task :warn_about_multiple_plugin_testing_with_engines do
+    puts %{-~============== A Moste Polite Warninge ===========================~-
+
+You may experience issues testing multiple plugins at once when using
+the code-mixing features that the engines plugin provides. If you do
+experience any problems, please test plugins individually, i.e.
+
+  $ rake test:plugins PLUGIN=my_plugin
+
+or use the per-type plugin test tasks:
+
+  $ rake test:plugins:units
+  $ rake test:plugins:functionals
+  $ rake test:plugins:integration
+  $ rake test:plugins:all
+
+Report any issues on http://dev.rails-engines.org. Thanks!
+
+-~===============( ... as you were ... )============================~-}
+  end
+  
+  namespace :engines do
+    
+    def engine_plugins
+      Dir["vendor/plugins/*"].select { |f| File.directory?(File.join(f, "app")) }.map { |f| File.basename(f) }.join(",")
+    end
+    
+    desc "Run tests from within engines plugins (plugins with an 'app' directory)"
+    task :all => [:units, :functionals, :integration]
+    
+    desc "Run unit tests from within engines plugins (plugins with an 'app' directory)"
+    Rake::TestTask.new(:units => "test:plugins:setup_plugin_fixtures") do |t|
+      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/unit/**/*_test.rb"
+      t.verbose = true
+    end
+
+    desc "Run functional tests from within engines plugins (plugins with an 'app' directory)"
+    Rake::TestTask.new(:functionals => "test:plugins:setup_plugin_fixtures") do |t|
+      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/functional/**/*_test.rb"
+      t.verbose = true
+    end
+
+    desc "Run integration tests from within engines plugins (plugins with an 'app' directory)"
+    Rake::TestTask.new(:integration => "test:plugins:setup_plugin_fixtures") do |t|
+      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/integration/**/*_test.rb"
+      t.verbose = true
+    end
+  end
+  
+  namespace :plugins do
+
+    desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)"
+    task :all => [:warn_about_multiple_plugin_testing_with_engines, 
+                  :units, :functionals, :integration]
+    
+    desc "Run all plugin unit tests"
+    Rake::TestTask.new(:units => :setup_plugin_fixtures) do |t|
+      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/unit/**/*_test.rb"
+      t.verbose = true
+    end
+    
+    desc "Run all plugin functional tests"
+    Rake::TestTask.new(:functionals => :setup_plugin_fixtures) do |t|
+      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/functional/**/*_test.rb"
+      t.verbose = true
+    end
+    
+    desc "Integration test engines"
+    Rake::TestTask.new(:integration => :setup_plugin_fixtures) do |t|
+      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/integration/**/*_test.rb"
+      t.verbose = true
+    end
+
+    desc "Mirrors plugin fixtures into a single location to help plugin tests"
+    task :setup_plugin_fixtures => :environment do
+      Engines::Testing.setup_plugin_fixtures
+    end
+    
+    # Patch the default plugin testing task to have setup_plugin_fixtures as a prerequisite
+    Rake::Task["test:plugins"].prerequisites << "test:plugins:setup_plugin_fixtures"
+  end
+end
--- a/vendor/plugins/engines/tasks/.svn/text-base/engines.rake.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,281 +0,0 @@
-# This code lets us redefine existing Rake tasks, which is extremely
-# handy for modifying existing Rails rake tasks.
-# Credit for the original snippet of code goes to Jeremy Kemper
-# http://pastie.caboo.se/9620
-unless Rake::TaskManager.methods.include?('redefine_task')
-  module Rake
-    module TaskManager
-      def redefine_task(task_class, args, &block)
-        task_name, arg_names, deps = resolve_args([args])
-        task_name = task_class.scope_name(@scope, task_name)
-        deps = [deps] unless deps.respond_to?(:to_ary)
-        deps = deps.collect {|d| d.to_s }
-        task = @tasks[task_name.to_s] = task_class.new(task_name, self)
-        task.application = self
-        task.add_description(@last_description)
-        @last_description = nil
-        task.enhance(deps, &block)
-        task
-      end
-      
-    end
-    class Task
-      class << self
-        def redefine_task(args, &block)
-          Rake.application.redefine_task(self, [args], &block)
-        end
-      end
-    end
-  end
-end
-
-namespace :db do
-  namespace :migrate do
-    desc 'Migrate database and plugins to current status.'
-    task :all => [ 'db:migrate', 'db:migrate:plugins' ]
-    
-    desc 'Migrate plugins to current status.'
-    task :plugins => :environment do
-      Engines.plugins.each do |plugin|
-        next unless plugin.respond_to?(:migration_directory)
-        next unless File.exists? plugin.migration_directory
-        puts "Migrating plugin #{plugin.name} ..."
-        plugin.migrate
-      end
-    end
-
-    desc 'For engines coming from Rails version < 2.0 or for those previously updated to work with Sven Fuch\'s fork of engines, you need to upgrade the schema info table'
-    task :upgrade_plugin_migrations => :environment do
-      svens_fork_table_name = 'plugin_schema_migrations'
-      
-      # Check if app was previously using Sven's fork
-      if ActiveRecord::Base.connection.table_exists?(svens_fork_table_name)
-        old_sm_table = svens_fork_table_name
-      else
-        old_sm_table = ActiveRecord::Migrator.proper_table_name(Engines.schema_info_table)
-      end
-      
-      unless ActiveRecord::Base.connection.table_exists?(old_sm_table)
-        abort "Cannot find old migration table - assuming nothing needs to be done"
-      end
-      
-      # There are two forms of the engines schema info - pre-fix_plugin_migrations and post
-      # We need to figure this out before we continue.
-      
-      results = ActiveRecord::Base.connection.select_rows(
-        "SELECT version, plugin_name FROM #{old_sm_table}"
-      ).uniq
-      
-      def insert_new_version(plugin_name, version)
-        version_string = "#{version}-#{plugin_name}"
-        new_sm_table = ActiveRecord::Migrator.schema_migrations_table_name
-        
-        # Check if the row already exists for some reason - maybe run this task more than once.
-        return if ActiveRecord::Base.connection.select_rows("SELECT * FROM #{new_sm_table} WHERE version = #{version_string.dump.gsub("\"", "'")}").size > 0
-        
-        puts "Inserting new version #{version} for plugin #{plugin_name}.."
-        ActiveRecord::Base.connection.insert("INSERT INTO #{new_sm_table} (version) VALUES (#{version_string.dump.gsub("\"", "'")})")
-      end
-      
-      # We need to figure out if they already used "fix_plugin_migrations"
-      versions = {}
-      results.each do |r|
-        versions[r[1]] ||= []
-        versions[r[1]] << r[0].to_i
-      end
-      
-      if versions.values.find{ |v| v.size > 1 } == nil
-        puts "Fixing migration info"
-        # We only have one listed migration per plugin - this is pre-fix_plugin_migrations,
-        # so we build all versions required. In this case, all migrations should 
-        versions.each do |plugin_name, version|
-          version = version[0] # There is only one version
-          
-          # We have to make an assumption that numeric migrations won't get this long..
-          # I'm not sure if there is a better assumption, it should work in all
-          # current cases.. (touch wood..)
-          if version.to_s.size < "YYYYMMDDHHMMSS".size
-            # Insert version records for each migration
-            (1..version).each do |v|
-             insert_new_version(plugin_name, v)
-            end
-          else
-            # If the plugin is new-format "YYYYMMDDHHMMSS", we just copy it across... 
-            # The case in which this occurs is very rare..
-            insert_new_version(plugin_name, version)
-          end
-        end
-      else
-        puts "Moving migration info"
-        # We have multiple migrations listed per plugin - thus we can assume they have
-        # already applied fix_plugin_migrations - we just copy it across verbatim
-        versions.each do |plugin_name, version|
-          version.each { |v| insert_new_version(plugin_name, v) }
-        end
-      end
-      
-      puts "Migration info successfully migrated - removing old schema info table"
-      ActiveRecord::Base.connection.drop_table(old_sm_table)
-    end
-    
-    desc 'Migrate a specified plugin.'
-    task(:plugin => :environment) do
-      name = ENV['NAME']
-      if plugin = Engines.plugins[name]
-        version = ENV['VERSION']
-        puts "Migrating #{plugin.name} to " + (version ? "version #{version}" : 'latest version') + " ..."
-        plugin.migrate(version ? version.to_i : nil)
-      else
-        puts "Plugin #{name} does not exist."
-      end
-    end
-  end
-end
-
-
-namespace :db do  
-  namespace :fixtures do
-    namespace :plugins do
-      
-      desc "Load plugin fixtures into the current environment's database."
-      task :load => :environment do
-        require 'active_record/fixtures'
-        ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
-        Dir.glob(File.join(RAILS_ROOT, 'vendor', 'plugins', ENV['PLUGIN'] || '**', 
-                 'test', 'fixtures', '*.yml')).each do |fixture_file|
-          Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*'))
-        end
-      end
-      
-    end
-  end
-end
-
-# this is just a modification of the original task in railties/lib/tasks/documentation.rake, 
-# because the default task doesn't support subdirectories like <plugin>/app or
-# <plugin>/component. These tasks now include every file under a plugin's load paths (see
-# Plugin#load_paths).
-namespace :doc do
-
-  plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }
-
-  namespace :plugins do
-
-    # Define doc tasks for each plugin
-    plugins.each do |plugin|
-      desc "Create plugin documentation for '#{plugin}'"
-      Rake::Task.redefine_task(plugin => :environment) do
-        plugin_base   = RAILS_ROOT + "/vendor/plugins/#{plugin}"
-        options       = []
-        files         = Rake::FileList.new
-        options << "-o doc/plugins/#{plugin}"
-        options << "--title '#{plugin.titlecase} Plugin Documentation'"
-        options << '--line-numbers' << '--inline-source'
-        options << '-T html'
-
-        # Include every file in the plugin's load_paths (see Plugin#load_paths)
-        if Engines.plugins[plugin]
-          files.include("#{plugin_base}/{#{Engines.plugins[plugin].load_paths.join(",")}}/**/*.rb")
-        end
-        if File.exists?("#{plugin_base}/README")
-          files.include("#{plugin_base}/README")    
-          options << "--main '#{plugin_base}/README'"
-        end
-        files.include("#{plugin_base}/CHANGELOG") if File.exists?("#{plugin_base}/CHANGELOG")
-
-        if files.empty?
-          puts "No source files found in #{plugin_base}. No documentation will be generated."
-        else
-          options << files.to_s
-          sh %(rdoc #{options * ' '})
-        end
-      end
-    end
-  end
-end
-
-
-
-namespace :test do
-  task :warn_about_multiple_plugin_testing_with_engines do
-    puts %{-~============== A Moste Polite Warninge ===========================~-
-
-You may experience issues testing multiple plugins at once when using
-the code-mixing features that the engines plugin provides. If you do
-experience any problems, please test plugins individually, i.e.
-
-  $ rake test:plugins PLUGIN=my_plugin
-
-or use the per-type plugin test tasks:
-
-  $ rake test:plugins:units
-  $ rake test:plugins:functionals
-  $ rake test:plugins:integration
-  $ rake test:plugins:all
-
-Report any issues on http://dev.rails-engines.org. Thanks!
-
--~===============( ... as you were ... )============================~-}
-  end
-  
-  namespace :engines do
-    
-    def engine_plugins
-      Dir["vendor/plugins/*"].select { |f| File.directory?(File.join(f, "app")) }.map { |f| File.basename(f) }.join(",")
-    end
-    
-    desc "Run tests from within engines plugins (plugins with an 'app' directory)"
-    task :all => [:units, :functionals, :integration]
-    
-    desc "Run unit tests from within engines plugins (plugins with an 'app' directory)"
-    Rake::TestTask.new(:units => "test:plugins:setup_plugin_fixtures") do |t|
-      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/unit/**/*_test.rb"
-      t.verbose = true
-    end
-
-    desc "Run functional tests from within engines plugins (plugins with an 'app' directory)"
-    Rake::TestTask.new(:functionals => "test:plugins:setup_plugin_fixtures") do |t|
-      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/functional/**/*_test.rb"
-      t.verbose = true
-    end
-
-    desc "Run integration tests from within engines plugins (plugins with an 'app' directory)"
-    Rake::TestTask.new(:integration => "test:plugins:setup_plugin_fixtures") do |t|
-      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/integration/**/*_test.rb"
-      t.verbose = true
-    end
-  end
-  
-  namespace :plugins do
-
-    desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)"
-    task :all => [:warn_about_multiple_plugin_testing_with_engines, 
-                  :units, :functionals, :integration]
-    
-    desc "Run all plugin unit tests"
-    Rake::TestTask.new(:units => :setup_plugin_fixtures) do |t|
-      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/unit/**/*_test.rb"
-      t.verbose = true
-    end
-    
-    desc "Run all plugin functional tests"
-    Rake::TestTask.new(:functionals => :setup_plugin_fixtures) do |t|
-      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/functional/**/*_test.rb"
-      t.verbose = true
-    end
-    
-    desc "Integration test engines"
-    Rake::TestTask.new(:integration => :setup_plugin_fixtures) do |t|
-      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/integration/**/*_test.rb"
-      t.verbose = true
-    end
-
-    desc "Mirrors plugin fixtures into a single location to help plugin tests"
-    task :setup_plugin_fixtures => :environment do
-      Engines::Testing.setup_plugin_fixtures
-    end
-    
-    # Patch the default plugin testing task to have setup_plugin_fixtures as a prerequisite
-    Rake::Task["test:plugins"].prerequisites << "test:plugins:setup_plugin_fixtures"
-  end
-end
--- a/vendor/plugins/engines/tasks/engines.rake	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,281 +0,0 @@
-# This code lets us redefine existing Rake tasks, which is extremely
-# handy for modifying existing Rails rake tasks.
-# Credit for the original snippet of code goes to Jeremy Kemper
-# http://pastie.caboo.se/9620
-unless Rake::TaskManager.methods.include?('redefine_task')
-  module Rake
-    module TaskManager
-      def redefine_task(task_class, args, &block)
-        task_name, arg_names, deps = resolve_args([args])
-        task_name = task_class.scope_name(@scope, task_name)
-        deps = [deps] unless deps.respond_to?(:to_ary)
-        deps = deps.collect {|d| d.to_s }
-        task = @tasks[task_name.to_s] = task_class.new(task_name, self)
-        task.application = self
-        task.add_description(@last_description)
-        @last_description = nil
-        task.enhance(deps, &block)
-        task
-      end
-      
-    end
-    class Task
-      class << self
-        def redefine_task(args, &block)
-          Rake.application.redefine_task(self, [args], &block)
-        end
-      end
-    end
-  end
-end
-
-namespace :db do
-  namespace :migrate do
-    desc 'Migrate database and plugins to current status.'
-    task :all => [ 'db:migrate', 'db:migrate:plugins' ]
-    
-    desc 'Migrate plugins to current status.'
-    task :plugins => :environment do
-      Engines.plugins.each do |plugin|
-        next unless plugin.respond_to?(:migration_directory)
-        next unless File.exists? plugin.migration_directory
-        puts "Migrating plugin #{plugin.name} ..."
-        plugin.migrate
-      end
-    end
-
-    desc 'For engines coming from Rails version < 2.0 or for those previously updated to work with Sven Fuch\'s fork of engines, you need to upgrade the schema info table'
-    task :upgrade_plugin_migrations => :environment do
-      svens_fork_table_name = 'plugin_schema_migrations'
-      
-      # Check if app was previously using Sven's fork
-      if ActiveRecord::Base.connection.table_exists?(svens_fork_table_name)
-        old_sm_table = svens_fork_table_name
-      else
-        old_sm_table = ActiveRecord::Migrator.proper_table_name(Engines.schema_info_table)
-      end
-      
-      unless ActiveRecord::Base.connection.table_exists?(old_sm_table)
-        abort "Cannot find old migration table - assuming nothing needs to be done"
-      end
-      
-      # There are two forms of the engines schema info - pre-fix_plugin_migrations and post
-      # We need to figure this out before we continue.
-      
-      results = ActiveRecord::Base.connection.select_rows(
-        "SELECT version, plugin_name FROM #{old_sm_table}"
-      ).uniq
-      
-      def insert_new_version(plugin_name, version)
-        version_string = "#{version}-#{plugin_name}"
-        new_sm_table = ActiveRecord::Migrator.schema_migrations_table_name
-        
-        # Check if the row already exists for some reason - maybe run this task more than once.
-        return if ActiveRecord::Base.connection.select_rows("SELECT * FROM #{new_sm_table} WHERE version = #{version_string.dump.gsub("\"", "'")}").size > 0
-        
-        puts "Inserting new version #{version} for plugin #{plugin_name}.."
-        ActiveRecord::Base.connection.insert("INSERT INTO #{new_sm_table} (version) VALUES (#{version_string.dump.gsub("\"", "'")})")
-      end
-      
-      # We need to figure out if they already used "fix_plugin_migrations"
-      versions = {}
-      results.each do |r|
-        versions[r[1]] ||= []
-        versions[r[1]] << r[0].to_i
-      end
-      
-      if versions.values.find{ |v| v.size > 1 } == nil
-        puts "Fixing migration info"
-        # We only have one listed migration per plugin - this is pre-fix_plugin_migrations,
-        # so we build all versions required. In this case, all migrations should 
-        versions.each do |plugin_name, version|
-          version = version[0] # There is only one version
-          
-          # We have to make an assumption that numeric migrations won't get this long..
-          # I'm not sure if there is a better assumption, it should work in all
-          # current cases.. (touch wood..)
-          if version.to_s.size < "YYYYMMDDHHMMSS".size
-            # Insert version records for each migration
-            (1..version).each do |v|
-             insert_new_version(plugin_name, v)
-            end
-          else
-            # If the plugin is new-format "YYYYMMDDHHMMSS", we just copy it across... 
-            # The case in which this occurs is very rare..
-            insert_new_version(plugin_name, version)
-          end
-        end
-      else
-        puts "Moving migration info"
-        # We have multiple migrations listed per plugin - thus we can assume they have
-        # already applied fix_plugin_migrations - we just copy it across verbatim
-        versions.each do |plugin_name, version|
-          version.each { |v| insert_new_version(plugin_name, v) }
-        end
-      end
-      
-      puts "Migration info successfully migrated - removing old schema info table"
-      ActiveRecord::Base.connection.drop_table(old_sm_table)
-    end
-    
-    desc 'Migrate a specified plugin.'
-    task(:plugin => :environment) do
-      name = ENV['NAME']
-      if plugin = Engines.plugins[name]
-        version = ENV['VERSION']
-        puts "Migrating #{plugin.name} to " + (version ? "version #{version}" : 'latest version') + " ..."
-        plugin.migrate(version ? version.to_i : nil)
-      else
-        puts "Plugin #{name} does not exist."
-      end
-    end
-  end
-end
-
-
-namespace :db do  
-  namespace :fixtures do
-    namespace :plugins do
-      
-      desc "Load plugin fixtures into the current environment's database."
-      task :load => :environment do
-        require 'active_record/fixtures'
-        ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
-        Dir.glob(File.join(RAILS_ROOT, 'vendor', 'plugins', ENV['PLUGIN'] || '**', 
-                 'test', 'fixtures', '*.yml')).each do |fixture_file|
-          Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*'))
-        end
-      end
-      
-    end
-  end
-end
-
-# this is just a modification of the original task in railties/lib/tasks/documentation.rake, 
-# because the default task doesn't support subdirectories like <plugin>/app or
-# <plugin>/component. These tasks now include every file under a plugin's load paths (see
-# Plugin#load_paths).
-namespace :doc do
-
-  plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }
-
-  namespace :plugins do
-
-    # Define doc tasks for each plugin
-    plugins.each do |plugin|
-      desc "Create plugin documentation for '#{plugin}'"
-      Rake::Task.redefine_task(plugin => :environment) do
-        plugin_base   = RAILS_ROOT + "/vendor/plugins/#{plugin}"
-        options       = []
-        files         = Rake::FileList.new
-        options << "-o doc/plugins/#{plugin}"
-        options << "--title '#{plugin.titlecase} Plugin Documentation'"
-        options << '--line-numbers' << '--inline-source'
-        options << '-T html'
-
-        # Include every file in the plugin's load_paths (see Plugin#load_paths)
-        if Engines.plugins[plugin]
-          files.include("#{plugin_base}/{#{Engines.plugins[plugin].load_paths.join(",")}}/**/*.rb")
-        end
-        if File.exists?("#{plugin_base}/README")
-          files.include("#{plugin_base}/README")    
-          options << "--main '#{plugin_base}/README'"
-        end
-        files.include("#{plugin_base}/CHANGELOG") if File.exists?("#{plugin_base}/CHANGELOG")
-
-        if files.empty?
-          puts "No source files found in #{plugin_base}. No documentation will be generated."
-        else
-          options << files.to_s
-          sh %(rdoc #{options * ' '})
-        end
-      end
-    end
-  end
-end
-
-
-
-namespace :test do
-  task :warn_about_multiple_plugin_testing_with_engines do
-    puts %{-~============== A Moste Polite Warninge ===========================~-
-
-You may experience issues testing multiple plugins at once when using
-the code-mixing features that the engines plugin provides. If you do
-experience any problems, please test plugins individually, i.e.
-
-  $ rake test:plugins PLUGIN=my_plugin
-
-or use the per-type plugin test tasks:
-
-  $ rake test:plugins:units
-  $ rake test:plugins:functionals
-  $ rake test:plugins:integration
-  $ rake test:plugins:all
-
-Report any issues on http://dev.rails-engines.org. Thanks!
-
--~===============( ... as you were ... )============================~-}
-  end
-  
-  namespace :engines do
-    
-    def engine_plugins
-      Dir["vendor/plugins/*"].select { |f| File.directory?(File.join(f, "app")) }.map { |f| File.basename(f) }.join(",")
-    end
-    
-    desc "Run tests from within engines plugins (plugins with an 'app' directory)"
-    task :all => [:units, :functionals, :integration]
-    
-    desc "Run unit tests from within engines plugins (plugins with an 'app' directory)"
-    Rake::TestTask.new(:units => "test:plugins:setup_plugin_fixtures") do |t|
-      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/unit/**/*_test.rb"
-      t.verbose = true
-    end
-
-    desc "Run functional tests from within engines plugins (plugins with an 'app' directory)"
-    Rake::TestTask.new(:functionals => "test:plugins:setup_plugin_fixtures") do |t|
-      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/functional/**/*_test.rb"
-      t.verbose = true
-    end
-
-    desc "Run integration tests from within engines plugins (plugins with an 'app' directory)"
-    Rake::TestTask.new(:integration => "test:plugins:setup_plugin_fixtures") do |t|
-      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/integration/**/*_test.rb"
-      t.verbose = true
-    end
-  end
-  
-  namespace :plugins do
-
-    desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)"
-    task :all => [:warn_about_multiple_plugin_testing_with_engines, 
-                  :units, :functionals, :integration]
-    
-    desc "Run all plugin unit tests"
-    Rake::TestTask.new(:units => :setup_plugin_fixtures) do |t|
-      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/unit/**/*_test.rb"
-      t.verbose = true
-    end
-    
-    desc "Run all plugin functional tests"
-    Rake::TestTask.new(:functionals => :setup_plugin_fixtures) do |t|
-      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/functional/**/*_test.rb"
-      t.verbose = true
-    end
-    
-    desc "Integration test engines"
-    Rake::TestTask.new(:integration => :setup_plugin_fixtures) do |t|
-      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/integration/**/*_test.rb"
-      t.verbose = true
-    end
-
-    desc "Mirrors plugin fixtures into a single location to help plugin tests"
-    task :setup_plugin_fixtures => :environment do
-      Engines::Testing.setup_plugin_fixtures
-    end
-    
-    # Patch the default plugin testing task to have setup_plugin_fixtures as a prerequisite
-    Rake::Task["test:plugins"].prerequisites << "test:plugins:setup_plugin_fixtures"
-  end
-end
--- a/vendor/plugins/engines/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/app/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/app/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/app/controllers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/app/controllers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/controllers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/controllers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 8e2adc646126f3962ca1eaf16d663fa7
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/controllers/namespace/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/app/controllers/namespace/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/controllers/namespace
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/controllers/namespace
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ed9f029690f9d77b31e0d68cff2f8ff3
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/helpers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/app/helpers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/helpers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/helpers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b3286b0384ccf10d15423a78b8a70c3a
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/models/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/app/models/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/models
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/models
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 53fd050b6dc2f5da77439ffab6e1dd6e
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ffba288117364d8379bd2b6788e2fd2f
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/things/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/app/things/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/things
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/things
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 aaa0b6b1363b304ca66c8def3c543b13
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/views/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/app/views/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/app_and_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/app_and_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e6dca36d9e91414f1a520ffddb5202d7
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/views/namespace/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/app/views/namespace/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/namespace
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/namespace
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/namespace/app_and_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/namespace/app_and_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e6dca36d9e91414f1a520ffddb5202d7
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/views/notify_mail/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/app/views/notify_mail/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/notify_mail
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/notify_mail
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 8e367f8a525da2fddf6b32d5f874c6ba
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 50ed7a6afc64b4a326aa8b681a31b9a3
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 cb0d28ce47ca265d02f252970ac69194
 2009-09-13T17:14:35.707881Z
 2887
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 5a4f738dec733e5f4ad703495c5eb54a
 2009-09-13T17:14:35.707881Z
 2887
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3b779e7b00bfe0f9b876bfebd7905a4e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/plugin_mail
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/plugin_mail
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d0e724c594c43b6db39389834f3c26e2
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 317dc13d851c827568f61def9b031803
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/functional/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/functional/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/functional
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/functional
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 53bf916868db17fcb64853aab45ce80b
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 03f318c931cb7d40733445e72a504c95
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 43b6ff22af92cc8988a51d1b50c4c587
 2009-09-13T17:14:35.707881Z
 2887
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 0ca8b6e7e4b7655c3633b11d4ff61cc6
 2009-09-13T17:14:35.707881Z
 2887
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 afcc79d3fa1c4f1615b271f65d982d8b
 2009-09-13T17:14:35.707881Z
 2887
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6bd25b9259dbf37b6d31e69f83a32fe0
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 1fde453d5263852d1ba9fc3dd90254fc
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b00ea9b677cec76cd2fc19b1f66db3e2
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 52fd5b17adc2fec1950be496b5ff3a3d
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b70de56fa165815bbab14f584b6fbdb4
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 9e56eb4864bc1877cc8a6e69ca873157
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f9f42ac7db3bb715ff4f055162013aba
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 a24a7b9dd5706d2daef2456b1b1cac4c
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b1c4a105ad8bfa7add28c583dbd9ef8a
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 43152818b40142db88dffe0192e66582
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/models
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/models
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 a661e69f87fead66873ac8cc162da128
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 01ab2dea5fd3e341bd082f2fc507f760
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ae48cf4ce7068428c1525dba877a880c
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 eeb9900e088c367d06668e201e4be39e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 68deee946f4e81fafcae37d51f2e6bd5
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3791a6748098d1382b11556ec47b6366
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 eeb9900e088c367d06668e201e4be39e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 eeb9900e088c367d06668e201e4be39e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3bef9fe54ed08fd7ce454a189b2b3195
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3bef9fe54ed08fd7ce454a189b2b3195
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 4799f34099980de6af0dc719c7f04845
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e892323cf7ac415a30ca41b49ab96d1d
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/locales
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/locales
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 8fb4d64b7ed263c84a6aa2974eb71f25
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -38,7 +38,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 cee45809cc705092eca4e13d3aa204f1
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6c633d0dcb606e532dd906bd2567bf57
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 df7f8bb84aa9fcbe07534d5aa59e11b8
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 a8bcbb79381d6db75a9ea6e2704828a9
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/models
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/models
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 c9a469b003eca7ac6627c41deeda1b4c
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/views
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 78db1a7e1a9f6216dfa3671e5d42c81b
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 78db1a7e1a9f6216dfa3671e5d42c81b
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/locales
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/locales
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 277816fa171800daec137e70993e39f6
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/not_a_plugin
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/not_a_plugin
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/not_a_plugin/public
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/not_a_plugin/public
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/controllers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/app/controllers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ba97b09a04ada07aa57234ea8649c128
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/app/views
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/assets
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/app/views/assets
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 5c22cfc5b27a3b2b869075baacf530a6
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 8a99331150683df5edbd645cb851de37
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/public
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/public
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/public/subfolder
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/public/subfolder
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_code_mixing
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 cee45809cc705092eca4e13d3aa204f1
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/app
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_code_mixing/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/app/things
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_code_mixing/app/things
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3b8cfcd53b03ccc6db1aac5b542abaa4
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_load_path/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_load_path/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_load_path
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_load_path
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_migration/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_migration/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_migration
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration/db
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_migration/db
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration/db/migrate
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_migration/db/migrate
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ba950e9dc666a42d09029148ae7e3234
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 de937ac5b434955daacc33306a5a1a2d
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b9241da5bb8308bcea2f4cd5cbd32ff1
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6bfa7a84bb26ae29617568896fec30ae
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 cf207341167ec099c0e0ffbe3935a4d4
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 c54772416c0a8c4f3d46880180299dd5
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6f32fb0cf1bfbf4dcc8636f350a126e8
 2009-09-13T17:14:35.707881Z
 2887
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6f32fb0cf1bfbf4dcc8636f350a126e8
 2009-09-13T17:14:35.707881Z
 2887
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ededb32a08ab9582df24ce1572dc2a20
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_routing/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_routing/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_routing
 http://redmine.rubyforge.org/svn
 
 
@@ -38,7 +38,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_routing/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_routing/app/controllers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e5a27666b16bdff58054a3440cf14516
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 515669edfb53126155e911a1ae5149ec
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/config
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_routing/config
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 47135f279d2e64a431d8604df1402ffb
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_testing/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_testing/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_testing
 http://redmine.rubyforge.org/svn
 
 
@@ -38,7 +38,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/app
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_testing/app
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 9cbac832f86ac5e8cfbbc4c69811910e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_testing/test
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test/fixtures
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_testing/test/fixtures
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test/unit
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_testing/test/unit
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 35e9fbc2fb32c9114a5d6cf531f41e8d
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/unit/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/unit/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/unit
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/unit
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6724203a17cf765303c1f1cad440ec45
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 45a0f490d23fbb62bab17f142ba7e3a6
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 061b4ca6bf8ee79b149289ced48c0389
 2009-09-13T17:14:35.707881Z
 2887
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 caf5ed93e20f9675e13260049b591bcb
 2009-09-13T17:14:35.707881Z
 2887
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d48da3c38e3e757d1649f48a25913284
 2009-09-13T17:14:35.707881Z
 2887
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ba3376b21f9304e1bc6dd06e88fb031f
 2009-09-13T17:14:35.707881Z
 2887
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 7930dc88c66a78e10283af28694f9d75
 2009-09-13T17:14:35.707881Z
 2887
@@ -273,7 +273,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 da88ee34b7ad92288156f6dc33bc8945
 2009-09-13T17:14:35.707881Z
 2887
@@ -307,7 +307,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 749dec42d5f8db283afd40fa09a7a323
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/unit/test_testing/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/engines/test/unit/test_testing/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/unit/test_testing
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/unit/test_testing
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 55340a07100e4eea865c224b450561d8
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/gravatar/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/gravatar/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/gravatar
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 dcfa5a7b3c1cc768b2c0e3ad1ab802d0
 2010-09-10T03:09:02.311267Z
 4072
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3b03a1f4670e486bfc0a99ea42fcc661
 2009-08-02T04:19:44.367555Z
 2832
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 cd9b6943fc8fe58cdccef0b0215bf6bb
 2009-08-02T04:19:44.367555Z
 2832
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 7560c41dd1c4891e83f52d2855a6a4e9
 2008-10-30T02:58:04.259131Z
 1962
@@ -171,7 +171,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b718f27e16d77b36a24720b5b902328f
 2008-10-30T02:58:04.259131Z
 1962
@@ -208,7 +208,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e052390cb0624d4b81b7809e65db85f6
 2009-08-02T04:19:44.367555Z
 2832
--- a/vendor/plugins/gravatar/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/gravatar/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/gravatar/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 a25a3e98e0d582955ee8fd520f424273
 2010-11-14T16:24:21.989522Z
 4406
--- a/vendor/plugins/gravatar/spec/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/gravatar/spec/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar/spec
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/gravatar/spec
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 26b23e5e988b11435e121bf53624d934
 2010-09-10T03:09:02.311267Z
 4072
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/open_id_authentication/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/open_id_authentication
+END
--- a/vendor/plugins/open_id_authentication/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/open_id_authentication/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-10T21:12:32.103531Z
-3933
-jbbarth
+2011-03-24T18:46:12.279245Z
+5216
+jplang
 
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 b66b372df8374607d104228f41a06671
 2009-02-11T19:06:45.087605Z
 2438
@@ -63,16 +63,13 @@
 
 584
 
-tasks
-dir
-
 init.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 22579abfc9dc6a4cf475150e407e9a17
 2009-02-12T21:25:50.680468Z
 2458
@@ -109,7 +106,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d23f4c2e6c00805d7172c76ad52ebe6f
 2009-02-11T19:06:45.087605Z
 2438
@@ -146,7 +143,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 45eb3e296a3591fca629d0c8eab71e4c
 2009-02-11T19:06:45.087605Z
 2438
--- a/vendor/plugins/open_id_authentication/generators/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/open_id_authentication/generators/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/generators
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ee799e52b83b842fa2a879431195e9eb
 2009-02-11T19:06:45.087605Z
 2438
--- a/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 352b0b17c079fdf355c028a9b990b3b7
 2009-02-11T19:06:45.087605Z
 2438
--- a/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 f401bfd8b5d2dd3008d16bf79de8c1e4
 2009-02-11T19:06:45.087605Z
 2438
--- a/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 512b6bc6321e15e12a9eb5ef10317b73
 2009-02-11T19:06:45.087605Z
 2438
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/open_id_authentication/lib/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 80
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/open_id_authentication/lib
+END
--- a/vendor/plugins/open_id_authentication/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/open_id_authentication/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-10T21:12:32.103531Z
-3933
-jbbarth
+2011-03-24T18:46:12.279245Z
+5216
+jplang
 
 
 
@@ -26,6 +26,9 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
+tasks
+dir
+
 open_id_authentication
 dir
 
@@ -35,7 +38,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 c72f1bd48e8c2dfe4e84ba232fc40030
 2010-08-10T21:12:32.103531Z
 3933
--- a/vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/lib/open_id_authentication
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/lib/open_id_authentication
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 1effe2a3ab6ff2cf3a4ffc288222b114
 2009-02-11T19:06:45.087605Z
 2438
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 9ed2aea6a3f0e76f21a84bf5bdb1bebe
 2009-02-11T19:06:45.087605Z
 2438
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 4aa743638f54375c2f1f25e62fa50bf3
 2009-02-11T19:06:45.087605Z
 2438
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 d05c8725996156d4cc153a2fc0891db8
 2009-02-11T19:06:45.087605Z
 2438
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 6a6fdfddabbc9ae4b8c11f69bc653107
 2009-02-11T19:06:45.087605Z
 2438
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 42863e1d17d5af05e0e896d336def59c
 2009-02-11T19:06:45.087605Z
 2438
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/open_id_authentication/lib/tasks/open_id_authentication_tasks.rake	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,30 @@
+namespace :open_id_authentication do
+  namespace :db do
+    desc "Creates authentication tables for use with OpenIdAuthentication"
+    task :create => :environment do
+      generate_migration(["open_id_authentication_tables", "add_open_id_authentication_tables"])
+    end
+
+    desc "Upgrade authentication tables from ruby-openid 1.x.x to 2.x.x"
+    task :upgrade => :environment do
+      generate_migration(["upgrade_open_id_authentication_tables", "upgrade_open_id_authentication_tables"])
+    end
+
+    def generate_migration(args)
+      require 'rails_generator'
+      require 'rails_generator/scripts/generate'
+
+      if ActiveRecord::Base.connection.supports_migrations?
+        Rails::Generator::Scripts::Generate.new.run(args)
+      else
+        raise "Task unavailable to this database (no migration support)"
+      end
+    end
+
+    desc "Clear the authentication tables"
+    task :clear => :environment do
+      OpenIdAuthentication::DbStore.cleanup_nonces
+      OpenIdAuthentication::DbStore.cleanup_associations
+    end
+  end
+end
--- a/vendor/plugins/open_id_authentication/tasks/.svn/text-base/open_id_authentication_tasks.rake.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-namespace :open_id_authentication do
-  namespace :db do
-    desc "Creates authentication tables for use with OpenIdAuthentication"
-    task :create => :environment do
-      generate_migration(["open_id_authentication_tables", "add_open_id_authentication_tables"])
-    end
-
-    desc "Upgrade authentication tables from ruby-openid 1.x.x to 2.x.x"
-    task :upgrade => :environment do
-      generate_migration(["upgrade_open_id_authentication_tables", "upgrade_open_id_authentication_tables"])
-    end
-
-    def generate_migration(args)
-      require 'rails_generator'
-      require 'rails_generator/scripts/generate'
-
-      if ActiveRecord::Base.connection.supports_migrations?
-        Rails::Generator::Scripts::Generate.new.run(args)
-      else
-        raise "Task unavailable to this database (no migration support)"
-      end
-    end
-
-    desc "Clear the authentication tables"
-    task :clear => :environment do
-      OpenIdAuthentication::DbStore.cleanup_nonces
-      OpenIdAuthentication::DbStore.cleanup_associations
-    end
-  end
-end
--- a/vendor/plugins/open_id_authentication/tasks/open_id_authentication_tasks.rake	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-namespace :open_id_authentication do
-  namespace :db do
-    desc "Creates authentication tables for use with OpenIdAuthentication"
-    task :create => :environment do
-      generate_migration(["open_id_authentication_tables", "add_open_id_authentication_tables"])
-    end
-
-    desc "Upgrade authentication tables from ruby-openid 1.x.x to 2.x.x"
-    task :upgrade => :environment do
-      generate_migration(["upgrade_open_id_authentication_tables", "upgrade_open_id_authentication_tables"])
-    end
-
-    def generate_migration(args)
-      require 'rails_generator'
-      require 'rails_generator/scripts/generate'
-
-      if ActiveRecord::Base.connection.supports_migrations?
-        Rails::Generator::Scripts::Generate.new.run(args)
-      else
-        raise "Task unavailable to this database (no migration support)"
-      end
-    end
-
-    desc "Clear the authentication tables"
-    task :clear => :environment do
-      OpenIdAuthentication::DbStore.cleanup_nonces
-      OpenIdAuthentication::DbStore.cleanup_associations
-    end
-  end
-end
--- a/vendor/plugins/open_id_authentication/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/open_id_authentication/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 9448478c6f6c999b3dfae03f9661a7a9
 2009-02-11T19:06:45.087605Z
 2438
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 218b9c429fce5d50a6de37d10d4c626a
 2009-02-11T19:06:45.087605Z
 2438
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 3ffcd8ee621212d3a963257c35cf565c
 2009-02-11T19:06:45.087605Z
 2438
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 26175162cebaa3962614100cac9726fc
 2009-02-11T19:06:45.087605Z
 2438
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 c3e483ae649f9324f093075331c26ed1
 2009-02-11T19:06:45.087605Z
 2438
--- a/vendor/plugins/prepend_engine_views/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/prepend_engine_views/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/prepend_engine_views
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/prepend_engine_views
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 720c397a2f5ed49f4436f5d9cbe0b5ec
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/rfpdf/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,29 +1,41 @@
 K 25
 svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/4602/trunk/vendor/plugins/rfpdf
+V 59
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf
+END
+utf8test.txt
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/utf8test.txt
 END
 init.rb
 K 25
 svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/1623/trunk/vendor/plugins/rfpdf/init.rb
+V 67
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/init.rb
+END
+test_unicode.rfpdf
+K 25
+svn:wc:ra_dav:version-url
+V 78
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/test_unicode.rfpdf
 END
 CHANGELOG
 K 25
 svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/CHANGELOG
-END
-MIT-LICENSE
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/MIT-LICENSE
+V 69
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/CHANGELOG
 END
 README
 K 25
 svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/README
+V 66
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/README
 END
+logo_example.png
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/logo_example.png
+END
--- a/vendor/plugins/rfpdf/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/rfpdf
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-01T11:45:12.617336Z
-4602
-jplang
+2011-05-09T11:12:27.265905Z
+5720
+tmaruyama
 
 
 
@@ -29,17 +29,51 @@
 test
 dir
 
+utf8test.txt
+file
+
+
+
+
+2011-06-06T13:20:52.000000Z
+f9fe2827506cd6b421d6c146e0a5242b
+2011-03-30T03:23:54.585875Z
+5247
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4542
+
 init.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
-1da9fbada6119233134b3aab6c7d0edf
-2008-07-04T17:58:14.743502Z
-1623
-jplang
+2011-06-06T13:20:52.000000Z
+6bb137515bea7692cadd9bba1576d488
+2011-03-30T05:46:58.358840Z
+5257
+tmaruyama
 
 
 
@@ -61,7 +95,41 @@
 
 
 
-247
+270
+
+test_unicode.rfpdf
+file
+
+
+
+
+2011-06-06T13:20:52.000000Z
+4532560d82aed21773043033722c24ec
+2011-03-30T03:23:54.585875Z
+5247
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4812
 
 lib
 dir
@@ -72,11 +140,11 @@
 
 
 
-2011-03-03T11:05:12.000000Z
-275a3dc6407eaf7c40f1d8f4e6b08803
-2006-11-21T18:34:04.275680Z
-49
-jplang
+2011-06-06T13:20:52.000000Z
+6778639658f16109525036ebe955c3df
+2011-03-30T03:23:54.585875Z
+5247
+tmaruyama
 
 
 
@@ -98,7 +166,7 @@
 
 
 
-608
+715
 
 MIT-LICENSE
 file
@@ -106,7 +174,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 40cf182dab06e3de067375de5bbab322
 2006-11-21T18:34:04.275680Z
 49
@@ -140,11 +208,11 @@
 
 
 
-2011-03-03T11:05:12.000000Z
-d58199e83ebcaa5d234764407c238bb2
-2006-11-21T18:34:04.275680Z
-49
-jplang
+2011-06-06T13:20:52.000000Z
+14180635c63b79d7db3c7e6ae4e2df45
+2011-03-30T03:23:54.585875Z
+5247
+tmaruyama
 
 
 
@@ -166,5 +234,39 @@
 
 
 
-2454
+838
 
+logo_example.png
+file
+
+
+
+
+2011-06-06T13:20:52.000000Z
+5f263c19d9009be6148a784dc31028c0
+2011-03-30T03:23:54.585875Z
+5247
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+19411
+
--- a/vendor/plugins/rfpdf/.svn/text-base/CHANGELOG.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/.svn/text-base/CHANGELOG.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -11,3 +11,4 @@
   * Added :filename option in this hash
 If you're using the same settings for @options_for_rfpdf often, you might want to 
 put your assignment in a before_filter (perhaps overriding :filename, etc in your actions).
+1.15 2009-11-20 Rails 2.* support - Thanks to Prawnto plugin for showing the way to the new TemplateHandler
\ No newline at end of file
--- a/vendor/plugins/rfpdf/.svn/text-base/README.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/.svn/text-base/README.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,99 +1,45 @@
+FWIW - I am migrating my apps to Prawn and Prawnto
+
 = RFPDF Template Plugin
 
 A template plugin allowing the inclusion of ERB-enabled RFPDF template files.
 
-== Example .rb method Usage
+==
+==
+== TCPDF Version (The New or UTF8 Version)
+==
+==
 
-In the controller, something like:
+If you are using HTML, it is recommended you install:
 
-  def mypdf
-		pdf = FPDF.new()
+gem install -r htmlentities
 
-		#
-		# Chinese
-		#
-		pdf.extend(PDF_Chinese)
-		pdf.AddPage
-		pdf.AddBig5Font
-		pdf.SetFont('Big5','',18)
-		pdf.Write(5, '²{®É®ð·Å 18 C Àã«× 83 %')
-		icBig5 = Iconv.new('Big5', 'UTF-8')
-		pdf.Write(15, icBig5.iconv("宋体 should be working"))
-		send_data pdf.Output, :filename => "something.pdf", :type => "application/pdf"
-  end
+TCPDF Documentation located at:
 
-== Example .rfdf Usage
+http://phpdocs.moodle.org/com-tecnick-tcpdf/TCPDF.html
 
-In the controller, something like:
-
-  def mypdf
-	  @options_for_rfpdf ||= {}
-	  @options_for_rfpdf[:file_name] = "nice_looking.pdf"
-  end
-
-In the layout (make sure this is the only item in the layout):
-<%= @content_for_layout %>
-  
-In the view (mypdf.rfpdf):
+Example of simple use in .rhtml:
 
 <%
-	pdf = FPDF.new()
-	#
-	# Chinese
-	#
- 	pdf.extend(PDF_Chinese)
- 	pdf.AddPage
- 	pdf.AddBig5Font
- 	pdf.SetFont('Big5','',18)
- 	pdf.Write(5, '²{®É®ð·Å 18 C Àã«× 83 %')
- 	icBig5 = Iconv.new('Big5', 'UTF-8')
- 	pdf.Write(15, icBig5.iconv("宋体 should be working"))
+	@pdf = TCPDF.new()
+  @pdf.SetMargins(15, 27, 15);
+  @pdf.AddPage();
+  text_options = {:font => "freeserif"}
+  @pdf.draw_text(15, 10, "text", {:font_size => 12, :font => "freeserif"})
+%><%=@pdf.Output()%>
 
-	#
-	# Japanese
-	#
- 	pdf.extend(PDF_Japanese)
- 	pdf.AddSJISFont();
- 	pdf.AddPage();
- 	pdf.SetFont('SJIS','',18);
- 	pdf.Write(5,'9ÉñåéÇÃåˆäJÉeÉXÉgÇåoǃPHP 3.0ÇÕ1998îN6åéÇ…åˆéÆÇ…ÉäÉäÅ[ÉXÇ≥ÇÍNjǵÇΩÅB');
- 	icSJIS = Iconv.new('SJIS', 'UTF-8')
- 	pdf.Write(15, icSJIS.iconv("これはテキストである should be working"))
+See the following files for sample of useage:
 
-	#
-	# Korean
-	#
- 	pdf.extend(PDF_Korean)
- 	pdf.AddUHCFont();
- 	pdf.AddPage();
- 	pdf.SetFont('UHC','',18);
- 	pdf.Write(5,'PHP 3.0Àº 1998³â 6¿ù¿¡ °ø½ÄÀûÀ¸·Î ¸±¸®ÁîµÇ¾ú´Ù. °ø°³ÀûÀÎ Å×½ºÆ® ÀÌÈľà 9°³¿ù¸¸À̾ú´Ù.');
- 	icUHC = Iconv.new('UHC', 'UTF-8')
- 	pdf.Write(15, icUHC.iconv("이것은 원본 이다"))
+test_unicode.rfpdf
+utf8test.txt
+logo_example.png
 
-	#
-	# English
-	#
- 	pdf.AddPage();
-	pdf.SetFont('Arial', '', 10)
-	pdf.Write(5, "should be working")
-%>
-<%=	pdf.Output() %>
-	  
-	
-== Configuring
+FPDF users can migrate to TCPDF by changing the following from:
 
-You can configure Rfpdf by using an @options_for_rfpdf hash in your controllers.
+  pdf = FPDF.new
 
-Here are a few options:
+to:
 
-:filename (default: action_name.pdf)
-  Filename of PDF to generate
+  pdf = TCPDF.new
 
-Note: If you're using the same settings for @options_for_rfpdf often, you might want to 
-put your assignment in a before_filter (perhaps overriding :filename, etc in your actions).
-
-== Problems
-
-Layouts and partials are currently not supported; just need
-to wrap the PDF generation differently.
+ENJOY!
\ No newline at end of file
--- a/vendor/plugins/rfpdf/.svn/text-base/init.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/.svn/text-base/init.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,9 +1,11 @@
+begin
+  require('htmlentities') 
+rescue LoadError
+  # This gem is not required - just nice to have.
+end
+require('cgi')
 require 'rfpdf'
 
-begin
-  ActionView::Template::register_template_handler 'rfpdf', RFPDF::View
-rescue NameError
-  # Rails < 2.1
-  RFPDF::View.backward_compatibility_mode = true
-  ActionView::Base::register_template_handler 'rfpdf', RFPDF::View
-end
+# Mime::Type.register "application/pdf", :pdf
+ActionView::Template::register_template_handler 'rfpdf', RFPDF::TemplateHandlers::Base
+
--- a/vendor/plugins/rfpdf/CHANGELOG	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/CHANGELOG	Mon Jun 06 14:41:04 2011 +0100
@@ -11,3 +11,4 @@
   * Added :filename option in this hash
 If you're using the same settings for @options_for_rfpdf often, you might want to 
 put your assignment in a before_filter (perhaps overriding :filename, etc in your actions).
+1.15 2009-11-20 Rails 2.* support - Thanks to Prawnto plugin for showing the way to the new TemplateHandler
\ No newline at end of file
--- a/vendor/plugins/rfpdf/README	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/README	Mon Jun 06 14:41:04 2011 +0100
@@ -1,99 +1,45 @@
+FWIW - I am migrating my apps to Prawn and Prawnto
+
 = RFPDF Template Plugin
 
 A template plugin allowing the inclusion of ERB-enabled RFPDF template files.
 
-== Example .rb method Usage
+==
+==
+== TCPDF Version (The New or UTF8 Version)
+==
+==
 
-In the controller, something like:
+If you are using HTML, it is recommended you install:
 
-  def mypdf
-		pdf = FPDF.new()
+gem install -r htmlentities
 
-		#
-		# Chinese
-		#
-		pdf.extend(PDF_Chinese)
-		pdf.AddPage
-		pdf.AddBig5Font
-		pdf.SetFont('Big5','',18)
-		pdf.Write(5, '²{®É®ð·Å 18 C Àã«× 83 %')
-		icBig5 = Iconv.new('Big5', 'UTF-8')
-		pdf.Write(15, icBig5.iconv("宋体 should be working"))
-		send_data pdf.Output, :filename => "something.pdf", :type => "application/pdf"
-  end
+TCPDF Documentation located at:
 
-== Example .rfdf Usage
+http://phpdocs.moodle.org/com-tecnick-tcpdf/TCPDF.html
 
-In the controller, something like:
-
-  def mypdf
-	  @options_for_rfpdf ||= {}
-	  @options_for_rfpdf[:file_name] = "nice_looking.pdf"
-  end
-
-In the layout (make sure this is the only item in the layout):
-<%= @content_for_layout %>
-  
-In the view (mypdf.rfpdf):
+Example of simple use in .rhtml:
 
 <%
-	pdf = FPDF.new()
-	#
-	# Chinese
-	#
- 	pdf.extend(PDF_Chinese)
- 	pdf.AddPage
- 	pdf.AddBig5Font
- 	pdf.SetFont('Big5','',18)
- 	pdf.Write(5, '²{®É®ð·Å 18 C Àã«× 83 %')
- 	icBig5 = Iconv.new('Big5', 'UTF-8')
- 	pdf.Write(15, icBig5.iconv("宋体 should be working"))
+	@pdf = TCPDF.new()
+  @pdf.SetMargins(15, 27, 15);
+  @pdf.AddPage();
+  text_options = {:font => "freeserif"}
+  @pdf.draw_text(15, 10, "text", {:font_size => 12, :font => "freeserif"})
+%><%=@pdf.Output()%>
 
-	#
-	# Japanese
-	#
- 	pdf.extend(PDF_Japanese)
- 	pdf.AddSJISFont();
- 	pdf.AddPage();
- 	pdf.SetFont('SJIS','',18);
- 	pdf.Write(5,'9ÉñåéÇÃåˆäJÉeÉXÉgÇåoǃPHP 3.0ÇÕ1998îN6åéÇ…åˆéÆÇ…ÉäÉäÅ[ÉXÇ≥ÇÍNjǵÇΩÅB');
- 	icSJIS = Iconv.new('SJIS', 'UTF-8')
- 	pdf.Write(15, icSJIS.iconv("これはテキストである should be working"))
+See the following files for sample of useage:
 
-	#
-	# Korean
-	#
- 	pdf.extend(PDF_Korean)
- 	pdf.AddUHCFont();
- 	pdf.AddPage();
- 	pdf.SetFont('UHC','',18);
- 	pdf.Write(5,'PHP 3.0Àº 1998³â 6¿ù¿¡ °ø½ÄÀûÀ¸·Î ¸±¸®ÁîµÇ¾ú´Ù. °ø°³ÀûÀÎ Å×½ºÆ® ÀÌÈľà 9°³¿ù¸¸À̾ú´Ù.');
- 	icUHC = Iconv.new('UHC', 'UTF-8')
- 	pdf.Write(15, icUHC.iconv("이것은 원본 이다"))
+test_unicode.rfpdf
+utf8test.txt
+logo_example.png
 
-	#
-	# English
-	#
- 	pdf.AddPage();
-	pdf.SetFont('Arial', '', 10)
-	pdf.Write(5, "should be working")
-%>
-<%=	pdf.Output() %>
-	  
-	
-== Configuring
+FPDF users can migrate to TCPDF by changing the following from:
 
-You can configure Rfpdf by using an @options_for_rfpdf hash in your controllers.
+  pdf = FPDF.new
 
-Here are a few options:
+to:
 
-:filename (default: action_name.pdf)
-  Filename of PDF to generate
+  pdf = TCPDF.new
 
-Note: If you're using the same settings for @options_for_rfpdf often, you might want to 
-put your assignment in a before_filter (perhaps overriding :filename, etc in your actions).
-
-== Problems
-
-Layouts and partials are currently not supported; just need
-to wrap the PDF generation differently.
+ENJOY!
\ No newline at end of file
--- a/vendor/plugins/rfpdf/init.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/init.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,9 +1,11 @@
+begin
+  require('htmlentities') 
+rescue LoadError
+  # This gem is not required - just nice to have.
+end
+require('cgi')
 require 'rfpdf'
 
-begin
-  ActionView::Template::register_template_handler 'rfpdf', RFPDF::View
-rescue NameError
-  # Rails < 2.1
-  RFPDF::View.backward_compatibility_mode = true
-  ActionView::Base::register_template_handler 'rfpdf', RFPDF::View
-end
+# Mime::Type.register "application/pdf", :pdf
+ActionView::Template::register_template_handler 'rfpdf', RFPDF::TemplateHandlers::Base
+
--- a/vendor/plugins/rfpdf/lib/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/lib/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,11 +1,17 @@
 K 25
 svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/4602/trunk/vendor/plugins/rfpdf/lib
+V 63
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib
+END
+tcpdf.rb
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/tcpdf.rb
 END
 rfpdf.rb
 K 25
 svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/lib/rfpdf.rb
+V 72
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf.rb
 END
--- a/vendor/plugins/rfpdf/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/rfpdf/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-01T11:45:12.617336Z
-4602
-jplang
+2011-05-09T11:12:27.265905Z
+5720
+tmaruyama
 
 
 
@@ -26,20 +26,60 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
+barcode
+dir
+
+fpdf
+dir
+
 rfpdf
 dir
 
+tcpdf.rb
+file
+
+
+
+
+2011-06-06T13:20:52.000000Z
+1982fe0c734af19e656f19d88b8e2870
+2011-05-09T07:35:02.800600Z
+5717
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+111093
+
 rfpdf.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
-9667df0ee17c3893ec4025f214d990ee
-2006-11-21T18:34:04.275680Z
-49
-jplang
+2011-06-06T13:20:52.000000Z
+8d496f73e24615f94ce6b264e9d13f19
+2011-03-30T03:23:54.585875Z
+5247
+tmaruyama
 
 
 
@@ -61,5 +101,14 @@
 
 
 
-1329
+1454
 
+config
+dir
+
+core
+dir
+
+fonts
+dir
+
--- a/vendor/plugins/rfpdf/lib/.svn/text-base/rfpdf.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/lib/.svn/text-base/rfpdf.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -20,12 +20,21 @@
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 # THE SOFTWARE.
 
-$LOAD_PATH.unshift(File.dirname(__FILE__))
+require 'action_controller'
+require 'action_view'
 
-require 'rfpdf/errors'
-require 'rfpdf/view'
-require 'rfpdf/fpdf'
-require 'rfpdf/rfpdf'
-require 'rfpdf/chinese'
-require 'rfpdf/japanese'
-require 'rfpdf/korean'
+require 'rfpdf/action_controller'
+require 'rfpdf/action_view'
+
+require 'rfpdf/template_handler/compile_support'
+
+require 'rfpdf/template_handlers/base'
+
+
+class ActionController::Base
+  include RFPDF::ActionController
+end
+
+class ActionView::Base
+  include RFPDF::ActionView
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/barcode/barcode.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,448 @@
+
+#============================================================+
+# File name   : barcode.rb
+# Begin       : 2002-07-31
+# Last Update : 2005-01-02
+# Author      : Karim Mribti [barcode@mribti.com]
+# Version     : 1.1 [0.0.8a (original code)]
+# License     : GNU LGPL (Lesser General Public License) 2.1
+#               http://www.gnu.org/copyleft/lesser.txt
+# Source Code : http://www.mribti.com/barcode/
+#
+# Description : Generic Barcode Render Class for PHP using
+#               the GD graphics library.
+#
+# NOTE:
+# This version contains changes by Nicola Asuni:
+#  - porting to Ruby
+#  - code style and formatting
+#  - automatic php documentation in PhpDocumentor Style
+#    (www.phpdoc.org)
+#  - minor bug fixing
+#  - $mCharSet and $mChars variables were added here
+#============================================================+
+
+#
+# Barcode Render Class for PHP using the GD graphics library.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a 2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+
+# Styles
+# Global
+
+#
+# option: generate barcode border
+#
+define("BCS_BORDER", 1);
+
+#
+# option: use transparent background
+#
+define("BCS_TRANSPARENT", 2);
+
+#
+# option: center barcode
+#
+define("BCS_ALIGN_CENTER", 4);
+
+#
+# option: align left
+#
+define("BCS_ALIGN_LEFT", 8);
+
+#
+# option: align right
+#
+define("BCS_ALIGN_RIGHT", 16);
+
+#
+# option: generate JPEG image
+#
+define("BCS_IMAGE_JPEG", 32);
+
+#
+# option: generate PNG image
+#
+define("BCS_IMAGE_PNG", 64);
+
+#
+# option: draw text
+#
+define("BCS_DRAW_TEXT", 128);
+
+#
+# option: stretch text
+#
+define("BCS_STRETCH_TEXT", 256);
+
+#
+# option: reverse color
+#
+define("BCS_REVERSE_COLOR", 512);
+
+#
+# option: draw check
+# (only for I25 code)
+#
+define("BCS_I25_DRAW_CHECK", 2048);
+
+#
+# set default background color
+#
+define("BCD_DEFAULT_BACKGROUND_COLOR", 0xFFFFFF);
+
+#
+# set default foreground color
+#
+define("BCD_DEFAULT_FOREGROUND_COLOR", 0x000000);
+
+#
+# set default style options
+#
+define("BCD_DEFAULT_STYLE", BCS_BORDER | BCS_ALIGN_CENTER | BCS_IMAGE_PNG);
+
+#
+# set default width
+#
+define("BCD_DEFAULT_WIDTH", 460);
+
+#
+# set default height
+#
+define("BCD_DEFAULT_HEIGHT", 120);
+
+#
+# set default font
+#
+define("BCD_DEFAULT_FONT", 5);
+
+#
+# st default horizontal resolution
+#
+define("BCD_DEFAULT_XRES", 2);
+
+# Margins
+
+#
+# set default margin
+#
+define("BCD_DEFAULT_MAR_Y1", 0);
+
+#
+# set default margin
+#
+define("BCD_DEFAULT_MAR_Y2", 0);
+
+#
+# set default text offset
+#
+define("BCD_DEFAULT_TEXT_OFFSET", 2);
+
+# For the I25 Only
+
+#
+# narrow bar option
+# (only for I25 code)
+#
+define("BCD_I25_NARROW_BAR", 1);
+
+#
+# wide bar option
+# (only for I25 code)
+#
+define("BCD_I25_WIDE_BAR", 2);
+
+# For the C39 Only
+
+#
+# narrow bar option
+# (only for c39 code)
+#
+define("BCD_C39_NARROW_BAR", 1);
+
+#
+# wide bar option
+# (only for c39 code)
+#
+define("BCD_C39_WIDE_BAR", 2);
+
+# For Code 128
+
+#
+# set type 1 bar
+# (only for c128 code)
+#
+define("BCD_C128_BAR_1", 1);
+
+#
+# set type 2 bar
+# (only for c128 code)
+#
+define("BCD_C128_BAR_2", 2);
+
+#
+# set type 3 bar
+# (only for c128 code)
+#
+define("BCD_C128_BAR_3", 3);
+
+#
+# set type 4 bar
+# (only for c128 code)
+#
+define("BCD_C128_BAR_4", 4);
+
+#
+# Barcode Render Class for PHP using the GD graphics library.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a 2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+class BarcodeObject {
+	#
+	# @var Image width in pixels.
+	# @access protected
+	#
+	protected $mWidth;
+	
+	#
+	# @var Image height in pixels.
+	# @access protected
+	#
+	protected $mHeight;
+	
+	#
+	# @var Numeric code for Barcode style.
+	# @access protected
+	#
+	protected $mStyle;
+	
+	#
+	# @var Background color.
+	# @access protected
+	#
+	protected $mBgcolor;
+	
+	#
+	# @var Brush color.
+	# @access protected
+	#
+	protected $mBrush;
+	
+	#
+	# @var Image object.
+	# @access protected
+	#
+	protected $mImg;
+	
+	#
+	# @var Numeric code for character font.
+	# @access protected
+	#
+	protected $mFont;
+	
+	#
+	# @var Error message.
+	# @access protected
+	#
+	protected $mError;
+	
+	#
+	# @var Character Set.
+	# @access protected
+	#
+	protected $mCharSet;
+	
+	#
+	# @var Allowed symbols.
+	# @access protected
+	#
+	protected $mChars;
+
+	#
+	# Class Constructor.
+	# @param int $Width Image width in pixels.
+	# @param int $Height Image height in pixels. 
+	# @param int $Style Barcode style.
+	#
+	def __construct($Width=BCD_DEFAULT_WIDTH, $Height=BCD_DEFAULT_HEIGHT, $Style=BCD_DEFAULT_STYLE)
+		@mWidth = $Width;
+		@mHeight = $Height;
+		@mStyle = $Style;
+		@mFont = BCD_DEFAULT_FONT;
+		@mImg = ImageCreate(@mWidth, @mHeight);
+		$dbColor = @mStyle & BCS_REVERSE_COLOR ? BCD_DEFAULT_FOREGROUND_COLOR : BCD_DEFAULT_BACKGROUND_COLOR;
+		$dfColor = @mStyle & BCS_REVERSE_COLOR ? BCD_DEFAULT_BACKGROUND_COLOR : BCD_DEFAULT_FOREGROUND_COLOR;
+		@mBgcolor = ImageColorAllocate(@mImg, ($dbColor & 0xFF0000) >> 16,
+		($dbColor & 0x00FF00) >> 8, $dbColor & 0x0000FF);
+		@mBrush = ImageColorAllocate(@mImg, ($dfColor & 0xFF0000) >> 16,
+		($dfColor & 0x00FF00) >> 8, $dfColor & 0x0000FF);
+		if (!(@mStyle & BCS_TRANSPARENT))
+			ImageFill(@mImg, @mWidth, @mHeight, @mBgcolor);
+		end
+	end
+	
+	#
+	# Class Destructor.
+	# Destroy image object.
+	#
+	def __destructor()
+		@DestroyObject();
+	end
+
+	#
+	# Returns the image object.
+	# @return object image.
+	# @author Nicola Asuni
+	# @since 1.5.2
+	#
+	def getImage()
+		return @mImg;
+	end
+	
+	#
+	# Abstract method used to draw the barcode image.
+	# @param int $xres Horizontal resolution.
+	#
+	def DrawObject($xres)	{
+		# there is not implementation neded, is simply the asbsract function.#
+		return false;
+	end
+	
+	#
+	# Draws the barcode border.
+	# @access protected
+	#
+	protected function DrawBorder()
+		ImageRectangle(@mImg, 0, 0, @mWidth-1, @mHeight-1, @mBrush);
+	end
+	
+	#
+	# Draws the alphanumeric code.
+	# @param int $Font Font type.
+	# @param int $xPos Horiziontal position.
+	# @param int $yPos Vertical position.
+	# @param int $Char Alphanumeric code to write.
+	# @access protected
+	#
+	protected function DrawChar($Font, $xPos, $yPos, $Char)
+		ImageString(@mImg,$Font,$xPos,$yPos,$Char,@mBrush);
+	end
+	
+	#
+	# Draws a character string.
+	# @param int $Font Font type.
+	# @param int $xPos Horiziontal position.
+	# @param int $yPos Vertical position.
+	# @param int $Char string to write.
+	# @access protected
+	#
+	protected function DrawText($Font, $xPos, $yPos, $Char)
+		ImageString(@mImg,$Font,$xPos,$yPos,$Char,@mBrush);
+	end
+
+	#
+	# Draws a single barcode bar.
+	# @param int $xPos Horiziontal position.
+	# @param int $yPos Vertical position.
+	# @param int $xSize Horizontal size.
+    # @param int $xSize Vertical size.
+    # @return bool trur in case of success, false otherwise.
+    # @access protected
+	#
+	protected function DrawSingleBar($xPos, $yPos, $xSize, $ySize)
+		if ($xPos>=0 && $xPos<=@mWidth && ($xPos+$xSize)<=@mWidth &&
+		$yPos>=0 && $yPos<=@mHeight && ($yPos+$ySize)<=@mHeight)
+			for ($i=0;$i<$xSize;$i++)
+				ImageLine(@mImg, $xPos+$i, $yPos, $xPos+$i, $yPos+$ySize, @mBrush);
+			end
+			return true;
+		end
+		return false;
+	end
+	
+	#
+	# Returns the current error message.
+	# @return string error message.
+	#
+	def GetError()
+		return @mError;
+	end
+	
+	#
+	# Returns the font height.
+	# @param int $font font type.
+	# @return int font height.
+	#
+	def GetFontHeight($font)
+		return ImageFontHeight($font);
+	end
+	
+	#
+	# Returns the font width.
+	# @param int $font font type.
+	# @return int font width.
+	#
+	def GetFontWidth($font)
+		return ImageFontWidth($font);
+	end
+	
+	#
+	# Set font type.
+	# @param int $font font type.
+	#
+	def SetFont($font)
+		@mFont = $font;
+	end
+	
+	#
+	# Returns barcode style.
+	# @return int barcode style.
+	#
+	def GetStyle()
+		return @mStyle;
+	end
+
+	#
+	# Set barcode style.
+	# @param int $Style barcode style.
+	#
+	def SetStyle ($Style)
+		@mStyle = $Style;
+	end
+
+	#
+	# Flush the barcode image.
+	#
+	def FlushObject()
+		if ((@mStyle & BCS_BORDER))
+			@DrawBorder();
+		end
+		if (@mStyle & BCS_IMAGE_PNG)
+			Header("Content-Type: image/png");
+			ImagePng(@mImg);
+		elsif (@mStyle & BCS_IMAGE_JPEG)
+			Header("Content-Type: image/jpeg");
+			ImageJpeg(@mImg);
+		end
+	end
+	
+	#
+	# Destroy the barcode image.
+	#
+	def DestroyObject()
+		ImageDestroy(@mImg);
+	end
+}
+
+#============================================================+
+# END OF FILE
+#============================================================+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/barcode/c128aobject.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,393 @@
+
+#============================================================+
+# File name   : c128aobject.rb
+# Begin       : 2002-07-31
+# Last Update : 2004-12-29
+# Author      : Karim Mribti [barcode@mribti.com]
+# Version     : 0.0.8a  2001-04-01 (original code)
+# License     : GNU LGPL (Lesser General Public License) 2.1
+#               http://www.gnu.org/copyleft/lesser.txt
+# Source Code : http://www.mribti.com/barcode/
+#
+# Description : Code 128-A Barcode Render Class for PHP using
+#               the GD graphics library.
+#               Code 128-A is a continuous, multilevel and
+#               include all upper case alphanumeric characters
+#               and ASCII control characters.
+#
+# NOTE:
+# This version contains changes by Nicola Asuni:
+#  - porting to Ruby
+#  - code style and formatting
+#  - automatic php documentation in PhpDocumentor Style
+#    (www.phpdoc.org)
+#  - minor bug fixing
+#============================================================+
+
+#
+# Code 128-A Barcode Render Class for PHP using the GD graphics library.<br>
+# Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a  2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+
+#
+# Code 128-A Barcode Render Class for PHP using the GD graphics library.<br>
+# Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a  2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+class C128AObject extends BarcodeObject {
+	
+	#
+	# Class Constructor.
+	# @param int $Width Image width in pixels.
+	# @param int $Height Image height in pixels. 
+	# @param int $Style Barcode style.
+	# @param int $Value value to print on barcode.
+	#
+	def __construct($Width, $Height, $Style, $Value)
+		parent::__construct($Width, $Height, $Style);
+		@mValue   = $Value;
+		@mChars   = " !\"#$%&'()*+�-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_";
+		@mCharSet = array (
+		"212222",   #   00#
+		"222122",   #   01#
+		"222221",   #   02#
+		"121223",   #   03#
+		"121322",   #   04#
+		"131222",   #   05#
+		"122213",   #   06#
+		"122312",   #   07#
+		"132212",   #   08#
+		"221213",   #   09#
+		"221312",   #   10#
+		"231212",   #   11#
+		"112232",   #   12#
+		"122132",   #   13#
+		"122231",   #   14#
+		"113222",   #   15#
+		"123122",   #   16#
+		"123221",   #   17#
+		"223211",   #   18#
+		"221132",   #   19#
+		"221231",   #   20#
+		"213212",   #   21#
+		"223112",   #   22#
+		"312131",   #   23#
+		"311222",   #   24#
+		"321122",   #   25#
+		"321221",   #   26#
+		"312212",   #   27#
+		"322112",   #   28#
+		"322211",   #   29#
+		"212123",   #   30#
+		"212321",   #   31#
+		"232121",   #   32#
+		"111323",   #   33#
+		"131123",   #   34#
+		"131321",   #   35#
+		"112313",   #   36#
+		"132113",   #   37#
+		"132311",   #   38#
+		"211313",   #   39#
+		"231113",   #   40#
+		"231311",   #   41#
+		"112133",   #   42#
+		"112331",   #   43#
+		"132131",   #   44#
+		"113123",   #   45#
+		"113321",   #   46#
+		"133121",   #   47#
+		"313121",   #   48#
+		"211331",   #   49#
+		"231131",   #   50#
+		"213113",   #   51#
+		"213311",   #   52#
+		"213131",   #   53#
+		"311123",   #   54#
+		"311321",   #   55#
+		"331121",   #   56#
+		"312113",   #   57#
+		"312311",   #   58#
+		"332111",   #   59#
+		"314111",   #   60#
+		"221411",   #   61#
+		"431111",   #   62#
+		"111224",   #   63#
+		"111422",   #   64#
+		"121124",   #   65#
+		"121421",   #   66#
+		"141122",   #   67#
+		"141221",   #   68#
+		"112214",   #   69#
+		"112412",   #   70#
+		"122114",   #   71#
+		"122411",   #   72#
+		"142112",   #   73#
+		"142211",   #   74#
+		"241211",   #   75#
+		"221114",   #   76#
+		"413111",   #   77#
+		"241112",   #   78#
+		"134111",   #   79#
+		"111242",   #   80#
+		"121142",   #   81#
+		"121241",   #   82#
+		"114212",   #   83#
+		"124112",   #   84#
+		"124211",   #   85#
+		"411212",   #   86#
+		"421112",   #   87#
+		"421211",   #   88#
+		"212141",   #   89#
+		"214121",   #   90#
+		"412121",   #   91#
+		"111143",   #   92#
+		"111341",   #   93#
+		"131141",   #   94#
+		"114113",   #   95#
+		"114311",   #   96#
+		"411113",   #   97#
+		"411311",   #   98#
+		"113141",   #   99#
+		"114131",   #  100#
+		"311141",   #  101#
+		"411131"    #  102#
+		);
+	end
+
+	#
+	# Returns the character index.
+	# @param char $char character.
+	# @return int character index or -1 in case of error.
+	# @access private
+	#
+	def GetCharIndex($char)
+		for ($i=0;$i<64;$i++)
+			if (@mChars[$i] == $char)
+				return $i;
+			end
+		end
+		return -1;
+	end
+	
+	#
+	# Returns the bar size.
+	# @param int $xres Horizontal resolution.
+	# @param char $char Character.
+	# @return int barcode size.
+	# @access private
+	#
+	def GetBarSize($xres, $char)
+		switch ($char)
+			case '1'
+				$cVal = BCD_C128_BAR_1;
+				
+			case '2'
+				$cVal = BCD_C128_BAR_2;
+				
+			case '3'
+				$cVal = BCD_C128_BAR_3;
+				
+			case '4'
+				$cVal = BCD_C128_BAR_4;
+				
+			default
+				$cVal = 0;
+			end
+		end
+		return  $cVal# $xres;
+	end
+	
+	#
+	# Returns barcode size.
+	# @param int $xres Horizontal resolution.
+	# @return barcode size.
+	# @access private
+	#
+	def GetSize($xres)
+		$len = @mValue.length;
+
+		if ($len == 0)  {
+			@mError = "Null value";
+			return false;
+		end
+		$ret = 0;
+		for ($i=0;$i<$len;$i++)
+			if (($id = GetCharIndex(@mValue[$i])) == -1)
+				@mError = "C128A not include the char '".@mValue[$i]."'";
+				return false;
+			else
+				$cset = @mCharSet[$id];
+				$ret += GetBarSize($xres, $cset[0]);
+				$ret += GetBarSize($xres, $cset[1]);
+				$ret += GetBarSize($xres, $cset[2]);
+				$ret += GetBarSize($xres, $cset[3]);
+				$ret += GetBarSize($xres, $cset[4]);
+				$ret += GetBarSize($xres, $cset[5]);
+			end
+		end
+
+		# length of Check character#
+		$cset = GetCheckCharValue();
+		$CheckSize = 0;
+		for ($i=0;$i<6;$i++)
+			$CheckSize += GetBarSize($cset[$i], $xres);
+		end
+		$StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres;
+		$StopSize  = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres;
+		return $StartSize + $ret + $CheckSize + $StopSize;
+	end
+	
+	#
+	# Returns the check-char value.
+	# @return string.
+	# @access private
+	#
+	def GetCheckCharValue()
+		$len = @mValue.length;
+		$sum = 103; # 'A' type;
+		for ($i=0;$i<$len;$i++)
+			$sum +=  GetCharIndex(@mValue[$i])# ($i+1);
+		end
+		$check  = $sum % 103;
+		return @mCharSet[$check];
+	end
+
+	#
+	# Draws the start code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawStart($DrawPos, $yPos, $ySize, $xres)
+		# Start code is '211412'#
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
+		$DrawPos += GetBarSize('2', $xres);
+		$DrawPos += GetBarSize('1', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
+		$DrawPos += GetBarSize('1', $xres);
+		$DrawPos += GetBarSize('4', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
+		$DrawPos += GetBarSize('1', $xres);
+		$DrawPos += GetBarSize('2', $xres);
+		return $DrawPos;
+	end
+	
+	#
+	# Draws the stop code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawStop($DrawPos, $yPos, $ySize, $xres)
+		# Stop code is '2331112'#
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
+		$DrawPos += GetBarSize('2', $xres);
+		$DrawPos += GetBarSize('3', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize);
+		$DrawPos += GetBarSize('3', $xres);
+		$DrawPos += GetBarSize('1', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
+		$DrawPos += GetBarSize('1', $xres);
+		$DrawPos += GetBarSize('1', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
+		$DrawPos += GetBarSize('2', $xres);
+		return $DrawPos;
+	end
+	
+	#
+	# Draws the check-char code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawCheckChar($DrawPos, $yPos, $ySize, $xres)
+		$cset = GetCheckCharValue();
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ySize);
+		$DrawPos += GetBarSize($cset[0], $xres);
+		$DrawPos += GetBarSize($cset[1], $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ySize);
+		$DrawPos += GetBarSize($cset[2], $xres);
+		$DrawPos += GetBarSize($cset[3], $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ySize);
+		$DrawPos += GetBarSize($cset[4], $xres);
+		$DrawPos += GetBarSize($cset[5], $xres);
+		return $DrawPos;
+	end
+
+	#
+	# Draws the barcode object.
+	# @param int $xres Horizontal resolution.
+	# @return bool true in case of success.
+	#
+	def DrawObject($xres)
+		$len = @mValue.length;
+		if (($size = GetSize($xres))==0)
+			return false;
+		end
+
+		if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2);
+		elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size;
+		else $sPos = 0;
+
+		# Total height of bar code -Bars only-#
+		if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont);
+		else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2;
+
+		# Draw text#
+		if (@mStyle & BCS_DRAW_TEXT)
+			if (@mStyle & BCS_STRETCH_TEXT)
+				for ($i=0;$i<$len;$i++)
+					@DrawChar(@mFont, $sPos+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($size/$len)*$i,
+					$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]);
+				else# Center#
+			$text_width = GetFontWidth(@mFont)# @mValue.length;
+			@DrawText(@mFont, $sPos+(($size-$text_width)/2)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres),
+			$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue);
+			end
+		end
+
+		$cPos = 0;
+		$DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
+		do {
+			$c     = GetCharIndex(@mValue[$cPos]);
+			$cset  = @mCharSet[$c];
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ysize);
+			$DrawPos += GetBarSize($cset[0], $xres);
+			$DrawPos += GetBarSize($cset[1], $xres);
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ysize);
+			$DrawPos += GetBarSize($cset[2], $xres);
+			$DrawPos += GetBarSize($cset[3], $xres);
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ysize);
+			$DrawPos += GetBarSize($cset[4], $xres);
+			$DrawPos += GetBarSize($cset[5], $xres);
+			$cPos += 1;
+		end while ($cPos<$len);
+		$DrawPos = @DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
+		$DrawPos =  @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
+		return true;
+	end
+}
+
+#============================================================+
+# END OF FILE
+#============================================================+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/barcode/c128bobject.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,393 @@
+
+#============================================================+
+# File name   : c128bobject.rb
+# Begin       : 2002-07-31
+# Last Update : 2004-12-29
+# Author      : Karim Mribti [barcode@mribti.com]
+# Version     : 0.0.8a  2001-04-01 (original code)
+# License     : GNU LGPL (Lesser General Public License) 2.1
+#               http://www.gnu.org/copyleft/lesser.txt
+# Source Code : http://www.mribti.com/barcode/
+#
+# Description : Code 128-B Barcode Render Class for PHP using
+#               the GD graphics library.
+#               Code 128-B is a continuous, multilevel and full
+#               ASCII code.
+#
+# NOTE:
+# This version contains changes by Nicola Asuni:
+#  - porting to Ruby
+#  - code style and formatting
+#  - automatic php documentation in PhpDocumentor Style
+#    (www.phpdoc.org)
+#  - minor bug fixing
+#============================================================+
+
+#
+# Code 128-B Barcode Render Class for PHP using the GD graphics library.<br>
+# Code 128-B is a continuous, multilevel and full ASCII code.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a  2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+
+#
+# Code 128-B Barcode Render Class for PHP using the GD graphics library.<br>
+# Code 128-B is a continuous, multilevel and full ASCII code.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a  2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+class C128BObject extends BarcodeObject {
+	
+	#
+	# Class Constructor.
+	# @param int $Width Image width in pixels.
+	# @param int $Height Image height in pixels. 
+	# @param int $Style Barcode style.
+	# @param int $Value value to print on barcode.
+	#
+	def __construct($Width, $Height, $Style, $Value)
+		parent::__construct($Width, $Height, $Style);
+		@mValue = $Value;
+		@mChars = " !\"#$%&'()*+�-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{ }~";
+		@mCharSet = array (
+		"212222",   #   00#
+		"222122",   #   01#
+		"222221",   #   02#
+		"121223",   #   03#
+		"121322",   #   04#
+		"131222",   #   05#
+		"122213",   #   06#
+		"122312",   #   07#
+		"132212",   #   08#
+		"221213",   #   09#
+		"221312",   #   10#
+		"231212",   #   11#
+		"112232",   #   12#
+		"122132",   #   13#
+		"122231",   #   14#
+		"113222",   #   15#
+		"123122",   #   16#
+		"123221",   #   17#
+		"223211",   #   18#
+		"221132",   #   19#
+		"221231",   #   20#
+		"213212",   #   21#
+		"223112",   #   22#
+		"312131",   #   23#
+		"311222",   #   24#
+		"321122",   #   25#
+		"321221",   #   26#
+		"312212",   #   27#
+		"322112",   #   28#
+		"322211",   #   29#
+		"212123",   #   30#
+		"212321",   #   31#
+		"232121",   #   32#
+		"111323",   #   33#
+		"131123",   #   34#
+		"131321",   #   35#
+		"112313",   #   36#
+		"132113",   #   37#
+		"132311",   #   38#
+		"211313",   #   39#
+		"231113",   #   40#
+		"231311",   #   41#
+		"112133",   #   42#
+		"112331",   #   43#
+		"132131",   #   44#
+		"113123",   #   45#
+		"113321",   #   46#
+		"133121",   #   47#
+		"313121",   #   48#
+		"211331",   #   49#
+		"231131",   #   50#
+		"213113",   #   51#
+		"213311",   #   52#
+		"213131",   #   53#
+		"311123",   #   54#
+		"311321",   #   55#
+		"331121",   #   56#
+		"312113",   #   57#
+		"312311",   #   58#
+		"332111",   #   59#
+		"314111",   #   60#
+		"221411",   #   61#
+		"431111",   #   62#
+		"111224",   #   63#
+		"111422",   #   64#
+		"121124",   #   65#
+		"121421",   #   66#
+		"141122",   #   67#
+		"141221",   #   68#
+		"112214",   #   69#
+		"112412",   #   70#
+		"122114",   #   71#
+		"122411",   #   72#
+		"142112",   #   73#
+		"142211",   #   74#
+		"241211",   #   75#
+		"221114",   #   76#
+		"413111",   #   77#
+		"241112",   #   78#
+		"134111",   #   79#
+		"111242",   #   80#
+		"121142",   #   81#
+		"121241",   #   82#
+		"114212",   #   83#
+		"124112",   #   84#
+		"124211",   #   85#
+		"411212",   #   86#
+		"421112",   #   87#
+		"421211",   #   88#
+		"212141",   #   89#
+		"214121",   #   90#
+		"412121",   #   91#
+		"111143",   #   92#
+		"111341",   #   93#
+		"131141",   #   94#
+		"114113",   #   95#
+		"114311",   #   96#
+		"411113",   #   97#
+		"411311",   #   98#
+		"113141",   #   99#
+		"114131",   #  100#
+		"311141",   #  101#
+		"411131"    #  102#
+		);
+	end
+
+	#
+	# Returns the character index.
+	# @param char $char character.
+	# @return int character index or -1 in case of error.
+	# @access private
+	#
+	def GetCharIndex($char)
+		for ($i=0;$i<95;$i++)
+			if (@mChars[$i] == $char)
+				return $i;
+			end
+		end
+		return -1;
+	end
+	
+	#
+	# Returns the bar size.
+	# @param int $xres Horizontal resolution.
+	# @param char $char Character.
+	# @return int barcode size.
+	# @access private
+	#
+	def GetBarSize($xres, $char)
+		switch ($char)
+			case '1'
+				$cVal = BCD_C128_BAR_1;
+				
+			case '2'
+				$cVal = BCD_C128_BAR_2;
+				
+			case '3'
+				$cVal = BCD_C128_BAR_3;
+				
+			case '4'
+				$cVal = BCD_C128_BAR_4;
+				
+			default
+				$cVal = 0;
+			end
+		end
+		return  $cVal# $xres;
+	end
+	
+	#
+	# Returns barcode size.
+	# @param int $xres Horizontal resolution.
+	# @return barcode size.
+	# @access private
+	#
+	def GetSize($xres)
+		$len = @mValue.length;
+
+		if ($len == 0)  {
+			@mError = "Null value";
+			return false;
+		end
+		$ret = 0;
+		for ($i=0;$i<$len;$i++)
+			if (($id = GetCharIndex(@mValue[$i])) == -1)
+				@mError = "C128B not include the char '".@mValue[$i]."'";
+				return false;
+			else
+				$cset = @mCharSet[$id];
+				$ret += GetBarSize($xres, $cset[0]);
+				$ret += GetBarSize($xres, $cset[1]);
+				$ret += GetBarSize($xres, $cset[2]);
+				$ret += GetBarSize($xres, $cset[3]);
+				$ret += GetBarSize($xres, $cset[4]);
+				$ret += GetBarSize($xres, $cset[5]);
+			end
+		end
+		# length of Check character#
+		$cset = GetCheckCharValue();
+		$CheckSize = 0;
+		for ($i=0;$i<6;$i++)
+			$CheckSize += GetBarSize($cset[$i], $xres);
+		end
+
+		$StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres;
+		$StopSize  = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres;
+
+		return $StartSize + $ret + $CheckSize + $StopSize;
+	end
+	
+	#
+	# Returns the check-char value.
+	# @return string.
+	# @access private
+	#
+	def GetCheckCharValue()
+		$len = @mValue.length;
+		$sum = 104; # 'B' type;
+		for ($i=0;$i<$len;$i++)
+			$sum += GetCharIndex(@mValue[$i])# ($i+1);
+		end
+		$check  = $sum % 103;
+		return @mCharSet[$check];
+	end
+
+	#
+	# Draws the start code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawStart($DrawPos, $yPos, $ySize, $xres)
+		# Start code is '211214'#
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres), $ySize);
+		$DrawPos += GetBarSize('2', $xres);
+		$DrawPos += GetBarSize('1', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres), $ySize);
+		$DrawPos += GetBarSize('1', $xres);
+		$DrawPos += GetBarSize('2', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres), $ySize);
+		$DrawPos += GetBarSize('1', $xres);
+		$DrawPos += GetBarSize('4', $xres);
+		return $DrawPos;
+	end
+	
+	#
+	# Draws the stop code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawStop($DrawPos, $yPos, $ySize, $xres)
+		# Stop code is '2331112'#
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
+		$DrawPos += GetBarSize('2', $xres);
+		$DrawPos += GetBarSize('3', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize);
+		$DrawPos += GetBarSize('3', $xres);
+		$DrawPos += GetBarSize('1', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
+		$DrawPos += GetBarSize('1', $xres);
+		$DrawPos += GetBarSize('1', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
+		$DrawPos += GetBarSize('2', $xres);
+		return $DrawPos;
+	end
+	
+	#
+	# Draws the check-char code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawCheckChar($DrawPos, $yPos, $ySize, $xres)
+		$cset = GetCheckCharValue();
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ySize);
+		$DrawPos += GetBarSize($cset[0], $xres);
+		$DrawPos += GetBarSize($cset[1], $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ySize);
+		$DrawPos += GetBarSize($cset[2], $xres);
+		$DrawPos += GetBarSize($cset[3], $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ySize);
+		$DrawPos += GetBarSize($cset[4], $xres);
+		$DrawPos += GetBarSize($cset[5], $xres);
+		return $DrawPos;
+	end
+
+	#
+	# Draws the barcode object.
+	# @param int $xres Horizontal resolution.
+	# @return bool true in case of success.
+	#
+	def DrawObject($xres)
+		$len = @mValue.length;
+		if (($size = GetSize($xres))==0)
+			return false;
+		end
+
+		if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2);
+		elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size;
+		else $sPos = 0;
+
+		# Total height of bar code -Bars only-#
+		if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont);
+		else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2;
+
+		# Draw text#
+		if (@mStyle & BCS_DRAW_TEXT)
+			if (@mStyle & BCS_STRETCH_TEXT)
+				for ($i=0;$i<$len;$i++)
+					@DrawChar(@mFont, $sPos+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($size/$len)*$i,
+					$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]);
+				else# Center#
+			$text_width = GetFontWidth(@mFont)# @mValue.length;
+			@DrawText(@mFont, $sPos+(($size-$text_width)/2)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres),
+			$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue);
+			end
+		end
+
+		$cPos = 0;
+		$DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
+		do {
+			$c     = GetCharIndex(@mValue[$cPos]);
+			$cset  = @mCharSet[$c];
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ysize);
+			$DrawPos += GetBarSize($cset[0], $xres);
+			$DrawPos += GetBarSize($cset[1], $xres);
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ysize);
+			$DrawPos += GetBarSize($cset[2], $xres);
+			$DrawPos += GetBarSize($cset[3], $xres);
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ysize);
+			$DrawPos += GetBarSize($cset[4], $xres);
+			$DrawPos += GetBarSize($cset[5], $xres);
+			$cPos += 1;
+		end while ($cPos<$len);
+		$DrawPos = @DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
+		$DrawPos =  @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
+		return true;
+	end
+}
+
+#============================================================+
+# END OF FILE
+#============================================================+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/barcode/c128cobject.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,414 @@
+
+#============================================================+
+# File name   : c128cobject.rb
+# Begin       : 2002-07-31
+# Last Update : 2004-12-29
+# Author      : Karim Mribti [barcode@mribti.com]
+#             : Sam Michaels [swampgas@swampgas.org]
+#             : Nicola Asuni [info@tecnick.com]
+# Version     : 0.0.8a  2001-04-01 (original code)
+# License     : GNU LGPL (Lesser General Public License) 2.1
+#               http://www.gnu.org/copyleft/lesser.txt
+# Source Code : http://www.mribti.com/barcode/
+#
+# Description : Code 128-C Barcode Render Class for PHP using
+#               the GD graphics library.
+#               Code 128-C is numeric only and provides the
+#               most efficiency.
+#
+# NOTE:
+# This version contains changes by Nicola Asuni:
+#  - porting to Ruby
+#  - code style and formatting
+#  - automatic php documentation in PhpDocumentor Style
+#    (www.phpdoc.org)
+#  - minor bug fixing
+#============================================================+
+
+#
+# Code 128-C Barcode Render Class for PHP using the GD graphics library.<br>
+# Code 128-C is numeric only and provides the most efficiency.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a  2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+
+#
+# Code 128-C Barcode Render Class for PHP using the GD graphics library.<br>
+# Code 128-C is numeric only and provides the most efficiency.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a  2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+class C128CObject extends BarcodeObject {
+	
+	#
+	# Class Constructor.
+	# @param int $Width Image width in pixels.
+	# @param int $Height Image height in pixels. 
+	# @param int $Style Barcode style.
+	# @param int $Value value to print on barcode.
+	#
+	def __construct($Width, $Height, $Style, $Value)
+		parent::__construct($Width, $Height, $Style);
+		@mValue = $Value;
+		@mChars = array (
+		"00", "01", "02", "03", "04", "05", "06", "07", "08", "09",
+		"10", "11", "12", "13", "14", "15", "16", "17", "18", "19",
+		"20", "21", "22", "23", "24", "25", "26", "27", "28", "29",
+		"30", "31", "32", "33", "34", "35", "36", "37", "38", "39",
+		"40", "41", "42", "43", "44", "45", "46", "47", "48", "49",
+		"50", "51", "52", "53", "54", "55", "56", "57", "58", "59",
+		"60", "61", "62", "63", "64", "65", "66", "67", "68", "69",
+		"70", "71", "72", "73", "74", "75", "76", "77", "78", "79",
+		"80", "81", "82", "83", "84", "85", "86", "87", "88", "89",
+		"90", "91", "92", "93", "94", "95", "96", "97", "98", "99",
+		);
+		@mCharSet = array (
+		"212222",   #   00#
+		"222122",   #   01#
+		"222221",   #   02#
+		"121223",   #   03#
+		"121322",   #   04#
+		"131222",   #   05#
+		"122213",   #   06#
+		"122312",   #   07#
+		"132212",   #   08#
+		"221213",   #   09#
+		"221312",   #   10#
+		"231212",   #   11#
+		"112232",   #   12#
+		"122132",   #   13#
+		"122231",   #   14#
+		"113222",   #   15#
+		"123122",   #   16#
+		"123221",   #   17#
+		"223211",   #   18#
+		"221132",   #   19#
+		"221231",   #   20#
+		"213212",   #   21#
+		"223112",   #   22#
+		"312131",   #   23#
+		"311222",   #   24#
+		"321122",   #   25#
+		"321221",   #   26#
+		"312212",   #   27#
+		"322112",   #   28#
+		"322211",   #   29#
+		"212123",   #   30#
+		"212321",   #   31#
+		"232121",   #   32#
+		"111323",   #   33#
+		"131123",   #   34#
+		"131321",   #   35#
+		"112313",   #   36#
+		"132113",   #   37#
+		"132311",   #   38#
+		"211313",   #   39#
+		"231113",   #   40#
+		"231311",   #   41#
+		"112133",   #   42#
+		"112331",   #   43#
+		"132131",   #   44#
+		"113123",   #   45#
+		"113321",   #   46#
+		"133121",   #   47#
+		"313121",   #   48#
+		"211331",   #   49#
+		"231131",   #   50#
+		"213113",   #   51#
+		"213311",   #   52#
+		"213131",   #   53#
+		"311123",   #   54#
+		"311321",   #   55#
+		"331121",   #   56#
+		"312113",   #   57#
+		"312311",   #   58#
+		"332111",   #   59#
+		"314111",   #   60#
+		"221411",   #   61#
+		"431111",   #   62#
+		"111224",   #   63#
+		"111422",   #   64#
+		"121124",   #   65#
+		"121421",   #   66#
+		"141122",   #   67#
+		"141221",   #   68#
+		"112214",   #   69#
+		"112412",   #   70#
+		"122114",   #   71#
+		"122411",   #   72#
+		"142112",   #   73#
+		"142211",   #   74#
+		"241211",   #   75#
+		"221114",   #   76#
+		"413111",   #   77#
+		"241112",   #   78#
+		"134111",   #   79#
+		"111242",   #   80#
+		"121142",   #   81#
+		"121241",   #   82#
+		"114212",   #   83#
+		"124112",   #   84#
+		"124211",   #   85#
+		"411212",   #   86#
+		"421112",   #   87#
+		"421211",   #   88#
+		"212141",   #   89#
+		"214121",   #   90#
+		"412121",   #   91#
+		"111143",   #   92#
+		"111341",   #   93#
+		"131141",   #   94#
+		"114113",   #   95#
+		"114311",   #   96#
+		"411113",   #   97#
+		"411311",   #   98#
+		"113141",   #   99#
+		);
+	end
+
+	#
+	# Returns the character index.
+	# @param char $char character.
+	# @return int character index or -1 in case of error.
+	# @access private
+	#
+	def GetCharIndex($char)
+		for ($i=0;$i<100;$i++)
+			if (@mChars[$i] == $char)
+				return $i;
+			end
+		end
+		return -1;
+	end
+	
+	#
+	# Returns the bar size.
+	# @param int $xres Horizontal resolution.
+	# @param char $char Character.
+	# @return int barcode size.
+	# @access private
+	#
+	def GetBarSize($xres, $char)
+		switch ($char)
+			case '1'
+				$cVal = BCD_C128_BAR_1;
+				
+			case '2'
+				$cVal = BCD_C128_BAR_2;
+				
+			case '3'
+				$cVal = BCD_C128_BAR_3;
+				
+			case '4'
+				$cVal = BCD_C128_BAR_4;
+				
+			default
+				$cVal = 0;
+			end
+		end
+		return  $cVal# $xres;
+	end
+
+	#
+	# Returns barcode size.
+	# @param int $xres Horizontal resolution.
+	# @return barcode size.
+	# @access private
+	#
+	def GetSize($xres)
+		$len = @mValue.length;
+
+		if ($len == 0)  {
+			@mError = "Null value";
+			return false;
+		end
+		$ret = 0;
+
+		for ($i=0;$i<$len;$i++)
+			if ((@mValue[$i][0] < 48) || (@mValue[$i][0] > 57))
+				@mError = "Code-128C is numeric only";
+				return false;
+			end
+		end
+
+		if (($len%2) != 0)
+			@mError = "The length of barcode value must be even.  You must pad the number with zeros.";
+			return false;
+		end
+
+		for ($i=0;$i<$len;$i+=2)
+			$id = GetCharIndex(@mValue[$i].@mValue[$i+1]);
+			$cset = @mCharSet[$id];
+			$ret += GetBarSize($xres, $cset[0]);
+			$ret += GetBarSize($xres, $cset[1]);
+			$ret += GetBarSize($xres, $cset[2]);
+			$ret += GetBarSize($xres, $cset[3]);
+			$ret += GetBarSize($xres, $cset[4]);
+			$ret += GetBarSize($xres, $cset[5]);
+		end
+		# length of Check character#
+		$cset = GetCheckCharValue();
+		$CheckSize = 0;
+		for ($i=0;$i<6;$i++)
+			$CheckSize += GetBarSize($cset[$i], $xres);
+		end
+
+		$StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres;
+		$StopSize  = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres;
+		return $StartSize + $ret + $CheckSize + $StopSize;
+	end
+	
+	#
+	# Returns the check-char value.
+	# @return string.
+	# @access private
+	#
+	def GetCheckCharValue()
+		$len = @mValue.length;
+		$sum = 105; # 'C' type;
+		$m = 0;
+		for ($i=0;$i<$len;$i+=2)
+			$m += 1;
+			$sum +=  GetCharIndex(@mValue[$i].@mValue[$i+1])# $m;
+		end
+		$check  = $sum % 103;
+		return @mCharSet[$check];
+	end
+
+	#
+	# Draws the start code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawStart($DrawPos, $yPos, $ySize, $xres)
+		# Start code is '211232'#
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
+		$DrawPos += GetBarSize('2', $xres);
+		$DrawPos += GetBarSize('1', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
+		$DrawPos += GetBarSize('1', $xres);
+		$DrawPos += GetBarSize('2', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize);
+		$DrawPos += GetBarSize('3', $xres);
+		$DrawPos += GetBarSize('2', $xres);
+		return $DrawPos;
+	end
+	
+	#
+	# Draws the stop code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawStop($DrawPos, $yPos, $ySize, $xres)
+		# Stop code is '2331112'#
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
+		$DrawPos += GetBarSize('2', $xres);
+		$DrawPos += GetBarSize('3', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize);
+		$DrawPos += GetBarSize('3', $xres);
+		$DrawPos += GetBarSize('1', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
+		$DrawPos += GetBarSize('1', $xres);
+		$DrawPos += GetBarSize('1', $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
+		$DrawPos += GetBarSize('2', $xres);
+		return $DrawPos;
+	end
+	
+	#
+	# Draws the check-char code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawCheckChar($DrawPos, $yPos, $ySize, $xres)
+		$cset = GetCheckCharValue();
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ySize);
+		$DrawPos += GetBarSize($cset[0], $xres);
+		$DrawPos += GetBarSize($cset[1], $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ySize);
+		$DrawPos += GetBarSize($cset[2], $xres);
+		$DrawPos += GetBarSize($cset[3], $xres);
+		@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ySize);
+		$DrawPos += GetBarSize($cset[4], $xres);
+		$DrawPos += GetBarSize($cset[5], $xres);
+		return $DrawPos;
+	end
+
+	#
+	# Draws the barcode object.
+	# @param int $xres Horizontal resolution.
+	# @return bool true in case of success.
+	#
+	def DrawObject($xres)
+		$len = @mValue.length;
+		if (($size = GetSize($xres))==0)
+			return false;
+		end
+
+		if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2);
+		elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size;
+		else $sPos = 0;
+
+		# Total height of bar code -Bars only-#
+		if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont);
+		else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2;
+
+		# Draw text#
+		if (@mStyle & BCS_DRAW_TEXT)
+			if (@mStyle & BCS_STRETCH_TEXT)
+				for ($i=0;$i<$len;$i++)
+					@DrawChar(@mFont, $sPos+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($size/$len)*$i,
+					$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]);
+				else# Center#
+			$text_width = GetFontWidth(@mFont) * @mValue.length;
+			@DrawText(@mFont, $sPos+(($size-$text_width)/2)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres),
+			$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue);
+			end
+		end
+
+		$cPos = 0;
+		$DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
+		do {
+			$c     = GetCharIndex(@mValue[$cPos].@mValue[$cPos+1]);
+			$cset  = @mCharSet[$c];
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ysize);
+			$DrawPos += GetBarSize($cset[0], $xres);
+			$DrawPos += GetBarSize($cset[1], $xres);
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ysize);
+			$DrawPos += GetBarSize($cset[2], $xres);
+			$DrawPos += GetBarSize($cset[3], $xres);
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ysize);
+			$DrawPos += GetBarSize($cset[4], $xres);
+			$DrawPos += GetBarSize($cset[5], $xres);
+			$cPos += 2;
+		end while ($cPos<$len);
+		$DrawPos = @DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
+		$DrawPos =  @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
+		return true;
+	end
+}
+
+#============================================================+
+# END OF FILE
+#============================================================+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/barcode/c39object.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,281 @@
+
+#============================================================+
+# File name   : c39object.rb
+# Begin       : 2002-07-31
+# Last Update : 2004-12-29
+# Author      : Karim Mribti [barcode@mribti.com]
+#             : Nicola Asuni [info@tecnick.com]
+# Version     : 0.0.8a  2001-04-01 (original code)
+# License     : GNU LGPL (Lesser General Public License) 2.1
+#               http://www.gnu.org/copyleft/lesser.txt
+# Source Code : http://www.mribti.com/barcode/
+#
+# Description : Code 39 Barcode Render Class for PHP using
+#               the GD graphics library.
+#               Code 39 is an alphanumeric bar code that can
+#               encode decimal number, case alphabet and some
+#               special symbols.
+#
+# NOTE:
+# This version contains changes by Nicola Asuni:
+#  - porting to Ruby
+#  - code style and formatting
+#  - automatic php documentation in PhpDocumentor Style
+#    (www.phpdoc.org)
+#  - minor bug fixing
+#============================================================+
+
+#
+# Code 39 Barcode Render Class.<br>
+# Code 39 is an alphanumeric bar code that can encode decimal number, case alphabet and some special symbols.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a  2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+
+#
+# Code 39 Barcode Render Class.<br>
+# Code 39 is an alphanumeric bar code that can encode decimal number, case alphabet and some special symbols.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a  2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+class C39Object extends BarcodeObject {
+	
+	#
+	# Class Constructor.
+	# @param int $Width Image width in pixels.
+	# @param int $Height Image height in pixels. 
+	# @param int $Style Barcode style.
+	# @param int $Value value to print on barcode.
+	#
+	def __construct($Width, $Height, $Style, $Value)
+		parent::__construct($Width, $Height, $Style);
+		@mValue = $Value;
+		@mChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.#$/+%";
+		@mCharSet = array (
+		# 0 # "000110100",
+		# 1 # "100100001",
+		# 2 # "001100001",
+		# 3 # "101100000",
+		# 4 # "000110001",
+		# 5 # "100110000",
+		# 6 # "001110000",
+		# 7 # "000100101",
+		# 8 # "100100100",
+		# 9 # "001100100",
+		# A # "100001001",
+		# B # "001001001",
+		# C # "101001000",
+		# D # "000011001",
+		# E # "100011000",
+		# F # "001011000",
+		# G # "000001101",
+		# H # "100001100",
+		# I # "001001100",
+		# J # "000011100",
+		# K # "100000011",
+		# L # "001000011",
+		# M # "101000010",
+		# N # "000010011",
+		# O # "100010010",
+		# P # "001010010",
+		# Q # "000000111",
+		# R # "100000110",
+		# S # "001000110",
+		# T # "000010110",
+		# U # "110000001",
+		# V # "011000001",
+		# W # "111000000",
+		# X # "010010001",
+		# Y # "110010000",
+		# Z # "011010000",
+		# - # "010000101",
+		# . # "110000100",
+		# SP# "011000100",
+		/*# # "010010100",
+		# $ # "010101000",
+		# / # "010100010",
+		# + # "010001010",
+		# % # "000101010"
+		);
+	end
+
+	#
+	# Returns the character index.
+	# @param char $char character.
+	# @return int character index or -1 in case of error.
+	# @access private
+	#
+	def GetCharIndex($char)
+		for ($i=0;$i<44;$i++)
+			if (@mChars[$i] == $char)
+				return $i;
+			end
+		end
+		return -1;
+	end
+	
+	#
+	# Returns barcode size.
+	# @param int $xres Horizontal resolution.
+	# @return barcode size.
+	# @access private
+	#
+	def GetSize($xres)
+		$len = @mValue.length;
+
+		if ($len == 0)  {
+			@mError = "Null value";
+			return false;
+		end
+
+		for ($i=0;$i<$len;$i++)
+			if (GetCharIndex(@mValue[$i]) == -1 || @mValue[$i] == '*')
+				# The asterisk is only used as a start and stop code#
+				@mError = "C39 not include the char '".@mValue[$i]."'";
+				return false;
+			end
+		end
+
+		# Start, Stop is 010010100 == '*' #
+		$StartSize = BCD_C39_NARROW_BAR# $xres# 6 + BCD_C39_WIDE_BAR# $xres# 3;
+		$StopSize  = BCD_C39_NARROW_BAR# $xres# 6 + BCD_C39_WIDE_BAR# $xres# 3;
+		$CharSize  = BCD_C39_NARROW_BAR# $xres# 6 + BCD_C39_WIDE_BAR# $xres# 3; # Same for all chars#
+
+		return $CharSize# $len + $StartSize + $StopSize + # Space between chars# BCD_C39_NARROW_BAR# $xres# ($len-1);
+	end
+
+	#
+	# Draws the start code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawStart($DrawPos, $yPos, $ySize, $xres)
+		# Start code is '*'#
+		$narrow = BCD_C39_NARROW_BAR# $xres;
+		$wide   = BCD_C39_WIDE_BAR# $xres;
+		@DrawSingleBar($DrawPos, $yPos, $narrow , $ySize);
+		$DrawPos += $narrow;
+		$DrawPos += $wide;
+		@DrawSingleBar($DrawPos, $yPos, $narrow , $ySize);
+		$DrawPos += $narrow;
+		$DrawPos += $narrow;
+		@DrawSingleBar($DrawPos, $yPos, $wide , $ySize);
+		$DrawPos += $wide;
+		$DrawPos += $narrow;
+		@DrawSingleBar($DrawPos, $yPos, $wide , $ySize);
+		$DrawPos += $wide;
+		$DrawPos += $narrow;
+		@DrawSingleBar($DrawPos, $yPos, $narrow, $ySize);
+		$DrawPos += $narrow;
+		$DrawPos += $narrow; # Space between chars#
+		return $DrawPos;
+	end
+	
+	#
+	# Draws the stop code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawStop($DrawPos, $yPos, $ySize, $xres)
+		# Stop code is '*'#
+		$narrow = BCD_C39_NARROW_BAR# $xres;
+		$wide   = BCD_C39_WIDE_BAR# $xres;
+		@DrawSingleBar($DrawPos, $yPos, $narrow , $ySize);
+		$DrawPos += $narrow;
+		$DrawPos += $wide;
+		@DrawSingleBar($DrawPos, $yPos, $narrow , $ySize);
+		$DrawPos += $narrow;
+		$DrawPos += $narrow;
+		@DrawSingleBar($DrawPos, $yPos, $wide , $ySize);
+		$DrawPos += $wide;
+		$DrawPos += $narrow;
+		@DrawSingleBar($DrawPos, $yPos, $wide , $ySize);
+		$DrawPos += $wide;
+		$DrawPos += $narrow;
+		@DrawSingleBar($DrawPos, $yPos, $narrow, $ySize);
+		$DrawPos += $narrow;
+		return $DrawPos;
+	end
+	
+	#
+	# Draws the barcode object.
+	# @param int $xres Horizontal resolution.
+	# @return bool true in case of success.
+	#
+	def DrawObject($xres)
+		$len = @mValue.length;
+
+		$narrow = BCD_C39_NARROW_BAR# $xres;
+		$wide   = BCD_C39_WIDE_BAR# $xres;
+
+		if (($size = GetSize($xres))==0)
+			return false;
+		end
+
+		$cPos = 0;
+		if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2);
+		elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size;
+		else $sPos = 0;
+
+		# Total height of bar code -Bars only-#
+		if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont);
+		else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2;
+
+		# Draw text#
+		if (@mStyle & BCS_DRAW_TEXT)
+			if (@mStyle & BCS_STRETCH_TEXT)
+				for ($i=0;$i<$len;$i++)
+					@DrawChar(@mFont, $sPos+($narrow*6+$wide*3)+($size/$len)*$i,
+					$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]);
+				else# Center#
+			$text_width = GetFontWidth(@mFont)# @mValue.length;
+			@DrawText(@mFont, $sPos+(($size-$text_width)/2)+($narrow*6+$wide*3),
+			$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue);
+			end
+		end
+
+		$DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
+		do {
+			$c     = GetCharIndex(@mValue[$cPos]);
+			$cset  = @mCharSet[$c];
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[0] == '0') ? $narrow : $wide , $ysize);
+			$DrawPos += ($cset[0] == '0') ? $narrow : $wide;
+			$DrawPos += ($cset[1] == '0') ? $narrow : $wide;
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[2] == '0') ? $narrow : $wide , $ysize);
+			$DrawPos += ($cset[2] == '0') ? $narrow : $wide;
+			$DrawPos += ($cset[3] == '0') ? $narrow : $wide;
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[4] == '0') ? $narrow : $wide , $ysize);
+			$DrawPos += ($cset[4] == '0') ? $narrow : $wide;
+			$DrawPos += ($cset[5] == '0') ? $narrow : $wide;
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[6] == '0') ? $narrow : $wide , $ysize);
+			$DrawPos += ($cset[6] == '0') ? $narrow : $wide;
+			$DrawPos += ($cset[7] == '0') ? $narrow : $wide;
+			@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[8] == '0') ? $narrow : $wide , $ysize);
+			$DrawPos += ($cset[8] == '0') ? $narrow : $wide;
+			$DrawPos += $narrow; # Space between chars#
+			$cPos += 1;
+		end while ($cPos<$len);
+		$DrawPos =  @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
+		return true;
+	end
+}
+
+#============================================================+
+# END OF FILE
+#============================================================+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/barcode/i25object.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,216 @@
+
+#============================================================+
+# File name   : i25aobject.rb
+# Begin       : 2002-07-31
+# Last Update : 2004-12-29
+# Author      : Karim Mribti [barcode@mribti.com]
+#             : Nicola Asuni [info@tecnick.com]
+# Version     : 0.0.8a  2001-04-01 (original code)
+# License     : GNU LGPL (Lesser General Public License) 2.1
+#               http://www.gnu.org/copyleft/lesser.txt
+# Source Code : http://www.mribti.com/barcode/
+#
+# Description : I25 Barcode Render Class for PHP using
+#               the GD graphics library.
+#               Interleaved 2 of 5 is a numeric only bar code
+#               with a optional check number.
+#
+# NOTE:
+# This version contains changes by Nicola Asuni:
+#  - porting to Ruby
+#  - code style and formatting
+#  - automatic php documentation in PhpDocumentor Style
+#    (www.phpdoc.org)
+#  - minor bug fixing
+#============================================================+
+
+#
+# I25 Barcode Render Class for PHP using the GD graphics library.<br<
+# Interleaved 2 of 5 is a numeric only bar code with a optional check number.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a  2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+
+#
+# I25 Barcode Render Class for PHP using the GD graphics library.<br<
+# Interleaved 2 of 5 is a numeric only bar code with a optional check number.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a  2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+class I25Object extends BarcodeObject {
+	
+	#
+	# Class Constructor.
+	# @param int $Width Image width in pixels.
+	# @param int $Height Image height in pixels. 
+	# @param int $Style Barcode style.
+	# @param int $Value value to print on barcode.
+	#
+	def __construct($Width, $Height, $Style, $Value)
+		parent::__construct($Width, $Height, $Style);
+		@mValue = $Value;
+		@mCharSet = array (
+		# 0# "00110",
+		# 1# "10001",
+		# 2# "01001",
+		# 3# "11000",
+		# 4# "00101",
+		# 5# "10100",
+		# 6# "01100",
+		# 7# "00011",
+		# 8# "10010",
+		# 9# "01010"
+		);
+	end
+	
+	#
+	# Returns barcode size.
+	# @param int $xres Horizontal resolution.
+	# @return barcode size.
+	# @access private
+	#
+	def GetSize($xres)
+		$len = @mValue.length;
+
+		if ($len == 0)  {
+			@mError = "Null value";
+			return false;
+		end
+
+		for ($i=0;$i<$len;$i++)
+			if ((@mValue[$i][0] < 48) || (@mValue[$i][0] > 57))
+				@mError = "I25 is numeric only";
+				return false;
+			end
+		end
+
+		if (($len%2) != 0)
+			@mError = "The length of barcode value must be even";
+			return false;
+		end
+		$StartSize = BCD_I25_NARROW_BAR# 4 # $xres;
+		$StopSize  = BCD_I25_WIDE_BAR# $xres + 2# BCD_I25_NARROW_BAR# $xres;
+		$cPos = 0;
+		$sPos = 0;
+		do {
+			$c1    = @mValue[$cPos];
+			$c2    = @mValue[$cPos+1];
+			$cset1 = @mCharSet[$c1];
+			$cset2 = @mCharSet[$c2];
+
+			for ($i=0;$i<5;$i++)
+				$type1 = ($cset1[$i]==0) ? (BCD_I25_NARROW_BAR # $xres) : (BCD_I25_WIDE_BAR# $xres);
+				$type2 = ($cset2[$i]==0) ? (BCD_I25_NARROW_BAR # $xres) : (BCD_I25_WIDE_BAR# $xres);
+				$sPos += ($type1 + $type2);
+			end
+			$cPos+=2;
+		end while ($cPos<$len);
+
+		return $sPos + $StartSize + $StopSize;
+	end
+
+	#
+	# Draws the start code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawStart($DrawPos, $yPos, $ySize, $xres)
+		# Start code is "0000"#
+		@DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize);
+		$DrawPos += BCD_I25_NARROW_BAR # $xres;
+		$DrawPos += BCD_I25_NARROW_BAR # $xres;
+		@DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize);
+		$DrawPos += BCD_I25_NARROW_BAR # $xres;
+		$DrawPos += BCD_I25_NARROW_BAR # $xres;
+		return $DrawPos;
+	end
+	
+	#
+	# Draws the stop code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawStop($DrawPos, $yPos, $ySize, $xres)
+		# Stop code is "100"#
+		@DrawSingleBar($DrawPos, $yPos, BCD_I25_WIDE_BAR# $xres , $ySize);
+		$DrawPos += BCD_I25_WIDE_BAR # $xres;
+		$DrawPos += BCD_I25_NARROW_BAR # $xres;
+		@DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize);
+		$DrawPos += BCD_I25_NARROW_BAR # $xres;
+		return $DrawPos;
+	end
+
+	#
+	# Draws the barcode object.
+	# @param int $xres Horizontal resolution.
+	# @return bool true in case of success.
+	#
+	def DrawObject($xres)
+		$len = @mValue.length;
+
+		if (($size = GetSize($xres))==0)
+			return false;
+		end
+
+		$cPos  = 0;
+
+		if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont);
+		else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2;
+
+		if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2);
+		elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size;
+		else $sPos = 0;
+
+		if (@mStyle & BCS_DRAW_TEXT)
+			if (@mStyle & BCS_STRETCH_TEXT)
+				# Stretch#
+				for ($i=0;$i<$len;$i++)
+					@DrawChar(@mFont, $sPos+BCD_I25_NARROW_BAR*4*$xres+($size/$len)*$i,
+					$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET , @mValue[$i]);
+				end
+			endelse# Center#
+			$text_width = GetFontWidth(@mFont) * @mValue.length;
+			@DrawText(@mFont, $sPos+(($size-$text_width)/2)+(BCD_I25_NARROW_BAR*4*$xres),
+			$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue);
+			end
+		end
+
+		$sPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1, $ysize, $xres);
+		do {
+			$c1 = @mValue[$cPos];
+			$c2 = @mValue[$cPos+1];
+			$cset1 = @mCharSet[$c1];
+			$cset2 = @mCharSet[$c2];
+
+			for ($i=0;$i<5;$i++)
+				$type1 = ($cset1[$i]==0) ? (BCD_I25_NARROW_BAR# $xres) : (BCD_I25_WIDE_BAR# $xres);
+				$type2 = ($cset2[$i]==0) ? (BCD_I25_NARROW_BAR# $xres) : (BCD_I25_WIDE_BAR# $xres);
+				@DrawSingleBar($sPos, BCD_DEFAULT_MAR_Y1, $type1 , $ysize);
+				$sPos += ($type1 + $type2);
+			end
+			$cPos+=2;
+		end while ($cPos<$len);
+		$sPos =  @DrawStop($sPos, BCD_DEFAULT_MAR_Y1, $ysize, $xres);
+		return true;
+	end
+}
+
+#============================================================+
+# END OF FILE
+#============================================================+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/barcode/image.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,87 @@
+
+#============================================================+
+# File name   : image.rb
+# Begin       : 2002-07-31
+# Last Update : 2005-01-08
+# Author      : Karim Mribti [barcode@mribti.com]
+#             : Nicola Asuni [info@tecnick.com]
+# Version     : 0.0.8a  2001-04-01 (original code)
+# License     : GNU LGPL (Lesser General Public License) 2.1
+#               http://www.gnu.org/copyleft/lesser.txt
+# Source Code : http://www.mribti.com/barcode/
+#
+# Description : Barcode Image Rendering.
+#
+# NOTE:
+# This version contains changes by Nicola Asuni:
+#  - porting to Ruby
+#  - code style and formatting
+#  - automatic php documentation in PhpDocumentor Style
+#    (www.phpdoc.org)
+#  - minor bug fixing
+#============================================================+
+
+#
+# Barcode Image Rendering.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a  2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+
+#
+# 
+#
+
+require("../../shared/barcode/barcode.rb");
+require("../../shared/barcode/i25object.rb");
+require("../../shared/barcode/c39object.rb");
+require("../../shared/barcode/c128aobject.rb");
+require("../../shared/barcode/c128bobject.rb");
+require("../../shared/barcode/c128cobject.rb");
+
+if (!$_REQUEST['style'].nil?) $_REQUEST['style'] = BCD_DEFAULT_STYLE;
+if (!$_REQUEST['width'].nil?) $_REQUEST['width'] = BCD_DEFAULT_WIDTH;
+if (!$_REQUEST['height'].nil?) $_REQUEST['height'] = BCD_DEFAULT_HEIGHT;
+if (!$_REQUEST['xres'].nil?) $_REQUEST['xres'] = BCD_DEFAULT_XRES;
+if (!$_REQUEST['font'].nil?) $_REQUEST['font'] = BCD_DEFAULT_FONT;
+if (!$_REQUEST['type'].nil?) $_REQUEST['type'] = "C39";
+if (!$_REQUEST['code'].nil?) $_REQUEST['code'] = "";
+
+switch ($_REQUEST['type'].upcase)
+	case "I25"
+		$obj = new I25Object($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']);
+		break;
+	end
+	case "C128A"
+		$obj = new C128AObject($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']);
+		break;
+	end
+	case "C128B"
+		$obj = new C128BObject($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']);
+		break;
+	end
+	case "C128C"
+		$obj = new C128CObject($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']);
+		break;
+	end
+	case "C39":
+	default
+		$obj = new C39Object($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']);
+		break;
+	end
+}
+
+if ($obj)
+	$obj->SetFont($_REQUEST['font']);   
+	$obj->DrawObject($_REQUEST['xres']);
+	$obj->FlushObject();
+	$obj->DestroyObject();
+	unset($obj);  # clean#
+}
+
+#============================================================+
+# END OF FILE                                                 
+#============================================================+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/barcode/lesser.txt	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,504 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/config/lang/eng.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,48 @@
+#============================================================+
+# File name   : eng.rb                                       
+# Begin       : 2004-03-03                                    
+# Last Update : 2005-03-19                                    
+#                                                             
+# Description : Language module for TCPDF                     
+#               (contains translated texts)                   
+#                                                             
+#                                                             
+# Author: Nicola Asuni                                        
+#                                                             
+# (c) Copyright:                                              
+#               Tecnick.com S.r.l.                            
+#               Via Ugo Foscolo n.19                          
+#               09045 Quartu Sant'Elena (CA)                  
+#               ITALY                                         
+#               www.tecnick.com                               
+#               info@tecnick.com                              
+#============================================================+
+
+#
+# TCPDF language file (contains translated texts).
+# @package com.tecnick.tcpdf
+# @abstract TCPDF language file.
+# @author Nicola Asuni
+# @copyright 2004 Tecnick.com S.r.l (www.tecnick.com) Via Ugo Foscolo n.19 - 09045 Quartu Sant'Elena (CA) - ITALY - www.tecnick.com - info@tecnick.com
+# @link http://tcpdf.sourceforge.net
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+# @since 2004-03-03
+#
+ 
+# ENGLISH
+
+@l = []
+
+# PAGE META DESCRIPTORS --------------------------------------
+
+@l['a_meta_charset'] = "UTF-8";
+@l['a_meta_dir'] = "ltr";
+@l['a_meta_language'] = "en";
+
+# TRANSLATIONS --------------------------------------
+@l['w_page'] = "page";
+
+#============================================================+
+# END OF FILE                                                 
+#============================================================+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/core/image_science.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,64 @@
+# The MIT License
+#
+# 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.
+#
+# This implements native php methods used by tcpdf, which have had to be
+# reimplemented within Ruby.
+
+module RFPDF
+
+  # http://uk2.php.net/getimagesize
+  def getimagesize(filename)
+    out = Hash.new
+    out[2] = ImageScience.image_type(filename)
+    
+    image = ImageScience.with_image(filename) do |img|
+      out[0] = image.width
+      out[1] = image.height
+      
+      # These are actually meant to return integer values But I couldn't seem to find anything saying what those values are.
+      # So for now they return strings. The only place that uses this at the moment is the parsejpeg method, so I've changed that too.
+      case out[2]
+      when "GIF"
+        out['mime'] = "image/gif"
+      when "JPEG"
+        out['mime'] = "image/jpeg"
+      when "PNG"
+        out['mime'] = "image/png"
+      when "WBMP"
+        out['mime'] = "image/vnd.wap.wbmp"
+      when "XPM"
+        out['mime'] = "image/x-xpixmap"
+      end
+      out[3] = "height=\"#{image.height}\" width=\"#{image.width}\""
+      
+      if image.colorspace == "CMYK" || image.colorspace == "RGBA"
+          out['channels'] = 4
+      elsif image.colorspace == "RGB"
+        out['channels'] = 3
+      end
+      
+      out['bits'] = image.depth
+      out['bits'] /= out['channels'] if out['channels']
+    end
+    
+    out
+  end
+  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/core/rfpdf.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,298 @@
+module Core::RFPDF
+  COLOR_PALETTE = {
+      :black => [0x00, 0x00, 0x00],
+      :white => [0xff, 0xff, 0xff],
+  }.freeze
+
+  # Draw a circle at (<tt>mid_x, mid_y</tt>) with <tt>radius</tt>.
+  # 
+  # Options are:
+  # * <tt>:border</tt> - Draw a border, 0 = no, 1 = yes? Default value is <tt>1</tt>.
+  # * <tt>:border_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
+  # * <tt>:border_width</tt> - Default value is <tt>0.5</tt>.
+  # * <tt>:fill</tt> - Fill the box, 0 = no, 1 = yes? Default value is <tt>1</tt>.
+  # * <tt>:fill_color</tt> - Default value is nothing or <tt>COLOR_PALETTE[:white]</tt>.
+  # * <tt>:fill_colorspace</tt> - Default value is :rgb or <tt>''</tt>.
+  #
+  # Example:
+  #
+	#   draw_circle(x, y, radius, :border_color => ReportHelper::COLOR_PALETTE[:dark_blue], :border_width => 1)
+	#
+  def draw_circle(mid_x, mid_y, radius, options = {})
+    options[:border] ||= 1
+    options[:border_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
+    options[:border_width] ||= 0.5
+    options[:fill] ||= 1
+    options[:fill_color] ||= Core::RFPDF::COLOR_PALETTE[:white]
+    options[:fill_colorspace] ||= :rgb
+    SetLineWidth(options[:border_width])
+    set_draw_color_a(options[:border_color])
+    set_fill_color_a(options[:fill_color], options[:colorspace])
+    fd = ""
+    fd = "D" if options[:border] == 1
+    fd += "F" if options[:fill] == 1
+    Circle(mid_x, mid_y, radius, fd)
+  end
+
+  # Draw a line from (<tt>x1, y1</tt>) to (<tt>x2, y2</tt>).
+  # 
+  # Options are:
+  # * <tt>:line_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
+  # * <tt>:line_width</tt> - Default value is <tt>0.5</tt>.
+  #
+  # Example:
+  #
+	#   draw_line(x1, y1, x1, y1+h, :line_color => ReportHelper::COLOR_PALETTE[:dark_blue], :line_width => 1)
+	#
+  def draw_line(x1, y1, x2, y2, options = {})
+    options[:line_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
+    options[:line_width] ||= 0.5
+    set_draw_color_a(options[:line_color])
+    SetLineWidth(options[:line_width])
+    Line(x1, y1, x2, y2)
+  end
+
+  # Draw a string of <tt>text</tt> at (<tt>x, y</tt>).
+  # 
+  # Options are:
+  # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
+  # * <tt>:font_size</tt> - Default value is <tt>10</tt>.
+  # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
+  # * <tt>:colorspace</tt> - Default value is :rgb or <tt>''</tt>.
+  #
+  # Example:
+  #
+	#   draw_text(x, y, header_left, :font_size => 10)
+	#
+  def draw_text(x, y, text, options = {})
+    options[:font_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
+    options[:font] ||= default_font
+    options[:font_size] ||= 10
+    options[:font_style] ||= ''
+    set_text_color_a(options[:font_color], options[:colorspace])
+    SetFont(options[:font], options[:font_style], options[:font_size])
+    SetXY(x, y)
+    Write(options[:font_size] + 4, text)
+  end
+
+  # Draw a block of <tt>text</tt> at (<tt>x, y</tt>) bounded by <tt>left_margin</tt> and <tt>right_margin_from_right_edge</tt>. Both
+  # margins are measured from their corresponding edge.
+  # 
+  # Options are:
+  # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
+  # * <tt>:font_size</tt> - Default value is <tt>10</tt>.
+  # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
+  # * <tt>:colorspace</tt> - Default value is :rgb or <tt>''</tt>.
+  #
+  # Example:
+  #
+	#   draw_text_block(left_margin, 85, "question", left_margin, 280,
+  #       :font_color => ReportHelper::COLOR_PALETTE[:dark_blue],
+  #       :font_size => 12,
+  #       :font_style => 'I')
+	#
+  def draw_text_block(x, y, text, left_margin, right_margin_from_right_edge, options = {})
+    options[:font] ||= default_font
+    options[:font_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
+    options[:font_size] ||= 10
+    options[:font_style] ||= ''
+    set_text_color_a(options[:font_color], options[:colorspace])
+    SetFont(options[:font], options[:font_style], options[:font_size])
+    SetXY(x, y)
+    SetLeftMargin(left_margin)
+    SetRightMargin(right_margin_from_right_edge)
+    Write(options[:font_size] + 4, text)
+    SetMargins(0,0,0)
+  end
+
+  # Draw a box at (<tt>x, y</tt>), <tt>w</tt> wide and <tt>h</tt> high.
+  # 
+  # Options are:
+  # * <tt>:border</tt> - Draw a border, 0 = no, 1 = yes? Default value is <tt>1</tt>.
+  # * <tt>:border_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
+  # * <tt>:border_width</tt> - Default value is <tt>0.5</tt>.
+  # * <tt>:fill</tt> - Fill the box, 0 = no, 1 = yes? Default value is <tt>1</tt>.
+  # * <tt>:fill_color</tt> - Default value is nothing or <tt>COLOR_PALETTE[:white]</tt>.
+  # * <tt>:fill_colorspace</tt> - Default value is :rgb or <tt>''</tt>.
+  #
+  # Example:
+  #
+	#   draw_box(x, y - 1, 38, 22)
+	#
+  def draw_box(x, y, w, h, options = {})
+    options[:border] ||= 1
+    options[:border_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
+    options[:border_width] ||= 0.5
+    options[:fill] ||= 1
+    options[:fill_color] ||= Core::RFPDF::COLOR_PALETTE[:white]
+    options[:fill_colorspace] ||= :rgb
+    SetLineWidth(options[:border_width])
+    set_draw_color_a(options[:border_color])
+    set_fill_color_a(options[:fill_color], options[:fill_colorspace])
+    fd = ""
+    fd = "D" if options[:border] == 1
+    fd += "F" if options[:fill] == 1
+    Rect(x, y, w, h, fd)
+  end
+  
+  # Draw a string of <tt>text</tt> at (<tt>x, y</tt>) in a box <tt>w</tt> wide and <tt>h</tt> high.
+  # 
+  # Options are:
+  # * <tt>:align</tt> - Vertical alignment 'C' = center, 'L' = left, 'R' = right. Default value is <tt>'C'</tt>.
+  # * <tt>:border</tt> - Draw a border, 0 = no, 1 = yes? Default value is <tt>0</tt>.
+  # * <tt>:border_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
+  # * <tt>:border_width</tt> - Default value is <tt>0.5</tt>.
+  # * <tt>:fill</tt> - Fill the box, 0 = no, 1 = yes? Default value is <tt>1</tt>.
+  # * <tt>:fill_color</tt> - Default value is nothing or <tt>COLOR_PALETTE[:white]</tt>.
+  # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
+  # * <tt>:font_size</tt> - Default value is nothing or <tt>8</tt>.
+  # * <tt>:font_style</tt> - 'B' = bold, 'I' = italic, 'U' = underline. Default value is nothing <tt>''</tt>.
+  # * <tt>:padding</tt> - Default value is nothing or <tt>2</tt>.
+  # * <tt>:x_padding</tt> - Default value is nothing.
+  # * <tt>:valign</tt> - 'M' = middle, 'T' = top, 'B' = bottom. Default value is nothing or <tt>'M'</tt>.
+  # * <tt>:colorspace</tt> - Default value is :rgb or <tt>''</tt>.
+  #
+  # Example:
+  #
+	#   draw_text_box(x, y - 1, 38, 22, 
+  #                 "your_score_title", 
+  #                 :fill => 0,
+  #                 :font_color => ReportHelper::COLOR_PALETTE[:blue], 
+  #                 :font_line_spacing => 0,
+  #                 :font_style => "B",
+  #                 :valign => "M")
+	#
+  def draw_text_box(x, y, w, h, text, options = {})
+    options[:align] ||= 'C'
+    options[:border] ||= 0
+    options[:border_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
+    options[:border_width] ||= 0.5
+    options[:fill] ||= 1
+    options[:fill_color] ||= Core::RFPDF::COLOR_PALETTE[:white]
+    options[:font] ||= default_font
+    options[:font_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
+    options[:font_size] ||= 8
+    options[:font_line_spacing] ||= options[:font_size] * 0.3
+    options[:font_style] ||= ''
+    options[:padding] ||= 2
+    options[:x_padding] ||= 0
+    options[:valign] ||= "M"
+		if options[:fill] == 1 or options[:border] == 1
+      draw_box(x, y, w, h, options)
+  	end    
+    SetMargins(0,0,0)
+    set_text_color_a(options[:font_color], options[:colorspace])
+  	font_size = options[:font_size]
+    SetFont(options[:font], options[:font_style], font_size)
+  	font_size += options[:font_line_spacing]
+  	case options[:valign]
+  	  when "B", "bottom"
+  	    y -= options[:padding]
+  	  when "T", "top"
+  	    y += options[:padding]
+  	end
+  	case options[:align]
+  	  when "L", "left"
+  	    x += options[:x_padding]
+  	    w -= options[:x_padding]
+  	    w -= options[:x_padding]
+  	  when "R", "right"
+  	    x += options[:x_padding]
+  	    w -= options[:x_padding]
+  	    w -= options[:x_padding]
+  	end
+    SetXY(x, y)
+    if GetStringWidth(text) < w or not text["\n"].nil? and (options[:valign] == "T" || options[:valign] == "top")
+      text = text + "\n"
+    end
+    if GetStringWidth(text) > w or not text["\n"].nil? or (options[:valign] == "B" || options[:valign] == "bottom")
+      font_size += options[:font_size] * 0.1
+      # TODO 2006-07-21 Level=1 - this is assuming a 2 line text
+      SetXY(x, y + ((h - (font_size * 2)) / 2)) if (options[:valign] == "M" || options[:valign] == "middle")
+      MultiCell(w, font_size, text, 0, options[:align])
+    else
+      Cell(w, h, text, 0, 0, options[:align])
+    end
+  end
+  
+  # Draw a string of <tt>text</tt> at (<tt>x, y</tt>) as a title.
+  # 
+  # Options are:
+  # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
+  # * <tt>:font_size</tt> - Default value is <tt>18</tt>.
+  # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
+  # * <tt>:colorspace</tt> - Default value is :rgb or <tt>''</tt>.
+  #
+  # Example:
+  #
+	#   draw_title(left_margin, 60, 
+	#       "title:", 
+	#       :font_color => ReportHelper::COLOR_PALETTE[:dark_blue])
+	#
+  def draw_title(x, y, title, options = {})
+    options[:font_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
+    options[:font] ||= default_font
+    options[:font_size] ||= 18
+    options[:font_style] ||= ''
+    set_text_color_a(options[:font_color], options[:colorspace])
+    SetFont(options[:font], options[:font_style], options[:font_size])
+  	SetXY(x, y)
+  	Write(options[:font_size] + 2, title)
+  end
+
+  # Set the draw color. Default value is <tt>COLOR_PALETTE[:black]</tt>.
+  #
+  # Example:
+  #
+	#   set_draw_color_a(ReportHelper::COLOR_PALETTE[:dark_blue])
+	#
+  def set_draw_color_a(color = Core::RFPDF::COLOR_PALETTE[:black])
+    SetDrawColor(color[0], color[1], color[2])
+  end
+
+  # Set the fill color. Default value is <tt>COLOR_PALETTE[:white]</tt>.
+  #
+  # Example:
+  #
+	#   set_fill_color_a(ReportHelper::COLOR_PALETTE[:dark_blue])
+	#
+  def set_fill_color_a(color = Core::RFPDF::COLOR_PALETTE[:white], colorspace = :rgb)
+    if colorspace == :cmyk
+      SetCmykFillColor(color[0], color[1], color[2], color[3])
+    else
+      SetFillColor(color[0], color[1], color[2])
+    end
+  end
+
+  # Set the text color. Default value is <tt>COLOR_PALETTE[:white]</tt>.
+  #
+  # Example:
+  #
+	#   set_text_color_a(ReportHelper::COLOR_PALETTE[:dark_blue])
+	#
+  def set_text_color_a(color = Core::RFPDF::COLOR_PALETTE[:black], colorspace = :rgb)
+    if colorspace == :cmyk
+      SetCmykTextColor(color[0], color[1], color[2], color[3])
+    else
+      SetTextColor(color[0], color[1], color[2])
+    end
+  end
+    
+  # Write a string containing html characters. Default value is <tt>COLOR_PALETTE[:white]</tt>.
+  #
+  # Options are:
+  # * <tt>:height</tt> - Line height. Default value is <tt>20</tt>.
+  #
+  # Example:
+  #
+	#   write_html_with_options(html, :height => 12)
+	#
+	#FIXME 2007-08-07 (EJM) Level=0 - This needs to call the TCPDF version.
+  def write_html_with_options(html, options = {})
+    options[:fill] ||= 0
+    options[:height] ||= 20
+    options[:new_line_after] ||= false
+    write_html(html, options[:new_line_after], options[:fill], options[:height])
+    return
+  end 
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/core/rmagick.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,64 @@
+# The MIT License
+#
+# 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.
+#
+# This implements native php methods used by tcpdf, which have had to be
+# reimplemented within Ruby.
+
+module RFPDF
+
+  # http://uk2.php.net/getimagesize
+  def getimagesize(filename)
+    image = Magick::ImageList.new(filename)
+    
+    out = Hash.new
+    out[0] = image.columns
+    out[1] = image.rows
+    
+    # These are actually meant to return integer values But I couldn't seem to find anything saying what those values are.
+    # So for now they return strings. The only place that uses this at the moment is the parsejpeg method, so I've changed that too.
+    case image.mime_type
+    when "image/gif"
+      out[2] = "GIF"
+    when "image/jpeg"
+      out[2] = "JPEG"
+    when "image/png"
+      out[2] = "PNG"
+    when " 	image/vnd.wap.wbmp"
+      out[2] = "WBMP"
+    when "image/x-xpixmap"
+      out[2] = "XPM"
+    end
+    out[3] = "height=\"#{image.rows}\" width=\"#{image.columns}\""
+    out['mime'] = image.mime_type
+    
+    # This needs work to cover more situations
+    # I can't see how to just list the number of channels with ImageMagick / rmagick
+    if image.colorspace.to_s == "CMYKColorspace"
+        out['channels'] = 4
+    elsif image.colorspace.to_s == "RGBColorspace"
+      out['channels'] = 3
+    end
+
+    out['bits'] = image.channel_depth
+    
+    out
+  end
+  
+end
\ No newline at end of file
Binary file vendor/plugins/rfpdf/lib/fonts/FreeMono.ctg.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeMono.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeMonoBold.ctg.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeMonoBold.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeMonoBoldOblique.ctg.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeMonoBoldOblique.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeMonoOblique.ctg.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeMonoOblique.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeSans.ctg.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeSans.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeSansBold.ctg.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeSansBold.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeSansBoldOblique.ctg.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeSansBoldOblique.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeSansOblique.ctg.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/FreeSansOblique.z has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/README.z	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,2 @@
+This folder contains fonts descriptions for TCPDF.
+Please read the documentation on subfolders for copyright, license and other information.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/courier.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,25 @@
+TCPDFFontDescriptor.define('courier') do |font|
+  font[:cw] = {}
+  0.upto(255) do |i|
+  	font[:cw][i]=600
+	end
+end
+TCPDFFontDescriptor.define('courierb') do |font|
+  font[:cw] = {}
+  0.upto(255) do |i|
+  	font[:cw][i]=600
+	end
+end
+TCPDFFontDescriptor.define('courierbi') do |font|
+  font[:cw] = {}
+  0.upto(255) do |i|
+  	font[:cw][i]=600
+	end
+end
+TCPDFFontDescriptor.define('courieri') do |font|
+  font[:cw] = {}
+  0.upto(255) do |i|
+  	font[:cw][i]=600
+	end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/AUTHORS	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,38 @@
+Adrian Schroeter
+Andrey Valentinovich Panov
+Ben Laenen
+Bhikkhu Pesala
+Clayborne Arevalo
+Dafydd Harries
+Danilo Segan
+Davide Viti
+David Jez
+David Lawrence Ramsey
+Denis Jacquerye
+Dwayne Bailey
+Eugeniy Meshcheryakov
+Gee Fung Sit
+Heikki Lindroos
+James Cloos
+James Crippen
+John Karp
+Keenan Pepper
+Lars Naesbye Christensen
+Mashrab Kuvatov
+Mederic Boquien
+Michael Everson
+Misu Moldovan
+Nguyen Thai Ngoc Duy
+Ognyan Kulev
+Ondrej Koala Vacha
+Peter Cernak
+Remy Oudompheng
+Roozbeh Pournader
+Sander Vesik
+Stepan Roh
+Tavmjong Bah
+Tim May
+Valentin Stoykov
+Vasek Stodulka
+
+$Id: AUTHORS 1491 2007-01-12 20:40:12Z ben_laenen $
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/BUGS	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,3 @@
+See http://dejavu.sourceforge.net/wiki/index.rb/Bugs
+
+$Id: BUGS 80 2004-11-13 13:12:02Z src $
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/LICENSE	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,98 @@
+Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below)
+
+Bitstream Vera Fonts Copyright
+------------------------------
+
+Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
+a trademark of Bitstream, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of the fonts accompanying this license ("Fonts") and associated
+documentation files (the "Font Software"), to reproduce and distribute the
+Font Software, including without limitation the rights to use, copy, merge,
+publish, distribute, and/or sell copies of the Font Software, and to permit
+persons to whom the Font Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright and trademark notices and this permission notice shall
+be included in all copies of one or more of the Font Software typefaces.
+
+The Font Software may be modified, altered, or added to, and in particular
+the designs of glyphs or characters in the Fonts may be modified and
+additional glyphs or characters may be added to the Fonts, only if the fonts
+are renamed to names not containing either the words "Bitstream" or the word
+"Vera".
+
+This License becomes null and void to the extent applicable to Fonts or Font
+Software that has been modified and is distributed under the "Bitstream
+Vera" names.
+
+The Font Software may be sold as part of a larger software package but no
+copy of one or more of the Font Software typefaces may be sold by itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
+TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
+FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
+ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
+FONT SOFTWARE.
+
+Except as contained in this notice, the names of Gnome, the Gnome
+Foundation, and Bitstream Inc., shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this Font Software
+without prior written authorization from the Gnome Foundation or Bitstream
+Inc., respectively. For further information, contact: fonts at gnome dot
+org. 
+
+Arev Fonts Copyright
+------------------------------
+
+Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the fonts accompanying this license ("Fonts") and
+associated documentation files (the "Font Software"), to reproduce
+and distribute the modifications to the Bitstream Vera Font Software,
+including without limitation the rights to use, copy, merge, publish,
+distribute, and/or sell copies of the Font Software, and to permit
+persons to whom the Font Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright and trademark notices and this permission notice
+shall be included in all copies of one or more of the Font Software
+typefaces.
+
+The Font Software may be modified, altered, or added to, and in
+particular the designs of glyphs or characters in the Fonts may be
+modified and additional glyphs or characters may be added to the
+Fonts, only if the fonts are renamed to names not containing either
+the words "Tavmjong Bah" or the word "Arev".
+
+This License becomes null and void to the extent applicable to Fonts
+or Font Software that has been modified and is distributed under the 
+"Tavmjong Bah Arev" names.
+
+The Font Software may be sold as part of a larger software package but
+no copy of one or more of the Font Software typefaces may be sold by
+itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
+TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+
+Except as contained in this notice, the name of Tavmjong Bah shall not
+be used in advertising or otherwise to promote the sale, use or other
+dealings in this Font Software without prior written authorization
+from Tavmjong Bah. For further information, contact: tavmjong @ free
+. fr.
+
+$Id: LICENSE 778 2006-04-20 18:14:24Z moyogo $
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/NEWS	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,789 @@
+Changes from 2.14 to 2.15
+
+- improved hinting in Sans Oblique to deal with some spacing and inconsistency
+  issues (by Ben Laenen)
+- added anchors to Mono Book, and added GPOS rules for combining diacritics to
+  show up as zero width glyphs (by Ben Laenen)
+- removed U+F21C (PUA), it was copy of U+2C64 from Latin Extended C (by Eugeniy
+  Meshcheryakov)
+- added U+27E6-U+27E7 to Sans (by Gee Fung Sit)
+- added U+1407, U+1409, U+140C-U+141B, U+141D-U+1425, U+1427-U+142E,
+  U+1435-U+1438, U+143A-U+1449, U+1452, U+1454, U+1457-U+1465, U+1467-U+146A,
+  U+1471, U+1474-U+1482, U+1484-U+1488, U+148F, U+1492, U+14A0, U+14A2, U+14A9,
+  U+14AC-U+14BA, U+14BC, U+14BD, U+14C6, U+14C9-U+14CF, U+14D1, U+14D2, U+14D9,
+  U+14DC-U+14E9, U+14EC, U+14F3, U+14F6-U+1504, U+1506, U+1507, U+1510-U+1525,
+  U+152C, U+152F-U+153D, U+1540, U+1541, U+154E, U+154F, U+1552, U+155B, U+155C,
+  U+1568, U+1569, U+1574-U+157B, U+157D, U+15A7-U+15AE, U+1646, U+1647 (by
+  Eugeniy Meshcheryakov)
+- fixed several contours to not intersect, use horizontal or vertical tangents,
+  use integer coordinates, etc in Sans Book (by Denis Jacquerye)
+- added U+0496-U+0497 in Serif (by Andrey V. Panov)
+
+Changes from 2.13 to 2.14
+
+- added Philippine peso glyph U+20B1 (by Clayborne Arevalo)
+- made U+2012 have the same width as digits, according to Unicode 5.0, 
+  page 206 (by Roozbeh Pournader)
+- made all of the "above" combining characters remove the dot of "i", 
+  "j", etc (Soft_Dotted characters), according to Unicode 5.0, 
+  page 228 (by Roozbeh Pournader)
+- made U+012F, U+03F3, U+0456, U+0458, U+1E2D, and U+1ECB (all fonts 
+  except Mono), U+0249, U+2148, and U+2149 (Sans and Sans Condensed), 
+  U+0268 (Sans ExtraLight, Serif and Serif Condensed), and U+029D (Serif 
+  and Serif Condensed) respect the Soft_Dotted property (by Roozbeh 
+  Pournader)
+- added U+223E, U+223F, U+2240, U+22C2, U+22C3 to Sans (by Rémy Oudompheng)
+- added U+203D to Serif (by Gee Fung Sit)
+- added zero-width glyphs for U+2061-U+2063 to Sans and Serif (by Gee 
+  Fung Sit)
+- changed isolated forms of Arabic waw (U+0648, U+0624 and U+06C6) (bug #9432) 
+  (by Ben Laenen)
+- added Lao consonants U+0E81, U+0E82, U+0E84, U+0E87, U+0E88, U+0E8A, 
+  U+0E8D, U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA, 
+  U+0EAB, U+0EAD-0EAF to Sans Mono (by Rémy Oudompheng)
+- added U+0200-U+0217, U+0226-U+0229, U+02F3, U+1E00-U+1E07, 
+  U+1E0A-U+1E0B, U+1E18-U+1E1F, U+1E22-U+1E23, U+1E28-U+1E2D, 
+  U+1E3A-U+1E3B, U+1E40, U+1E48-U+1E49, U+1E56, U+1E58-U+1E59, 
+  U+1E5E-U+1E5F, U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, U+1E72-U+1E77, 
+  U+1E86-U+1E8B, U+1E92-U+1E96, U+1EA0-U+1EA1, U+1EF4-U+1EF5 to Mono 
+  (by Ben Laenen)
+- renamed uppercase variants of diacritics (macron, breve, double grave, 
+  double acute, inverted breve, dot above) to "uni03XX.case" in Mono 
+  (by Ben Laenen)
+- moved uppercase variants of diacritics up in Mono so they properly 
+  vertically align on capitals (by Ben Laenen)
+- precomposed glyphs with macron, breve, double grave, double acute, 
+  inverted breve, dot above, macron below, breve below, inverted breve 
+  below, dot below, cedilla, caron below, circumflex below, diaeresis 
+  below, tilde below now reference to combining diacritics instead of 
+  space modifiers in Mono (by Ben Laenen)
+- made ring below (U+0325), and half rings below (U+031C and U+0339) 
+  smaller in Mono (by Ben Laenen)
+- added U+205F to all fonts (by Roozbeh Pournader)
+- added U+035E-U+035F to Sans (by Roozbeh Pournader)
+- added empty glyphs for U+034F, U+202A-U+202E, U+2060, U+206A-206F, 
+  U+FE00-U+FE0F to non-Mono fonts (by Roozbeh Pournader)
+- added U+2101, U+2107-U+2108, U+210B, U+210C, U+2110, U+2112, U+211B, 
+  U+211F, U+2123, U+2125, U+2128-U+2129, U+212C-U+212D, U+212F, 
+  U+2130-U+2131, U+2133, U+2136-U+213A, U+2141-U+2144, U+2B00-U+2B11, 
+  U+2B20-U+2B23 to Sans (by John Karp)
+- reshaped omega (U+03C9) in Mono (by Ben Laenen)
+- added U+2205, U+22C6, U+2300-U+2301, U+2303-U+2306, U+230C-U+230F, 
+  U+2312-U+2315, U+231C-U+231F, U+2335, U+2337-U+233E, U+2341-U+2344, 
+  U+2347-U+2348, U+234B-U+234D, U+2349-U+2350, U+2352-U+2354, 
+  U+2357-U+2359, U+235A-U+235C, U+235E-U+2360, U+2363-U+2365, 
+  U+2368-U+2369, U+236B-U+2370, U+2373-U+237A, U+2380-U+2383, 
+  U+2388-U+238B, U+2395 in Mono (by Ben Laenen)
+
+Changes from 2.12 to 2.13
+
+- adjusted U+0198B, U+01B3-U+01B4 in Sans, hinted U+01B4 in Sans Book 
+  (by Denis Jacquerye)
+- added U+27F0-U+27FF, U+2906-U+2907, U+290A-U+290B, U+2940-U+2941 to Sans 
+  (by Denis Jacquerye)
+- added U+01E6-U+01E9, U+01EE-U+01EF, U+01F4-U+01F5, U+01FC-U+01FF, 
+  U+021E-U+021F, U+0245, U+02BD, U+02C9, U+1E9B, U+2045-U+2046, U+2213, U+22C5,
+  U+22EF to Sans Mono (by Roozbeh Pournader)
+- added U+04FA-U+04FD to Sans (by Michael Everson)
+- removed U+2329 and U+232A because of their CJK properties, added U+27E8 
+  and U+27E9 in their stead, fixing part of bug #9038 (by Roozbeh Pournader)
+- corrected and improvised U+0466-U+0469, U+046E-U+0471, U+047C-U+047D, U+0482, 
+  U+0484-U+0486, U+0492-U+0493, U+04B0-U+04B1, U+050C-U+050D, and U+204A 
+  in Sans (by Michael Everson)
+- added instructions for U+0402, U+0409, U+040A, U+040B, U+044D, U+040F, 
+  U+0452, U+0459-U+045B, U+045F to Sans Book (by Eugeniy Meshcheryakov)
+- made italic shape for U+431, U+432, U+437, U+43B, U+43C, U+43D, U+444, U+447, 
+  U+44D, U+44F, U+459, U+45A in SerifOblique and SerifBoldOblique 
+  (by Andrey V. Panov)
+- modified U+024C to match glyph in Unicode chart, fixing bug #9039 
+  (by Denis Jacquerye)
+- made some canonically equivalent characters share the same glyph: 
+  U+02B9 = U+0374, U+0343 = U+0313, and U+0387 = U+00B7 also adjusting U+02BA 
+  to look like double U+02B9, fixing parts of bug #9038 (by Roozbeh Pournader)
+- changed shapes for U+0478 and U+0479 in Sans to those in the Unicode charts, 
+  based on a recent decision by Unicode Technical Committee to only use 
+  the digraph form (by Michael Everson)
+- adjusted width of NBSP U+00A0 and NNBSP U+202F, fixing bug #8401 
+  (by Denis Jacquerye)
+- fixed several contours to not intersect, use horizontal or vertical tangents, 
+  use integer coordinates, etc (by Roozbeh Pournader and Denis Jacquerye)
+- added U+1402, U+1430, U+144D, U+146C, U+148A, U+14A4, U+14C1, U+14D4, U+14EE, 
+  U+1527, U+1545, U+157E, U+158E, U+15AF to Sans (by Eugeniy Meshcheryakov)
+- enlarged width of U+459 and U+45A in Serif (by Andrey V. Panov)
+- made traditional shape for U+452, U+45B (by Andrey V. Panov)
+- added euro sign U+20AC to Sans ExtraLight, making fontconfig recognize 
+  the font as supporting English (by Denis Jacquerye)
+
+Changes from 2.11 to 2.12
+
+- added U+0180 to Serif (by Denis Jacquerye)
+- improved and/or hinted Armenian letters U+0542, U+0546, U+0562,
+  U+0563, U+0564, U+0577, U+0582 in Sans (by Ben Laenen)
+- added U+4FE-U+4FF, U+512-U+513, U+2114, U+214E, U+26B2 to Sans
+  (by Gee Fung Sit)
+- adjusted U+0496-U+0497, U+049A-U+04A1 in Sans to match U+0416,
+  U+041A, U+0436 and U+043A (by Gee Fung Sit)
+- Mathematical Operators in Sans: changed U+22C0-U+22C1 to match
+  other n-ary operators, adjusted U+2203-U+2204, changed U+2220 in
+  Sans to match the style of U+2221 (by Gee Fung Sit)
+- added U+1401, U+1403-U+1406, U+140A, U+140B, U+1426, U+142F,
+  U+1431-U+1434, U+1438, U+1439, U+1449, U+144A, U+144C,
+  U+144E-U+1451, U+1455, U+1456, U+1466, U+146B, U+146D-U+1470,
+  U+1472, U+1473, U+1483, U+1489, U+148B-U+148E, U+1490, U+1491,
+  U+14A1, U+14A3, U+14A5-U+14A8, U+14AA, U+14AB, U+14BB, U+14C0,
+  U+14C2-U+14C5, U+14C7, U+14C8, U+14D0, U+14D3, U+14D5-U+14D8,
+  U+14DA, U+14DB, U+14EA, U+14ED, U+14EF-U+14F2, U+14F4, U+14F5,
+  U+1405, U+1526, U+1528-U+152B, U+152D, U+152E, U+153E,
+  U+1542-U+1544, U+1546-U+154D, U+1550, U+1553, U+1555-U+155A,
+  U+1567, U+156A, U+157C, U+157F-U+1585, U+158A-U+158D,
+  U+158F-U+1596, U+15A0-U+15A6, U+15DE, U+15E1, U+166E-U+1676 to
+  Sans (by Eugeniy Meshcheryakov)
+- re-enabled Latin ligatures fi, ffi, fl, ffl and ff in Sans
+  (by Ben Laenen)
+- made italic shape for U+436, U+44A, U+44B, U+44C, U+44E, U+45F,
+  U+463 in SerifOblique and SerifBoldOblique (by Andrey V. Panov)
+- fixed sub- and superscript metrics in Condensed Sans (bug #8848)
+  (by Ben Laenen)
+- added U+474, U+475 in Serif (by Andrey V. Panov)
+- hinted Greek glyphs U+03B7, U+30B8, U+03B9, U+03C1, U+03C3,
+  U+03C6 in Mono Book (by Ben Laenen)
+
+Changes from 2.10 to 2.11
+
+- added instructions for Hebrew glyphs (Sans Book, by Eugeniy
+  Meshcheryakov)
+- changed U+01A6 (Latin Yr) after bug #8212, in Sans, Serif and
+  Sans Mono fonts (by Denis Jacquerye).
+- removed instruction for U+2600-U+26A1 (by Mederic Boquien)
+- added U+202F and set width of U+00A0 (nobreakingspace) to the
+  same as U+0020, space (by Denis Jacquerye).
+- added and improved instructions for various Cyrillic letters
+  (by Eugeniy Meshcheryakov)
+- Changed U+416, U+42F, U+427 (non-Bold), U+436, U+447 (non-Bold),
+  U+44F, U+437 (Bold), corrected U+40F, U+414, U+424, U+426, U+429,
+  U+434, U+438 (Bold), U+446, U+449, U+44D (non-Bold), U+45F in
+  Sans Mono (by Andrey V. Panov)
+- made small corrections to Cyrillic, most appreciable to U+409,
+  U+413, U+41B, U+427 and U+433, U+434, U+43B, U+447, U+459
+  (upright fonts) to Serif (by Andrey V. Panov)
+- adjusted bearings of U+410, U+416, U+41A, U+42F, U+436, U+43A,
+  U+443, U+44F in Serif (by Andrey V. Panov)
+- enlarged width of U+44A, U+44B, U+44C, U+463 in Serif
+  (by Andrey V. Panov)
+- added ligature "iacute" as "afii10103" (U+456) "acutecomb" in
+  Serif (by Andrey V. Panov)
+- made italic shape to U+446, U+448, U+449 in Serif (by Andrey V.
+  Panov)
+- added "afii10831" (U+F6C7), "afii10832" (U+F6C8) in Serif (by
+  Andrey V. Panov)
+- new minimum version of fontforge is 20061014 (by Ben Laenen)
+
+Changes from 2.9 to 2.10:
+
+- added U+0242, U+024A-U+024B, U+024E-U+024F, U+037C-U+037D, U+0E3F, 
+  U+1D2C-U+1D2E, U+1D30-U+1D42, U+1D5D-U+1D6A, U+1D78, U+1DB8, 
+  U+2090-U+2094, U+20D0-U+20D1, U+2C60-U+2C66, U+2C6B-U+2C6C, U+2C74 and 
+  U+FB29 to Sans (by Gee Fung Sit)
+- added Lao glyphs : U+0E81-0E82, U+E084, U+0E87-0E88, U+0E8A, U+0E8D, 
+  U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA-0EAB, 
+  U+0EAD-0EB9, U+0EBB-0EBD, U+0EC0-0EC4, U+0EC6, U+0EC8-0ECD, U+0EDC-0EDD 
+  (by Rémy Oudompheng)
+- fixed U+0193 not showing in Windows (bug #7897) (by Ben Laenen)
+- changes to U+222B-222D in Sans Mono (by Rémy Oudompheng)
+- ported the three remaining currency symbols from Arev (U+20B0, 
+  U+20B2-U+20B3), and replaced one (U+20AF) in Sans (by Lars Naesbye 
+  Christensen)
+- corrected U+20A5 in Sans (by Gee Fung Sit)
+- merged Double-Struck Letters from Arev: U+2102, U+210D, U+2115, 
+  U+2119-U+211A, U+2124, U+213C-U+2140 (by Gee Fung Sit)
+- added U+2308-U+230B and U+2329-U+232A to Sans Mono and Serif faces, 
+  fixed incorrect direction of U+2329 in Sans faces, and improved 
+  U+2308-U+230B in Sans faces per Ben Laenen's suggestions (by David 
+  Lawrence Ramsey)
+- added U+06D5 and final form of it (needed for Kurdish) (by Ben Laenen)
+- added two special glyphs U+F000 and U+F001 in Sans Book that show the 
+  current ppem size (horizontal and vertical) (by Ben Laenen)
+- added U+2318 and U+2325 to Sans Mono faces, based on the Sans versions 
+  (by David Lawrence Ramsey)
+- added U+2B14-U+2B1A to all faces except Sans ExtraLight (by David 
+  Lawrence Ramsey)
+- respaced all Geometric Shapes characters in Serif faces to match those 
+  in Sans faces again, respaced U+23CF in Sans, Sans ExtraLight, and 
+  Serif faces to match U+25A0 (or Sans in Sans ExtraLight's case) again, 
+  and respaced U+2B12-U+2B13 in Sans and Serif faces to match U+25A1 
+  again (by David Lawrence Ramsey)
+- corrected width of Modifier Small Letters U+1D43-1D5B in Sans Oblique 
+  and U+1D9B-U+1DBF in Sans Oblique and Sans Bold Oblique (by Gee Fung Sit)
+- added a bunch of glyphs to Sans ExtraLight (see SVN for details) (by 
+  Gee Fung Sit)
+- adjusted Cyrillic descenders in Sans ExtraLight to sync with Sans (by 
+  Gee Fung Sit)
+- added U+0242, U+0245 to Serif (by Gee Fung Sit)
+- replaced the SHPIX routines which gave them bad spacing at certain 
+  sizes in FreeType for A, V, Z, v and z in Sans Bold (by Ben Laenen) 
+
+Changes from 2.8 to 2.9:
+
+- DejaVuSansExtraLight.sfd: changed family name from "DejaVu Sans" to
+  "DejaVu Sans Light" (in case we add a Light weight variant), so legacy
+  apps that understand only 4 styles are happy. (by Denis Jacquerye)
+- added Name ID 16, aka preferred family name, and Name ID 17, aka
+  preferred style name, so contemporary apps that understand more that 4
+  styles can use big fonts families "DejaVu Sans" and "DejaVu Serif". For
+  those, Extralight and Condensed are just styles not different families.
+  (by Denis Jacquerye)
+- added U+22B6-22BD, U+22C0-22C1, U+22D6-22D7 to Sans. (by Remy Oudompheng)
+- added U+037B, U+2184, U+2C67-U+2C6A and U+2C75-U+2C77 to Sans (by Gee
+  Fung Sit)
+- adjusted asteriskmath (U+2217) for consistency with other mathematical
+  operators in Sans (by Ben Laenen)
+- hinted some Armenian capitals in Sans Book (by Ben Laenen)
+- added U+0246 - U+0249 (by Ben Laenen)
+- BUGFIX : swapped U+224E and U+224F, in Sans, Sans Condensed and Sans Mono
+  (by Remy Oudompheng)
+- adjusted U+20B5 (by Mederic Boquien)
+- swapped U+21DA and U+21DB which were in wrong order (by Heikki Lindroos)
+- added U+222E-2233, U+239B-23AD, U+2A00-2A02, U+2A0F-2A1C to Sans (by Remy
+  Oudompheng)
+- added U+239B-23AD to Mono (by Remy Oudompheng)
+- added U+2024-2025 to Serif (by Mederic Boquien)
+- added U+222C-222D, U+2A0C-2A0E to Serif (by Remy Oudompheng)
+- added U+2190-21FF to Mono (by Heikki Lindroos)
+- added Hebrew glyphs - U+05B0-U+05BD, U+05BF-U+05C3, U+05C6, U+05C7,
+  U+05D0-U+05EA, U+05F0-U+05F2, U+FB1F, U+FB20, U+FB2A-U+FB36,
+  U+FB38-U+FB3C, U+FB3E, U+FB40, U+FB41, U+FB43, U+FB44, U+FB46-U+FB4E (by
+  Gee Fung Sit and Eugeniy Meshcheryakov)
+- adjustments for Cyrillic in Sans (by Andrey V. Panov)
+- made italic shape for U+0434, U+0456, U+0457 in SerifOblique and Serif
+  Bold Oblique (by Andrey V. Panov)
+
+Changes from 2.7 to 2.8:
+
+- fixed instructions for U+0423, U+0427, U+0447, U+0448 in Serif, so they
+  look good at large sizes too (by Eugeniy Meshcheryakov)
+- added U+FB00 and U+FB03 to U+FB06 to Serif typefaces (by Heikki Lindroos)
+- added U+26B0-U+26B1, U+2701-U+2704, U+2706-U+2709, U+270C-U+2727, U+2729
+  to U+274B, U+274D, U+274F to U+2752, U+2756, U+2758-U+275E, U+2761 to
+  U+2775 (by Heikki Lindroos)
+- added and improved instructions for Cyrillic letters in Mono and Serif
+  (Book, by Eugeniy Meshcheryakov)
+- rotated U+26B0 (was too small in mono) (by Gee Fung Sit)
+- adjusted U+1EDA-U+1EDD, U+1EE8-U+1EEB, capitals using capital specific
+  accent and moved diacritics to match position on U+00F2 (ograve), etc.
+  (by Denis Jacquerye)
+- added U+20D6, U+20D7 to Sans (by Gee Fung Sit)
+- made Armenian ligatures discretionary since the Firefox ligature problem
+  still isn't fixed (by Ben Laenen)
+- moved Armenian hyphen U+058A to a higher position (bug #7436) (by Ben
+  Laenen)
+- hinted Greek glyphs in Sans Bold (by Ben Laenen)
+- enabled Arabic lam-alif ligatures when diacritics are used (by Ben Laenen)
+
+Changes from 2.6 to 2.7:
+
+- added glyphs needed for Kurdish: U+0695, U+06B5, U+06C6, U+06CE and their
+  init/medi/fina forms in Sans (by Ben Laenen)
+- added U+02CD, U+01F8 - U+01F9, U+1E3E - U+1E3F, U+1E30 - U+1E35, U+1EBC -
+  U+1EBD, U+1EF8 - U+1EF9 (includes glyphs needed for Yoruba, Maori, Guarani
+  and Twi) (by Ben Laenen)
+- added U+22C8-22CC, U+29CE-29D5, U+2A7D-2AA0, U+2AAE-2ABA, U+2AF9-2AFA to
+  Sans (by Remy Oudompheng)
+- adjusted diacritics on Vietnamese, Pinyin and other characters:
+  U+01A0-U+01A1, U+01AF-U+01B0, U+01D5-U+01DC, U+01DE-01E1, U+01FA-U+01FB
+  U+022A-U+022D, U+0230-U+0231, U+1E14-U+1E17, U+1E4C-U+1E53, U+1E78-U+1E7B,
+  U+1EA4-U+1EF1 in Sans (Book, Bold and Oblique) (by Denis Jacquerye)
+- added basic arrows U+2190-U+2193 in Serif, which completes MES-1 compliance
+  for Serif (by Ben Laenen)
+- added U+01E4, U+01E5, U+01FA, U+01FB, U+02BD, U+02C9 and U+02EE to Serif
+  (by Ben Laenen)
+- fixed U+0209 in Serif Bold Oblique (by Ben Laenen)
+- adjusted Box Drawing block characters U+2500-257F in Mono to fit character
+  cell, shifting them up by 416 (Denis Jacquerye)
+- redid U+0194 in Sans (by Ben Laenen)
+- added U+2217-2218, U+2295-22A1 to Mono (by Remy Oudompheng)
+- added U+0462 to Serif (by Andrey V. Panov)
+- added U+226C, U+228C-228E, U+2293-2294, U+22F2-22FF to Sans (by Remy
+  Oudompheng)
+- adjusted U+2208-220D in Sans (by Remy Oudompheng)
+- improved some Cyrillic glyphs in Mono (by Andrey V. Panov), rewritten
+  instructions for changed glyphs (by Eugeniy Meshcheryakov)
+- added U+1E0E-1E0F, U+1E8E-1E8F to Mono fonts (by Denis Jacquerye). (bug
+  #7166)
+- renamed 'Dotabove' to 'Dotaccent' in Mono Sans Oblique to match other fonts
+  (by Denis Jacquerye).
+- added U+200B-U+200F in Sans faces and Serif faces, U+200B and U+200C were
+  in Sans already (by Lars Naesbye Christensen)
+- added U+2601-U+262F, U+263D, U+263E, U+2648-U+265F, U+2668, U+2670-U+268B,
+  U+2690-U+269C, U+26A0, U+26A1, U+2794, U+2798-U+27AF, U+27B1-U+27BE to Mono
+  (by Heikki Lindroos)
+- replaced the references with unshifted ones for both κ U+03BA and к U+043A
+  in Mono Book (by Denis Jacquerye)
+- fixing glyph for U+04ED in Mono Book, consisted only of dieresis (by Andrey
+  V. Panov).
+
+Changes from 2.5 to 2.6:
+
+- redid U+2032 - U+2037, U+2057 based on Arev in Sans (by Gee Fung Sit)
+- added U+0195, corrected U+039E, U+204B in Sans ExtraLight (by Gee Fung Sit)
+- added instructions for some Cyrillic letters in Sans Bold (by Eugeniy
+  Meshcheryakov)
+- added vulgar fractions U+2153-U+215F for Serif, made with references (by
+  Lars Naesbye Christensen)
+- added U+228F-2292, U+2299-22AF, U+22B2-22B5, U+22CD, U+22D8-22ED to Sans
+  (by Remy Oudompheng)
+- added U+2208-220D, U+2238-223D, U+2278-2281, U+228A-228B, U+228F-2292,
+  U+22CD, U+22DA-22E9 to Mono (by Remy Oudompheng)
+- fixed misplaced dot in U+2250 in Mono (by Remy Oudompheng)
+- added instructions for some Cyrillic letters in Mono Book and Bold(by
+  Eugeniy Meshcheryakov)
+- minor changes to U+2241, U+2261-2263, U+22A4, U+22A5 in Sans (by Remy
+  Oudompheng)
+- added hinting instructions to lowercase Armenian glyphs in Sans Book (by
+  Ben Laenen)
+- changed U+2208, U+220B to match U+2209 and U+220C in Sans Bold (by Remy
+  Oudompheng)
+- added Braille patterns U+2800-U+28FF to Sans (by Mederic Boquien)
+- added instructions for some Cyrillic letters in Serif Book (by Eugeniy
+  Meshcheryakov)
+- renamed BoldOblique fonts to Bold Oblique in TTF Name as originally in
+  Bitstream Vera fonts (by Denis Jacquerye)
+- added hinting instructions to some Latin-B Extended and IPA characters in
+  Sans Book (by Denis Jacquerye and Ben Laenen)
+- adjusted bearings, replaced diacritics, hinted hook and horn for
+  Vietnamese in Sans Book (by Denis Jacquerye)
+- made FAX, TM, TEL, etc. discritionary ligatures in Sans and Serif fonts
+  (by Denis Jacquerye)
+- removed ligatures of precomposed characters in Sans and Serif fonts (by
+  Denis Jacquerye)
+- added U+F208, U+F20A, U+F215-F217, U+F21A-F21B, U+F25F in PUA (from SIL's
+  PUA, probably in Unicode 5.0): U+0243, U+0244, U+0245, U+024C, U+024D,
+  U+2C64, (U+2C6D), (U+2C71)
+- modified some glyphs in Serif Oblique to make them more italic (by Denis
+  Jacquerye)
+
+Changes from 2.4 to 2.5:
+
+- fixed excessive kerning bug that occurs with Pango (by Denis Jacquerye)
+- added U+20AF to Sans and Serif (by Lars Naesbye Christensen)
+- regenerated Condensed faces (by Ben Laenen)
+- added U+035C-U+035D to Sans, fixed U+0361 (by Denis Jacquerye)
+- integrated 255 characters from Arev fonts: Latin Extended-B, Spacing
+  Modifiers, Combining Diacritical Marks, Cyrillic, Cyrillic supplement,
+  General Punctuation, Letterlike Symbols, Arrows, Mathematical Operators,
+  Miscellaneous Technical, Dingbats, Alphabetic Presentation Forms (by Denis
+  Jacquerye)
+- added basic Cyrillic and basic Greek to Sans ExtraLight (by Denis Jacquerye)
+- added U+0498, U+049A, U+04AA, U+04AB, U+04AF to Serif (by Eugeniy
+  Meshcheryakov)
+- added U+0494, U+0495, U+0498, U+0499, U+04AA, U+04AB, U+04C3, U+04C4,
+  U+04C7, U+04C8 to Mono (by Eugeniy Meshcheryakov)
+- adjusted weight of U+0256, U+0257, U+0260, U+0272, U+0273, U+0277, U+029B,
+  U+02A0 and modifed  U+028B and U+027A in Mono (by Denis Jacquerye)
+- added U+2000-200A to Mono (by Denis Jacquerye)
+- added vulgar fractions U+2153 - U+215F to Mono (by Gee Fung Sit)
+- adapted metrics of Arabic glyphs so they stay above cut-off height in Sans
+  (by Ben Laenen)
+- fixed mkmk anchors for Arabic diacritics so they stack properly in Sans (by
+  Ben Laenen)
+- fixed weight of lowercase upsilon in Sans Bold, make small adjustment to
+  lowercase omega in Sans (by Ben Laenen)
+- added U+210E (by Mederic Boquien)
+- unslanted U+2201, U+221B and U+221C in Sans Oblique (by Mederic Boquien)
+- added several mathematical relation symbols to Sans and Mono (U+2241-224C,
+  U+2250-2255, U+2260-2269, U+226E-2277, U+2282-2287) modified U+223C to match
+  other tildes, and U+2282-2284 to have the same shape. (by Remy Oudompheng)
+- made U+2234-U+2237 refer to U+2219 instead of U+00B7 in Sans (by Mederic
+  Boquien)
+- added U+2238-223B, U+226A-226B, U+2278-2281, U+2288-228B to Sans (by Remy
+  Oudompheng)
+- unslanted and changed reference of U+22C5 from U+00B7 to U+2219 in Sans (by
+  Mederic Boquien)
+- added U+224D-225F, U+226D, U+22C6 to Sans and unslanted U+2219 in Sans
+  Oblique. (by Remy Oudompheng)
+- added U+224D-225F, U+226D to Mono, shifted U+2266-2269 higher upwards and
+  unslanted U+2219 in Oblique. (by Remy Oudompheng)
+- merged Coptic glyphs from Arev 0.2 (by Lars Naesbye Christensen)
+- fixed and adjusted various Cyrillic glyphs in Serif (by Andrey V. Panov)
+- made fi, fl... ligatures discretionary ligatures (by Ben Laenen)
+
+Changes from 2.3 to 2.4:
+
+- added U+04A2, U+04A3, U+04AC - U+04AF, U+04BA, U+04BB, U+04C0 -
+  U+04C2, U+04CB, U+04CD, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04E8 - U+04F5,
+  U+04F6 - U+04F9 to Mono (by Eugeniy Meshcheryakov)
+- added U+048C, U+048D, U+0494, U+0495, U+049E - U+04A7, U+04AC -
+  U+04AE, U+04B4- U+04B7, U+04BA, U+04BB, U+04C0 - U+04C4, U+04C7, U+04C8,
+  U+04CB, U+04CC, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04EC - U+04F9 to Serif
+  (by Eugeniy Meshcheryakov)
+- added U+2134 to Sans (by Gee Fung Sit)
+- added U+2080 - U+2089 to all faces (by Gee Fung Sit)
+- several minor corrections to Sans (by Gee Fung Sit)
+- major corrections to Sans Condensed (by Gee Fung Sit)
+- corrected Superscripts and Subscripts in Sans (by Gee Fung Sit)
+- corrected anchors of U+0316-U+0319 (by Denis Jacquerye)
+- Verajja integrated (by Stepan Roh)
+- copied U+2328, U+2600, U+2639-U+263C, U+263F-U+2647, U+2660-U+2667,
+  and U+2669-U+266F from Sans to Serif, and copied scaled-down versions of
+  them to Sans Mono (by David Lawrence Ramsey)
+- added U+20B4 to all faces (by Eugeniy Meshcheryakov)
+- added more minor positional adjustments to U+2638 in all faces to
+  match the other miscellaneous symbols in Verajja, and rescale it in Sans
+  Mono so that it looks better (by David Lawrence Ramsey)
+- added U+2242, U+2243 and U+22A4 (by Mederic Boquien)
+- corrected U+2245 in Sans (by Mederic Boquien)
+- added U+0221, U+0234-0236 (by Denis Jacquerye)
+- added in Arabic block to Sans: U+060C, U+0615, U+061B, U+061F, U+0621
+- U+063A, U+0640 - U+0655, U+0660 - U+066F, U+0679 - U+0687, U+0698, U+06A1,
+  U+06A9, U+06AF, U+06BA, U+06BF, U+06CC, U+06F0 - U+06F9 (by Ben Laenen)
+- added in Arabic Presentation Forms A to Sans: U+FB52 - U+FB81, U+FB8A
+- U+FB95, U+FB9E - U+FB9F, U+FBE8 - U+FBE9, U+FBFC - U+FBFF (by Ben Laenen)
+- added complete Arabic Presentation Forms B to Sans: U+FE70 - U+FE74,
+  U+FE76 - U+FEFC, U+FEFF (by Ben Laenen)
+- added complete Greek Extended block to Mono (by Ben Laenen)
+- modified Greek capitals with tonos in Mono (by Ben Laenen)
+- added U+01C4-01CC, U+01D5, U+01DE, U+01E0-U+01E1, U+01E6-U+01E9,
+  U+01EE-U+01F5, U+01F8-U+0217, U+021E-U+021F, U+0226-U+022A, U+022C to Serif
+  (by Denis Jacquerye)
+- adjusted U+043B and U+044F in Serif (by Denis Jacquerye)
+- added U+2000-U+200A (by Denis Jacquerye)
+- added U+1E00-U+1E0B, U+1E0E-U+1E11, U+1E14-U+1E1C, U+1E1E-U+1E23,
+  U+1E26-U+1E2D, U+1E30-U+1E35, U+1E3A-U+1E3B, U+1E3E-U+1E40, U+1E48-U+1E49,
+  U+1E50-U+1E56, U+1E58-U+1E59, U+1E5E-U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F,
+  U+1E72-U+1E7D, U+1E86-U+1E9B, U+1EA0-U+1EA3, U+1EAC-U+1EB7, U+1EBA-U+1EBD,
+  U+1EC6-U+1ECF, U+1ED8-U+1ED9, U+1EE6-U+1EE7, U+1EF4-U+1EF9 to Serif (by
+  Denis Jacquerye)
+- added U+048E, U+048F, U+049C-U+049F, U+04B8, U+04B9, U+04BC-U+04BF,
+  U+04C3, U+04C4 to Sans (by Eugeniy Meshcheryakov)
+- added DejaVu Sans Extra Light (by Denis Jacquerye)
+- Adjusted underline position for (hopefully) improved legibility in
+  Sans, Serif, Mono (Tim May)
+- added auto-generated DejaVu LGC (by Stepan Roh) 
+
+Changes from 2.2 to 2.3:
+
+- fixed bug U+042B and U+044B behave badly in Sans Bold or Oblique (by
+  Keenan Pepper)
+- added and improved TrueType instructions and related settings (by
+  Keenan Pepper)
+- added U+04D0-U+04D7, U+04E6, U+04E7 to Mono (by Eugeniy Meshcheryakov)
+- added U+048A - U+048D, U+0498, U+0499, U+04AA, U+04AB, U+04B0, U+04B1,
+  U+04C0, U+04C9, U+04CA, U+04CE, U+04CD, U+04DA, U+04DB, U+04DE, U+04DF,
+  U+04E2 - U+04E5, U+04EC - U+04F8, U+04F9 to Sans (by Eugeniy Meshcheryakov)
+- added U+04E0, U+04E1 to all faces (by Eugeniy Meshcheryakov)
+- added Greek Extended to Sans and Serif: U+1F00-U+1F15, U+1F18-U+1F1D,
+  U+1F20-U+1F45, U+1F48-U+1F4D, U+1F50-U+1F57, U+1F59, U+1F5B, U+1F5D,
+  U+1F5F-U+1F7D, U+1F80-U+1FB4, U+1FB6-U+1FC4, U+1FC6-U+1FD3, U+1FD6-U+1FDB,
+  U+1FDD-U+1FEF, U+1FF2-U+1FF4, U+1FF6-U+1FFE (by Ben Laenen)
+- added Greek variant letterforms, archaic letters and symbols to Mono:
+  U+03D0-U+03E1, U+03F0-U+03FF (by Ben Laenen)
+- added Armenian block and Armenian ligatures to Sans (U+0531 - U+0556,
+  U+0559 - U+055F, U+0561 - U+0587, U+0589 - U+058A, U+FB13 - U+FB17) (by Ben
+  Laenen)
+- redid some Greek characters in Sans and Mono to make them look better
+  and to correct some errors (by Ben Laenen)
+- added U+27E0 to all faces (by David Lawrence Ramsey)
+- added underscore (U+005F) consistency fixes: extended the Sans Mono
+  and Sans Mono Oblique underscores to touch both horizontal edges, and
+  reduced the height of the Sans Bold Oblique underscore to match the Sans
+  Bold underscore (by David Lawrence Ramsey)
+- added underscore (U+005F) derivatives and consistency fixes for them:
+  made U+0332 a reference to underscore at Denis Jacquerye's suggestion; made
+  U+0333 two references to underscore; made U+033F two references to U+203E;
+  added U+2017 as two references to underscore, and made U+0333 a reference to
+  it; and added U+203E as a reference to underscore, and made U+0305 a
+  reference to it (by David Lawrence Ramsey)
+- added U+201B, U+2220, U+2320-U+2321, U+23AE, U+23CF, all remaining
+  Geometric Shapes glyphs (U+25A0-U+25C9, U+25CB-U+25D7, U+25D9-U+25E5,
+  U+25E7-U+25FF), and U+2B12-U+2B13 to all faces (by David Lawrence Ramsey)
+- added minor positional adjustments to U+2638 in all faces (by David
+  Lawrence Ramsey)
+- added U+201F to Sans Mono and Serif faces (by David Lawrence Ramsey)
+- added U+01B7, U+01F6, U+0464 - U+0465, U+2160 - U+2180, U+2183,
+  U+220A, U+220D, U+2329, U+232A, U+2422, U+27E8 - U+27EB, U+2680 - U+2685 to
+  Sans (by Gee Fung Sit ???)
+- added U+2116 to Sans and Serif (by Gee Fung Sit)
+- changed florin sign U+0192 in Sans (by Gee Fung Sit)
+- added anchor points to some glyphs (by Denis Jacquerye)
+- adjusted height of IPA superscripts U+02B0-02B8, U+02C0-02C1,
+  U+02E0-02E4, U+207F to match with height of U+00B2 (by Denis Jacquerye)
+- added U+0184-U+0185, U+019C, U+019F, U+01A0-U+01A3, U+01A6, U+01AA,
+  U+01AF-U+01B0, U+01B2-U+01B4, U+01B7-U+01B8, U+01BC-U+01BC, U+0224-U+0225,
+  U+023A-U+0240, U+1D16-U+1D17, U+1D1D-U+1D1E, U+1D43-U+1D5B, U+1D7B,
+  U+1D85,U+1D9B-1DB7, U+1DB9-U+1DBF, U+20A6 to all fonts (by Denis Jacquerye)
+- added added U+0182, U+018B, U+018E, U+01A0-U+01A1, U+01B1, U+01B9,
+  U+01C0-U+01C3, U+0238-U+0239, U+1D02, U+1D08-U+1D09, U+1D14, U+1D1F, U+1D77
+  to Serif and Mono (by Denis Jacquerye)
+- added U+0181, U+0183, U+0187-U+0188, U+018A-U+018F, U+0191, U+0193,
+  U+0195-U+019B, U+019D-U+019E, U+01A4-U+01A5, U+01AC-U+01AE, U+01B5-U+01B6,
+  U+01B9, U+01BB, U+01F6 to Serif (by Denis Jacquerye)
+- added U+0181, U+0187-U+0188, U+018A, U+018D, U+018F, U+0191, U+0193,
+  U+0195-U+019F, U+01A4-01A5, U+01AC-01AD, U+01B5-U+01B6, U+1BB, U+01F6,
+  U+01D7-U+01DC, U+0238-U+0239, U+0241 to Mono (by Denis Jacquerye)
+- added to Mono and Serif (by Denis Jacquerye) 
+
+Changes from 2.1 to 2.2:
+
+- reworked the vertical orientation of the Blocks Elements characters
+  in all faces to remove their overly large descenders, in order to fix
+  problems with e.g. terminal emulators (by David Lawrence Ramsey)
+- copied bullet in Sans faces to Serif faces for consistency (by David
+  Lawrence Ramsey)
+- added U+2023, U+25D8, U+25E6, and U+29EB to all faces (by David
+  Lawrence Ramsey)
+- added U+1EB8, U+1EB9, U+1ECA - U+1ECD, U+1EE4, U+1EE5 (by Tim May)
+- added U+01DD, U+02BE, U+02BF, U+02D3 to all, changed U+02D2 in
+  non-Condensed and U+1EE5 in Serif (by Tim May)
+- fixed U+01CE, replacing wrong circumflex by caron (by Denis Jacquerye)
+- added anchor points to some glyphs (by Denis Jacquerye)
+- added U+20B5 (by Denis Jacquerye)
+- added U+0181 - U+0183, U+0187, U+0188, U+018A - U+018D, U+0191,
+  U+0193, U+0195 - U+019B, U+019D, U+019E, U+01A4, U+01A7 - U+01A9, U+01AB -
+  U+01AE, U+01B1, U+01B5, U+01B6, U+01BB, U+01C0 - U+01C3, U+01F1 - U+01F3,
+  U+0238, U+0239, U+1D02, U+1D08, U+1D09, U+1D14, U+1D1F, U+1D77, U+2103,
+  U+2126, U+2127, U+212A, U+212B, U+2132, U+214B, U+2210, U+2217, U+2218,
+  U+2A0C - U+2A0E, U+FB00, U+FB03 and U+FB04 to Sans (by Gee Fung Sit)
+- added U+01A9, U+01C3 and U+2126 to Mono and Serif (by Gee Fung Sit)
+- adjusted bearings of U+028B in Sans (by Gee Fung Sit)
+- added U+018F, U+0494-U+0497, U+04A0-U+04A7, U+04AC-U+04AF,
+  U+04B4-U+04B7, U+04BA-U+04BB, U+04C1-U+04C2, U+04C5-U+04C8, U+04CB-U+04CC,
+  U+04D0-U+04D9, U+04DC-U+04DD, U+04E6-U+04EB to Sans (by Eugeniy
+  Meshcheryakov)
+- replaced with references U+0391-U+0393, U+0395-U+0397, U+0399, U+039A,
+  U+039C, U+039D, U+039F-U+03A1, U+03A4, U+03A5, U+03A7, U+03BF, U+03DC,
+  U+0405, U+0406, U+0408, U+0410, U+0412, U+0415, U+0417, U+041A,
+  U+041C-U+041E, U+0420-U+0422, U+0425, U+0430, U+0435, U+043E, U+0440,
+  U+0441, U+0443, U+0445, U+0455-U+0458 in Serif and Mono (by Eugeniy
+  Meshcheryakov)
+- added U+04D0-U+04D7, U+04E6-U+04EB to Serif (by Eugeniy Meshcheryakov)
+- added U+212A and U+212B to the rest of the faces (by Lars Naesbye
+  Christensen)
+- added U+2318 and U+2325 to Sans and Serif (by Lars Naesbye Christensen)
+- added and improved TrueType instructions and related settings (by
+  Keenan Pepper)
+- completed basic Greek alphabet: added U+0374-U+0375, U+037A, U+037E,
+  U+0384-U+038A, U+038C, U+038E-U+0390, U+03AC-U+03BF, U+03C1-U+03CE (by Ben
+  Laenen)
+- added U+2070 and U+2074-U+2079 (by Mederic Boquien) 
+
+Changes from 2.0 to 2.1:
+
+**# Be aware that names of some TTF files changed since version 2.0.#**
+
+- added U+0323, U+1E0C, U+1E0D, U+1E24, U+1E25, U+1E36 - U+1E39, U+1E42,
+  U+1E43, U+1E46, U+1E47, U+1E5A - U+1E5D, U+1E62, U+1E63, U+1E6C, U+1E6D,
+  U+1E7E, U+1E7F (by Tim May)
+- fixed bug where GNOME applications used Mono Bold Oblique instead of
+  Mono Oblique (by Keenan Pepper)
+- added and improved TrueType instructions and related settings (by
+  Keenan Pepper)
+- added U+1E41, U+1E57, U+1E61 (by Sander Vesik)
+- added U+0189, U+0309, U+0313, U+0314, U+031A, U+031B, U+0327, U+0328,
+  U+032B, U+0333, U+033C (by Denis Jacquerye)
+- adjusted and fixed U+0186, U+0254, U+0291, U+0316 - U+0319, U+031C -
+  U+0320, U+0323 - U+0326, U+0329 - U+032A, U+032C - U+0332, U+0339 - U+033B,
+  U+033E, U+033F (by Denis Jacquerye)
+- fixed U+1E12, U+1E3C, U+1E4A, U+1E70 to have normal below diacritics
+  (by Denis Jacquerye)
+- fixed U+1E82, U+1E84 and U+1EF2 to have uppercase above diacritics (by
+  Denis Jacquerye)
+- added anchor points to some glyphs (by Denis Jacquerye)
+- dropped "-Roman" from font names - affects both internal TTF names and
+  names of generated files (by Stepan Roh)
+- attempt to fix bug Vertical spacing too big for Mono by exchanging
+  LineGap and OS2TypoLinegap values (proofed by Stefan Rank)
+- added Greek capitals U+0391 - U+03A1, U+03A3 - U+03A9, U+03AA, U+03AB
+  in Mono (by Ben Laenen)
+- added the per ten thousand sign U+2031 (by Mederic Boquien)
+- added U+2207, U+221D, U+221F, U+2227 - U+222A, and U+2261 (by David
+  Lawrence Ramsey)
+- new logo (by Gee Fung Sit)
+- added U+0180, U+018E, U+201F, U+2024, U+2025, U+203D, U+2200, U+2203,
+  U+2213, U+222C, U+222D, U+2263 to Sans (by Gee Fung Sit) 
+
+Changes from 1.15 to 2.0:
+
+- "Italized" basic glyphs in all Serif Oblique and their Condensed faces
+  (by David Jez)
+- added and improved TrueType instructions and related settings (by Keenan
+  Pepper)
+- added anchor points to some glyphs (by Denis Jacquerye)
+- many new spacing and combining accents (by Denis Jacquerye)
+- smart substitutions for transforming i and j to dottless form and for
+  using uppercase diacritics (by Denis Jacquerye)
+- fixed remaining erroneously slanted characters in Serif Oblique faces (by
+  David Lawrence Ramsey)
+- copied bullet in Sans faces to Sans Oblique faces for consistency (by
+  David Lawrence Ramsey)
+- added U+203C and U+2047-U+2049 (by David Lawrence Ramsey)
+- added Greek glyphs to Serif (by Ben Laenen, Condensed merge by David Jez)
+- fixed bug LTR glyphs behaving like RTL (by Ben Laenen)
+- fixed wrong glyph directions (by David Jez)
+- fixed repositioned accents in Condensed faces (by David Jez)
+
+Changes from 1.14 to 1.15:
+
+- added and improved TrueType instructions and related settings (by Keenan
+  Pepper)
+- fixed U+2302, U+2319 (by David Lawrence Ramsey)
+- fixed yet another monospace bug (by Stepan Roh)
+- fixed potential "too big ascender/descender" bug (by Stepan Roh)
+- fixed U+026E and U+028E (by Denis Jacquerye)
+- added U+0186, U+0190, U+0300 - U+0304, U+0306 - U+0308, U+030A - U+030C,
+  U+0321, U+0322 (by Denis Jacquerye)
+- added rest of Block Elements: U+2591 - U+2593 (by David Lawrence Ramsey)
+- added U+2311, U+237D and U+2638 (by David Lawrence Ramsey)
+- added U+01CD - U+01D4 (by Denis Jacquerye)
+- fixed accents of U+00F2 - U+00F6 by replacing them with references in Mono
+  Bold (by David Jez)
+- added U+0490, U+0491 (by Eugeniy Meshcheryakov)
+- added hints to U+0404 and U+0454 in Sans (by Eugeniy Meshcheryakov)
+- completed Greek glyphs from U+0370 to U+03CF in Serif (by Ben Laenen)
+- fixed shape of U+0255 in Sans Bold and Sans Bold Oblique (by Denis
+  Jacquerye)
+
+Changes from 1.13 to 1.14:
+
+- fixed bug where Mono faces were not recognized as fixed pitch in Windows
+  by correcting Venda glyphs (by David Jez)
+- added and improved TrueType instructions (by Keenan Pepper)
+- added 6 Uzbekian glyphs (by Mashrab Kuvatov)
+- added Greek glyphs to Sans and Serif, changed pi and omega to fit in (by
+  Ben Laenen)
+- added IPA and related superscript glyphs (by Denis Jacquerye)
+- fixed buggy Venda glyphs (by David Lawrence Ramsey and Stepan Roh)
+- added U+2302, U+2310, U+2319 (by David Lawrence Ramsey)
+- fixed slanted U+00AC in Serif Oblique faces (by David Lawrence Ramsey)
+- added 29 glyphs from Block Elements (by David Lawrence Ramsey)
+
+Changes from 1.12 to 1.13:
+
+- removed all stems (PS hints) (requested by David Jez)
+- added U+01D6, U+01DF, U+022B, U+022D and U+0231 (by Sander Vesik)
+- added 10 Venda glyphs (by Dwayne Bailey)
+- fixed bug when fonts had no name on Microsoft Windows (by Stepan Roh)
+- updated 'missing' glyph U+FFFD (by David Jez)
+- set TTF flag fsType to 'Installable Embedding' (= unrestricted usage)
+  (idea by C. Tiffany)
+
+Changes from 1.11 to 1.12:
+
+- added long s (by James Cloos)
+- prettier comma accent in gcommaaccent (by David Jez)
+- added Hbar, hbar, kgreenlandic, napostrophe, Eng, eng, Tbar, tbar,
+  afii57929 (by David Jez)
+- changed Iogonek, iogonek, IJ, ij to look better (by David Jez)
+- glyph uni0237 renamed to dotlessj (requested by David Jez)
+- fixed accents for dcaron, lcaron, tcaron, Uogonek, uogonek in Serif (by
+  David Jez)
+- added U+2500 - U+257F box drawing glyphs to Sans Mono (by David Jez)
+- fixed accents in Wcircumflex, Ycircumflex and Zdotaccent (by David Jez)
+- extra kerning for F (by Sander Vesik)
+- added 'missing' glyph U+FFFD (by David Jez)
+
+Changes from 1.10 to 1.11:
+
+- kerning updates (by Sander Vesik)
+- added Iogonek, iogonek, IJ, ij, Uogonek, uogonek (from SuSE standard fonts
+  by Adrian Schroeter, SuSE AG)
+- added Gcommaaccent, gcommaaccent, Kcommaaccent, kcommaaccent,
+  Lcommaaccent, lcommaaccent, Ncommaaccent, ncommaaccent, Rcommaaccent,
+  rcommaaccent (by Stepan Roh)
+
+Changes from 1.9 to 1.10:
+
+- added U+022E, U+022F (by Sander Vesik)
+- kerning updates for DejaVu Sans (by Sander Vesik)
+- fixed too wide cyrillic glyphs in DejaVu Sans Mono (by Valentin Stoykov)
+- fixed ligatures bug in Mono (by Stepan Roh)
+
+Changes from 1.8 to 1.9:
+
+- integrated Arev Cyrillics (by Danilo Segan)
+- added U+01EA, U+01EB, U+01EC, U+01ED (by Sander Vesik)
+
+Changes from 1.7 to 1.8:
+
+- fixed accents in Serif Oblique and Serif Bold Oblique (by Stepan Roh)
+
+Changes from 1.6 to 1.7:
+
+- added automatically generated Condensed typefaces (by Stepan Roh)
+
+Changes from 1.5 to 1.6:
+
+- monospace bug fixed (by Stepan Roh)
+- incorrect Bitstream foundry assigned by fontconfig and KDE Font Installer
+fixed (by Stepan Roh)
+- added automatically generated Oblique version of Serif typefaces (by
+Stepan Roh)
+- corrected cyrillic D and d (by Danilo Segan and David Jez)
+- fixed accents position in Oblique version of Serif typefaces (by Danilo
+Segan and Sander Vesik)
+- fixed incorrect computation of OS2Win# fields (by Stepan Roh)
+- added visiblespace U+2423 (by David Jez)
+- fixed 'line height' bug by fixing ascender and descender values (by David
+Jez and Stepan Roh)
+- fixed part of 'worse than Vera' bug (by Peter Cernak)
+- smaller comma accent U+0326 (by David Jez)
+
+Changes from 1.4 to 1.5:
+
+- added Cyrillics (96 characters) and Dcroat to the rest of typefaces (by
+Danilo Segan)
+- fixed bugs in some Cyrillic characters, some of them reported by Sander
+Vesik (by Danilo Segan)
+- added U+0100, U+0101, U+0112, U+0113, U+012A, U+012B, U+014C, U+014D,
+U+016A, U+016B, U+01E2, U+01E3, U+0232 and U+0233 (by Sander Vesik)
+- added Romanian characters (by Misu Moldovan)
+- added U+0108, U+0109, U+010A, U+010B, U+0114, U+0115, U+0116, U+0117,
+U+011C, U+011D, U+0120, U+0121, U+0124, U+0125, U+0128, U+0129, U+012C,
+U+012D, U+0134, U+0135, U+014E, U+014F, U+0150, U+0151, U+015C, U+015D,
+U+0168, U+0169, U+016C, U+016D, U+0170, U+0171 and U+0237 (by James
+Crippen)
+- added U+02BB, U+2010, U+2011, U+2012 and U+2015 (by Stepan Roh)
+
+Changes from 1.3 to 1.4:
+
+- added Polish characters (Aogonek, aogonek, Eogonek, eogonek, Nacute,
+nacute, Sacute, sacute, Zacute, zacute, Zdotaccent, zdotaccent) (by Stepan
+Roh)
+
+Changes from 1.2 to 1.3:
+
+- added Cyrillics (96 characters) and Dcroat to Sans typefaces (by Danilo
+Segan from his BePa fonts)
+
+Changes from 1.1 to 1.2:
+
+- added Ldot, ldot, Wcircumflex, wcircumflex, Ycircumflex, ycircumflex,
+  Wgrave, wgrave, Wacute, wacute, Wdieresis, wdieresis, Ygrave and ygrave
+  (from The Olwen Font Family 0.2 by Dafydd Harries)
+
+Changes from 1.0 to 1.1:
+
+- added Lacute, lacute, Lcaron, lcaron, Racute and racute (by Peter Cernak)
+
+Changes from 0.9.4 to 1.0:
+
+- none, just changed version and updated README
+
+Changes from 0.9.3 to 0.9.4:
+
+- fixed TTF generation (kerning tables were missing)
+
+Changes from 0.9.2 to 0.9.3:
+
+- kerning of added characters
+- proper caron shape for dcaron in Mono (by Ondrej Koala Vacha)
+- minor visual changes
+
+Changes from 0.9.1 to 0.9.2:
+
+- internal bugged version
+
+Changes from 0.9 to 0.9.1:
+
+- proper caron shape for dcaron and tcaron
+- minor visual changes
+
+$Id: NEWS 1587 2007-02-18 16:20:38Z ben_laenen $
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/README	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,59 @@
+DejaVu fonts 2.15 (c)2004-2007 DejaVu fonts team
+-----------------------------------------------
+
+The DejaVu fonts are a font family based on the Bitstream Vera Fonts
+(http://gnome.org/fonts/). Its purpose is to provide a wider range of
+characters (see status.txt for more information) while maintaining the
+original look and feel.
+
+DejaVu fonts are based on Bitstream Vera fonts version 1.10.
+
+Available fonts (Sans = sans serif, Mono = monospaced):
+
+DejaVu Sans Mono
+DejaVu Sans Mono Bold
+DejaVu Sans Mono Bold Oblique
+DejaVu Sans Mono Oblique
+DejaVu Sans
+DejaVu Sans Bold
+DejaVu Sans Bold Oblique
+DejaVu Sans Oblique
+DejaVu Sans ExtraLight (experimental)
+DejaVu Serif
+DejaVu Serif Bold
+DejaVu Serif Bold Oblique (experimental)
+DejaVu Serif Oblique (experimental)
+DejaVu Sans Condensed (experimental)
+DejaVu Sans Condensed Bold (experimental)
+DejaVu Sans Condensed Bold Oblique (experimental)
+DejaVu Sans Condensed Oblique (experimental)
+DejaVu Serif Condensed (experimental)
+DejaVu Serif Condensed Bold (experimental)
+DejaVu Serif Condensed Bold Oblique (experimental)
+DejaVu Serif Condensed Oblique (experimental)
+
+All fonts are also available as derivative called DejaVu LGC with support
+only for Latin, Greek and Cyrillic scripts.
+
+For license information see LICENSE. What's new is described in NEWS. Known
+bugs are in BUGS. All authors are mentioned in AUTHORS.
+
+Fonts are published in source form as SFD files (Spline Font Database from
+FontForge - http://fontforge.sf.net/) and in compiled form as TTF files
+(TrueType fonts).
+
+For more information go to http://dejavu.sourceforge.net/.
+
+Characters from Arev fonts, Copyright (c) 2006 by Tavmjong Bah:
+---------------------------
+U+01ba, U+01bf, U+01f7, U+021c, U+021d, U+0220, U+0222, U+0223,
+U+02b9, U+02ba, U+02bd, U+02c2, U+02c3, U+02c4, U+02c5, U+02d4,
+U+02d5, U+02d7, U+02ec, U+02ed, U+02ee, U+0346-034e, U+0360, U+0362,
+U+03e2-03ef, U+0460-0463, U+0466-0486, U+0488-0489, U+04a8-04a9,
+U+0500-050f, U+2055-205e, U+20B0, U+20B2-20B3, U+2102, U+210D, U+210f,
+U+2111, U+2113, U+2115, U+2118-U+211A, U+211c-211d, U+2124,U+2135,
+U+213C-U+2140, U+2295-2298, U+2308-230b, U+26A2-U+26B1, U+2701-2704,
+U+2706-2709, U+270c-274b, U+2758-275a, U+2761-2775, U+2780-2794,
+U+2798-27af, U+27b1-27be, U+fb05-fb06
+
+$Id: README 1587 2007-02-18 16:20:38Z ben_laenen $
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/langcover.txt	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,187 @@
+This is the language coverage file for DejaVu fonts
+($Id: langcover.txt 1586 2007-02-18 16:07:32Z ben_laenen $)
+
+                                                Sans               Serif              Sans Mono          
+aa     Afar                                     100% (62/62)       100% (62/62)       100% (62/62)      
+ab     Abkhazia                                 100% (90/90)        93% (84/90)        84% (76/90)      
+af     Afrikaans                                100% (69/69)       100% (69/69)       100% (69/69)      
+am     Amharic                                       (0/264)            (0/264)            (0/264)      
+ar     Arabic                                   100% (125/125)          (0/125)            (0/125)      
+ast    Asturian                                 100% (72/72)       100% (72/72)       100% (72/72)      
+ava    Avaric                                   100% (67/67)       100% (67/67)       100% (67/67)      
+ay     Aymara                                   100% (60/60)       100% (60/60)       100% (60/60)      
+az     Azerbaijani                              100% (148/148)      97% (144/148)      97% (144/148)    
+az-ir  Azerbaijani in Iran                      100% (130/130)          (0/130)            (0/130)      
+ba     Bashkir                                  100% (82/82)       100% (82/82)        97% (80/82)      
+bam    Bambara                                  100% (60/60)       100% (60/60)       100% (60/60)      
+be     Byelorussian                             100% (68/68)       100% (68/68)       100% (68/68)      
+bg     Bulgarian                                100% (60/60)       100% (60/60)       100% (60/60)      
+bh     Bihari (Devanagari script)                    (0/68)             (0/68)             (0/68)       
+bho    Bhojpuri (Devanagari script)                  (0/68)             (0/68)             (0/68)       
+bi     Bislama                                  100% (58/58)       100% (58/58)       100% (58/58)      
+bin    Edo or Bini                              100% (78/78)       100% (78/78)       100% (78/78)      
+bn     Bengali                                       (0/89)             (0/89)             (0/89)       
+bo     Tibetan                                       (0/95)             (0/95)             (0/95)       
+br     Breton                                   100% (64/64)       100% (64/64)       100% (64/64)      
+bs     Bosnian                                  100% (62/62)       100% (62/62)       100% (62/62)      
+bua    Buriat (Buryat)                          100% (70/70)       100% (70/70)       100% (70/70)      
+ca     Catalan                                  100% (74/74)       100% (74/74)       100% (74/74)      
+ce     Chechen                                  100% (67/67)       100% (67/67)       100% (67/67)      
+ch     Chamorro                                 100% (58/58)       100% (58/58)       100% (58/58)      
+chm    Mari (Lower Cheremis / Upper Cheremis)   100% (76/76)       100% (76/76)        97% (74/76)      
+chr    Cherokee                                      (0/85)             (0/85)             (0/85)       
+co     Corsican                                 100% (84/84)       100% (84/84)       100% (84/84)      
+cs     Czech                                    100% (82/82)       100% (82/82)       100% (82/82)      
+cu     Old Church Slavonic                      100% (103/103)      80% (83/103)       74% (77/103)     
+cv     Chuvash                                  100% (74/74)       100% (74/74)       100% (74/74)      
+cy     Welsh                                    100% (78/78)       100% (78/78)       100% (78/78)      
+da     Danish                                   100% (70/70)       100% (70/70)       100% (70/70)      
+de     German                                   100% (59/59)       100% (59/59)       100% (59/59)      
+dz     Dzongkha                                      (0/95)             (0/95)             (0/95)       
+el     Greek                                    100% (69/69)       100% (69/69)       100% (69/69)      
+en     English                                  100% (72/72)       100% (72/72)       100% (72/72)      
+eo     Esperanto                                100% (64/64)       100% (64/64)       100% (64/64)      
+es     Spanish                                  100% (66/66)       100% (66/66)       100% (66/66)      
+et     Estonian                                 100% (64/64)       100% (64/64)       100% (64/64)      
+eu     Basque                                   100% (56/56)       100% (56/56)       100% (56/56)      
+fa     Persian                                  100% (129/129)          (0/129)            (0/129)      
+fi     Finnish                                  100% (62/62)       100% (62/62)       100% (62/62)      
+fj     Fijian                                   100% (52/52)       100% (52/52)       100% (52/52)      
+fo     Faroese                                  100% (68/68)       100% (68/68)       100% (68/68)      
+fr     French                                   100% (84/84)       100% (84/84)       100% (84/84)      
+ful    Fulah (Fula)                             100% (62/62)       100% (62/62)       100% (62/62)      
+fur    Friulian                                 100% (66/66)       100% (66/66)       100% (66/66)      
+fy     Frisian                                  100% (75/75)       100% (75/75)       100% (75/75)      
+ga     Irish                                    100% (80/80)       100% (80/80)       100% (80/80)      
+gd     Scots Gaelic                             100% (70/70)       100% (70/70)       100% (70/70)      
+gez    Ethiopic (Geez)                               (0/218)            (0/218)            (0/218)      
+gl     Galician                                 100% (66/66)       100% (66/66)       100% (66/66)      
+gn     Guarani                                  100% (70/70)       100% (70/70)       100% (70/70)      
+gu     Gujarati                                      (0/78)             (0/78)             (0/78)       
+gv     Manx Gaelic                              100% (54/54)       100% (54/54)       100% (54/54)      
+ha     Hausa                                    100% (60/60)       100% (60/60)       100% (60/60)      
+haw    Hawaiian                                 100% (63/63)       100% (63/63)       100% (63/63)      
+he     Hebrew                                   100% (27/27)            (0/27)             (0/27)       
+hi     Hindi (Devanagari script)                     (0/68)             (0/68)             (0/68)       
+ho     Hiri Motu                                100% (52/52)       100% (52/52)       100% (52/52)      
+hr     Croatian                                 100% (62/62)       100% (62/62)       100% (62/62)      
+hu     Hungarian                                100% (70/70)       100% (70/70)       100% (70/70)      
+hy     Armenian                                 100% (77/77)            (0/77)             (0/77)       
+ia     Interlingua                              100% (52/52)       100% (52/52)       100% (52/52)      
+ibo    Igbo                                     100% (58/58)       100% (58/58)       100% (58/58)      
+id     Indonesian                               100% (54/54)       100% (54/54)       100% (54/54)      
+ie     Interlingue                              100% (52/52)       100% (52/52)       100% (52/52)      
+ik     Inupiaq (Inupiak, Eskimo)                100% (68/68)       100% (68/68)       100% (68/68)      
+io     Ido                                      100% (52/52)       100% (52/52)       100% (52/52)      
+is     Icelandic                                100% (70/70)       100% (70/70)       100% (70/70)      
+it     Italian                                  100% (72/72)       100% (72/72)       100% (72/72)      
+iu     Inuktitut                                100% (161/161)          (0/161)            (0/161)      
+ja     Japanese                                      (0/6538)           (0/6538)           (0/6538)     
+ka     Georgian                                      (0/34)             (0/34)             (0/34)       
+kaa    Kara-Kalpak (Karakalpak)                 100% (78/78)       100% (78/78)       100% (78/78)      
+ki     Kikuyu                                   100% (56/56)       100% (56/56)       100% (56/56)      
+kk     Kazakh                                   100% (77/77)       100% (77/77)       100% (77/77)      
+kl     Greenlandic                              100% (81/81)       100% (81/81)       100% (81/81)      
+km     Khmer                                         (0/70)             (0/70)             (0/70)       
+kn     Kannada                                       (0/80)             (0/80)             (0/80)       
+ko     Korean                                        (0/2443)           (0/2443)           (0/2443)     
+kok    Kokani (Devanagari script)                    (0/68)             (0/68)             (0/68)       
+ks     Kashmiri (Devanagari script)                  (0/68)             (0/68)             (0/68)       
+ku     Kurdish                                  100% (64/64)       100% (64/64)       100% (64/64)      
+ku-ir  Kurdish in Iran                          100% (32/32)            (0/32)             (0/32)       
+kum    Kumyk                                    100% (66/66)       100% (66/66)       100% (66/66)      
+kv     Komi (Komi-Permyak/Komi-Siryan)          100% (70/70)       100% (70/70)       100% (70/70)      
+kw     Cornish                                  100% (64/64)       100% (64/64)       100% (64/64)      
+ky     Kirgiz                                   100% (70/70)       100% (70/70)       100% (70/70)      
+la     Latin                                    100% (68/68)       100% (68/68)       100% (68/68)      
+lb     Luxembourgish (Letzeburgesch)            100% (75/75)       100% (75/75)       100% (75/75)      
+lez    Lezghian (Lezgian)                       100% (67/67)       100% (67/67)       100% (67/67)      
+lo     Lao                                       84% (55/65)            (0/65)         43% (28/65)      
+lt     Lithuanian                               100% (70/70)       100% (70/70)       100% (70/70)      
+lv     Latvian                                  100% (78/78)       100% (78/78)       100% (78/78)      
+mg     Malagasy                                 100% (56/56)       100% (56/56)       100% (56/56)      
+mh     Marshallese                              100% (62/62)       100% (62/62)       100% (62/62)      
+mi     Maori                                    100% (64/64)       100% (64/64)       100% (64/64)      
+mk     Macedonian                               100% (42/42)       100% (42/42)       100% (42/42)      
+ml     Malayalam                                     (0/78)             (0/78)             (0/78)       
+mn     Mongolian                                     (0/130)            (0/130)            (0/130)      
+mo     Moldavian                                100% (128/128)     100% (128/128)     100% (128/128)    
+mr     Marathi (Devanagari script)                   (0/68)             (0/68)             (0/68)       
+mt     Maltese                                  100% (72/72)       100% (72/72)       100% (72/72)      
+my     Burmese (Myanmar)                             (0/48)             (0/48)             (0/48)       
+nb     Norwegian Bokmal                         100% (70/70)       100% (70/70)       100% (70/70)      
+nds    Low Saxon                                100% (59/59)       100% (59/59)       100% (59/59)      
+ne     Nepali (Devanagari script)                    (0/68)             (0/68)             (0/68)       
+nl     Dutch                                    100% (82/82)       100% (82/82)       100% (82/82)      
+nn     Norwegian Nynorsk                        100% (76/76)       100% (76/76)       100% (76/76)      
+no     Norwegian (Bokmal)                       100% (70/70)       100% (70/70)       100% (70/70)      
+ny     Chichewa                                 100% (54/54)       100% (54/54)       100% (54/54)      
+oc     Occitan                                  100% (70/70)       100% (70/70)       100% (70/70)      
+om     Oromo or Galla                           100% (52/52)       100% (52/52)       100% (52/52)      
+or     Oriya                                         (0/79)             (0/79)             (0/79)       
+os     Ossetic                                  100% (66/66)       100% (66/66)       100% (66/66)      
+pa     Punjabi (Gurumukhi script)                    (0/63)             (0/63)             (0/63)       
+pl     Polish                                   100% (70/70)       100% (70/70)       100% (70/70)      
+ps-af  Pashto in Afghanistan                     83% (41/49)            (0/49)             (0/49)       
+ps-pk  Pashto in Pakistan                        81% (40/49)            (0/49)             (0/49)       
+pt     Portuguese                               100% (82/82)       100% (82/82)       100% (82/82)      
+rm     Rhaeto-Romance (Romansch)                100% (66/66)       100% (66/66)       100% (66/66)      
+ro     Romanian                                 100% (62/62)       100% (62/62)       100% (62/62)      
+ru     Russian                                  100% (66/66)       100% (66/66)       100% (66/66)      
+sa     Sanskrit (Devanagari script)                  (0/68)             (0/68)             (0/68)       
+sah    Yakut                                    100% (76/76)       100% (76/76)        97% (74/76)      
+sco    Scots                                    100% (56/56)        96% (54/56)        96% (54/56)      
+se     North Sami                               100% (66/66)       100% (66/66)       100% (66/66)      
+sel    Selkup (Ostyak-Samoyed)                  100% (66/66)       100% (66/66)       100% (66/66)      
+sh     Serbo-Croatian                           100% (76/76)       100% (76/76)       100% (76/76)      
+si     Sinhala (Sinhalese)                           (0/77)             (0/77)             (0/77)       
+sk     Slovak                                   100% (86/86)       100% (86/86)       100% (86/86)      
+sl     Slovenian                                100% (62/62)       100% (62/62)       100% (62/62)      
+sm     Samoan                                   100% (53/53)       100% (53/53)       100% (53/53)      
+sma    South Sami                               100% (60/60)       100% (60/60)       100% (60/60)      
+smj    Lule Sami                                100% (60/60)       100% (60/60)       100% (60/60)      
+smn    Inari Sami                               100% (68/68)       100% (68/68)       100% (68/68)      
+sms    Skolt Sami                               100% (80/80)       100% (80/80)        97% (78/80)      
+so     Somali                                   100% (52/52)       100% (52/52)       100% (52/52)      
+sq     Albanian                                 100% (56/56)       100% (56/56)       100% (56/56)      
+sr     Serbian                                  100% (76/76)       100% (76/76)       100% (76/76)      
+sv     Swedish                                  100% (68/68)       100% (68/68)       100% (68/68)      
+sw     Swahili                                  100% (52/52)       100% (52/52)       100% (52/52)      
+syr    Syriac                                        (0/45)             (0/45)             (0/45)       
+ta     Tamil                                         (0/48)             (0/48)             (0/48)       
+te     Telugu                                        (0/80)             (0/80)             (0/80)       
+tg     Tajik                                    100% (78/78)       100% (78/78)        97% (76/78)      
+th     Thai                                       1% (1/87)             (0/87)             (0/87)       
+ti-er  Eritrean Tigrinya                             (0/256)            (0/256)            (0/256)      
+ti-et  Ethiopian Tigrinya                            (0/282)            (0/282)            (0/282)      
+tig    Tigre                                         (0/221)            (0/221)            (0/221)      
+tk     Turkmen                                  100% (74/74)       100% (74/74)        97% (72/74)      
+tl     Tagalog                                       (0/19)             (0/19)             (0/19)       
+tn     Tswana                                   100% (56/56)       100% (56/56)       100% (56/56)      
+to     Tonga                                    100% (53/53)       100% (53/53)       100% (53/53)      
+tr     Turkish                                  100% (70/70)       100% (70/70)       100% (70/70)      
+ts     Tsonga                                   100% (52/52)       100% (52/52)       100% (52/52)      
+tt     Tatar                                    100% (76/76)       100% (76/76)        97% (74/76)      
+tw     Twi                                      100% (73/73)       100% (73/73)       100% (73/73)      
+tyv    Tuvinian                                 100% (70/70)       100% (70/70)       100% (70/70)      
+ug     Uighur                                   100% (125/125)          (0/125)            (0/125)      
+uk     Ukrainian                                100% (72/72)       100% (72/72)       100% (72/72)      
+ur     Urdu                                      94% (137/145)          (0/145)            (0/145)      
+uz     Uzbek                                    100% (68/68)       100% (68/68)       100% (68/68)      
+ven    Venda                                    100% (62/62)       100% (62/62)       100% (62/62)      
+vi     Vietnamese                               100% (194/194)      77% (150/194)      62% (122/194)    
+vo     Volapuk                                  100% (54/54)       100% (54/54)       100% (54/54)      
+vot    Votic                                    100% (62/62)       100% (62/62)       100% (62/62)      
+wa     Walloon                                  100% (70/70)       100% (70/70)       100% (70/70)      
+wen    Sorbian languages (lower and upper)      100% (76/76)       100% (76/76)       100% (76/76)      
+wo     Wolof                                    100% (66/66)       100% (66/66)       100% (66/66)      
+xh     Xhosa                                    100% (52/52)       100% (52/52)       100% (52/52)      
+yap    Yapese                                   100% (58/58)       100% (58/58)       100% (58/58)      
+yi     Yiddish                                  100% (27/27)            (0/27)             (0/27)       
+yo     Yoruba                                   100% (119/119)     100% (119/119)     100% (119/119)    
+zh-cn  Chinese (simplified)                       0% (2/6765)        0% (2/6765)        0% (2/6765)     
+zh-hk  Chinese Hong Kong Supplementary Character Set      (0/2213)           (0/2213)           (0/2213)     
+zh-mo  Chinese in Macau                              (0/13063)          (0/13063)          (0/13063)    
+zh-sg  Chinese in Singapore                       0% (2/6765)        0% (2/6765)        0% (2/6765)     
+zh-tw  Chinese (traditional)                         (0/13063)          (0/13063)          (0/13063)    
+zu     Zulu                                     100% (52/52)       100% (52/52)       100% (52/52)      
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/status.txt	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,4641 @@
+This is the status file for DejaVu fonts
+($Id: status.txt 1586 2007-02-18 16:07:32Z ben_laenen $)
+
+original = present in original Bitstream Vera 1.10
+<version> = added in DejaVu fonts <version>
+
+U+0020 space                original
+U+0021 exclam               original
+U+0022 quotedbl             original
+U+0023 numbersign           original
+U+0024 dollar               original
+U+0025 percent              original
+U+0026 ampersand            original
+U+0027 quotesingle          original
+U+0028 parenleft            original
+U+0029 parenright           original
+U+002a asterisk             original
+U+002b plus                 original
+U+002c comma                original
+U+002d hyphen               original
+U+002e period               original
+U+002f slash                original
+U+0030 zero                 original
+U+0031 one                  original
+U+0032 two                  original
+U+0033 three                original
+U+0034 four                 original
+U+0035 five                 original
+U+0036 six                  original
+U+0037 seven                original
+U+0038 eight                original
+U+0039 nine                 original
+U+003a colon                original
+U+003b semicolon            original
+U+003c less                 original
+U+003d equal                original
+U+003e greater              original
+U+003f question             original
+U+0040 at                   original
+U+0041 A                    original
+U+0042 B                    original
+U+0043 C                    original
+U+0044 D                    original
+U+0045 E                    original
+U+0046 F                    original
+U+0047 G                    original
+U+0048 H                    original
+U+0049 I                    original
+U+004a J                    original
+U+004b K                    original
+U+004c L                    original
+U+004d M                    original
+U+004e N                    original
+U+004f O                    original
+U+0050 P                    original
+U+0051 Q                    original
+U+0052 R                    original
+U+0053 S                    original
+U+0054 T                    original
+U+0055 U                    original
+U+0056 V                    original
+U+0057 W                    original
+U+0058 X                    original
+U+0059 Y                    original
+U+005a Z                    original
+U+005b bracketleft          original
+U+005c backslash            original
+U+005d bracketright         original
+U+005e asciicircum          original
+U+005f underscore           original
+U+0060 grave                original
+U+0061 a                    original
+U+0062 b                    original
+U+0063 c                    original
+U+0064 d                    original
+U+0065 e                    original
+U+0066 f                    original
+U+0067 g                    original
+U+0068 h                    original
+U+0069 i                    original
+U+006a j                    original
+U+006b k                    original
+U+006c l                    original
+U+006d m                    original
+U+006e n                    original
+U+006f o                    original
+U+0070 p                    original
+U+0071 q                    original
+U+0072 r                    original
+U+0073 s                    original
+U+0074 t                    original
+U+0075 u                    original
+U+0076 v                    original
+U+0077 w                    original
+U+0078 x                    original
+U+0079 y                    original
+U+007a z                    original
+U+007b braceleft            original
+U+007c bar                  original
+U+007d braceright           original
+U+007e asciitilde           original
+U+00a0 nonbreakingspace     original
+U+00a1 exclamdown           original
+U+00a2 cent                 original
+U+00a3 sterling             original
+U+00a4 currency             original
+U+00a5 yen                  original
+U+00a6 brokenbar            original
+U+00a7 section              original
+U+00a8 dieresis             original
+U+00a9 copyright            original
+U+00aa ordfeminine          original
+U+00ab guillemotleft        original
+U+00ac logicalnot           original
+U+00ad sfthyphen            original
+U+00ae registered           original
+U+00af macron               original
+U+00b0 degree               original
+U+00b1 plusminus            original
+U+00b2 twosuperior          original
+U+00b3 threesuperior        original
+U+00b4 acute                original
+U+00b5 mu                   original
+U+00b6 paragraph            original
+U+00b7 periodcentered       original
+U+00b8 cedilla              original
+U+00b9 onesuperior          original
+U+00ba ordmasculine         original
+U+00bb guillemotright       original
+U+00bc onequarter           original
+U+00bd onehalf              original
+U+00be threequarters        original
+U+00bf questiondown         original
+U+00c0 Agrave               original
+U+00c1 Aacute               original
+U+00c2 Acircumflex          original
+U+00c3 Atilde               original
+U+00c4 Adieresis            original
+U+00c5 Aring                original
+U+00c6 AE                   original
+U+00c7 Ccedilla             original
+U+00c8 Egrave               original
+U+00c9 Eacute               original
+U+00ca Ecircumflex          original
+U+00cb Edieresis            original
+U+00cc Igrave               original
+U+00cd Iacute               original
+U+00ce Icircumflex          original
+U+00cf Idieresis            original
+U+00d0 Eth                  original
+U+00d1 Ntilde               original
+U+00d2 Ograve               original
+U+00d3 Oacute               original
+U+00d4 Ocircumflex          original
+U+00d5 Otilde               original
+U+00d6 Odieresis            original
+U+00d7 multiply             original
+U+00d8 Oslash               original
+U+00d9 Ugrave               original
+U+00da Uacute               original
+U+00db Ucircumflex          original
+U+00dc Udieresis            original
+U+00dd Yacute               original
+U+00de Thorn                original
+U+00df germandbls           original
+U+00e0 agrave               original
+U+00e1 aacute               original
+U+00e2 acircumflex          original
+U+00e3 atilde               original
+U+00e4 adieresis            original
+U+00e5 aring                original
+U+00e6 ae                   original
+U+00e7 ccedilla             original
+U+00e8 egrave               original
+U+00e9 eacute               original
+U+00ea ecircumflex          original
+U+00eb edieresis            original
+U+00ec igrave               original
+U+00ed iacute               original
+U+00ee icircumflex          original
+U+00ef idieresis            original
+U+00f0 eth                  original
+U+00f1 ntilde               original
+U+00f2 ograve               original
+U+00f3 oacute               original
+U+00f4 ocircumflex          original
+U+00f5 otilde               original
+U+00f6 odieresis            original
+U+00f7 divide               original
+U+00f8 oslash               original
+U+00f9 ugrave               original
+U+00fa uacute               original
+U+00fb ucircumflex          original
+U+00fc udieresis            original
+U+00fd yacute               original
+U+00fe thorn                original
+U+00ff ydieresis            original
+U+0100 Amacron              1.5
+U+0101 amacron              1.5
+U+0102 Abreve               1.5
+U+0103 abreve               1.5
+U+0104 Aogonek              1.4
+U+0105 aogonek              1.4
+U+0106 Cacute               original
+U+0107 cacute               original
+U+0108 Ccircumflex          1.5
+U+0109 ccircumflex          1.5
+U+010a Cdotaccent           1.5
+U+010b cdotaccent           1.5
+U+010c Ccaron               original
+U+010d ccaron               original
+U+010e Dcaron               1.0
+U+010f dcaron               1.0
+U+0110 Dcroat               1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0111 dcroat               original
+U+0112 Emacron              1.5
+U+0113 emacron              1.5
+U+0114 Ebreve               1.5
+U+0115 ebreve               1.5
+U+0116 Edotaccent           1.5
+U+0117 edotaccent           1.5
+U+0118 Eogonek              1.4
+U+0119 eogonek              1.4
+U+011a Ecaron               1.0
+U+011b ecaron               1.0
+U+011c Gcircumflex          1.5
+U+011d gcircumflex          1.5
+U+011e Gbreve               original
+U+011f gbreve               original
+U+0120 Gdotaccent           1.5
+U+0121 gdotaccent           1.5
+U+0122 Gcommaaccent         1.11
+U+0123 gcommaaccent         1.11
+U+0124 Hcircumflex          1.5
+U+0125 hcircumflex          1.5
+U+0126 Hbar                 1.12
+U+0127 hbar                 1.12
+U+0128 Itilde               1.5
+U+0129 itilde               1.5
+U+012a Imacron              1.5
+U+012b imacron              1.5
+U+012c Ibreve               1.5
+U+012d ibreve               1.5
+U+012e Iogonek              1.11
+U+012f iogonek              1.11
+U+0130 Idotaccent           original
+U+0131 dotlessi             original
+U+0132 IJ                   1.11
+U+0133 ij                   1.11
+U+0134 Jcircumflex          1.5
+U+0135 jcircumflex          1.5
+U+0136 Kcommaaccent         1.11
+U+0137 kcommaaccent         1.11
+U+0138 kgreenlandic         1.12
+U+0139 Lacute               1.1
+U+013a lacute               1.1
+U+013b Lcommaaccent         1.11
+U+013c lcommaaccent         1.11
+U+013d Lcaron               1.1
+U+013e lcaron               1.1
+U+013f Ldot                 1.2
+U+0140 ldot                 1.2
+U+0141 Lslash               original
+U+0142 lslash               original
+U+0143 Nacute               1.4
+U+0144 nacute               1.4
+U+0145 Ncommaaccent         1.11
+U+0146 ncommaaccent         1.11
+U+0147 Ncaron               1.0
+U+0148 ncaron               1.0
+U+0149 napostrophe          1.12
+U+014a Eng                  1.12
+U+014b eng                  1.12
+U+014c Omacron              1.5
+U+014d omacron              1.5
+U+014e Obreve               1.5
+U+014f obreve               1.5
+U+0150 Ohungarumlaut        1.5
+U+0151 ohungarumlaut        1.5
+U+0152 OE                   original
+U+0153 oe                   original
+U+0154 Racute               1.1
+U+0155 racute               1.1
+U+0156 Rcommaaccent         1.11
+U+0157 rcommaaccent         1.11
+U+0158 Rcaron               1.0
+U+0159 rcaron               1.0
+U+015a Sacute               1.4
+U+015b sacute               1.4
+U+015c Scircumflex          1.5
+U+015d scircumflex          1.5
+U+015e Scedilla             original
+U+015f scedilla             original
+U+0160 Scaron               original
+U+0161 scaron               original
+U+0162 Tcommaaccent         1.5
+U+0163 tcommaaccent         1.5
+U+0164 Tcaron               1.0
+U+0165 tcaron               1.0
+U+0166 Tbar                 1.12
+U+0167 tbar                 1.12
+U+0168 Utilde               1.5
+U+0169 utilde               1.5
+U+016a Umacron              1.5
+U+016b umacron              1.5
+U+016c Ubreve               1.5
+U+016d ubreve               1.5
+U+016e Uring                1.0
+U+016f uring                1.0
+U+0170 Uhungarumlaut        1.5
+U+0171 uhungarumlaut        1.5
+U+0172 Uogonek              1.11
+U+0173 uogonek              1.11
+U+0174 Wcircumflex          1.2
+U+0175 wcircumflex          1.2
+U+0176 Ycircumflex          1.2
+U+0177 ycircumflex          1.2
+U+0178 Ydieresis            original
+U+0179 Zacute               1.4
+U+017a zacute               1.4
+U+017b Zdotaccent           1.4
+U+017c zdotaccent           1.4
+U+017d Zcaron               original
+U+017e zcaron               original
+U+017f longs                1.12
+U+0180 uni0180              2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.12 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0181 uni0181              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+0182 uni0182              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+0183 uni0183              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+0184 uni0184              2.3
+U+0185 uni0185              2.3
+U+0186 uni0186              1.15
+U+0187 uni0187              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+0188 uni0188              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+0189 uni0189              2.1
+U+018a uni018A              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+018b uni018B              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+018c uni018C              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+018d uni018D              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+018e uni018E              2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+018f uni018F              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+0190 uni0190              1.15
+U+0191 uni0191              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+0192 florin               original
+U+0193 uni0193              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+0194 uni0194              1.14
+U+0195 uni0195              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.6 (Sans ExtraLight)
+U+0196 uni0196              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+0197 uni0197              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+0198 uni0198              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+0199 uni0199              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+019a uni019A              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+019b uni019B              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+019c uni019C              2.3
+U+019d uni019D              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+019e uni019E              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+019f uni019F              2.3
+U+01a0 Ohorn                2.3
+U+01a1 ohorn                2.3
+U+01a2 uni01A2              2.3
+U+01a3 uni01A3              2.3
+U+01a4 uni01A4              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01a5 uni01A5              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01a6 uni01A6              2.3
+U+01a7 uni01A7              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01a8 uni01A8              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01a9 uni01A9              2.2
+U+01aa uni01AA              2.3
+U+01ab uni01AB              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01ac uni01AC              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01ad uni01AD              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01ae uni01AE              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01af Uhorn                2.3
+U+01b0 uhorn                2.3
+U+01b1 uni01B1              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01b2 uni01B2              2.3
+U+01b3 uni01B3              2.3
+U+01b4 uni01B4              2.3
+U+01b5 uni01B5              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01b6 uni01B6              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01b7 uni01B7              2.3
+U+01b8 uni01B8              2.3
+U+01b9 uni01B9              2.3
+U+01ba uni01BA              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+01bb uni01BB              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01bc uni01BC              2.3
+U+01bd uni01BD              2.3
+U+01be uni01BE              2.3
+U+01bf uni01BF              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+01c0 uni01C0              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01c1 uni01C1              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01c2 uni01C2              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+01c3 uni01C3              2.2
+U+01c4 uni01C4              1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01c5 uni01C5              1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01c6 uni01C6              1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01c7 uni01C7              1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01c8 uni01C8              1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01c9 uni01C9              1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01ca uni01CA              1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01cb uni01CB              1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01cc uni01CC              1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01cd uni01CD              1.15
+U+01ce uni01CE              1.15
+U+01cf uni01CF              1.15
+U+01d0 uni01D0              1.15
+U+01d1 uni01D1              1.15
+U+01d2 uni01D2              1.15
+U+01d3 uni01D3              1.15
+U+01d4 uni01D4              1.15
+U+01d5 uni01D5              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01d6 uni01D6              1.13
+U+01d7 uni01D7              2.3
+U+01d8 uni01D8              2.3
+U+01d9 uni01D9              2.3
+U+01da uni01DA              2.3
+U+01db uni01DB              2.3
+U+01dc uni01DC              2.3
+U+01dd uni01DD              2.2
+U+01de uni01DE              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01df uni01DF              1.13
+U+01e0 uni01E0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01e1 uni01E1              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01e2 uni01E2              1.5
+U+01e3 uni01E3              1.5
+U+01e4 uni01E4              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01e5 uni01E5              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01e6 Gcaron               2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+01e7 gcaron               2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+01e8 uni01E8              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+01e9 uni01E9              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+01ea uni01EA              1.9
+U+01eb uni01EB              1.9
+U+01ec uni01EC              1.9
+U+01ed uni01ED              1.9
+U+01ee uni01EE              2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+01ef uni01EF              2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+01f0 uni01F0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono)
+U+01f1 uni01F1              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01f2 uni01F2              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01f3 uni01F3              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01f4 uni01F4              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+01f5 uni01F5              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+01f6 uni01F6              2.3
+U+01f7 uni01F7              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+01f8 uni01F8              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+01f9 uni01F9              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+01fa Aringacute           2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01fb aringacute           2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+01fc AEacute              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+01fd aeacute              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+01fe Oslashacute          2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+01ff oslashacute          2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0200 uni0200              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0201 uni0201              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0202 uni0202              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0203 uni0203              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0204 uni0204              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0205 uni0205              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0206 uni0206              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0207 uni0207              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0208 uni0208              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0209 uni0209              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+020a uni020A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+020b uni020B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+020c uni020C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+020d uni020D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+020e uni020E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+020f uni020F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0210 uni0210              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0211 uni0211              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0212 uni0212              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0213 uni0213              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0214 uni0214              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0215 uni0215              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0216 uni0216              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0217 uni0217              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0218 Scommaaccent         1.5
+U+0219 scommaaccent         1.5
+U+021a uni021A              1.5
+U+021b uni021B              1.5
+U+021c uni021C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+021d uni021D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+021e uni021E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+021f uni021F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0220 uni0220              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0221 uni0221              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0222 uni0222              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0223 uni0223              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0224 uni0224              2.3
+U+0225 uni0225              2.3
+U+0226 uni0226              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0227 uni0227              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0228 uni0228              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0229 uni0229              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+022a uni022A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+022b uni022B              1.13
+U+022c uni022C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+022d uni022D              1.13
+U+022e uni022E              1.10
+U+022f uni022F              1.10
+U+0230 uni0230              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+0231 uni0231              1.13
+U+0232 uni0232              1.5
+U+0233 uni0233              1.5
+U+0234 uni0234              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0235 uni0235              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0236 uni0236              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0237 dotlessj             1.5
+U+0238 uni0238              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight)
+U+0239 uni0239              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight)
+U+023a uni023A              2.3
+U+023b uni023B              2.3
+U+023c uni023C              2.3
+U+023d uni023D              2.3
+U+023e uni023E              2.3
+U+023f uni023F              2.3
+U+0240 uni0240              2.3
+U+0241 uni0241              2.3
+U+0242 uni0242              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+0243 uni0243              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0244 uni0244              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0245 uni0245              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0246 uni0246              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0247 uni0247              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0248 uni0248              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0249 uni0249              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+024a uni024A              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+024b uni024B              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+024c uni024C              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+024d uni024D              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+024e uni024E              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+024f uni024F              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0250 uni0250              1.14
+U+0251 uni0251              1.14
+U+0252 uni0252              1.14
+U+0253 uni0253              1.14
+U+0254 uni0254              1.14
+U+0255 uni0255              1.14
+U+0256 uni0256              1.14
+U+0257 uni0257              1.14
+U+0258 uni0258              1.14
+U+0259 uni0259              1.14
+U+025a uni025A              1.14
+U+025b uni025B              1.14
+U+025c uni025C              1.14
+U+025d uni025D              1.14
+U+025e uni025E              1.14
+U+025f uni025F              1.14
+U+0260 uni0260              1.14
+U+0261 uni0261              1.14
+U+0262 uni0262              1.14
+U+0263 uni0263              1.14
+U+0264 uni0264              1.14
+U+0265 uni0265              1.14
+U+0266 uni0266              1.14
+U+0267 uni0267              1.14
+U+0268 uni0268              1.14
+U+0269 uni0269              1.14
+U+026a uni026A              1.14
+U+026b uni026B              1.14
+U+026c uni026C              1.14
+U+026d uni026D              1.14
+U+026e uni026E              1.14
+U+026f uni026F              1.14
+U+0270 uni0270              1.14
+U+0271 uni0271              1.14
+U+0272 uni0272              1.14
+U+0273 uni0273              1.14
+U+0274 uni0274              1.14
+U+0275 uni0275              1.14
+U+0276 uni0276              1.14
+U+0277 uni0277              1.14
+U+0278 uni0278              1.14
+U+0279 uni0279              1.14
+U+027a uni027A              1.14
+U+027b uni027B              1.14
+U+027c uni027C              1.14
+U+027d uni027D              1.14
+U+027e uni027E              1.14
+U+027f uni027F              1.14
+U+0280 uni0280              1.14
+U+0281 uni0281              1.14
+U+0282 uni0282              1.14
+U+0283 uni0283              1.14
+U+0284 uni0284              1.14
+U+0285 uni0285              1.14
+U+0286 uni0286              1.14
+U+0287 uni0287              1.14
+U+0288 uni0288              1.14
+U+0289 uni0289              1.14
+U+028a uni028A              1.14
+U+028b uni028B              1.14
+U+028c uni028C              1.14
+U+028d uni028D              1.14
+U+028e uni028E              1.14
+U+028f uni028F              1.14
+U+0290 uni0290              1.14
+U+0291 uni0291              1.14
+U+0292 uni0292              1.14
+U+0293 uni0293              1.14
+U+0294 uni0294              1.14
+U+0295 uni0295              1.14
+U+0296 uni0296              1.14
+U+0297 uni0297              1.14
+U+0298 uni0298              1.14
+U+0299 uni0299              1.14
+U+029a uni029A              1.14
+U+029b uni029B              1.14
+U+029c uni029C              1.14
+U+029d uni029D              1.14
+U+029e uni029E              1.14
+U+029f uni029F              1.14
+U+02a0 uni02A0              1.14
+U+02a1 uni02A1              1.14
+U+02a2 uni02A2              1.14
+U+02a3 uni02A3              1.14
+U+02a4 uni02A4              1.14
+U+02a5 uni02A5              1.14
+U+02a6 uni02A6              1.14
+U+02a7 uni02A7              1.14
+U+02a8 uni02A8              1.14
+U+02a9 uni02A9              1.14
+U+02aa uni02AA              1.14
+U+02ab uni02AB              1.14
+U+02ac uni02AC              1.14
+U+02ad uni02AD              1.14
+U+02ae uni02AE              1.14
+U+02af uni02AF              1.14
+U+02b0 uni02B0              1.14
+U+02b1 uni02B1              1.14
+U+02b2 uni02B2              1.14
+U+02b3 uni02B3              1.14
+U+02b4 uni02B4              1.14
+U+02b5 uni02B5              1.14
+U+02b6 uni02B6              1.14
+U+02b7 uni02B7              1.14
+U+02b8 uni02B8              1.14
+U+02b9 uni02B9              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+02ba uni02BA              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+02bb uni02BB              1.5
+U+02bc afii57929            1.12
+U+02bd afii64937            2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+02be uni02BE              2.2
+U+02bf uni02BF              2.2
+U+02c0 uni02C0              1.14
+U+02c1 uni02C1              1.14
+U+02c2 uni02C2              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+02c3 uni02C3              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+02c4 uni02C4              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+02c5 uni02C5              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+02c6 circumflex           original
+U+02c7 caron                original
+U+02c8 uni02C8              2.0
+U+02c9 uni02C9              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+02ca uni02CA              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+02cb uni02CB              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+02cc uni02CC              2.0
+U+02cd uni02CD              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+02ce uni02CE              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+02cf uni02CF              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+02d0 uni02D0              1.14
+U+02d1 uni02D1              1.14
+U+02d2 uni02D2              2.0
+U+02d3 uni02D3              2.2
+U+02d4 uni02D4              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+02d5 uni02D5              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+02d6 uni02D6              2.0
+U+02d7 uni02D7              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+02d8 breve                original
+U+02d9 dotaccent            original
+U+02da ring                 original
+U+02db ogonek               original
+U+02dc tilde                original
+U+02dd hungarumlaut         original
+U+02de uni02DE              2.0
+U+02df uni02DF              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+02e0 uni02E0              1.14
+U+02e1 uni02E1              1.14
+U+02e2 uni02E2              1.14
+U+02e3 uni02E3              1.14
+U+02e4 uni02E4              1.14
+U+02e5 uni02E5              2.0
+U+02e6 uni02E6              2.0
+U+02e7 uni02E7              2.0
+U+02e8 uni02E8              2.0
+U+02e9 uni02E9              2.0
+U+02ec uni02EC              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+02ed uni02ED              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+02ee uni02EE              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+02f3 uni02F3              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+02f7 uni02F7              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+0300 gravecomb            1.15
+U+0301 acutecomb            1.15
+U+0302 uni0302              1.15
+U+0303 tildecomb            1.15
+U+0304 uni0304              1.15
+U+0305 uni0305              2.0
+U+0306 uni0306              1.15
+U+0307 uni0307              1.15
+U+0308 uni0308              1.15
+U+0309 hookabovecomb        2.1
+U+030a uni030A              1.15
+U+030b uni030B              1.15
+U+030c uni030C              1.15
+U+030d uni030D              2.0
+U+030e uni030E              2.0
+U+030f uni030F              2.0
+U+0310 uni0310              2.0
+U+0311 uni0311              2.0
+U+0312 uni0312              1.11
+U+0313 uni0313              2.1
+U+0314 uni0314              2.1
+U+0315 uni0315              2.0
+U+0316 uni0316              2.0
+U+0317 uni0317              2.0
+U+0318 uni0318              2.0
+U+0319 uni0319              2.0
+U+031a uni031A              2.1
+U+031b uni031B              2.1
+U+031c uni031C              2.0
+U+031d uni031D              2.0
+U+031e uni031E              2.0
+U+031f uni031F              2.0
+U+0320 uni0320              2.0
+U+0321 uni0321              1.15
+U+0322 uni0322              1.15
+U+0323 dotbelowcomb         2.1
+U+0324 uni0324              2.0
+U+0325 uni0325              2.0
+U+0326 uni0326              1.5
+U+0327 uni0327              2.1
+U+0328 uni0328              2.1
+U+0329 uni0329              2.0
+U+032a uni032A              2.0
+U+032b uni032B              2.1
+U+032c uni032C              2.0
+U+032d uni032D              2.0
+U+032e uni032E              2.0
+U+032f uni032F              2.0
+U+0330 uni0330              2.0
+U+0331 uni0331              2.0
+U+0332 uni0332              2.0
+U+0333 uni0333              2.1
+U+0334 uni0334              2.3
+U+0335 uni0335              2.3
+U+0336 uni0336              2.3
+U+0337 uni0337              2.3
+U+0338 uni0338              2.3
+U+0339 uni0339              2.0
+U+033a uni033A              2.0
+U+033b uni033B              2.0
+U+033c uni033C              2.1
+U+033d uni033D              2.0
+U+033e uni033E              2.1
+U+033f uni033F              2.1
+U+0340 uni0340              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0341 uni0341              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0342 uni0342              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0343 uni0343              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0344 uni0344              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0345 uni0345              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0346 uni0346              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0347 uni0347              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0348 uni0348              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0349 uni0349              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+034a uni034A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+034b uni034B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+034c uni034C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+034d uni034D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+034e uni034E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+034f uni034F              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0351 uni0351              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0352 uni0352              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique)
+U+0353 uni0353              2.5 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0357 uni0357              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0358 uni0358              2.3
+U+035c uni035C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+035d uni035D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+035e uni035E              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+035f uni035F              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0360 uni0360              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0361 uni0361              2.0
+U+0362 uni0362              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0374 uni0374              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0375 uni0375              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+037a uni037A              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+037b uni037B              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+037c uni037C              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+037d uni037D              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+037e uni037E              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0384 tonos                1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0385 dieresistonos        1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0386 Alphatonos           1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0387 anoteleia            1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0388 Epsilontonos         1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0389 Etatonos             1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+038a Iotatonos            1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+038c Omicrontonos         1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+038e Upsilontonos         1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+038f Omegatonos           1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+0390 iotadieresistonos    1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0391 Alpha                1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0392 Beta                 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0393 Gamma                1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0394 uni0394              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0395 Epsilon              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0396 Zeta                 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0397 Eta                  1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0398 Theta                1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+0399 Iota                 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+039a Kappa                1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+039b Lambda               1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+039c Mu                   1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+039d Nu                   1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+039e Xi                   1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+039f Omicron              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03a0 Pi                   1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03a1 Rho                  1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03a3 Sigma                1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03a4 Tau                  1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03a5 Upsilon              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03a6 Phi                  1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03a7 Chi                  1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03a8 Psi                  1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03a9 Omega                original
+U+03aa Iotadieresis         1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03ab Upsilondieresis      1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03ac alphatonos           1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03ad epsilontonos         1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03ae etatonos             1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03af iotatonos            1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03b0 upsilondieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03b1 alpha                1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03b2 beta                 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03b3 gamma                1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03b4 delta                1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03b5 epsilon              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03b6 zeta                 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03b7 eta                  1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03b8 theta                1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03b9 iota                 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03ba kappa                1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03bb lambda               1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03bc uni03BC              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03bd nu                   1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03be xi                   1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03bf omicron              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03c0 pi                   original
+U+03c1 rho                  1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03c2 sigma1               1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03c3 sigma                1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03c4 tau                  1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03c5 upsilon              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03c6 phi                  1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03c7 chi                  1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03c8 psi                  1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03c9 omega                1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03ca iotadieresis         1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03cb upsilondieresis      1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03cc omicrontonos         1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03cd upsilontonos         1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03ce omegatonos           1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+03d0 uni03D0              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03d1 theta1               1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03d2 Upsilon1             1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03d3 uni03D3              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03d4 uni03D4              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03d5 phi1                 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03d6 omega1               1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03d7 uni03D7              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03d8 uni03D8              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03d9 uni03D9              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03da uni03DA              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03db uni03DB              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03dc uni03DC              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03dd uni03DD              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03de uni03DE              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03df uni03DF              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03e0 uni03E0              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03e1 uni03E1              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03e2 uni03E2              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03e3 uni03E3              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03e4 uni03E4              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03e5 uni03E5              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03e6 uni03E6              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03e7 uni03E7              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03e8 uni03E8              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03e9 uni03E9              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03ea uni03EA              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03eb uni03EB              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03ec uni03EC              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03ed uni03ED              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03ee uni03EE              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03ef uni03EF              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+03f0 uni03F0              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03f1 uni03F1              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03f2 uni03F2              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03f3 uni03F3              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03f4 uni03F4              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03f5 uni03F5              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03f6 uni03F6              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03f7 uni03F7              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03f8 uni03F8              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03f9 uni03F9              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03fa uni03FA              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03fb uni03FB              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03fc uni03FC              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+03fd uni03FD              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03fe uni03FE              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+03ff uni03FF              1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+0400 uni0400              1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0401 afii10023            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0402 afii10051            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0403 afii10052            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0404 afii10053            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0405 afii10054            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0406 afii10055            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0407 afii10056            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0408 afii10057            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0409 afii10058            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+040a afii10059            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+040b afii10060            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+040c afii10061            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+040d uni040D              1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+040e afii10062            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+040f afii10145            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0410 afii10017            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0411 afii10018            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0412 afii10019            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0413 afii10020            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0414 afii10021            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0415 afii10022            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0416 afii10024            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0417 afii10025            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0418 afii10026            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0419 afii10027            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+041a afii10028            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+041b afii10029            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+041c afii10030            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+041d afii10031            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+041e afii10032            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+041f afii10033            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0420 afii10034            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0421 afii10035            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0422 afii10036            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0423 afii10037            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0424 afii10038            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0425 afii10039            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0426 afii10040            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0427 afii10041            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0428 afii10042            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0429 afii10043            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+042a afii10044            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+042b afii10045            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+042c afii10046            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+042d afii10047            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+042e afii10048            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+042f afii10049            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0430 afii10065            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0431 afii10066            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0432 afii10067            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0433 afii10068            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0434 afii10069            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0435 afii10070            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0436 afii10072            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0437 afii10073            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0438 afii10074            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0439 afii10075            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+043a afii10076            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+043b afii10077            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+043c afii10078            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+043d afii10079            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+043e afii10080            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+043f afii10081            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0440 afii10082            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0441 afii10083            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0442 afii10084            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0443 afii10085            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0444 afii10086            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0445 afii10087            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0446 afii10088            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0447 afii10089            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0448 afii10090            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0449 afii10091            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+044a afii10092            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+044b afii10093            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+044c afii10094            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+044d afii10095            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+044e afii10096            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+044f afii10097            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0450 uni0450              1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0451 afii10071            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0452 afii10099            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0453 afii10100            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0454 afii10101            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0455 afii10102            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0456 afii10103            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0457 afii10104            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0458 afii10105            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+0459 afii10106            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+045a afii10107            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+045b afii10108            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+045c afii10109            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+045d uni045D              1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+045e afii10110            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight)
+U+045f afii10193            1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight)
+U+0460 uni0460              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0461 uni0461              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+0462 afii10146            2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0463 afii10194            2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0464 uni0464              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+0465 uni0465              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+0466 uni0466              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0467 uni0467              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0468 uni0468              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0469 uni0469              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+046a uni046A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+046b uni046B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+046c uni046C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+046d uni046D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+046e uni046E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+046f uni046F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0470 uni0470              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+0471 uni0471              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+0472 afii10147            2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight)
+U+0473 afii10195            2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0474 afii10148            2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.12 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0475 afii10196            2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.12 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0476 uni0476              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0477 uni0477              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0478 uni0478              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0479 uni0479              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+047a uni047A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+047b uni047B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+047c uni047C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+047d uni047D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+047e uni047E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+047f uni047F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0480 uni0480              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0481 uni0481              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0482 uni0482              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0483 uni0483              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0484 uni0484              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0485 uni0485              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0486 uni0486              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0487 uni0487              2.9 (Sans, Sans Condensed)
+U+0488 uni0488              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0489 uni0489              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+048a uni048A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+048b uni048B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+048c uni048C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+048d uni048D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+048e uni048E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+048f uni048F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0490 afii10050            1.15
+U+0491 afii10098            1.15
+U+0492 uni0492              1.14
+U+0493 uni0493              1.14
+U+0494 uni0494              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0495 uni0495              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0496 uni0496              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0497 uni0497              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0498 uni0498              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+0499 uni0499              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+049a uni049A              1.14
+U+049b uni049B              1.14
+U+049c uni049C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+049d uni049D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+049e uni049E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+049f uni049F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04a0 uni04A0              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04a1 uni04A1              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04a2 uni04A2              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04a3 uni04A3              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04a4 uni04A4              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight)
+U+04a5 uni04A5              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight)
+U+04a6 uni04A6              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04a7 uni04A7              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04a8 uni04A8              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04a9 uni04A9              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04aa uni04AA              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04ab uni04AB              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04ac uni04AC              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04ad uni04AD              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04ae uni04AE              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04af uni04AF              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04b0 uni04B0              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04b1 uni04B1              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04b2 uni04B2              1.14
+U+04b3 uni04B3              1.14
+U+04b4 uni04B4              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight)
+U+04b5 uni04B5              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight)
+U+04b6 uni04B6              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04b7 uni04B7              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04b8 uni04B8              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04b9 uni04B9              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04ba uni04BA              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+04bb uni04BB              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04bc uni04BC              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04bd uni04BD              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04be uni04BE              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04bf uni04BF              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04c0 uni04C0              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04c1 uni04C1              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+04c2 uni04C2              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+04c3 uni04C3              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+04c4 uni04C4              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+04c5 uni04C5              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04c6 uni04C6              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04c7 uni04C7              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+04c8 uni04C8              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+04c9 uni04C9              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04ca uni04CA              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04cb uni04CB              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04cc uni04CC              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04cd uni04CD              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04ce uni04CE              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04cf uni04CF              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04d0 uni04D0              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+04d1 uni04D1              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+04d2 uni04D2              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+04d3 uni04D3              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+04d4 uni04D4              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+04d5 uni04D5              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+04d6 uni04D6              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+04d7 uni04D7              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+04d8 uni04D8              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04d9 afii10846            2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04da uni04DA              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04db uni04DB              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04dc uni04DC              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+04dd uni04DD              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+04de uni04DE              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04df uni04DF              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04e0 uni04E0              2.3
+U+04e1 uni04E1              2.3
+U+04e2 uni04E2              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04e3 uni04E3              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04e4 uni04E4              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04e5 uni04E5              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04e6 uni04E6              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+04e7 uni04E7              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight)
+U+04e8 uni04E8              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+04e9 uni04E9              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+04ea uni04EA              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+04eb uni04EB              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+04ec uni04EC              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+04ed uni04ED              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+04ee uni04EE              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+04ef uni04EF              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04f0 uni04F0              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+04f1 uni04F1              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04f2 uni04F2              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+04f3 uni04F3              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04f4 uni04F4              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+04f5 uni04F5              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+04f6 uni04F6              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04f7 uni04F7              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04f8 uni04F8              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+04f9 uni04F9              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+04fa uni04FA              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04fb uni04FB              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04fc uni04FC              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04fd uni04FD              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04fe uni04FE              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+04ff uni04FF              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0500 uni0500              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0501 uni0501              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0502 uni0502              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0503 uni0503              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0504 uni0504              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0505 uni0505              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0506 uni0506              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0507 uni0507              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0508 uni0508              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0509 uni0509              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+050a uni050A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+050b uni050B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+050c uni050C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+050d uni050D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+050e uni050E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+050f uni050F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0510 uni0510              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0511 uni0511              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0512 uni0512              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0513 uni0513              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0531 uni0531              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0532 uni0532              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0533 uni0533              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0534 uni0534              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0535 uni0535              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0536 uni0536              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0537 uni0537              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0538 uni0538              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0539 uni0539              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+053a uni053A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+053b uni053B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+053c uni053C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+053d uni053D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+053e uni053E              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+053f uni053F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0540 uni0540              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0541 uni0541              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0542 uni0542              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0543 uni0543              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0544 uni0544              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0545 uni0545              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0546 uni0546              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0547 uni0547              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0548 uni0548              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+0549 uni0549              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+054a uni054A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+054b uni054B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+054c uni054C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+054d uni054D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+054e uni054E              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+054f uni054F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+0550 uni0550              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0551 uni0551              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0552 uni0552              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0553 uni0553              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+0554 uni0554              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0555 uni0555              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+0556 uni0556              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0559 uni0559              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+055a uni055A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+055b uni055B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+055c uni055C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+055d uni055D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+055e uni055E              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+055f uni055F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0561 uni0561              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+0562 uni0562              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0563 uni0563              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0564 uni0564              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0565 uni0565              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0566 uni0566              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0567 uni0567              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0568 uni0568              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0569 uni0569              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+056a uni056A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+056b uni056B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+056c uni056C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+056d uni056D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+056e uni056E              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+056f uni056F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+0570 uni0570              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+0571 uni0571              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0572 uni0572              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0573 uni0573              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0574 uni0574              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0575 uni0575              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+0576 uni0576              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0577 uni0577              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0578 uni0578              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+0579 uni0579              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+057a uni057A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+057b uni057B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+057c uni057C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+057d uni057D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+057e uni057E              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+057f uni057F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+0580 uni0580              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+0581 uni0581              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+0582 uni0582              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0583 uni0583              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+0584 uni0584              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0585 uni0585              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+0586 uni0586              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0587 uni0587              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+0589 uni0589              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+058a uni058A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05b0 afii57799            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05b1 afii57801            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05b2 afii57800            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05b3 afii57802            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05b4 afii57793            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05b5 afii57794            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05b6 afii57795            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05b7 afii57798            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05b8 afii57797            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05b9 afii57806            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05bb afii57796            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05bc afii57807            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05bd afii57839            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05be afii57645            2.9 (Sans Condensed Oblique, Sans Oblique)
+U+05bf afii57841            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05c0 afii57842            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05c1 afii57804            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05c2 afii57803            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05c3 afii57658            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05c6 uni05C6              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05c7 uni05C7              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05d0 afii57664            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05d1 afii57665            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05d2 afii57666            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05d3 afii57667            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05d4 afii57668            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05d5 afii57669            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05d6 afii57670            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05d7 afii57671            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05d8 afii57672            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05d9 afii57673            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05da afii57674            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05db afii57675            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05dc afii57676            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05dd afii57677            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05de afii57678            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05df afii57679            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05e0 afii57680            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05e1 afii57681            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05e2 afii57682            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05e3 afii57683            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05e4 afii57684            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05e5 afii57685            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05e6 afii57686            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05e7 afii57687            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05e8 afii57688            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05e9 afii57689            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05ea afii57690            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05f0 afii57716            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05f1 afii57717            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+05f2 afii57718            2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+060c afii57388            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0615 uni0615              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+061b afii57403            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+061f afii57407            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0621 afii57409            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0622 afii57410            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0623 afii57411            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0624 afii57412            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0625 afii57413            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0626 afii57414            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0627 afii57415            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0628 afii57416            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0629 afii57417            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+062a afii57418            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+062b afii57419            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+062c afii57420            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+062d afii57421            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+062e afii57422            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+062f afii57423            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0630 afii57424            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0631 afii57425            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0632 afii57426            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0633 afii57427            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0634 afii57428            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0635 afii57429            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0636 afii57430            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0637 afii57431            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0638 afii57432            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0639 afii57433            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+063a afii57434            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0640 afii57440            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0641 afii57441            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0642 afii57442            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0643 afii57443            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0644 afii57444            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0645 afii57445            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0646 afii57446            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0647 afii57470            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0648 afii57448            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0649 afii57449            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+064a afii57450            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+064b afii57451            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+064c afii57452            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+064d afii57453            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+064e afii57454            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+064f afii57455            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0650 afii57456            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0651 afii57457            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0652 afii57458            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0653 uni0653              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0654 uni0654              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0655 uni0655              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+065a uni065A              2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0660 afii57392            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0661 afii57393            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0662 afii57394            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0663 afii57395            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0664 afii57396            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0665 afii57397            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0666 afii57398            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0667 afii57399            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0668 afii57400            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0669 afii57401            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+066a afii57381            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+066b uni066B              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+066c uni066C              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+066d afii63167            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+066e uni066E              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+066f uni066F              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0674 uni0674              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans ExtraLight)
+U+0679 afii57511            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+067a uni067A              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+067b uni067B              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+067c uni067C              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+067d uni067D              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+067e afii57506            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+067f uni067F              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0680 uni0680              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0681 uni0681              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0682 uni0682              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0683 uni0683              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0684 uni0684              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0685 uni0685              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0686 afii57507            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0687 uni0687              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0691 afii57513            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0692 uni0692              2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0695 uni0695              2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0698 afii57508            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06a1 uni06A1              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06a4 afii57505            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06a6 uni06A6              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06a9 uni06A9              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06af afii57509            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06b5 uni06B5              2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06ba afii57514            2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06bf uni06BF              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06c6 uni06C6              2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06cc uni06CC              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06ce uni06CE              2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06d5 uni06D5              2.10 (Sans, Sans Bold) 2.11 (Sans Condensed, Sans Condensed Bold)
+U+06f0 uni06F0              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06f1 uni06F1              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06f2 uni06F2              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06f3 uni06F3              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06f4 uni06F4              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06f5 uni06F5              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06f6 uni06F6              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06f7 uni06F7              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06f8 uni06F8              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+06f9 uni06F9              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+0e3f uni0E3F              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0e81 uni0E81              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e82 uni0E82              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e84 uni0E84              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e87 uni0E87              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e88 uni0E88              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e8a uni0E8A              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e8d uni0E8D              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e94 uni0E94              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e95 uni0E95              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e96 uni0E96              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e97 uni0E97              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e99 uni0E99              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e9a uni0E9A              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e9b uni0E9B              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e9c uni0E9C              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e9d uni0E9D              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e9e uni0E9E              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0e9f uni0E9F              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0ea1 uni0EA1              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0ea2 uni0EA2              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0ea3 uni0EA3              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0ea5 uni0EA5              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0ea7 uni0EA7              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0eaa uni0EAA              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0eab uni0EAB              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0ead uni0EAD              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0eae uni0EAE              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0eaf uni0EAF              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+0eb0 uni0EB0              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0eb1 uni0EB1              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0eb2 uni0EB2              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0eb3 uni0EB3              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0eb4 uni0EB4              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0eb5 uni0EB5              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0eb6 uni0EB6              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0eb7 uni0EB7              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0eb8 uni0EB8              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0eb9 uni0EB9              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ebb uni0EBB              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ebc uni0EBC              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ebd uni0EBD              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ec0 uni0EC0              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ec1 uni0EC1              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ec2 uni0EC2              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ec3 uni0EC3              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ec4 uni0EC4              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ec6 uni0EC6              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ec8 uni0EC8              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ec9 uni0EC9              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0eca uni0ECA              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ecb uni0ECB              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ecc uni0ECC              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0ecd uni0ECD              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0edc uni0EDC              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+0edd uni0EDD              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1401 uni1401              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1402 uni1402              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1403 uni1403              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1404 uni1404              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1405 uni1405              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1406 uni1406              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1407 uni1407              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1409 uni1409              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+140a uni140A              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+140b uni140B              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+140c uni140C              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+140d uni140D              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+140e uni140E              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+140f uni140F              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1410 uni1410              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1411 uni1411              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1412 uni1412              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1413 uni1413              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1414 uni1414              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1415 uni1415              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1416 uni1416              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1417 uni1417              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1418 uni1418              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1419 uni1419              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+141a uni141A              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+141b uni141B              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+141d uni141D              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+141e uni141E              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+141f uni141F              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1420 uni1420              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1421 uni1421              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1422 uni1422              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1423 uni1423              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1424 uni1424              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1425 uni1425              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1426 uni1426              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1427 uni1427              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1428 uni1428              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1429 uni1429              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+142a uni142A              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+142b uni142B              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+142c uni142C              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+142d uni142D              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+142e uni142E              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+142f uni142F              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1430 uni1430              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1431 uni1431              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1432 uni1432              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1433 uni1433              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1434 uni1434              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1435 uni1435              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1437 uni1437              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1438 uni1438              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1439 uni1439              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+143a uni143A              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+143b uni143B              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+143c uni143C              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+143d uni143D              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+143e uni143E              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+143f uni143F              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1440 uni1440              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1441 uni1441              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1442 uni1442              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1443 uni1443              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1444 uni1444              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1445 uni1445              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1446 uni1446              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1447 uni1447              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1448 uni1448              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1449 uni1449              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+144a uni144A              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+144c uni144C              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+144d uni144D              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+144e uni144E              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+144f uni144F              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1450 uni1450              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1451 uni1451              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1452 uni1452              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1454 uni1454              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1455 uni1455              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1456 uni1456              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1457 uni1457              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1458 uni1458              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1459 uni1459              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+145a uni145A              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+145b uni145B              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+145c uni145C              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+145d uni145D              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+145e uni145E              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+145f uni145F              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1460 uni1460              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1461 uni1461              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1462 uni1462              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1463 uni1463              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1464 uni1464              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1465 uni1465              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1466 uni1466              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1467 uni1467              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1468 uni1468              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1469 uni1469              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+146a uni146A              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+146b uni146B              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+146c uni146C              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+146d uni146D              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+146e uni146E              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+146f uni146F              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1470 uni1470              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1471 uni1471              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1472 uni1472              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1473 uni1473              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1474 uni1474              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1475 uni1475              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1476 uni1476              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1477 uni1477              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1478 uni1478              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1479 uni1479              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+147a uni147A              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+147b uni147B              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+147c uni147C              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+147d uni147D              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+147e uni147E              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+147f uni147F              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1480 uni1480              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1481 uni1481              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1482 uni1482              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1483 uni1483              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1484 uni1484              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1485 uni1485              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1486 uni1486              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1487 uni1487              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1488 uni1488              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1489 uni1489              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+148a uni148A              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+148b uni148B              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+148c uni148C              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+148d uni148D              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+148e uni148E              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+148f uni148F              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1490 uni1490              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1491 uni1491              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1492 uni1492              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1493 uni1493              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1494 uni1494              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1495 uni1495              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1496 uni1496              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1497 uni1497              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1498 uni1498              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1499 uni1499              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+149a uni149A              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+149b uni149B              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+149c uni149C              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+149d uni149D              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+149e uni149E              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+149f uni149F              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14a0 uni14A0              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14a1 uni14A1              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14a2 uni14A2              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14a3 uni14A3              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14a4 uni14A4              2.13 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.15 (Sans Bold Oblique, Sans Condensed Bold Oblique)
+U+14a5 uni14A5              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14a6 uni14A6              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14a7 uni14A7              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14a8 uni14A8              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14a9 uni14A9              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14aa uni14AA              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14ab uni14AB              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14ac uni14AC              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14ad uni14AD              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14ae uni14AE              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14af uni14AF              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14b0 uni14B0              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14b1 uni14B1              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14b2 uni14B2              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14b3 uni14B3              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14b4 uni14B4              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14b5 uni14B5              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14b6 uni14B6              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14b7 uni14B7              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14b8 uni14B8              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14b9 uni14B9              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14ba uni14BA              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14bb uni14BB              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14bc uni14BC              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14bd uni14BD              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14c0 uni14C0              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14c1 uni14C1              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14c2 uni14C2              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14c3 uni14C3              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14c4 uni14C4              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14c5 uni14C5              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14c6 uni14C6              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14c7 uni14C7              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14c8 uni14C8              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14c9 uni14C9              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14ca uni14CA              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14cb uni14CB              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14cc uni14CC              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14cd uni14CD              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14ce uni14CE              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14cf uni14CF              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14d0 uni14D0              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14d1 uni14D1              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14d2 uni14D2              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14d3 uni14D3              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14d4 uni14D4              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14d5 uni14D5              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14d6 uni14D6              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14d7 uni14D7              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14d8 uni14D8              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14d9 uni14D9              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14da uni14DA              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14db uni14DB              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14dc uni14DC              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14dd uni14DD              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14de uni14DE              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14df uni14DF              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14e0 uni14E0              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14e1 uni14E1              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14e2 uni14E2              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14e3 uni14E3              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14e4 uni14E4              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14e5 uni14E5              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14e6 uni14E6              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14e7 uni14E7              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14e8 uni14E8              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14e9 uni14E9              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14ea uni14EA              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14ec uni14EC              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14ed uni14ED              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14ee uni14EE              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14ef uni14EF              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14f0 uni14F0              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14f1 uni14F1              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14f2 uni14F2              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14f3 uni14F3              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14f4 uni14F4              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14f5 uni14F5              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14f6 uni14F6              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14f7 uni14F7              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14f8 uni14F8              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14f9 uni14F9              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14fa uni14FA              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14fb uni14FB              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14fc uni14FC              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14fd uni14FD              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14fe uni14FE              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+14ff uni14FF              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1500 uni1500              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1501 uni1501              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1502 uni1502              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1503 uni1503              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1504 uni1504              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1505 uni1505              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1506 uni1506              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1507 uni1507              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1510 uni1510              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1511 uni1511              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1512 uni1512              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1513 uni1513              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1514 uni1514              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1515 uni1515              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1516 uni1516              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1517 uni1517              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1518 uni1518              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1519 uni1519              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+151a uni151A              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+151b uni151B              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+151c uni151C              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+151d uni151D              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+151e uni151E              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+151f uni151F              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1520 uni1520              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1521 uni1521              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1522 uni1522              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1523 uni1523              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1524 uni1524              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1525 uni1525              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1526 uni1526              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1527 uni1527              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1528 uni1528              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1529 uni1529              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+152a uni152A              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+152b uni152B              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+152c uni152C              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+152d uni152D              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+152e uni152E              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+152f uni152F              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1530 uni1530              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1531 uni1531              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1532 uni1532              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1533 uni1533              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1534 uni1534              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1535 uni1535              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1536 uni1536              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1537 uni1537              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1538 uni1538              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1539 uni1539              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+153a uni153A              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+153b uni153B              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+153c uni153C              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+153d uni153D              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+153e uni153E              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1540 uni1540              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1541 uni1541              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1542 uni1542              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1543 uni1543              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1544 uni1544              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1545 uni1545              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1546 uni1546              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1547 uni1547              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1548 uni1548              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1549 uni1549              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+154a uni154A              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+154b uni154B              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+154c uni154C              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+154d uni154D              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+154e uni154E              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+154f uni154F              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1550 uni1550              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1552 uni1552              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1553 uni1553              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1554 uni1554              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1555 uni1555              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1556 uni1556              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1557 uni1557              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1558 uni1558              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1559 uni1559              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+155a uni155A              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+155b uni155B              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+155c uni155C              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+155d uni155D              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+155e uni155E              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+155f uni155F              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1560 uni1560              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1561 uni1561              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1562 uni1562              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1563 uni1563              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1564 uni1564              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1565 uni1565              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1566 uni1566              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1567 uni1567              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1568 uni1568              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1569 uni1569              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+156a uni156A              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1574 uni1574              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1575 uni1575              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1576 uni1576              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1577 uni1577              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1578 uni1578              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1579 uni1579              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+157a uni157A              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+157b uni157B              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+157c uni157C              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+157d uni157D              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+157e uni157E              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+157f uni157F              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1580 uni1580              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1581 uni1581              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1582 uni1582              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1583 uni1583              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1584 uni1584              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1585 uni1585              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+158a uni158A              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+158b uni158B              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+158c uni158C              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+158d uni158D              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+158e uni158E              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+158f uni158F              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1590 uni1590              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1591 uni1591              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1592 uni1592              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1593 uni1593              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1594 uni1594              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1595 uni1595              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1596 uni1596              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15a0 uni15A0              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15a1 uni15A1              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15a2 uni15A2              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15a3 uni15A3              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15a4 uni15A4              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15a5 uni15A5              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15a6 uni15A6              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15a7 uni15A7              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15a8 uni15A8              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15a9 uni15A9              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15aa uni15AA              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15ab uni15AB              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15ac uni15AC              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15ad uni15AD              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15ae uni15AE              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15af uni15AF              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15de uni15DE              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+15e1 uni15E1              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1646 uni1646              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1647 uni1647              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+166e uni166E              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+166f uni166F              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1670 uni1670              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1671 uni1671              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1672 uni1672              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1673 uni1673              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1674 uni1674              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1675 uni1675              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1676 uni1676              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d00 uni1D00              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d01 uni1D01              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d02 uni1D02              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+1d03 uni1D03              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d04 uni1D04              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d05 uni1D05              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d06 uni1D06              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d07 uni1D07              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d08 uni1D08              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1d09 uni1D09              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+1d0a uni1D0A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d0b uni1D0B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d0c uni1D0C              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d0d uni1D0D              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d0e uni1D0E              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d0f uni1D0F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d10 uni1D10              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d11 uni1D11              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d12 uni1D12              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d13 uni1D13              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d14 uni1D14              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+1d16 uni1D16              2.3
+U+1d17 uni1D17              2.3
+U+1d18 uni1D18              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d19 uni1D19              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d1a uni1D1A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d1b uni1D1B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d1c uni1D1C              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d1d uni1D1D              2.3
+U+1d1e uni1D1E              2.3
+U+1d1f uni1D1F              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1d20 uni1D20              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d21 uni1D21              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d22 uni1D22              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d23 uni1D23              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d26 uni1D26              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d27 uni1D27              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d28 uni1D28              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+1d29 uni1D29              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d2a uni1D2A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d2b uni1D2B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1d2c uni1D2C              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d2d uni1D2D              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d2e uni1D2E              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d30 uni1D30              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d31 uni1D31              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d32 uni1D32              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d33 uni1D33              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d34 uni1D34              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d35 uni1D35              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d36 uni1D36              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d37 uni1D37              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d38 uni1D38              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d39 uni1D39              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d3a uni1D3A              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d3b uni1D3B              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d3c uni1D3C              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d3d uni1D3D              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d3e uni1D3E              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d3f uni1D3F              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d40 uni1D40              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d41 uni1D41              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d42 uni1D42              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d43 uni1D43              2.3
+U+1d44 uni1D44              2.3
+U+1d45 uni1D45              2.3
+U+1d46 uni1D46              2.3
+U+1d47 uni1D47              2.3
+U+1d48 uni1D48              2.3
+U+1d49 uni1D49              2.3
+U+1d4a uni1D4A              2.3
+U+1d4b uni1D4B              2.3
+U+1d4c uni1D4C              2.3
+U+1d4d uni1D4D              2.3
+U+1d4e uni1D4E              2.3
+U+1d4f uni1D4F              2.3
+U+1d50 uni1D50              2.3
+U+1d51 uni1D51              2.3
+U+1d52 uni1D52              2.3
+U+1d53 uni1D53              2.3
+U+1d54 uni1D54              2.3
+U+1d55 uni1D55              2.3
+U+1d56 uni1D56              2.3
+U+1d57 uni1D57              2.3
+U+1d58 uni1D58              2.3
+U+1d59 uni1D59              2.3
+U+1d5a uni1D5A              2.3
+U+1d5b uni1D5B              2.3
+U+1d5c uni1D5C              2.10 (Sans Oblique) 2.11 (Sans Condensed Oblique)
+U+1d5d uni1D5D              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d5e uni1D5E              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d5f uni1D5F              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d60 uni1D60              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d61 uni1D61              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d62 uni1D62              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d63 uni1D63              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d64 uni1D64              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d65 uni1D65              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d66 uni1D66              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d67 uni1D67              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d68 uni1D68              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d69 uni1D69              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d6a uni1D6A              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d77 uni1D77              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+1d78 uni1D78              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1d7b uni1D7B              2.3
+U+1d85 uni1D85              2.3
+U+1d9b uni1D9B              2.3
+U+1d9c uni1D9C              2.3
+U+1d9d uni1D9D              2.3
+U+1d9e uni1D9E              2.3
+U+1d9f uni1D9F              2.3
+U+1da0 uni1DA0              2.3
+U+1da1 uni1DA1              2.3
+U+1da2 uni1DA2              2.3
+U+1da3 uni1DA3              2.3
+U+1da4 uni1DA4              2.3
+U+1da5 uni1DA5              2.3
+U+1da6 uni1DA6              2.3
+U+1da7 uni1DA7              2.3
+U+1da8 uni1DA8              2.3
+U+1da9 uni1DA9              2.3
+U+1daa uni1DAA              2.3
+U+1dab uni1DAB              2.3
+U+1dac uni1DAC              2.3
+U+1dad uni1DAD              2.3
+U+1dae uni1DAE              2.3
+U+1daf uni1DAF              2.3
+U+1db0 uni1DB0              2.3
+U+1db1 uni1DB1              2.3
+U+1db2 uni1DB2              2.3
+U+1db3 uni1DB3              2.3
+U+1db4 uni1DB4              2.3
+U+1db5 uni1DB5              2.3
+U+1db6 uni1DB6              2.3
+U+1db7 uni1DB7              2.3
+U+1db8 uni1DB8              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+1db9 uni1DB9              2.3
+U+1dba uni1DBA              2.3
+U+1dbb uni1DBB              2.3
+U+1dbc uni1DBC              2.3
+U+1dbd uni1DBD              2.3
+U+1dbe uni1DBE              2.3
+U+1dbf uni1DBF              2.3
+U+1dc4 uni1DC4              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1dc5 uni1DC5              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1dc6 uni1DC6              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1dc7 uni1DC7              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1dc8 uni1DC8              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1dc9 uni1DC9              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+1e00 uni1E00              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e01 uni1E01              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e02 uni1E02              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e03 uni1E03              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e04 uni1E04              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e05 uni1E05              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e06 uni1E06              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e07 uni1E07              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e08 uni1E08              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e09 uni1E09              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e0a uni1E0A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e0b uni1E0B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e0c uni1E0C              2.1
+U+1e0d uni1E0D              2.1
+U+1e0e uni1E0E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e0f uni1E0F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e10 uni1E10              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e11 uni1E11              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e12 uni1E12              1.13
+U+1e13 uni1E13              1.13
+U+1e14 uni1E14              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1e15 uni1E15              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1e16 uni1E16              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1e17 uni1E17              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1e18 uni1E18              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e19 uni1E19              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e1a uni1E1A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e1b uni1E1B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e1c uni1E1C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e1d uni1E1D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e1e uni1E1E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e1f uni1E1F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e20 uni1E20              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e21 uni1E21              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e22 uni1E22              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e23 uni1E23              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e24 uni1E24              2.1
+U+1e25 uni1E25              2.1
+U+1e26 uni1E26              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e27 uni1E27              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e28 uni1E28              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e29 uni1E29              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e2a uni1E2A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e2b uni1E2B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e2c uni1E2C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e2d uni1E2D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e2e uni1E2E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1e2f uni1E2F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1e30 uni1E30              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e31 uni1E31              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e32 uni1E32              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e33 uni1E33              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e34 uni1E34              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e35 uni1E35              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e36 uni1E36              2.1
+U+1e37 uni1E37              2.1
+U+1e38 uni1E38              2.1
+U+1e39 uni1E39              2.1
+U+1e3a uni1E3A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e3b uni1E3B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e3c uni1E3C              1.13
+U+1e3d uni1E3D              1.13
+U+1e3e uni1E3E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e3f uni1E3F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e40 uni1E40              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e41 uni1E41              2.1
+U+1e42 uni1E42              2.1
+U+1e43 uni1E43              2.1
+U+1e44 uni1E44              1.13
+U+1e45 uni1E45              1.13
+U+1e46 uni1E46              2.1
+U+1e47 uni1E47              2.1
+U+1e48 uni1E48              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e49 uni1E49              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e4a uni1E4A              1.13
+U+1e4b uni1E4B              1.13
+U+1e4c uni1E4C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1e4d uni1E4D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1e4e uni1E4E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1e4f uni1E4F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1e50 uni1E50              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1e51 uni1E51              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1e52 uni1E52              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1e53 uni1E53              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1e54 uni1E54              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e55 uni1E55              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e56 uni1E56              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e57 uni1E57              2.1
+U+1e58 uni1E58              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e59 uni1E59              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e5a uni1E5A              2.1
+U+1e5b uni1E5B              2.1
+U+1e5c uni1E5C              2.1
+U+1e5d uni1E5D              2.1
+U+1e5e uni1E5E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e5f uni1E5F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e60 uni1E60              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e61 uni1E61              2.1
+U+1e62 uni1E62              2.1
+U+1e63 uni1E63              2.1
+U+1e64 uni1E64              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1e65 uni1E65              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1e66 uni1E66              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1e67 uni1E67              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1e68 uni1E68              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e69 uni1E69              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e6a uni1E6A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e6b uni1E6B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e6c uni1E6C              2.1
+U+1e6d uni1E6D              2.1
+U+1e6e uni1E6E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e6f uni1E6F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e70 uni1E70              1.13
+U+1e71 uni1E71              1.13
+U+1e72 uni1E72              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e73 uni1E73              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e74 uni1E74              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e75 uni1E75              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e76 uni1E76              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e77 uni1E77              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e78 uni1E78              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1e79 uni1E79              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1e7a uni1E7A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1e7b uni1E7B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1e7c uni1E7C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e7d uni1E7D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e7e uni1E7E              2.1
+U+1e7f uni1E7F              2.1
+U+1e80 Wgrave               1.2
+U+1e81 wgrave               1.2
+U+1e82 Wacute               1.2
+U+1e83 wacute               1.2
+U+1e84 Wdieresis            1.2
+U+1e85 wdieresis            1.2
+U+1e86 uni1E86              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e87 uni1E87              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e88 uni1E88              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e89 uni1E89              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e8a uni1E8A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e8b uni1E8B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e8c uni1E8C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e8d uni1E8D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e8e uni1E8E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e8f uni1E8F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e90 uni1E90              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e91 uni1E91              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e92 uni1E92              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e93 uni1E93              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e94 uni1E94              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e95 uni1E95              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e96 uni1E96              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1e97 uni1E97              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e98 uni1E98              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e99 uni1E99              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1e9a uni1E9A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight)
+U+1e9b uni1E9B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1ea0 uni1EA0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1ea1 uni1EA1              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1ea2 uni1EA2              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1ea3 uni1EA3              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1ea4 uni1EA4              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ea5 uni1EA5              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ea6 uni1EA6              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ea7 uni1EA7              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ea8 uni1EA8              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ea9 uni1EA9              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1eaa uni1EAA              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1eab uni1EAB              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1eac uni1EAC              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1ead uni1EAD              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1eae uni1EAE              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1eaf uni1EAF              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1eb0 uni1EB0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1eb1 uni1EB1              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1eb2 uni1EB2              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1eb3 uni1EB3              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1eb4 uni1EB4              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1eb5 uni1EB5              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1eb6 uni1EB6              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1eb7 uni1EB7              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1eb8 uni1EB8              2.2
+U+1eb9 uni1EB9              2.2
+U+1eba uni1EBA              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1ebb uni1EBB              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1ebc uni1EBC              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1ebd uni1EBD              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1ebe uni1EBE              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ebf uni1EBF              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ec0 uni1EC0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ec1 uni1EC1              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ec2 uni1EC2              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ec3 uni1EC3              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ec4 uni1EC4              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ec5 uni1EC5              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ec6 uni1EC6              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1ec7 uni1EC7              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1ec8 uni1EC8              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1ec9 uni1EC9              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1eca uni1ECA              2.2
+U+1ecb uni1ECB              2.2
+U+1ecc uni1ECC              2.2
+U+1ecd uni1ECD              2.2
+U+1ece uni1ECE              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1ecf uni1ECF              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1ed0 uni1ED0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ed1 uni1ED1              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ed2 uni1ED2              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ed3 uni1ED3              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ed4 uni1ED4              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ed5 uni1ED5              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ed6 uni1ED6              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ed7 uni1ED7              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ed8 uni1ED8              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1ed9 uni1ED9              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+1eda uni1EDA              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1edb uni1EDB              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1edc uni1EDC              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1edd uni1EDD              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1ede uni1EDE              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1edf uni1EDF              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1ee0 uni1EE0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1ee1 uni1EE1              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1ee2 uni1EE2              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1ee3 uni1EE3              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1ee4 uni1EE4              2.2
+U+1ee5 uni1EE5              2.2
+U+1ee6 uni1EE6              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1ee7 uni1EE7              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1ee8 uni1EE8              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1ee9 uni1EE9              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1eea uni1EEA              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1eeb uni1EEB              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1eec uni1EEC              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1eed uni1EED              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+1eee uni1EEE              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1eef uni1EEF              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1ef0 uni1EF0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1ef1 uni1EF1              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+1ef2 Ygrave               1.2
+U+1ef3 ygrave               1.2
+U+1ef4 uni1EF4              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1ef5 uni1EF5              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1ef6 uni1EF6              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1ef7 uni1EF7              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight)
+U+1ef8 uni1EF8              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1ef9 uni1EF9              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1f00 uni1F00              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f01 uni1F01              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f02 uni1F02              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f03 uni1F03              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f04 uni1F04              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f05 uni1F05              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f06 uni1F06              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f07 uni1F07              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f08 uni1F08              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f09 uni1F09              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f0a uni1F0A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f0b uni1F0B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f0c uni1F0C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f0d uni1F0D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f0e uni1F0E              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f0f uni1F0F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f10 uni1F10              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f11 uni1F11              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f12 uni1F12              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f13 uni1F13              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f14 uni1F14              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f15 uni1F15              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f18 uni1F18              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f19 uni1F19              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f1a uni1F1A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f1b uni1F1B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f1c uni1F1C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f1d uni1F1D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f20 uni1F20              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f21 uni1F21              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f22 uni1F22              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f23 uni1F23              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f24 uni1F24              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f25 uni1F25              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f26 uni1F26              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f27 uni1F27              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f28 uni1F28              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f29 uni1F29              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f2a uni1F2A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f2b uni1F2B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f2c uni1F2C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f2d uni1F2D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f2e uni1F2E              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f2f uni1F2F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f30 uni1F30              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f31 uni1F31              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f32 uni1F32              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f33 uni1F33              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f34 uni1F34              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f35 uni1F35              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f36 uni1F36              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f37 uni1F37              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f38 uni1F38              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f39 uni1F39              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f3a uni1F3A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f3b uni1F3B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f3c uni1F3C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f3d uni1F3D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f3e uni1F3E              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f3f uni1F3F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f40 uni1F40              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f41 uni1F41              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f42 uni1F42              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f43 uni1F43              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f44 uni1F44              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f45 uni1F45              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f48 uni1F48              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f49 uni1F49              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f4a uni1F4A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f4b uni1F4B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f4c uni1F4C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f4d uni1F4D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f50 uni1F50              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f51 uni1F51              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f52 uni1F52              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f53 uni1F53              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f54 uni1F54              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f55 uni1F55              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f56 uni1F56              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f57 uni1F57              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f59 uni1F59              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f5b uni1F5B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f5d uni1F5D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f5f uni1F5F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f60 uni1F60              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f61 uni1F61              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f62 uni1F62              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f63 uni1F63              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f64 uni1F64              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f65 uni1F65              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f66 uni1F66              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f67 uni1F67              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f68 uni1F68              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f69 uni1F69              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f6a uni1F6A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f6b uni1F6B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f6c uni1F6C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f6d uni1F6D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f6e uni1F6E              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f6f uni1F6F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f70 uni1F70              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1f71 uni1F71              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1f72 uni1F72              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1f73 uni1F73              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1f74 uni1F74              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1f75 uni1F75              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1f76 uni1F76              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f77 uni1F77              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f78 uni1F78              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1f79 uni1F79              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1f7a uni1F7A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f7b uni1F7B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f7c uni1F7C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f7d uni1F7D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f80 uni1F80              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f81 uni1F81              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f82 uni1F82              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f83 uni1F83              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f84 uni1F84              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f85 uni1F85              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f86 uni1F86              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f87 uni1F87              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f88 uni1F88              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f89 uni1F89              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f8a uni1F8A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f8b uni1F8B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f8c uni1F8C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f8d uni1F8D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f8e uni1F8E              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f8f uni1F8F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f90 uni1F90              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f91 uni1F91              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f92 uni1F92              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f93 uni1F93              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f94 uni1F94              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f95 uni1F95              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f96 uni1F96              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f97 uni1F97              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f98 uni1F98              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f99 uni1F99              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f9a uni1F9A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f9b uni1F9B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f9c uni1F9C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f9d uni1F9D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f9e uni1F9E              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1f9f uni1F9F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fa0 uni1FA0              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fa1 uni1FA1              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fa2 uni1FA2              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fa3 uni1FA3              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fa4 uni1FA4              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fa5 uni1FA5              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fa6 uni1FA6              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fa7 uni1FA7              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fa8 uni1FA8              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fa9 uni1FA9              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1faa uni1FAA              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fab uni1FAB              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fac uni1FAC              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fad uni1FAD              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fae uni1FAE              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1faf uni1FAF              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fb0 uni1FB0              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fb1 uni1FB1              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fb2 uni1FB2              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fb3 uni1FB3              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fb4 uni1FB4              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fb6 uni1FB6              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fb7 uni1FB7              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fb8 uni1FB8              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fb9 uni1FB9              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fba uni1FBA              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fbb uni1FBB              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fbc uni1FBC              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fbd uni1FBD              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fbe uni1FBE              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fbf uni1FBF              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fc0 uni1FC0              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fc1 uni1FC1              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fc2 uni1FC2              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fc3 uni1FC3              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fc4 uni1FC4              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fc6 uni1FC6              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fc7 uni1FC7              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fc8 uni1FC8              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fc9 uni1FC9              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fca uni1FCA              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fcb uni1FCB              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fcc uni1FCC              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.10 (Sans ExtraLight)
+U+1fcd uni1FCD              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fce uni1FCE              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fcf uni1FCF              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fd0 uni1FD0              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fd1 uni1FD1              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fd2 uni1FD2              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fd3 uni1FD3              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fd6 uni1FD6              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fd7 uni1FD7              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fd8 uni1FD8              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fd9 uni1FD9              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fda uni1FDA              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fdb uni1FDB              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fdd uni1FDD              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fde uni1FDE              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fdf uni1FDF              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fe0 uni1FE0              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fe1 uni1FE1              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fe2 uni1FE2              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fe3 uni1FE3              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fe4 uni1FE4              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fe5 uni1FE5              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fe6 uni1FE6              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fe7 uni1FE7              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fe8 uni1FE8              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fe9 uni1FE9              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fea uni1FEA              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1feb uni1FEB              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fec uni1FEC              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1fed uni1FED              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fee uni1FEE              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1fef uni1FEF              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1ff2 uni1FF2              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1ff3 uni1FF3              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1ff4 uni1FF4              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1ff6 uni1FF6              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1ff7 uni1FF7              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1ff8 uni1FF8              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1ff9 uni1FF9              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1ffa uni1FFA              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1ffb uni1FFB              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.10 (Sans ExtraLight)
+U+1ffc uni1FFC              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+1ffd uni1FFD              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+1ffe uni1FFE              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight)
+U+2000 uni2000              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2001 uni2001              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2002 uni2002              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2003 uni2003              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2004 uni2004              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2005 uni2005              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2006 uni2006              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2007 uni2007              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2008 uni2008              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2009 uni2009              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+200a uni200A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+200b uni200B              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.8 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+200c afii61664            2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.8 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+200d afii301              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+200e afii299              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+200f afii300              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+2010 uni2010              1.5
+U+2011 uni2011              1.5
+U+2012 figuredash           1.5
+U+2013 endash               original
+U+2014 emdash               original
+U+2015 afii00208            1.5
+U+2016 uni2016              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2017 underscoredbl        2.3
+U+2018 quoteleft            original
+U+2019 quoteright           original
+U+201a quotesinglbase       original
+U+201b quotereversed        2.3
+U+201c quotedblleft         original
+U+201d quotedblright        original
+U+201e quotedblbase         original
+U+201f uni201F              2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight)
+U+2020 dagger               original
+U+2021 daggerdbl            original
+U+2022 bullet               original
+U+2023 uni2023              2.2
+U+2024 onedotenleader       2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2025 twodotenleader       2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2026 ellipsis             original
+U+2027 uni2027              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+202a uni202A              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+202b uni202B              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+202c afii61573            2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+202d afii61574            2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+202e afii61575            2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+202f uni202F              2.11 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2030 perthousand          original
+U+2031 uni2031              2.1
+U+2032 minute               2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2033 second               2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2034 uni2034              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2035 uni2035              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2036 uni2036              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2037 uni2037              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2038 uni2038              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2039 guilsinglleft        original
+U+203a guilsinglright       original
+U+203b uni203B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+203c exclamdbl            2.0
+U+203d uni203D              2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.11 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.14 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+203e uni203E              2.3
+U+203f uni203F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2040 uni2040              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2041 uni2041              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2042 uni2042              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2043 uni2043              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2044 fraction             2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2045 uni2045              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2046 uni2046              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2047 uni2047              2.0
+U+2048 uni2048              2.0
+U+2049 uni2049              2.0
+U+204a uni204A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+204b uni204B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+204c uni204C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+204d uni204D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+204e uni204E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+204f uni204F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2050 uni2050              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2051 uni2051              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2052 uni2052              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2053 uni2053              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2054 uni2054              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2055 uni2055              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2056 uni2056              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2057 uni2057              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2058 uni2058              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2059 uni2059              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+205a uni205A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+205b uni205B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+205c uni205C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+205d uni205D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+205e uni205E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+205f uni205F              2.14
+U+2060 uni2060              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2061 uni2061              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2062 uni2062              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2063 uni2063              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+206a uni206A              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+206b uni206B              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+206c uni206C              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+206d uni206D              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+206e uni206E              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+206f uni206F              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2070 uni2070              2.2
+U+2071 uni2071              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2074 uni2074              2.2
+U+2075 uni2075              2.2
+U+2076 uni2076              2.2
+U+2077 uni2077              2.2
+U+2078 uni2078              2.2
+U+2079 uni2079              2.2
+U+207a uni207A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+207b uni207B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+207c uni207C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+207d uni207D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+207e uni207E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+207f uni207F              1.14
+U+2080 uni2080              2.4
+U+2081 uni2081              2.4
+U+2082 uni2082              2.4
+U+2083 uni2083              2.4
+U+2084 uni2084              2.4
+U+2085 uni2085              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2086 uni2086              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2087 uni2087              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2088 uni2088              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2089 uni2089              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+208a uni208A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+208b uni208B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+208c uni208C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+208d uni208D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+208e uni208E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2090 uni2090              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2091 uni2091              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2092 uni2092              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2093 uni2093              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2094 uni2094              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+20a0 uni20A0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+20a1 colonmonetary        2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+20a2 uni20A2              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+20a3 franc                2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+20a4 lira                 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+20a5 uni20A5              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+20a6 uni20A6              2.3
+U+20a7 peseta               2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+20a8 uni20A8              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+20a9 uni20A9              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+20aa afii57636            2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+20ab dong                 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+20ac Euro                 original
+U+20ad uni20AD              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+20ae uni20AE              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+20af uni20AF              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+20b0 uni20B0              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+20b1 uni20B1              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+20b2 uni20B2              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+20b3 uni20B3              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+20b4 uni20B4              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+20b5 uni20B5              2.2
+U+20d0 uni20D0              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+20d1 uni20D1              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+20d6 uni20D6              2.8 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+20d7 uni20D7              2.8 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2100 uni2100              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2101 uni2101              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2102 uni2102              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2103 uni2103              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2104 uni2104              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2105 afii61248            2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2106 uni2106              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2107 uni2107              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2108 uni2108              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2109 uni2109              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+210b uni210B              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+210c uni210C              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+210d uni210D              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+210e uni210E              2.5 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+210f uni210F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2110 uni2110              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2111 Ifraktur             2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2112 uni2112              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2113 afii61289            2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2114 uni2114              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2115 uni2115              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2116 afii61352            2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2117 uni2117              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2118 weierstrass          2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2119 uni2119              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+211a uni211A              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+211b uni211B              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+211c Rfraktur             2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+211d uni211D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+211e prescription         2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+211f uni211F              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2120 uni2120              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2121 uni2121              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2122 trademark            original
+U+2123 uni2123              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2124 uni2124              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2125 uni2125              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2126 uni2126              2.2
+U+2127 uni2127              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2128 uni2128              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2129 uni2129              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+212a uni212A              2.2
+U+212b uni212B              2.2
+U+212c uni212C              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+212d uni212D              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+212e estimated            2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+212f uni212F              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2130 uni2130              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2131 uni2131              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2132 uni2132              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+2133 uni2133              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2134 uni2134              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2135 aleph                2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2136 uni2136              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2137 uni2137              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2138 uni2138              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2139 uni2139              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+213a uni213A              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+213b uni213B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+213c uni213C              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+213d uni213D              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+213e uni213E              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+213f uni213F              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2140 uni2140              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2141 uni2141              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2142 uni2142              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2143 uni2143              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2144 uni2144              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2145 uni2145              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2146 uni2146              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2147 uni2147              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2148 uni2148              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2149 uni2149              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+214b uni214B              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+214e uni214E              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2153 onethird             2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2154 twothirds            2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2155 uni2155              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2156 uni2156              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2157 uni2157              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2158 uni2158              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2159 uni2159              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+215a uni215A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+215b oneeighth            2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+215c threeeighths         2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+215d fiveeighths          2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+215e seveneighths         2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+215f uni215F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2160 uni2160              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2161 uni2161              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2162 uni2162              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2163 uni2163              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2164 uni2164              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2165 uni2165              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2166 uni2166              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2167 uni2167              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2168 uni2168              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2169 uni2169              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+216a uni216A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+216b uni216B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+216c uni216C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+216d uni216D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+216e uni216E              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+216f uni216F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2170 uni2170              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2171 uni2171              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2172 uni2172              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2173 uni2173              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2174 uni2174              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2175 uni2175              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2176 uni2176              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2177 uni2177              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2178 uni2178              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2179 uni2179              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+217a uni217A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+217b uni217B              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+217c uni217C              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+217d uni217D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+217e uni217E              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+217f uni217F              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2180 uni2180              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+2181 uni2181              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2182 uni2182              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2183 uni2183              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight)
+U+2184 uni2184              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+2190 arrowleft            2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2191 arrowup              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2192 arrowright           2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2193 arrowdown            2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2194 arrowboth            2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2195 arrowupdn            2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2196 uni2196              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2197 uni2197              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2198 uni2198              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2199 uni2199              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+219a uni219A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+219b uni219B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+219c uni219C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+219d uni219D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+219e uni219E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+219f uni219F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21a0 uni21A0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21a1 uni21A1              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21a2 uni21A2              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21a3 uni21A3              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21a4 uni21A4              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21a5 uni21A5              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21a6 uni21A6              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21a7 uni21A7              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21a8 arrowupdnbse         2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21a9 uni21A9              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21aa uni21AA              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21ab uni21AB              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21ac uni21AC              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21ad uni21AD              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21ae uni21AE              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21af uni21AF              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21b0 uni21B0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21b1 uni21B1              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21b2 uni21B2              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21b3 uni21B3              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21b4 uni21B4              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21b5 carriagereturn       2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21b6 uni21B6              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21b7 uni21B7              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21b8 uni21B8              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21b9 uni21B9              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21ba uni21BA              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21bb uni21BB              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21bc uni21BC              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21bd uni21BD              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21be uni21BE              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21bf uni21BF              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21c0 uni21C0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21c1 uni21C1              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21c2 uni21C2              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21c3 uni21C3              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21c4 uni21C4              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21c5 uni21C5              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21c6 uni21C6              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21c7 uni21C7              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21c8 uni21C8              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21c9 uni21C9              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21ca uni21CA              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21cb uni21CB              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21cc uni21CC              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21cd uni21CD              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21ce uni21CE              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21cf uni21CF              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21d0 arrowdblleft         2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21d1 arrowdblup           2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21d2 arrowdblright        2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21d3 arrowdbldown         2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21d4 arrowdblboth         2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21d5 uni21D5              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21d6 uni21D6              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21d7 uni21D7              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21d8 uni21D8              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21d9 uni21D9              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21da uni21DA              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21db uni21DB              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21dc uni21DC              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21dd uni21DD              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21de uni21DE              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21df uni21DF              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21e0 uni21E0              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21e1 uni21E1              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21e2 uni21E2              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21e3 uni21E3              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21e4 uni21E4              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21e5 uni21E5              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21e6 uni21E6              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21e7 uni21E7              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21e8 uni21E8              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21e9 uni21E9              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21ea uni21EA              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21eb uni21EB              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21ec uni21EC              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21ed uni21ED              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21ee uni21EE              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21ef uni21EF              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21f0 uni21F0              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21f1 uni21F1              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21f2 uni21F2              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21f3 uni21F3              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21f4 uni21F4              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21f5 uni21F5              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21f6 uni21F6              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21f7 uni21F7              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21f8 uni21F8              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21f9 uni21F9              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21fa uni21FA              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21fb uni21FB              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21fc uni21FC              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21fd uni21FD              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21fe uni21FE              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+21ff uni21FF              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2200 universal            2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+2201 uni2201              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2202 partialdiff          original
+U+2203 existential          2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight)
+U+2204 uni2204              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2205 emptyset             2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2206 Delta                original
+U+2207 gradient             2.1
+U+2208 element              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2209 notelement           2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+220a uni220A              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+220b suchthat             2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+220c uni220C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+220d uni220D              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+220e uni220E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+220f product              original
+U+2210 uni2210              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2211 summation            original
+U+2212 minus                original
+U+2213 uni2213              2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2214 uni2214              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2215 fraction             original
+U+2216 uni2216              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2217 asteriskmath         2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2218 uni2218              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2219 periodcentered       original
+U+221a radical              original
+U+221b uni221B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+221c uni221C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+221d proportional         2.1
+U+221e infinity             original
+U+221f orthogonal           2.1
+U+2220 angle                2.3
+U+2221 uni2221              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2222 uni2222              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2223 uni2223              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2224 uni2224              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2225 uni2225              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2226 uni2226              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2227 logicaland           2.1
+U+2228 logicalor            2.1
+U+2229 intersection         2.1
+U+222a union                2.1
+U+222b integral             original
+U+222c uni222C              2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+222d uni222D              2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+222e uni222E              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+222f uni222F              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2230 uni2230              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2231 uni2231              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2232 uni2232              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2233 uni2233              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2234 therefore            2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2235 uni2235              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2236 uni2236              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2237 uni2237              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2238 uni2238              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2239 uni2239              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+223a uni223A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+223b uni223B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+223c similar              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+223d uni223D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+223e uni223E              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+223f uni223F              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2240 uni2240              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2241 uni2241              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2242 uni2242              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2243 uni2243              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2244 uni2244              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2245 congruent            2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2246 uni2246              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2247 uni2247              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2248 approxequal          original
+U+2249 uni2249              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+224a uni224A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+224b uni224B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+224c uni224C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+224d uni224D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+224e uni224E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+224f uni224F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2250 uni2250              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2251 uni2251              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2252 uni2252              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2253 uni2253              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2254 uni2254              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2255 uni2255              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2256 uni2256              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2257 uni2257              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2258 uni2258              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2259 uni2259              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+225a uni225A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+225b uni225B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+225c uni225C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+225d uni225D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+225e uni225E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+225f uni225F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2260 notequal             original
+U+2261 equivalence          2.1
+U+2262 uni2262              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2263 uni2263              2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2264 lessequal            original
+U+2265 greaterequal         original
+U+2266 uni2266              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2267 uni2267              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2268 uni2268              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2269 uni2269              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+226a uni226A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+226b uni226B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+226c uni226C              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+226d uni226D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+226e uni226E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+226f uni226F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2270 uni2270              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2271 uni2271              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2272 uni2272              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2273 uni2273              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2274 uni2274              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2275 uni2275              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2276 uni2276              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2277 uni2277              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2278 uni2278              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2279 uni2279              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+227a uni227A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+227b uni227B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+227c uni227C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+227d uni227D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+227e uni227E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+227f uni227F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2280 uni2280              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2281 uni2281              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2282 propersubset         2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2283 propersuperset       2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2284 notsubset            2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2285 uni2285              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2286 reflexsubset         2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2287 reflexsuperset       2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2288 uni2288              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2289 uni2289              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+228a uni228A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+228b uni228B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+228c uni228C              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+228d uni228D              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+228e uni228E              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+228f uni228F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2290 uni2290              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2291 uni2291              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2292 uni2292              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+2293 uni2293              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2294 uni2294              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2295 circleplus           2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2296 uni2296              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2297 circlemultiply       2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2298 uni2298              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2299 uni2299              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+229a uni229A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+229b uni229B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+229c uni229C              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+229d uni229D              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+229e uni229E              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+229f uni229F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+22a0 uni22A0              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+22a1 uni22A1              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+22a2 uni22A2              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22a3 uni22A3              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22a4 uni22A4              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22a5 perpendicular        2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22a6 uni22A6              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22a7 uni22A7              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22a8 uni22A8              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22a9 uni22A9              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22aa uni22AA              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22ab uni22AB              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22ac uni22AC              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22ad uni22AD              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22ae uni22AE              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22af uni22AF              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22b2 uni22B2              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22b3 uni22B3              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22b4 uni22B4              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22b5 uni22B5              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22b6 uni22B6              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22b7 uni22B7              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22b8 uni22B8              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22b9 uni22B9              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22ba uni22BA              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22bb uni22BB              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22bc uni22BC              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22bd uni22BD              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22c0 uni22C0              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22c1 uni22C1              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22c2 uni22C2              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22c3 uni22C3              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22c4 uni22C4              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22c5 dotmath              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+22c6 uni22C6              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+22c8 uni22C8              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22c9 uni22C9              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22ca uni22CA              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22cb uni22CB              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22cc uni22CC              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22cd uni22CD              2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique)
+U+22d6 uni22D6              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22d7 uni22D7              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22d8 uni22D8              2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique)
+U+22d9 uni22D9              2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique)
+U+22da uni22DA              2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique)
+U+22db uni22DB              2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique)
+U+22dc uni22DC              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22dd uni22DD              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22de uni22DE              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22df uni22DF              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22e0 uni22E0              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22e1 uni22E1              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22e2 uni22E2              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22e3 uni22E3              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22e4 uni22E4              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22e5 uni22E5              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22e6 uni22E6              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22e7 uni22E7              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22e8 uni22E8              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22e9 uni22E9              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+22ea uni22EA              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22eb uni22EB              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22ec uni22EC              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22ed uni22ED              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22ef uni22EF              2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+22f2 uni22F2              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22f3 uni22F3              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22f4 uni22F4              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22f5 uni22F5              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22f6 uni22F6              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22f7 uni22F7              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22f8 uni22F8              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22f9 uni22F9              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22fa uni22FA              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22fb uni22FB              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22fc uni22FC              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22fd uni22FD              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22fe uni22FE              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+22ff uni22FF              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2300 uni2300              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2301 uni2301              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2302 house                1.14
+U+2303 uni2303              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2304 uni2304              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2305 uni2305              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2306 uni2306              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2308 uni2308              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+2309 uni2309              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+230a uni230A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+230b uni230B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+230c uni230C              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+230d uni230D              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+230e uni230E              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+230f uni230F              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2310 revlogicalnot        1.14
+U+2311 uni2311              1.15
+U+2312 uni2312              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2313 uni2313              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2314 uni2314              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2315 uni2315              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2318 uni2318              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2319 uni2319              1.14
+U+231c uni231C              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+231d uni231D              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+231e uni231E              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+231f uni231F              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2320 integraltp           2.3
+U+2321 integralbt           2.3
+U+2325 uni2325              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2326 uni2326              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2327 uni2327              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2328 uni2328              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2329 angleleft            2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+232a angleright           2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+232b uni232B              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2335 uni2335              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2337 uni2337              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2338 uni2338              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2339 uni2339              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+233a uni233A              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+233b uni233B              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+233c uni233C              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+233d uni233D              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+233e uni233E              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2341 uni2341              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2342 uni2342              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2343 uni2343              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2344 uni2344              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2347 uni2347              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2348 uni2348              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2349 uni2349              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+234b uni234B              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+234c uni234C              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+234d uni234D              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2350 uni2350              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2352 uni2352              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2353 uni2353              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2354 uni2354              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2357 uni2357              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2358 uni2358              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2359 uni2359              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+235a uni235A              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+235b uni235B              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+235c uni235C              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+235e uni235E              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+235f uni235F              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2360 uni2360              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2363 uni2363              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2364 uni2364              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2365 uni2365              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2368 uni2368              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2369 uni2369              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+236b uni236B              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+236c uni236C              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+236d uni236D              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+236e uni236E              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+236f uni236F              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2370 uni2370              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2373 uni2373              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2374 uni2374              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2375 uni2375              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2376 uni2376              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2377 uni2377              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2378 uni2378              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2379 uni2379              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+237a uni237A              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+237d uni237D              1.15
+U+2380 uni2380              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2381 uni2381              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2382 uni2382              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2383 uni2383              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2388 uni2388              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2389 uni2389              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+238a uni238A              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+238b uni238B              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+2395 uni2395              2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique)
+U+239b uni239B              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+239c uni239C              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+239d uni239D              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+239e uni239E              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+239f uni239F              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23a0 uni23A0              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23a1 uni23A1              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23a2 uni23A2              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23a3 uni23A3              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23a4 uni23A4              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23a5 uni23A5              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23a6 uni23A6              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23a7 uni23A7              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23a8 uni23A8              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23a9 uni23A9              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23aa uni23AA              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23ab uni23AB              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23ac uni23AC              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23ad uni23AD              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23ae uni23AE              2.3
+U+23ce uni23CE              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique)
+U+23cf uni23CF              2.3
+U+2422 uni2422              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2423 uni2423              1.6
+U+2460 uni2460              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2461 uni2461              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2462 uni2462              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2463 uni2463              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2464 uni2464              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2465 uni2465              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2466 uni2466              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2467 uni2467              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2468 uni2468              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2469 uni2469              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2500 SF100000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2501 uni2501              1.12 (Sans Mono, Sans Mono Oblique)
+U+2502 SF110000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2503 uni2503              1.12 (Sans Mono, Sans Mono Oblique)
+U+2504 uni2504              1.12 (Sans Mono, Sans Mono Oblique)
+U+2505 uni2505              1.12 (Sans Mono, Sans Mono Oblique)
+U+2506 uni2506              1.12 (Sans Mono, Sans Mono Oblique)
+U+2507 uni2507              1.12 (Sans Mono, Sans Mono Oblique)
+U+2508 uni2508              1.12 (Sans Mono, Sans Mono Oblique)
+U+2509 uni2509              1.12 (Sans Mono, Sans Mono Oblique)
+U+250a uni250A              1.12 (Sans Mono, Sans Mono Oblique)
+U+250b uni250B              1.12 (Sans Mono, Sans Mono Oblique)
+U+250c SF010000             1.12 (Sans Mono, Sans Mono Oblique)
+U+250d uni250D              1.12 (Sans Mono, Sans Mono Oblique)
+U+250e uni250E              1.12 (Sans Mono, Sans Mono Oblique)
+U+250f uni250F              1.12 (Sans Mono, Sans Mono Oblique)
+U+2510 SF030000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2511 uni2511              1.12 (Sans Mono, Sans Mono Oblique)
+U+2512 uni2512              1.12 (Sans Mono, Sans Mono Oblique)
+U+2513 uni2513              1.12 (Sans Mono, Sans Mono Oblique)
+U+2514 SF020000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2515 uni2515              1.12 (Sans Mono, Sans Mono Oblique)
+U+2516 uni2516              1.12 (Sans Mono, Sans Mono Oblique)
+U+2517 uni2517              1.12 (Sans Mono, Sans Mono Oblique)
+U+2518 SF040000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2519 uni2519              1.12 (Sans Mono, Sans Mono Oblique)
+U+251a uni251A              1.12 (Sans Mono, Sans Mono Oblique)
+U+251b uni251B              1.12 (Sans Mono, Sans Mono Oblique)
+U+251c SF080000             1.12 (Sans Mono, Sans Mono Oblique)
+U+251d uni251D              1.12 (Sans Mono, Sans Mono Oblique)
+U+251e uni251E              1.12 (Sans Mono, Sans Mono Oblique)
+U+251f uni251F              1.12 (Sans Mono, Sans Mono Oblique)
+U+2520 uni2520              1.12 (Sans Mono, Sans Mono Oblique)
+U+2521 uni2521              1.12 (Sans Mono, Sans Mono Oblique)
+U+2522 uni2522              1.12 (Sans Mono, Sans Mono Oblique)
+U+2523 uni2523              1.12 (Sans Mono, Sans Mono Oblique)
+U+2524 SF090000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2525 uni2525              1.12 (Sans Mono, Sans Mono Oblique)
+U+2526 uni2526              1.12 (Sans Mono, Sans Mono Oblique)
+U+2527 uni2527              1.12 (Sans Mono, Sans Mono Oblique)
+U+2528 uni2528              1.12 (Sans Mono, Sans Mono Oblique)
+U+2529 uni2529              1.12 (Sans Mono, Sans Mono Oblique)
+U+252a uni252A              1.12 (Sans Mono, Sans Mono Oblique)
+U+252b uni252B              1.12 (Sans Mono, Sans Mono Oblique)
+U+252c SF060000             1.12 (Sans Mono, Sans Mono Oblique)
+U+252d uni252D              1.12 (Sans Mono, Sans Mono Oblique)
+U+252e uni252E              1.12 (Sans Mono, Sans Mono Oblique)
+U+252f uni252F              1.12 (Sans Mono, Sans Mono Oblique)
+U+2530 uni2530              1.12 (Sans Mono, Sans Mono Oblique)
+U+2531 uni2531              1.12 (Sans Mono, Sans Mono Oblique)
+U+2532 uni2532              1.12 (Sans Mono, Sans Mono Oblique)
+U+2533 uni2533              1.12 (Sans Mono, Sans Mono Oblique)
+U+2534 SF070000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2535 uni2535              1.12 (Sans Mono, Sans Mono Oblique)
+U+2536 uni2536              1.12 (Sans Mono, Sans Mono Oblique)
+U+2537 uni2537              1.12 (Sans Mono, Sans Mono Oblique)
+U+2538 uni2538              1.12 (Sans Mono, Sans Mono Oblique)
+U+2539 uni2539              1.12 (Sans Mono, Sans Mono Oblique)
+U+253a uni253A              1.12 (Sans Mono, Sans Mono Oblique)
+U+253b uni253B              1.12 (Sans Mono, Sans Mono Oblique)
+U+253c SF050000             1.12 (Sans Mono, Sans Mono Oblique)
+U+253d uni253D              1.12 (Sans Mono, Sans Mono Oblique)
+U+253e uni253E              1.12 (Sans Mono, Sans Mono Oblique)
+U+253f uni253F              1.12 (Sans Mono, Sans Mono Oblique)
+U+2540 uni2540              1.12 (Sans Mono, Sans Mono Oblique)
+U+2541 uni2541              1.12 (Sans Mono, Sans Mono Oblique)
+U+2542 uni2542              1.12 (Sans Mono, Sans Mono Oblique)
+U+2543 uni2543              1.12 (Sans Mono, Sans Mono Oblique)
+U+2544 uni2544              1.12 (Sans Mono, Sans Mono Oblique)
+U+2545 uni2545              1.12 (Sans Mono, Sans Mono Oblique)
+U+2546 uni2546              1.12 (Sans Mono, Sans Mono Oblique)
+U+2547 uni2547              1.12 (Sans Mono, Sans Mono Oblique)
+U+2548 uni2548              1.12 (Sans Mono, Sans Mono Oblique)
+U+2549 uni2549              1.12 (Sans Mono, Sans Mono Oblique)
+U+254a uni254A              1.12 (Sans Mono, Sans Mono Oblique)
+U+254b uni254B              1.12 (Sans Mono, Sans Mono Oblique)
+U+254c uni254C              1.12 (Sans Mono, Sans Mono Oblique)
+U+254d uni254D              1.12 (Sans Mono, Sans Mono Oblique)
+U+254e uni254E              1.12 (Sans Mono, Sans Mono Oblique)
+U+254f uni254F              1.12 (Sans Mono, Sans Mono Oblique)
+U+2550 SF430000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2551 SF240000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2552 SF510000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2553 SF520000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2554 SF390000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2555 SF220000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2556 SF210000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2557 SF250000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2558 SF500000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2559 SF490000             1.12 (Sans Mono, Sans Mono Oblique)
+U+255a SF380000             1.12 (Sans Mono, Sans Mono Oblique)
+U+255b SF280000             1.12 (Sans Mono, Sans Mono Oblique)
+U+255c SF270000             1.12 (Sans Mono, Sans Mono Oblique)
+U+255d SF260000             1.12 (Sans Mono, Sans Mono Oblique)
+U+255e SF360000             1.12 (Sans Mono, Sans Mono Oblique)
+U+255f SF370000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2560 SF420000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2561 SF190000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2562 SF200000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2563 SF230000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2564 SF470000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2565 SF480000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2566 SF410000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2567 SF450000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2568 SF460000             1.12 (Sans Mono, Sans Mono Oblique)
+U+2569 SF400000             1.12 (Sans Mono, Sans Mono Oblique)
+U+256a SF540000             1.12 (Sans Mono, Sans Mono Oblique)
+U+256b SF530000             1.12 (Sans Mono, Sans Mono Oblique)
+U+256c SF440000             1.12 (Sans Mono, Sans Mono Oblique)
+U+256d uni256D              1.12 (Sans Mono, Sans Mono Oblique)
+U+256e uni256E              1.12 (Sans Mono, Sans Mono Oblique)
+U+256f uni256F              1.12 (Sans Mono, Sans Mono Oblique)
+U+2570 uni2570              1.12 (Sans Mono, Sans Mono Oblique)
+U+2571 uni2571              1.12 (Sans Mono, Sans Mono Oblique)
+U+2572 uni2572              1.12 (Sans Mono, Sans Mono Oblique)
+U+2573 uni2573              1.12 (Sans Mono, Sans Mono Oblique)
+U+2574 uni2574              1.12 (Sans Mono, Sans Mono Oblique)
+U+2575 uni2575              1.12 (Sans Mono, Sans Mono Oblique)
+U+2576 uni2576              1.12 (Sans Mono, Sans Mono Oblique)
+U+2577 uni2577              1.12 (Sans Mono, Sans Mono Oblique)
+U+2578 uni2578              1.12 (Sans Mono, Sans Mono Oblique)
+U+2579 uni2579              1.12 (Sans Mono, Sans Mono Oblique)
+U+257a uni257A              1.12 (Sans Mono, Sans Mono Oblique)
+U+257b uni257B              1.12 (Sans Mono, Sans Mono Oblique)
+U+257c uni257C              1.12 (Sans Mono, Sans Mono Oblique)
+U+257d uni257D              1.12 (Sans Mono, Sans Mono Oblique)
+U+257e uni257E              1.12 (Sans Mono, Sans Mono Oblique)
+U+257f uni257F              1.12 (Sans Mono, Sans Mono Oblique)
+U+2580 upblock              1.14
+U+2581 uni2581              1.14
+U+2582 uni2582              1.14
+U+2583 uni2583              1.14
+U+2584 dnblock              1.14
+U+2585 uni2585              1.14
+U+2586 uni2586              1.14
+U+2587 uni2587              1.14
+U+2588 block                1.14
+U+2589 uni2589              1.14
+U+258a uni258A              1.14
+U+258b uni258B              1.14
+U+258c lfblock              1.14
+U+258d uni258D              1.14
+U+258e uni258E              1.14
+U+258f uni258F              1.14
+U+2590 rtblock              1.14
+U+2591 ltshade              1.15
+U+2592 shade                1.15
+U+2593 dkshade              1.15
+U+2594 uni2594              1.14
+U+2595 uni2595              1.14
+U+2596 uni2596              1.14
+U+2597 uni2597              1.14
+U+2598 uni2598              1.14
+U+2599 uni2599              1.14
+U+259a uni259A              1.14
+U+259b uni259B              1.14
+U+259c uni259C              1.14
+U+259d uni259D              1.14
+U+259e uni259E              1.14
+U+259f uni259F              1.14
+U+25a0 filledbox            2.3
+U+25a1 H22073               2.3
+U+25a2 uni25A2              2.3
+U+25a3 uni25A3              2.3
+U+25a4 uni25A4              2.3
+U+25a5 uni25A5              2.3
+U+25a6 uni25A6              2.3
+U+25a7 uni25A7              2.3
+U+25a8 uni25A8              2.3
+U+25a9 uni25A9              2.3
+U+25aa H18543               2.3
+U+25ab H18551               2.3
+U+25ac filledrect           2.3
+U+25ad uni25AD              2.3
+U+25ae uni25AE              2.3
+U+25af uni25AF              2.3
+U+25b0 uni25B0              2.3
+U+25b1 uni25B1              2.3
+U+25b2 triagup              2.3
+U+25b3 uni25B3              2.3
+U+25b4 uni25B4              2.3
+U+25b5 uni25B5              2.3
+U+25b6 uni25B6              2.3
+U+25b7 uni25B7              2.3
+U+25b8 uni25B8              2.3
+U+25b9 uni25B9              2.3
+U+25ba triagrt              2.3
+U+25bb uni25BB              2.3
+U+25bc triagdn              2.3
+U+25bd uni25BD              2.3
+U+25be uni25BE              2.3
+U+25bf uni25BF              2.3
+U+25c0 uni25C0              2.3
+U+25c1 uni25C1              2.3
+U+25c2 uni25C2              2.3
+U+25c3 uni25C3              2.3
+U+25c4 triaglf              2.3
+U+25c5 uni25C5              2.3
+U+25c6 uni25C6              2.3
+U+25c7 uni25C7              2.3
+U+25c8 uni25C8              2.3
+U+25c9 uni25C9              2.3
+U+25ca lozenge              original
+U+25cb circle               2.3
+U+25cc uni25CC              2.3
+U+25cd uni25CD              2.3
+U+25ce uni25CE              2.3
+U+25cf H18533               2.3
+U+25d0 uni25D0              2.3
+U+25d1 uni25D1              2.3
+U+25d2 uni25D2              2.3
+U+25d3 uni25D3              2.3
+U+25d4 uni25D4              2.3
+U+25d5 uni25D5              2.3
+U+25d6 uni25D6              2.3
+U+25d7 uni25D7              2.3
+U+25d8 invbullet            2.2
+U+25d9 invcircle            2.3
+U+25da uni25DA              2.3
+U+25db uni25DB              2.3
+U+25dc uni25DC              2.3
+U+25dd uni25DD              2.3
+U+25de uni25DE              2.3
+U+25df uni25DF              2.3
+U+25e0 uni25E0              2.3
+U+25e1 uni25E1              2.3
+U+25e2 uni25E2              2.3
+U+25e3 uni25E3              2.3
+U+25e4 uni25E4              2.3
+U+25e5 uni25E5              2.3
+U+25e6 openbullet           2.2
+U+25e7 uni25E7              2.3
+U+25e8 uni25E8              2.3
+U+25e9 uni25E9              2.3
+U+25ea uni25EA              2.3
+U+25eb uni25EB              2.3
+U+25ec uni25EC              2.3
+U+25ed uni25ED              2.3
+U+25ee uni25EE              2.3
+U+25ef uni25EF              2.3
+U+25f0 uni25F0              2.3
+U+25f1 uni25F1              2.3
+U+25f2 uni25F2              2.3
+U+25f3 uni25F3              2.3
+U+25f4 uni25F4              2.3
+U+25f5 uni25F5              2.3
+U+25f6 uni25F6              2.3
+U+25f7 uni25F7              2.3
+U+25f8 uni25F8              2.3
+U+25f9 uni25F9              2.3
+U+25fa uni25FA              2.3
+U+25fb uni25FB              2.3
+U+25fc uni25FC              2.3
+U+25fd uni25FD              2.3
+U+25fe uni25FE              2.3
+U+25ff uni25FF              2.3
+U+2600 uni2600              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2601 uni2601              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2602 uni2602              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2603 uni2603              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2604 uni2604              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2605 uni2605              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2606 uni2606              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2607 uni2607              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2608 uni2608              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2609 uni2609              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+260a uni260A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+260b uni260B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+260c uni260C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+260d uni260D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+260e uni260E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+260f uni260F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2610 uni2610              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2611 uni2611              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2612 uni2612              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2613 uni2613              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2614 uni2614              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2615 uni2615              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2616 uni2616              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2617 uni2617              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2618 uni2618              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2619 uni2619              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+261a uni261A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+261b uni261B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+261c uni261C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+261d uni261D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+261e uni261E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+261f uni261F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2620 uni2620              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2621 uni2621              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2622 uni2622              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2623 uni2623              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2624 uni2624              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2625 uni2625              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2626 uni2626              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2627 uni2627              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2628 uni2628              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2629 uni2629              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+262a uni262A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+262b uni262B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+262c uni262C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+262d uni262D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+262e uni262E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+262f uni262F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2630 uni2630              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2631 uni2631              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2632 uni2632              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2633 uni2633              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2634 uni2634              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2635 uni2635              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2636 uni2636              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2637 uni2637              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2638 uni2638              1.15
+U+2639 uni2639              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+263a smileface            2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+263b invsmileface         2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+263c sun                  2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+263d uni263D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+263e uni263E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+263f uni263F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2640 female               2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2641 uni2641              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2642 male                 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2643 uni2643              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2644 uni2644              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2645 uni2645              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2646 uni2646              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2647 uni2647              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2648 uni2648              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2649 uni2649              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+264a uni264A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+264b uni264B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+264c uni264C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+264d uni264D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+264e uni264E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+264f uni264F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2650 uni2650              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2651 uni2651              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2652 uni2652              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2653 uni2653              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2654 uni2654              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2655 uni2655              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2656 uni2656              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2657 uni2657              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2658 uni2658              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2659 uni2659              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+265a uni265A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+265b uni265B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+265c uni265C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+265d uni265D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+265e uni265E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+265f uni265F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2660 spade                2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2661 uni2661              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2662 uni2662              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2663 club                 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2664 uni2664              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2665 heart                2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2666 diamond              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2667 uni2667              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2668 uni2668              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2669 uni2669              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+266a musicalnote          2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+266b musicalnotedbl       2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+266c uni266C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+266d uni266D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+266e uni266E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+266f uni266F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2670 uni2670              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2671 uni2671              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2672 uni2672              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2673 uni2673              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2674 uni2674              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2675 uni2675              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2676 uni2676              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2677 uni2677              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2678 uni2678              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2679 uni2679              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+267a uni267A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+267b uni267B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+267c uni267C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+267d uni267D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+267e uni267E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+267f uni267F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2680 uni2680              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold)
+U+2681 uni2681              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold)
+U+2682 uni2682              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold)
+U+2683 uni2683              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold)
+U+2684 uni2684              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold)
+U+2685 uni2685              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold)
+U+2686 uni2686              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2687 uni2687              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2688 uni2688              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2689 uni2689              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+268a uni268A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+268b uni268B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+268c uni268C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+268d uni268D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+268e uni268E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+268f uni268F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+2690 uni2690              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2691 uni2691              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2692 uni2692              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2693 uni2693              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2694 uni2694              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2695 uni2695              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2696 uni2696              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2697 uni2697              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2698 uni2698              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2699 uni2699              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+269a uni269A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+269b uni269B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+269c uni269C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+26a0 uni26A0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+26a1 uni26A1              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+26a2 uni26A2              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26a3 uni26A3              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26a4 uni26A4              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26a5 uni26A5              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26a6 uni26A6              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26a7 uni26A7              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26a8 uni26A8              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26a9 uni26A9              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26aa uni26AA              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26ab uni26AB              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26ac uni26AC              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26ad uni26AD              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26ae uni26AE              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26af uni26AF              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+26b0 uni26B0              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+26b1 uni26B1              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+26b2 uni26B2              2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2701 uni2701              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2702 uni2702              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2703 uni2703              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2704 uni2704              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2706 uni2706              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2707 uni2707              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2708 uni2708              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2709 uni2709              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+270c uni270C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+270d uni270D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+270e uni270E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+270f uni270F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2710 uni2710              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2711 uni2711              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2712 uni2712              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2713 uni2713              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2714 uni2714              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2715 uni2715              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2716 uni2716              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2717 uni2717              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2718 uni2718              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2719 uni2719              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+271a uni271A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+271b uni271B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+271c uni271C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+271d uni271D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+271e uni271E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+271f uni271F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2720 uni2720              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2721 uni2721              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2722 uni2722              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2723 uni2723              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2724 uni2724              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2725 uni2725              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2726 uni2726              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2727 uni2727              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2729 uni2729              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+272a uni272A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+272b uni272B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+272c uni272C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+272d uni272D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+272e uni272E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+272f uni272F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2730 uni2730              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2731 uni2731              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2732 uni2732              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2733 uni2733              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2734 uni2734              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2735 uni2735              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2736 uni2736              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2737 uni2737              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2738 uni2738              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2739 uni2739              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+273a uni273A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+273b uni273B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+273c uni273C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+273d uni273D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+273e uni273E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+273f uni273F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2740 uni2740              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2741 uni2741              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2742 uni2742              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2743 uni2743              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2744 uni2744              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2745 uni2745              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2746 uni2746              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2747 uni2747              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2748 uni2748              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2749 uni2749              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+274a uni274A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+274b uni274B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+274d uni274D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+274f uni274F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2750 uni2750              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2751 uni2751              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2752 uni2752              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2756 uni2756              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2758 uni2758              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2759 uni2759              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+275a uni275A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+275b uni275B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+275c uni275C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+275d uni275D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+275e uni275E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2761 uni2761              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2762 uni2762              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2763 uni2763              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2764 uni2764              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2765 uni2765              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2766 uni2766              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2767 uni2767              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2768 uni2768              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2769 uni2769              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+276a uni276A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+276b uni276B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+276c uni276C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+276d uni276D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+276e uni276E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+276f uni276F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2770 uni2770              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2771 uni2771              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2772 uni2772              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2773 uni2773              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2774 uni2774              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2775 uni2775              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold)
+U+2776 uni2776              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2777 uni2777              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2778 uni2778              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2779 uni2779              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+277a uni277A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+277b uni277B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+277c uni277C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+277d uni277D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+277e uni277E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+277f uni277F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2780 uni2780              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2781 uni2781              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2782 uni2782              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2783 uni2783              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2784 uni2784              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2785 uni2785              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2786 uni2786              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2787 uni2787              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2788 uni2788              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2789 uni2789              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+278a uni278A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+278b uni278B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+278c uni278C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+278d uni278D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+278e uni278E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+278f uni278F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2790 uni2790              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2791 uni2791              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2792 uni2792              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2793 uni2793              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2794 uni2794              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2798 uni2798              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+2799 uni2799              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+279a uni279A              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+279b uni279B              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+279c uni279C              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+279d uni279D              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+279e uni279E              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+279f uni279F              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27a0 uni27A0              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27a1 uni27A1              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27a2 uni27A2              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27a3 uni27A3              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27a4 uni27A4              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27a5 uni27A5              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27a6 uni27A6              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27a7 uni27A7              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27a8 uni27A8              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27a9 uni27A9              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27aa uni27AA              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27ab uni27AB              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27ac uni27AC              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27ad uni27AD              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27ae uni27AE              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27af uni27AF              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27b1 uni27B1              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27b2 uni27B2              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27b3 uni27B3              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27b4 uni27B4              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27b5 uni27B5              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27b6 uni27B6              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27b7 uni27B7              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27b8 uni27B8              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27b9 uni27B9              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27ba uni27BA              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27bb uni27BB              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27bc uni27BC              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27bd uni27BD              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27be uni27BE              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold)
+U+27bf uni27BF              2.7 (Sans Mono Bold)
+U+27e0 uni27E0              2.3
+U+27e6 uni27E6              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27e7 uni27E7              2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27e8 uni27E8              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+27e9 uni27E9              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+27ea uni27EA              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27eb uni27EB              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27f0 uni27F0              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27f1 uni27F1              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27f2 uni27F2              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27f3 uni27F3              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27f4 uni27F4              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27f5 uni27F5              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27f6 uni27F6              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27f7 uni27F7              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27f8 uni27F8              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27f9 uni27F9              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27fa uni27FA              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27fb uni27FB              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27fc uni27FC              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27fd uni27FD              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27fe uni27FE              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+27ff uni27FF              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2800 uni2800              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2801 uni2801              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2802 uni2802              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2803 uni2803              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2804 uni2804              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2805 uni2805              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2806 uni2806              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2807 uni2807              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2808 uni2808              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2809 uni2809              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+280a uni280A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+280b uni280B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+280c uni280C              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+280d uni280D              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+280e uni280E              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+280f uni280F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2810 uni2810              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2811 uni2811              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2812 uni2812              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2813 uni2813              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2814 uni2814              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2815 uni2815              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2816 uni2816              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2817 uni2817              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2818 uni2818              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2819 uni2819              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+281a uni281A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+281b uni281B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+281c uni281C              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+281d uni281D              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+281e uni281E              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+281f uni281F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2820 uni2820              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2821 uni2821              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2822 uni2822              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2823 uni2823              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2824 uni2824              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2825 uni2825              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2826 uni2826              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2827 uni2827              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2828 uni2828              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2829 uni2829              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+282a uni282A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+282b uni282B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+282c uni282C              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+282d uni282D              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+282e uni282E              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+282f uni282F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2830 uni2830              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2831 uni2831              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2832 uni2832              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2833 uni2833              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2834 uni2834              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2835 uni2835              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2836 uni2836              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2837 uni2837              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2838 uni2838              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2839 uni2839              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+283a uni283A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+283b uni283B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+283c uni283C              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+283d uni283D              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+283e uni283E              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+283f uni283F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2840 uni2840              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2841 uni2841              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2842 uni2842              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2843 uni2843              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2844 uni2844              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2845 uni2845              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2846 uni2846              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2847 uni2847              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2848 uni2848              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2849 uni2849              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+284a uni284A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+284b uni284B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+284c uni284C              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+284d uni284D              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+284e uni284E              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+284f uni284F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2850 uni2850              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2851 uni2851              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2852 uni2852              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2853 uni2853              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2854 uni2854              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2855 uni2855              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2856 uni2856              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2857 uni2857              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2858 uni2858              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2859 uni2859              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+285a uni285A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+285b uni285B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+285c uni285C              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+285d uni285D              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+285e uni285E              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+285f uni285F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2860 uni2860              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2861 uni2861              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2862 uni2862              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2863 uni2863              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2864 uni2864              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2865 uni2865              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2866 uni2866              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2867 uni2867              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2868 uni2868              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2869 uni2869              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+286a uni286A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+286b uni286B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+286c uni286C              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+286d uni286D              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+286e uni286E              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+286f uni286F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2870 uni2870              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2871 uni2871              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2872 uni2872              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2873 uni2873              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2874 uni2874              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2875 uni2875              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2876 uni2876              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2877 uni2877              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2878 uni2878              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2879 uni2879              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+287a uni287A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+287b uni287B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+287c uni287C              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+287d uni287D              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+287e uni287E              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+287f uni287F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2880 uni2880              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2881 uni2881              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2882 uni2882              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2883 uni2883              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2884 uni2884              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2885 uni2885              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2886 uni2886              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2887 uni2887              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2888 uni2888              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2889 uni2889              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+288a uni288A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+288b uni288B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+288c uni288C              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+288d uni288D              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+288e uni288E              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+288f uni288F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2890 uni2890              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2891 uni2891              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2892 uni2892              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2893 uni2893              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2894 uni2894              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2895 uni2895              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2896 uni2896              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2897 uni2897              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2898 uni2898              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2899 uni2899              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+289a uni289A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+289b uni289B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+289c uni289C              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+289d uni289D              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+289e uni289E              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+289f uni289F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28a0 uni28A0              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28a1 uni28A1              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28a2 uni28A2              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28a3 uni28A3              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28a4 uni28A4              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28a5 uni28A5              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28a6 uni28A6              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28a7 uni28A7              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28a8 uni28A8              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28a9 uni28A9              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28aa uni28AA              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28ab uni28AB              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28ac uni28AC              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28ad uni28AD              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28ae uni28AE              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28af uni28AF              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28b0 uni28B0              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28b1 uni28B1              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28b2 uni28B2              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28b3 uni28B3              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28b4 uni28B4              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28b5 uni28B5              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28b6 uni28B6              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28b7 uni28B7              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28b8 uni28B8              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28b9 uni28B9              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28ba uni28BA              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28bb uni28BB              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28bc uni28BC              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28bd uni28BD              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28be uni28BE              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28bf uni28BF              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28c0 uni28C0              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28c1 uni28C1              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28c2 uni28C2              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28c3 uni28C3              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28c4 uni28C4              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28c5 uni28C5              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28c6 uni28C6              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28c7 uni28C7              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28c8 uni28C8              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28c9 uni28C9              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28ca uni28CA              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28cb uni28CB              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28cc uni28CC              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28cd uni28CD              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28ce uni28CE              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28cf uni28CF              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28d0 uni28D0              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28d1 uni28D1              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28d2 uni28D2              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28d3 uni28D3              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28d4 uni28D4              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28d5 uni28D5              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28d6 uni28D6              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28d7 uni28D7              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28d8 uni28D8              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28d9 uni28D9              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28da uni28DA              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28db uni28DB              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28dc uni28DC              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28dd uni28DD              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28de uni28DE              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28df uni28DF              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28e0 uni28E0              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28e1 uni28E1              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28e2 uni28E2              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28e3 uni28E3              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28e4 uni28E4              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28e5 uni28E5              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28e6 uni28E6              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28e7 uni28E7              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28e8 uni28E8              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28e9 uni28E9              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28ea uni28EA              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28eb uni28EB              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28ec uni28EC              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28ed uni28ED              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28ee uni28EE              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28ef uni28EF              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28f0 uni28F0              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28f1 uni28F1              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28f2 uni28F2              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28f3 uni28F3              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28f4 uni28F4              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28f5 uni28F5              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28f6 uni28F6              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28f7 uni28F7              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28f8 uni28F8              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28f9 uni28F9              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28fa uni28FA              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28fb uni28FB              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28fc uni28FC              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28fd uni28FD              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28fe uni28FE              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+28ff uni28FF              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2906 uni2906              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2907 uni2907              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+290a uni290A              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+290b uni290B              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2940 uni2940              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2941 uni2941              2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+29ce uni29CE              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+29cf uni29CF              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+29d0 uni29D0              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+29d1 uni29D1              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+29d2 uni29D2              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+29d3 uni29D3              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+29d4 uni29D4              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+29d5 uni29D5              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+29eb uni29EB              2.2
+U+2a00 uni2A00              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a01 uni2A01              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a02 uni2A02              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a0c uni2A0C              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2a0d uni2A0D              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2a0e uni2A0E              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+2a0f uni2A0F              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a10 uni2A10              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a11 uni2A11              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a12 uni2A12              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a13 uni2A13              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a14 uni2A14              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a15 uni2A15              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a16 uni2A16              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a17 uni2A17              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a18 uni2A18              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a19 uni2A19              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a1a uni2A1A              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a1b uni2A1B              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a1c uni2A1C              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a7d uni2A7D              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a7e uni2A7E              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a7f uni2A7F              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a80 uni2A80              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a81 uni2A81              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a82 uni2A82              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a83 uni2A83              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a84 uni2A84              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a85 uni2A85              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a86 uni2A86              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a87 uni2A87              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a88 uni2A88              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a89 uni2A89              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a8a uni2A8A              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a8b uni2A8B              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a8c uni2A8C              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a8d uni2A8D              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a8e uni2A8E              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a8f uni2A8F              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a90 uni2A90              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a91 uni2A91              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a92 uni2A92              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a93 uni2A93              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a94 uni2A94              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a95 uni2A95              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a96 uni2A96              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a97 uni2A97              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a98 uni2A98              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a99 uni2A99              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a9a uni2A9A              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a9b uni2A9B              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a9c uni2A9C              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a9d uni2A9D              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a9e uni2A9E              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2a9f uni2A9F              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2aa0 uni2AA0              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2aae uni2AAE              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2aaf uni2AAF              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2ab0 uni2AB0              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2ab1 uni2AB1              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2ab2 uni2AB2              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2ab3 uni2AB3              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2ab4 uni2AB4              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2ab5 uni2AB5              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2ab6 uni2AB6              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2ab7 uni2AB7              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2ab8 uni2AB8              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2ab9 uni2AB9              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2aba uni2ABA              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2af9 uni2AF9              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2afa uni2AFA              2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b00 uni2B00              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b01 uni2B01              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b02 uni2B02              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b03 uni2B03              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b04 uni2B04              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b05 uni2B05              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b06 uni2B06              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b07 uni2B07              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b08 uni2B08              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b09 uni2B09              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b0a uni2B0A              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b0b uni2B0B              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b0c uni2B0C              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b0d uni2B0D              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b0e uni2B0E              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b0f uni2B0F              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b10 uni2B10              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b11 uni2B11              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b12 uni2B12              2.3
+U+2b13 uni2B13              2.3
+U+2b14 uni2B14              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+2b15 uni2B15              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+2b16 uni2B16              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+2b17 uni2B17              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+2b18 uni2B18              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+2b19 uni2B19              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+2b1a uni2B1A              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+2b20 uni2B20              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b21 uni2B21              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b22 uni2B22              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2b23 uni2B23              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2c60 uni2C60              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2c61 uni2C61              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2c62 uni2C62              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2c63 uni2C63              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2c64 uni2C64              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2c65 uni2C65              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2c66 uni2C66              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2c67 uni2C67              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2c68 uni2C68              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2c69 uni2C69              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2c6a uni2C6A              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2c6b uni2C6B              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2c6c uni2C6C              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2c74 uni2C74              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+2c75 uni2C75              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2c76 uni2C76              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+2c77 uni2C77              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+e000 uniE000              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+e001 uniE001              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+e002 uniE002              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+e003 uniE003              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+e004 uniE004              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+e005 uniE005              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+e006 uniE006              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+e007 uniE007              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+e008 uniE008              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique)
+U+e009 uniE009              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+e00a uniE00A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+e00b uniE00B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+e00c uniE00C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+e00d uniE00D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+e00e uniE00E              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+e00f uniE00F              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+e010 uniE010              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+e011 uniE011              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+e012 uniE012              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+e013 uniE013              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+e014 uniE014              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight)
+U+e015 uniE015              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+e016 uniE016              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+e017 uniE017              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+e018 uniE018              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+e019 uniE019              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+e01a uniE01A              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+e01b uniE01B              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+e01c uniE01C              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+e01d uniE01D              2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+f000 uniF000              2.10 (Sans) 2.11 (Sans Condensed)
+U+f001 uniF001              2.10 (Sans) 2.11 (Sans Condensed)
+U+f208 uniF208              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+f20a uniF20A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+f215 uniF215              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+f216 uniF216              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+f217 uniF217              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+f21a uniF21A              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+f21b uniF21B              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+f25f uniF25F              2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+f5c5 afii10064            2.9 (Sans Bold Oblique, Sans Condensed Bold Oblique)
+U+f6c4 afii10063            2.10 (Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed Bold Oblique, Serif Condensed Oblique)
+U+f6c5 afii10064            2.5 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.9 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique)
+U+f6c6 afii10192            2.5 (Serif Bold Oblique, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+f6c7 afii10831            2.11 (Serif Bold Oblique, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+f6c8 afii10832            2.11 (Serif Bold Oblique, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+f6d1 cyrBreve             2.5 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+f6d4 cyrbreve             2.5 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fb00 uniFB00              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fb01 fi                   original
+U+fb02 fl                   original
+U+fb03 uniFB03              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fb04 uniFB04              2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fb05 uniFB05              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fb06 uniFB06              2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fb13 uniFB13              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb14 uniFB14              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb15 uniFB15              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb16 uniFB16              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb17 uniFB17              2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb1d uniFB1D              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb1f uniFB1F              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb20 uniFB20              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb29 uniFB29              2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique)
+U+fb2a uniFB2A              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb2b uniFB2B              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb2c uniFB2C              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb2d uniFB2D              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb2e uniFB2E              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb2f uniFB2F              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb30 uniFB30              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb31 uniFB31              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb32 uniFB32              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb33 uniFB33              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb34 uniFB34              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb35 uniFB35              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb36 uniFB36              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb37 uniFB37              2.11 (Sans Condensed Oblique, Sans Oblique)
+U+fb38 uniFB38              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb39 uniFB39              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb3a uniFB3A              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb3b uniFB3B              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb3c uniFB3C              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb3e uniFB3E              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb40 uniFB40              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb41 uniFB41              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb43 uniFB43              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb44 uniFB44              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb46 uniFB46              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb47 uniFB47              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb48 uniFB48              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb49 uniFB49              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb4a uniFB4A              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb4b uniFB4B              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb4c uniFB4C              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb4d uniFB4D              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb4e uniFB4E              2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique)
+U+fb52 uniFB52              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb53 uniFB53              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb54 uniFB54              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb55 uniFB55              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb56 uniFB56              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb57 uniFB57              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb58 uniFB58              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb59 uniFB59              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb5a uniFB5A              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb5b uniFB5B              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb5c uniFB5C              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb5d uniFB5D              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb5e uniFB5E              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb5f uniFB5F              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb60 uniFB60              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb61 uniFB61              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb62 uniFB62              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb63 uniFB63              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb64 uniFB64              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb65 uniFB65              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb66 uniFB66              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb67 uniFB67              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb68 uniFB68              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb69 uniFB69              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb6a uniFB6A              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb6b uniFB6B              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb6c uniFB6C              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb6d uniFB6D              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb6e uniFB6E              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb6f uniFB6F              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb70 uniFB70              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb71 uniFB71              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb72 uniFB72              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb73 uniFB73              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb74 uniFB74              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb75 uniFB75              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb76 uniFB76              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb77 uniFB77              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb78 uniFB78              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb79 uniFB79              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb7a uniFB7A              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb7b uniFB7B              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb7c uniFB7C              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb7d uniFB7D              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb7e uniFB7E              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb7f uniFB7F              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb80 uniFB80              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb81 uniFB81              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb8a uniFB8A              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb8b uniFB8B              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb8c uniFB8C              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb8d uniFB8D              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb8e uniFB8E              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb8f uniFB8F              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb90 uniFB90              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb91 uniFB91              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb92 uniFB92              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb93 uniFB93              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb94 uniFB94              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb95 uniFB95              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb9e uniFB9E              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fb9f uniFB9F              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fbd9 uniFBD9              2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fbda uniFBDA              2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fbe8 uniFBE8              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fbe9 uniFBE9              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fbfc uniFBFC              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fbfd uniFBFD              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fbfe uniFBFE              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fbff uniFBFF              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe00 uniFE00              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe01 uniFE01              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe02 uniFE02              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe03 uniFE03              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe04 uniFE04              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe05 uniFE05              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe06 uniFE06              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe07 uniFE07              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe08 uniFE08              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe09 uniFE09              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe0a uniFE0A              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe0b uniFE0B              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe0c uniFE0C              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe0d uniFE0D              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe0e uniFE0E              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe0f uniFE0F              2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique)
+U+fe70 uniFE70              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe71 uniFE71              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe72 uniFE72              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe73 uniFE73              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe74 uniFE74              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe76 uniFE76              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe77 uniFE77              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe78 uniFE78              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe79 uniFE79              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe7a uniFE7A              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe7b uniFE7B              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe7c uniFE7C              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe7d uniFE7D              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe7e uniFE7E              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe7f uniFE7F              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe80 uniFE80              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe81 uniFE81              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe82 uniFE82              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe83 uniFE83              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe84 uniFE84              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe85 uniFE85              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe86 uniFE86              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe87 uniFE87              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe88 uniFE88              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe89 uniFE89              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe8a uniFE8A              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe8b uniFE8B              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe8c uniFE8C              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe8d uniFE8D              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe8e uniFE8E              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe8f uniFE8F              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe90 uniFE90              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe91 uniFE91              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe92 uniFE92              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe93 uniFE93              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe94 uniFE94              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe95 uniFE95              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe96 uniFE96              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe97 uniFE97              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe98 uniFE98              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe99 uniFE99              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe9a uniFE9A              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe9b uniFE9B              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe9c uniFE9C              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe9d uniFE9D              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe9e uniFE9E              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fe9f uniFE9F              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fea0 uniFEA0              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fea1 uniFEA1              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fea2 uniFEA2              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fea3 uniFEA3              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fea4 uniFEA4              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fea5 uniFEA5              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fea6 uniFEA6              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fea7 uniFEA7              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fea8 uniFEA8              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fea9 uniFEA9              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feaa uniFEAA              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feab uniFEAB              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feac uniFEAC              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fead uniFEAD              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feae uniFEAE              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feaf uniFEAF              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feb0 uniFEB0              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feb1 uniFEB1              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feb2 uniFEB2              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feb3 uniFEB3              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feb4 uniFEB4              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feb5 uniFEB5              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feb6 uniFEB6              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feb7 uniFEB7              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feb8 uniFEB8              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feb9 uniFEB9              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feba uniFEBA              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+febb uniFEBB              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+febc uniFEBC              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+febd uniFEBD              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+febe uniFEBE              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+febf uniFEBF              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fec0 uniFEC0              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fec1 uniFEC1              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fec2 uniFEC2              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fec3 uniFEC3              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fec4 uniFEC4              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fec5 uniFEC5              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fec6 uniFEC6              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fec7 uniFEC7              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fec8 uniFEC8              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fec9 uniFEC9              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feca uniFECA              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fecb uniFECB              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fecc uniFECC              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fecd uniFECD              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fece uniFECE              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fecf uniFECF              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fed0 uniFED0              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fed1 uniFED1              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fed2 uniFED2              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fed3 uniFED3              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fed4 uniFED4              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fed5 uniFED5              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fed6 uniFED6              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fed7 uniFED7              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fed8 uniFED8              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fed9 uniFED9              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feda uniFEDA              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fedb uniFEDB              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fedc uniFEDC              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fedd uniFEDD              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fede uniFEDE              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fedf uniFEDF              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fee0 uniFEE0              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fee1 uniFEE1              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fee2 uniFEE2              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fee3 uniFEE3              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fee4 uniFEE4              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fee5 uniFEE5              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fee6 uniFEE6              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fee7 uniFEE7              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fee8 uniFEE8              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fee9 uniFEE9              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feea uniFEEA              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feeb uniFEEB              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feec uniFEEC              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feed uniFEED              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feee uniFEEE              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feef uniFEEF              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fef0 uniFEF0              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fef1 uniFEF1              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fef2 uniFEF2              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fef3 uniFEF3              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fef4 uniFEF4              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fef5 uniFEF5              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fef6 uniFEF6              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fef7 uniFEF7              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fef8 uniFEF8              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fef9 uniFEF9              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fefa uniFEFA              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fefb uniFEFB              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fefc uniFEFC              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+feff uniFEFF              2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold)
+U+fffd uniFFFD              1.12
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/unicover.txt	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,160 @@
+This is the Unicode coverage file for DejaVu fonts
+($Id: unicover.txt 1586 2007-02-18 16:07:32Z ben_laenen $)
+
+Control and similar characters are discounted from totals.
+
+                                                Sans               Serif              Sans Mono          
+U+0000 Basic Latin                              100% (95/95)       100% (95/95)       100% (95/95)      
+U+0080 Latin-1 Supplement                       100% (96/96)       100% (96/96)       100% (96/96)      
+U+0100 Latin Extended-A                         100% (128/128)     100% (128/128)     100% (128/128)    
+U+0180 Latin Extended-B                         100% (208/208)      90% (188/208)      78% (163/208)    
+U+0250 IPA Extensions                           100% (96/96)       100% (96/96)       100% (96/96)      
+U+02b0 Spacing Modifier Letters                  78% (63/80)        56% (45/80)        57% (46/80)      
+U+0300 Combining Diacritical Marks               82% (92/112)       60% (68/112)       59% (67/112)     
+U+0370 Greek and Coptic                         100% (127/127)      86% (110/127)      86% (110/127)    
+U+0400 Cyrillic                                 100% (255/255)      75% (192/255)      66% (170/255)    
+U+0500 Cyrillic Supplement                      100% (20/20)            (0/20)             (0/20)       
+U+0530 Armenian                                 100% (86/86)            (0/86)             (0/86)       
+U+0590 Hebrew                                    57% (50/87)            (0/87)             (0/87)       
+U+0600 Arabic                                    47% (111/235)          (0/235)            (0/235)      
+U+0700 Syriac                                        (0/77)             (0/77)             (0/77)       
+U+0750 Arabic Supplement                             (0/30)             (0/30)             (0/30)       
+U+0780 Thaana                                        (0/50)             (0/50)             (0/50)       
+U+07c0 NKo                                           (0/59)             (0/59)             (0/59)       
+U+0900 Devanagari                                    (0/111)            (0/111)            (0/111)      
+U+0980 Bengali                                       (0/91)             (0/91)             (0/91)       
+U+0a00 Gurmukhi                                      (0/77)             (0/77)             (0/77)       
+U+0a80 Gujarati                                      (0/83)             (0/83)             (0/83)       
+U+0b00 Oriya                                         (0/81)             (0/81)             (0/81)       
+U+0b80 Tamil                                         (0/71)             (0/71)             (0/71)       
+U+0c00 Telugu                                        (0/80)             (0/80)             (0/80)       
+U+0c80 Kannada                                       (0/86)             (0/86)             (0/86)       
+U+0d00 Malayalam                                     (0/78)             (0/78)             (0/78)       
+U+0d80 Sinhala                                       (0/80)             (0/80)             (0/80)       
+U+0e00 Thai                                       1% (1/87)             (0/87)             (0/87)       
+U+0e80 Lao                                       84% (55/65)            (0/65)         43% (28/65)      
+U+0f00 Tibetan                                       (0/195)            (0/195)            (0/195)      
+U+1000 Myanmar                                       (0/78)             (0/78)             (0/78)       
+U+10a0 Georgian                                      (0/83)             (0/83)             (0/83)       
+U+1100 Hangul Jamo                                   (0/240)            (0/240)            (0/240)      
+U+1200 Ethiopic                                      (0/356)            (0/356)            (0/356)      
+U+1380 Ethiopic Supplement                           (0/26)             (0/26)             (0/26)       
+U+13a0 Cherokee                                      (0/85)             (0/85)             (0/85)       
+U+1400 Unified Canadian Aboriginal Syllabics     64% (404/630)          (0/630)            (0/630)      
+U+1680 Ogham                                         (0/29)             (0/29)             (0/29)       
+U+16a0 Runic                                         (0/81)             (0/81)             (0/81)       
+U+1700 Tagalog                                       (0/20)             (0/20)             (0/20)       
+U+1720 Hanunoo                                       (0/23)             (0/23)             (0/23)       
+U+1740 Buhid                                         (0/20)             (0/20)             (0/20)       
+U+1760 Tagbanwa                                      (0/18)             (0/18)             (0/18)       
+U+1780 Khmer                                         (0/114)            (0/114)            (0/114)      
+U+1800 Mongolian                                     (0/155)            (0/155)            (0/155)      
+U+1900 Limbu                                         (0/66)             (0/66)             (0/66)       
+U+1950 Tai Le                                        (0/35)             (0/35)             (0/35)       
+U+1980 New Tai Lue                                   (0/80)             (0/80)             (0/80)       
+U+19e0 Khmer Symbols                                 (0/32)             (0/32)             (0/32)       
+U+1a00 Buginese                                      (0/30)             (0/30)             (0/30)       
+U+1b00 Balinese                                      (0/121)            (0/121)            (0/121)      
+U+1d00 Phonetic Extensions                       82% (105/128)      28% (36/128)       28% (36/128)     
+U+1d80 Phonetic Extensions Supplement            59% (38/64)        57% (37/64)        57% (37/64)      
+U+1dc0 Combining Diacritical Marks Supplement    46% (6/13)             (0/13)             (0/13)       
+U+1e00 Latin Extended Additional                100% (246/246)      77% (190/246)      54% (134/246)    
+U+1f00 Greek Extended                           100% (233/233)     100% (233/233)     100% (233/233)    
+U+2000 General Punctuation                       98% (104/106)      61% (65/106)       42% (45/106)     
+U+2070 Superscripts and Subscripts              100% (34/34)        52% (18/34)        52% (18/34)      
+U+20a0 Currency Symbols                         100% (22/22)        27% (6/22)         22% (5/22)       
+U+20d0 Combining Diacritical Marks for Symbols   12% (4/32)             (0/32)             (0/32)       
+U+2100 Letterlike Symbols                        94% (75/79)         7% (6/79)          7% (6/79)       
+U+2150 Number Forms                             100% (50/50)        26% (13/50)        26% (13/50)      
+U+2190 Arrows                                   100% (112/112)       3% (4/112)       100% (112/112)    
+U+2200 Mathematical Operators                    93% (239/256)      10% (27/256)       56% (145/256)    
+U+2300 Miscellaneous Technical                   15% (37/232)        6% (16/232)       50% (117/232)    
+U+2400 Control Pictures                           5% (2/39)          2% (1/39)          2% (1/39)       
+U+2440 Optical Character Recognition                 (0/11)             (0/11)             (0/11)       
+U+2460 Enclosed Alphanumerics                     6% (10/160)           (0/160)            (0/160)      
+U+2500 Box Drawing                                   (0/128)            (0/128)       100% (128/128)    
+U+2580 Block Elements                           100% (32/32)       100% (32/32)       100% (32/32)      
+U+25a0 Geometric Shapes                         100% (96/96)       100% (96/96)       100% (96/96)      
+U+2600 Miscellaneous Symbols                    100% (176/176)      17% (30/176)       84% (149/176)    
+U+2700 Dingbats                                 100% (174/174)          (0/174)        82% (144/174)    
+U+27c0 Miscellaneous Mathematical Symbols-A      17% (7/39)          7% (3/39)          7% (3/39)       
+U+27f0 Supplemental Arrows-A                    100% (16/16)            (0/16)             (0/16)       
+U+2800 Braille Patterns                         100% (256/256)          (0/256)            (0/256)      
+U+2900 Supplemental Arrows-B                      4% (6/128)            (0/128)            (0/128)      
+U+2980 Miscellaneous Mathematical Symbols-B       7% (9/128)         0% (1/128)         0% (1/128)      
+U+2a00 Supplemental Mathematical Operators       27% (71/256)        1% (3/256)            (0/256)      
+U+2b00 Miscellaneous Symbols and Arrows         100% (31/31)        29% (9/31)         29% (9/31)       
+U+2c00 Glagolitic                                    (0/94)             (0/94)             (0/94)       
+U+2c60 Latin Extended-C                         100% (17/17)            (0/17)             (0/17)       
+U+2c80 Coptic                                        (0/114)            (0/114)            (0/114)      
+U+2d00 Georgian Supplement                           (0/38)             (0/38)             (0/38)       
+U+2d30 Tifinagh                                      (0/55)             (0/55)             (0/55)       
+U+2d80 Ethiopic Extended                             (0/79)             (0/79)             (0/79)       
+U+2e00 Supplemental Punctuation                      (0/26)             (0/26)             (0/26)       
+U+2e80 CJK Radicals Supplement                       (0/115)            (0/115)            (0/115)      
+U+2f00 Kangxi Radicals                               (0/214)            (0/214)            (0/214)      
+U+2ff0 Ideographic Description Characters            (0/12)             (0/12)             (0/12)       
+U+3000 CJK Symbols and Punctuation                   (0/64)             (0/64)             (0/64)       
+U+3040 Hiragana                                      (0/93)             (0/93)             (0/93)       
+U+30a0 Katakana                                      (0/96)             (0/96)             (0/96)       
+U+3100 Bopomofo                                      (0/40)             (0/40)             (0/40)       
+U+3130 Hangul Compatibility Jamo                     (0/94)             (0/94)             (0/94)       
+U+3190 Kanbun                                        (0/16)             (0/16)             (0/16)       
+U+31a0 Bopomofo Extended                             (0/24)             (0/24)             (0/24)       
+U+31c0 CJK Strokes                                   (0/16)             (0/16)             (0/16)       
+U+31f0 Katakana Phonetic Extensions                  (0/16)             (0/16)             (0/16)       
+U+3200 Enclosed CJK Letters and Months               (0/242)            (0/242)            (0/242)      
+U+3300 CJK Compatibility                             (0/256)            (0/256)            (0/256)      
+U+3400 CJK Unified Ideographs Extension A            (0/0)              (0/0)              (0/0)        
+U+4dc0 Yijing Hexagram Symbols                       (0/64)             (0/64)             (0/64)       
+U+4e00 CJK Unified Ideographs                        (0/0)              (0/0)              (0/0)        
+U+a000 Yi Syllables                                  (0/1165)           (0/1165)           (0/1165)     
+U+a490 Yi Radicals                                   (0/55)             (0/55)             (0/55)       
+U+a700 Modifier Tone Letters                         (0/27)             (0/27)             (0/27)       
+U+a720 Latin Extended-D                              (0/2)              (0/2)              (0/2)        
+U+a800 Syloti Nagri                                  (0/44)             (0/44)             (0/44)       
+U+a840 Phags-pa                                      (0/56)             (0/56)             (0/56)       
+U+ac00 Hangul Syllables                              (0/0)              (0/0)              (0/0)        
+U+d800 High Surrogates                               (0/0)              (0/0)              (0/0)        
+U+db80 High Private Use Surrogates                   (0/0)              (0/0)              (0/0)        
+U+dc00 Low Surrogates                                (0/0)              (0/0)              (0/0)        
+U+e000 Private Use Area                              (0/0)              (0/0)              (0/0)        
+U+f900 CJK Compatibility Ideographs                  (0/467)            (0/467)            (0/467)      
+U+fb00 Alphabetic Presentation Forms             82% (48/58)        12% (7/58)          3% (2/58)       
+U+fb50 Arabic Presentation Forms-A               11% (70/595)           (0/595)            (0/595)      
+U+fe00 Variation Selectors                      100% (16/16)       100% (16/16)            (0/16)       
+U+fe10 Vertical Forms                                (0/10)             (0/10)             (0/10)       
+U+fe20 Combining Half Marks                          (0/4)              (0/4)              (0/4)        
+U+fe30 CJK Compatibility Forms                       (0/32)             (0/32)             (0/32)       
+U+fe50 Small Form Variants                           (0/26)             (0/26)             (0/26)       
+U+fe70 Arabic Presentation Forms-B              100% (141/141)          (0/141)            (0/141)      
+U+ff00 Halfwidth and Fullwidth Forms                 (0/225)            (0/225)            (0/225)      
+U+fff0 Specials                                  20% (1/5)          20% (1/5)          20% (1/5)        
+U+10000 Linear B Syllabary                            (0/88)             (0/88)             (0/88)       
+U+10080 Linear B Ideograms                            (0/123)            (0/123)            (0/123)      
+U+10100 Aegean Numbers                                (0/57)             (0/57)             (0/57)       
+U+10140 Ancient Greek Numbers                         (0/75)             (0/75)             (0/75)       
+U+10300 Old Italic                                    (0/35)             (0/35)             (0/35)       
+U+10330 Gothic                                        (0/27)             (0/27)             (0/27)       
+U+10380 Ugaritic                                      (0/31)             (0/31)             (0/31)       
+U+103a0 Old Persian                                   (0/50)             (0/50)             (0/50)       
+U+10400 Deseret                                       (0/80)             (0/80)             (0/80)       
+U+10450 Shavian                                       (0/48)             (0/48)             (0/48)       
+U+10480 Osmanya                                       (0/40)             (0/40)             (0/40)       
+U+10800 Cypriot Syllabary                             (0/55)             (0/55)             (0/55)       
+U+10900 Phoenician                                    (0/27)             (0/27)             (0/27)       
+U+10a00 Kharoshthi                                    (0/65)             (0/65)             (0/65)       
+U+12000 Cuneiform                                     (0/879)            (0/879)            (0/879)      
+U+12400 Cuneiform Numbers and Punctuation             (0/103)            (0/103)            (0/103)      
+U+1d000 Byzantine Musical Symbols                     (0/246)            (0/246)            (0/246)      
+U+1d100 Musical Symbols                               (0/219)            (0/219)            (0/219)      
+U+1d200 Ancient Greek Musical Notation                (0/70)             (0/70)             (0/70)       
+U+1d300 Tai Xuan Jing Symbols                         (0/87)             (0/87)             (0/87)       
+U+1d360 Counting Rod Numerals                         (0/18)             (0/18)             (0/18)       
+U+1d400 Mathematical Alphanumeric Symbols             (0/996)            (0/996)            (0/996)      
+U+20000 CJK Unified Ideographs Extension B            (0/0)              (0/0)              (0/0)        
+U+2f800 CJK Compatibility Ideographs Supplement       (0/542)            (0/542)            (0/542)      
+U+e0000 Tags                                          (0/98)             (0/98)             (0/98)       
+U+e0100 Variation Selectors Supplement                (0/240)            (0/240)            (0/240)      
+U+f0000 Supplementary Private Use Area-A              (0/0)              (0/0)              (0/0)        
+U+100000 Supplementary Private Use Area-B              (0/0)              (0/0)              (0/0)        
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/freefont/AUTHORS	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,143 @@
+-*-text-*-
+$Id: AUTHORS,v 1.5 2003/10/08 12:22:24 peterlin Exp $
+
+The free UCS scalable font collection is being maintained by Primo
+Peterlin <primoz.peterlin AT biofiz.mf.uni-lj.si>. The folowing list
+cites the other contributors that contributed to particular ISO 10646
+blocks.
+
+# URW++ Design & Development GmbH <http://www.urwpp.de/>
+
+	Basic Latin				(U+0041-U+007A)
+	Latin-1 Supplement                      (U+00C0-U+00FF) (most)
+	Latin Extended-A                        (U+0100-U+017F)
+	Spacing Modifier Letters		(U+02B0-U+02FF)
+	Mathematical Operators			(U+2200-U+22FF) (parts)
+	Block Elements				(U+2580-U+259F)
+	Dingbats				(U+2700-U+27BF)
+
+# Yannis Haralambous <yannis.haralambous AT enst-bretagne.fr> and John
+  Plaice <plaice AT omega.cse.unsw.edu.au>
+
+	Latin Extended-B                        (U+0180-U+024F)
+	IPA Extensions				(U+0250-U+02AF)
+	Greek					(U+0370-U+03FF)
+	Armenian				(U+0530-U+058F)
+	Hebrew					(U+0590-U+05FF)
+	Arabic					(U+0600-U+06FF)
+	Currency Symbols			(U+20A0-U+20CF)
+	Arabic Presentation Forms-A		(U+FB50-U+FDFF)
+	Arabic Presentation Forms-B		(U+FE70-U+FEFF)
+
+# Young U. Ryu <ryoung AT utdallas.edu>
+
+	Arrows					(U+2190-U+21FF)
+	Mathematical Symbols			(U+2200-U+22FF)
+
+# Valek Filippov <frob AT df.ru>
+
+	Cyrillic				(U+0400-U+04FF)
+
+# Wadalab Kanji Comittee
+
+	Hiragana				(U+3040-U+309F)
+	Katakana				(U+30A0-U+30FF)
+
+# Angelo Haritsis <ah AT computer.org>
+
+	Greek					(U+0370-U+03FF)
+
+# Yannis Haralambous and Virach Sornlertlamvanich
+
+	Thai					(U+0E00-U+0E7F)
+
+# Shaheed R. Haque <srhaque AT iee.org>
+
+	Bengali					(U+0980-U+09FF)
+
+# Sam Stepanyan <sam AT arminco.com>
+
+	Armenian				(U+0530-U+058F)
+
+# Mohamed Ishan <ishan AT mitf.f2s.com>
+
+	Thaana					(U+0780-U+07BF)
+
+# Sushant Kumar Dash <sushant AT writeme.com>
+
+	Oriya					(U+0B00-U+0B7F)
+
+# Harsh Kumar <harshkumar AT vsnl.com>
+
+	Devanagari				(U+0900-U+097F)
+	Bengali					(U+0980-U+09FF)
+	Gurmukhi				(U+0A00-U+0A7F)
+	Gujarati				(U+0A80-U+0AFF)
+
+# Prasad A. Chodavarapu <chprasad AT hotmail.com>
+
+	Telugu					(U+0C00-U+0C7F)
+
+# Frans Velthuis <velthuis AT rc.rug.nl> and Anshuman Pandey
+  <apandey AT u.washington.edu> 
+
+	Devanagari				(U+0900-U+097F)
+
+# Hardip Singh Pannu <HSPannu AT aol.com>
+
+	Gurmukhi				(U+0A00-U+0A7F)
+
+# Jeroen Hellingman <jehe AT kabelfoon.nl>
+
+	Oriya					(U+0B00-U+0B7F)
+	Malayalam				(U+0D00-U+0D7F)
+
+# Thomas Ridgeway <email needed>
+
+	Tamil					(U+0B80-U+0BFF)
+
+# Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>,
+  Prof. Dr. Manfred Kudlek <kudlek AT informatik.uni-hamburg.de>, Olaf
+  Kummer <kummer AT informatik.uni-hamburg.de>, and Jochen Metzinger <
+
+	Ethiopic				(U+1200-U+137F)
+
+# Maxim Iorsh <iorsh AT users.sourceforge.net>
+
+	Hebrew					(U+0590-U+05FF)
+
+
+# Vyacheslav Dikonov <sdiconov AT mail.ru>
+
+	Syriac					(U+0700-U+074A)
+	Braille					(U+2800-U+28FF)
+
+# M.S. Sridhar <mssridhar AT vsnl.com>
+
+	Devanagari				(U+0900-U+097F)
+	Bengali					(U+0980-U+09FF)
+	Gurmukhi				(U+0A00-U+0A7F)
+	Gujarati				(U+0A80-U+0AFF)
+	Oriya					(U+0B00-U+0B7F)
+	Tamil					(U+0B80-U+0BFF)
+	Telugu					(U+0C00-U+0C7F)
+	Kannada					(U+0C80-U+0CFF)	
+	Malayalam				(U+0D00-U+0D7F)
+
+# DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt
+  <nlevitt AT columbia.edu>
+
+	Sinhala					(U+0D80-U+0DFF)
+        
+# Dan Shurovich Chirkov <dansh AT chirkov.com>
+
+	Cyrillic				(U+0400-U+04FF)
+
+# Abbas Izad <abbasizad AT hotmail.com>
+
+	Arabic					(U+0600-U+06FF)
+	Arabic Presentation Forms-A		(U+FB50-U+FDFF)
+	Arabic Presentation Forms-B		(U+FE70-U+FEFF)
+
+Please see the CREDITS file for details on who contributed particular
+subsets of the glyphs in font files.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/freefont/CREDITS	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,389 @@
+-*-text-*-
+$Id: CREDITS,v 1.4 2003/03/27 08:40:03 peterlin Exp $
+
+This file lists the contributors and contributions to the free UCS
+scalable font project.
+
+
+# URW++ Design & Development GmbH <http://www.urwpp.de/>
+
+URW++ donated a set of 35 core PostScript Type 1 fonts to the
+Ghostscript project <http://www.cs.wisc.edu/~ghost/>, to be available
+under the terms of GNU General Public License (GPL).
+
+	Basic Latin				(U+0041-U+007A)
+	Latin-1 Supplement                      (U+00C0-U+00FF)
+	Latin Extended-A                        (U+0100-U+017F)
+	Spacing Modifier Letters		(U+02B0-U+02FF)
+	Mathematical Operators			(U+2200-U+22FF)
+	Block Elements				(U+2580-U+259F)
+	Dingbats				(U+2700-U+27BF)
+
+
+# Yannis Haralambous <yannis.haralambous AT enst-bretagne.fr> and John
+  Plaice <plaice AT omega.cse.unsw.edu.au>
+
+Yannis Haralambous and John Plaice are the authors of Omega
+typesetting system, <http://omega.cse.unsw.edu.au/>. Omega is an
+extension of TeX. Its first release, aims primarily at improving TeX's
+multilingual abilities. In Omega all characters and pointers into
+data-structures are 16-bit wide, instead of 8-bit, thereby eliminating
+many of the trivial limitations of TeX. Omega also allows multiple
+input and output character sets, and uses programmable filters to
+translate from one encoding to another, to perform contextual
+analysis, etc. Internally, Omega uses the universal 16-bit Unicode
+standard character set, based on ISO-10646. These improvements not
+only make it a lot easier for TeX users to cope with multiple or
+complex languages, like Arabic, Indic, Khmer, Chinese, Japanese or
+Korean, in one document, but will also form the basis for future
+developments in other areas, such as native color support and
+hypertext features. ... Fonts for UT1 (omlgc family) and UT2 (omah
+family) are under development: these fonts are in PostScript format
+and visually close to Times and Helvetica font families. (from the
+Omega WWW site). Omega fonts are available subject to GPL
+<http://www.ctan.org/tex-archive/help/Catalogue/entries/omegafonts.html>.
+
+	Latin Extended-B                        (U+0180-U+024F)
+	IPA Extensions				(U+0250-U+02AF)
+	Greek					(U+0370-U+03FF)
+	Armenian				(U+0530-U+058F)
+	Hebrew					(U+0590-U+05FF)
+	Arabic					(U+0600-U+06FF)
+	Currency Symbols			(U+20A0-U+20CF)
+	Arabic Presentation Forms-A		(U+FB50-U+FDFF)
+	Arabic Presentation Forms-B		(U+FE70-U+FEFF)
+
+
+# Valek Filippov <frob AT df.ru>
+
+Valek Filippov added Cyrillic glyphs and composite Latin Extended A to
+the whole set of the abovementioned URW set of 35 PostScript core
+fonts, <ftp:#ftp.gnome.ru/fonts/urw/>. The fonts are available under
+GPL.
+
+	Latin Extended-A                        (U+0100-U+017F)
+	Cyrillic				(U+0400-U+04FF)
+
+
+# Wadalab Kanji Comittee
+
+Between April 1990 and March 1992, Wadalab Kanji Comittee put together
+a series of scalable font files with Japanese scripts, in four forms:
+Sai Micho, Chu Mincho, Cho Kaku and Saimaru. The font files are
+written in custom file format, while tools for conversion into
+Metafont and PostScript Type 1 are also supplied. The Wadalab Kanji
+Comittee has later been dismissed, and the resulting files can be now
+found on the FTP server of the Depertment of Mathematical Engineering
+and Information Physics, Faculty of Engineering, University of Tokyo
+<ftp:#ftp.ipl.t.u-tokyo.ac.jp/Font/>.
+
+	Hiragana				(U+3040-U+309F)
+	Katakana				(U+30A0-U+30FF)
+
+
+# Young U. Ryu <ryoung AT utdallas.edu>
+
+Young Ryu is the author of Txfonts, a set of mathematical symbols
+designed to accompany text typeset in Times or its variants. In the
+documentation, Young adresses the design of mathematical symbols: "The
+Adobe Times fonts are thicker than the CM fonts. Designing math fonts
+for Times based on the rule thickness of Times = , , + , / , < ,
+etc. would result in too thick math symbols, in my opinion. In the TX
+fonts, these glyphs are thinner than those of original Times
+fonts. That is, the rule thickness of these glyphs is around 85% of
+that of the Times fonts, but still thicker than that of the CM fonts."
+TX fonts are are distributed under the GNU public license
+(GPL). Pointers to their location are available on
+<http://www.utdallas.edu/~ryoung/txfonts/>.
+
+	Arrows					(U+2190-U+21FF)
+	Mathematical Symbols			(U+2200-U+22FF)
+
+
+# Angelo Haritsis <ah AT computer.org>
+
+Angelo Haritsis has compiled a set of Greek Type 1 fonts, available on
+<ftp:#ftp.hellug.gr/pub/unix/linux/GREEK/fonts/greekXfonts-Type1-1.1.tgz>.
+The glyphs from this source has been used to compose Greek glyphs in
+FreeSans and FreeMono.
+
+Angelo's licence says: "You can enjoy free use of these fonts for
+educational or commercial purposes.  All derived works should include
+this paragraph.  If you want to change something please let me have
+your changes (via email) so that they can go into the next
+version. You can also send comments etc to the above address."
+
+	Greek					(U+0370-U+03FF)
+
+
+# Yannis Haralambous and Virach Sornlertlamvanich
+
+In 1999, Yannis Haralambous and Virach Sornlertlamvanich made a set of
+glyphs covering the Thai national standard NF3, in both upright and
+slanted shape. The collection of glyphs have been made part of GNU
+intlfonts 1.2 package and is available on
+<ftp:#ftp.gnu.org/pub/gnu/intlfonts/> under GPL.
+
+	Thai					(U+0E00-U+0E7F)
+
+
+# Shaheed R. Haque <srhaque AT iee.org>
+
+Shaheed Haque has developed a basic set of basic Bengali glyphs
+(without ligatures), using ISO10646 encoding. They are available under
+the XFree86 license at <http://www.btinternet.com/~shaheedhaque/>.
+
+Copyright (C) 2001 S.R.Haque <srhaque AT iee.org>.  All Rights Reserved.
+
+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 S.R.HAQUE 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.
+
+Except as contained in this notice, the name of S.R.Haque shall not be
+used in advertising or otherwise to promote the sale, use or other
+dealings in this Software without prior written authorization from
+S.R.Haque.
+
+	Bengali					(U+0980-U+09FF)
+
+
+# Sam Stepanyan <sam AT arminco.com>
+
+Sam Stepanyan created a set of Armenian sans serif glyphs visually
+compatible with Helvetica or Arial. Available on
+<http://www.editum.com.ar/mashtots/html/fonts/ara.tar.gz>. On
+2002-01-24, Sam writes: "Arial Armenian font is free for
+non-commercial use, so it is OK to use under GPL license."
+
+	Armenian				(U+0530-U+058F)
+
+
+# Mohamed Ishan <ishan AT mitf.f2s.com>
+
+Mohamed Ishan has started a Thaana Unicode Project
+<http://thaana.sourceforge.net/> and among other things created a
+couple of Thaana fonts, available under FDL or BDF license.
+
+	Thaana					(U+0780-U+07BF)
+
+
+# Sushant Kumar Dash <sushant AT writeme.com> (*)
+
+Sushant Dash has created a font in his mother tongue, Oriya. As he
+states on his web page <http://members.tripod.com/~sushantdash/>:
+"Please feel free to foreword this mail to your Oriya friends. No
+copyright law is applied for this font. It is totally free!!! Feel
+free to modify this using any font editing tools. This is designed for
+people like me, who are away from Orissa and want to write letters
+home using Computers, but suffer due to unavailability of Oriya
+fonts.(Or the cost of the available packages are too much)."
+
+	Oriya					(U+0B00-U+0B7F)
+
+
+# Harsh Kumar <harshkumar AT vsnl.com>
+
+Harsh Kumar has started BharatBhasha <http://www.bharatbhasha.net/> -
+an effort to provide "FREE software, Tutorial, Source Codes
+etc. available for working in Hindi, Marathi, Gujarati, Gurmukhi and
+Bangla. You can type text, write Web pages or develop Indian Languages
+Applications on Windows and on Linux. We also offer FREE help to
+users, enthusiasts and software developers for their work in Indian
+languages."
+
+	Devanagari				(U+0900-U+097F)
+	Bengali					(U+0980-U+09FF)
+	Gurmukhi				(U+0A00-U+0A7F)
+	Gujarati				(U+0A80-U+0AFF)
+
+
+# Prasad A. Chodavarapu <chprasad AT hotmail.com>
+
+Prasad A. Chodavarapu created Tikkana, a Telugu font available in Type
+1 and TrueType format on <http://chaitanya.bhaavana.net/fonts/>. 
+Tikkana exceeds the Unicode Telugu range with some composite glyphs.
+Available under the GNU General Public License.
+
+	Telugu					(U+0C00-U+0C7F)
+
+
+# Frans Velthuis <velthuis AT rc.rug.nl> and Anshuman Pandey
+  <apandey AT u.washington.edu>
+
+In 1991, Frans Velthuis from the Groningen University, The
+Netherlands, released a Devanagari font as Metafont source, available
+under the terms of GNU GPL. Later, Anshuman Pandey from the Washington
+University, Seattle, USA, took over the maintenance of font. Fonts can
+be found on CTAN, <ftp:#ftp.dante.de/tex-archive/language/devanagari/>. I
+converted the font to Type 1 format using Pter Szab's TeXtrace
+program <http://www.inf.bme.hu/~pts/textrace/> and removed some
+redundant control points with PfaEdit.
+
+	Devanagari				(U+0900-U+097F)
+
+
+# Hardip Singh Pannu <HSPannu AT aol.com>
+
+In 1991, Hardip Singh Pannu has created a free Gurmukhi TrueType font,
+available as regular, bold, oblique and bold oblique form. Its license
+says "Please remember that these fonts are copyrighted (by me) and are
+for non-profit use only." 
+
+	Gurmukhi				(U+0A00-U+0A7F)
+
+
+# Jeroen Hellingman <jehe AT kabelfoon.nl>
+
+Jeroen Hellingman created a set of Malayalam metafonts in 1994, and a
+set of Oriya metafonts in 1996. Malayalam fonts were created as
+uniform stroke only, while Oriya metafonts exist in both uniform and
+modulated stroke. From private communication: "It is my intention to
+release the fonts under GPL, but not all copies around have this
+notice on them." Metafonts can be found on CTAN,
+<ftp:#ftp.dante.de/tex-archive/language/oriya/> and
+<ftp:#ftp.dante.de/tex-archive/language/malayalam/>.
+
+	Oriya					(U+0B00-U+0B7F)
+	Malayalam				(U+0D00-U+0D7F)
+
+
+# Thomas Ridgeway <> (*)
+
+Thomas Ridgeway, then at the Humanities And Arts Computing Center,
+Washington University, Seattle, USA, (now defunct), created a Tamil
+metafont in 1990. Anshuman Pandey from the same university took over
+the maintenance of font. Fonts can be found at CTAN,
+<ftp:#ftp.dante.de/tex-archive/language/tamil/wntamil/>.
+
+	Tamil					(U+0B80-U+0BFF)
+
+
+# Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>,
+  Prof. Dr. Manfred Kudlek <kudlek AT informatik.uni-hamburg.de>, Olaf
+  Kummer <kummer AT informatik.uni-hamburg.de>, and Jochen Metzinger <
+
+Beyene, Kudlek, Kummer and Metzinger from the Theoretical Foundations
+of Computer Science, University of Hamburg, prepared a set of Ethiopic
+metafonts, found on
+<ftp:#ftp.dante.de/tex-archive/language/ethiopia/ethiop/>. They also
+maintain home page on the Ethiopic font project,
+<http://www.informatik.uni-hamburg.de/TGI/mitarbeiter/wimis/kummer/ethiop_eng.html>,
+and can be reached at <ethiop AT informatik.uni-hamburg.de>. The current
+version of fonts is 0.7 (1998), and they are released under GNU GPL. I
+converted the fonts to Type 1 format using Pter Szab's TeXtrace
+program <http://www.inf.bme.hu/~pts/textrace/> and removed some
+redundant control points with PfaEdit.
+
+	Ethiopic				(U+1200-U+137F)
+
+
+# Maxim Iorsh <iorsh AT users.sourceforge.net>
+
+In 2002, Maxim Iorsh started the Culmus project, aiming at providing
+Hebrew-speaking Linux and Unix community with a basic collection of
+Hebrew fonts for X Windows. The fonts are visually compatible with
+URW++ Century Schoolbook L, URW++ Nimbus Sans L and URW++ Nimbus Mono
+L families, respectively, and are released under GNU GPL license. See
+also <http://culmus.sourceforge.net/>.
+
+	Hebrew					(U+0590-U+05FF)
+
+
+# Vyacheslav Dikonov <sdiconov AT mail.ru>
+
+Vyacheslav Dikonov made a braille unicode font that could be merged
+with the UCS fonts to fill the 2800-28FF range completely. (uniform
+scaling is possible to adapt it to any cell size). He also contributed
+a free syriac font, whose glyphs (about half of them) are borrowed
+from the "Carlo Ator" font freely downloadable from
+<http://www.aacf.asso.fr/>. Vyacheslav also filled in a few missing
+spots in the U+2000-U+27FF area, e.g. the box drawing section, sets of
+subscript and superscript digits and capital Roman numbers.
+
+	Syriac					(U+0700-U+074A)
+	Box Drawing				(U+2500-U+257F)
+	Braille					(U+2800-U+28FF)
+
+
+# M.S. Sridhar <mssridhar AT vsnl.com>
+
+M/S Cyberscape Multimedia Limited, Mumbai, developers of Akruti
+Software for Indian Languages (http://www.akruti.com/), have released
+a set of TTF fonts for nine Indian scripts (Devanagari, Gujarati,
+Telugu, Tamil, Malayalam, Kannada, Bengali, Oriya, and Gurumukhi)
+under the GNU General Public License (GPL). You can download the fonts
+from the Free Software Foundation of India WWW site
+(http://www.gnu.org.in/software/software.html#akruti) or from the
+Akruti website.
+
+For any further information or assistance regarding these fonts,
+please contact mssridhar AT vsnl.com.
+
+	Devanagari				(U+0900-U+097F)
+	Bengali					(U+0980-U+09FF)
+	Gurmukhi				(U+0A00-U+0A7F)
+	Gujarati				(U+0A80-U+0AFF)
+	Oriya					(U+0B00-U+0B7F)
+	Tamil					(U+0B80-U+0BFF)
+	Telugu					(U+0C00-U+0C7F)
+	Kannada					(U+0C80-U+0CFF)	
+	Malayalam				(U+0D00-U+0D7F)
+
+
+# DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt
+  <nlevitt AT columbia.edu>
+
+Noah Levitt found out that the Sinhalese fonts available on the site
+<http://www.metta.lk/fonts/> are released under GNU GPL, or,
+precisely, "Public Domain under GNU Licence
+ Produced by DMS
+Electronics for The Sri Lanka Tipitaka Project" (taken from the font
+comment), and took the effort of recoding the font to Unicode.
+
+	Sinhala					(U+0D80-U+0DFF)
+       
+
+# Daniel Shurovich Chirkov <dansh AT chirkov.com>
+
+Dan Chirkov updated the FreeSerif font with the missing Cyrillic
+glyphs needed for conformance to Unicode 3.2. The effort is part of
+the Slavjanskij package for Mac OS X,
+<http://www.versiontracker.com/dyn/moreinfo/macosx/18680>.
+
+	Cyrillic				(U+0400-U+04FF)
+
+
+# Primo Peterlin <primoz.peterlin AT biofiz.mf.uni-lj.si>
+
+Primo Peterlin filled in missing glyphs here and there (e.g. Latin
+Extended-B and IPA Extensions ranges in the FreeMono familiy), and
+created the following UCS blocks:
+
+	Latin Extended-B                        (U+0180-U+024F)
+	IPA Extensions				(U+0250-U+02AF)
+	Arrows					(U+2190-U+21FF)
+	Box Drawing				(U+2500-U+257F)
+	Block Elements				(U+2580-U+259F)
+	Geometrical Shapes			(U+25A0-U+25FF)
+
+
+Notes:
+
+*: The glyph collection looks license-compatible, but its author has
+   not yet replied and agreed on his/her work being used in part of
+   this glyph collection.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/freefont/ChangeLog	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,630 @@
+2003-10-08  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# FreeMonoOblique.sfd, FreeSerifBoldItalic.sfd,
+	FreeSerifItalic.sfd - applied Josef Segur's corrections from
+	Oct. 5.
+
+2003-10-02  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd - Abbas Izad's contributed Arabic/Farsi
+	characters added.
+	
+	# sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+	sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+	sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+	sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+	sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+	sfd/FreeSerifBoldItalic.sfd - Combining characters (U+0300 -
+	U+036F) moved left, so that they have negative horizontal values
+	and zero advance width.
+
+2003-09-15  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd - Started working
+	on super- and subscripts. 
+
+2003-09-12  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSans.sfd, sfd/FreeSerif.sfd - Added some missing
+	 Hiragana and Katakana characters.
+
+	# sfd/FreeSansBold.sfd - Cleared background characters in Latin
+	Extended-A. Added some automatically constructed characters in
+	Latin Extended-B. Started with superscripts and subscripts.
+
+	# sfd/FreeSans.sfd - Subscript numerals (U+2080-U+2089) completed.
+	
+2003-05-19  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd - Thai characters po pla and bo baimai
+	swapped; Thai character fongman corrected; all courtesy Theppitak
+	Karoonboonyanan.
+
+2003-05-17  Panayotis Katsaloulis  <panayotis@panayotis.com>
+
+	# sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd,
+	sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - Full support
+	of all ancient greek glyphs
+
+2003-05-15  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# tools/KerningNumerals.pl - A Perl script for moving kerning
+	information from ASCII numerals (U+0030...) to characters in the
+	Adobe corporate use area (U+F6xx).
+
+	# sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd,
+	sfd/FreeSansBoldOblique.sfd - Created kerned numerals in the Adobe
+	corporate use area (U+F6xx) and moved kerning information from
+	ASCII numerals to the kerned numerals.
+
+2003-05-14  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSans.sfd - First approximation of super- and subscript
+	numerals and vulgar fractions.
+
+	# sfd/FreeSerif.sfd - Super- and subscript numerals complete,
+	vulgar fractions completed and redone as references rather than
+	outlines.
+
+2003-05-12  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd - Clean-up of the Cyrillic letters added on
+	March 27; super- and subscripts, vulgar fractions.
+
+2003-05-09  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMonoBold.sfd - Added a couple of characters to
+	the Latin Extended-B area and the IPA extensions area.
+
+2003-05-08  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerifBoldItalic.sfd - Added a couple of characters to
+	the Latin Extended-B area.
+
+	# sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd,
+	sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - ASCII
+	numerals now monospaced; kerned numerals moved to Adobe corporate
+	use area
+	(U+F6xx).
+
+2003-05-07  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd - Roman numerals now more complete.
+
+	# sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - Accented
+	characters added in the Latin Extended-B area.
+
+	# sfd/FreeSans.sfd - Greek accents added in the Greek Extended
+	area, characters added in the Latin Extended-B area, Roman
+	numerals added.
+
+	# sfd/FreeMonoOblique.sfd - Kerning pairs removed (what were they
+	doing in a monospaced font, anyway?).
+
+	# sfd/FreeMonoBoldOblique.sfd - Additions in Latin Extended-B and
+	Basic Greek.
+
+	# sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd,
+	sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+	sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd,
+	sfd/FreeSansBoldOblique.sfd - Major cleanup (fixed widths, open
+	paths, path directions (clockwise/counter-clockwise), points
+	rounded to integer values; outlines simplified etc.)
+
+2003-05-06  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# tools/OS2UnicodeRange - A simple script to display OS/2 Unicode
+	range table in TrueType fonts.
+
+	# sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - ASCII numerals now
+	monospaced; kerned numerals moved to Adobe corporate use area
+	(U+F6xx). FreeSans is done, FreeSansBold half-way.
+
+	# sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+	sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+	sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+	sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+	sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+	sfd/FreeSerifBoldItalic.sfd - Added 2003 in copyright info.
+
+2003-03-27  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd - Cyrillic and Cyrillic Supplement blocks
+	brought to conformance with Unicode 3.2, courtesy Daniel Shurovich
+	Chirkov.
+
+2003-03-19  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - somewhat wider
+	germandbls (U+00DF), due to complaints by Walter Schmidt.
+
+2003-03-18  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSans.sfd - Added Sinhala glyphs from the Tipitaka
+	project <http://www.metta.lk>, recoded to Unicode by Noah Levitt.
+
+2003-02-19  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSans.sfd - Minor changes on mathematical operators.
+
+2003-02-18  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - minor cleanup of glyph backgrounds; changed
+	integral signs (U+222B - U+2230)
+
+2003-02-05  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSans.sfd - added a couple of glyphs in the IPA and
+	African Latin ranges.
+
+2003-01-30  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+	sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBold.sfd,
+	sfd/FreeMonoBoldOblique.sfd - Corrected Maltese Hbar (U+0126)
+	and/or hbar (U+0127).
+
+2003-01-28  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerifItalic.sfd - Corrected Maltese hbar (U+0127).
+
+2002-12-18  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# tools/ConvertFont - PfaEdit script for converting SFD files to
+	TrueType fonts.
+
+	# sfd/FreeSans.sfd - Added Tamil and Kannada glyphs from the
+	Akruti Indic fonts.
+
+2002-12-17  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSans.sfd - Added Devanagari and Gujarati glyphs from the
+	Akruti Indic fonts.
+
+	# www/index.html - Added information on Rogier van Dalen's tools.
+
+	# AUTHORS - Added M.S. Sridhar.
+
+	# CREDITS - Correct spelling of Culmus project. Added M.S. Sridhar.
+
+2002-12-06  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - Added Braille glyphs, courtesy Vyacheslav
+	Dikonov.
+
+	# sfd/FreeSans.sfd - Added Unicode Syriac glyphs, courtesy
+	Vyacheslav Dikonov.
+
+2002-10-11  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# www/index.html - Added information on the availability of the
+	Debian GNU/Linux package.
+
+	# sfd/FreeSerif.sfd, sfd/FreeSans.sfd - added some kern pairs
+	beyond Latin-1 area.
+
+	# sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd,
+	sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - re-introduced
+	all the emtpy glyph slots (changes from Sep 23 made PfaEdit
+	crash). 
+
+2002-09-23  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd,
+	sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - imported
+	kerning information from the URW++ AFM files
+
+2002-09-11  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+	sfd/FreeMonoOblique.sfd - updated Hebrew parts to comply with
+	Culmus v0.6.
+
+	# sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+	sfd/FreeSansOblique.sfd - Added Danilo Segan's Serbian Cyrillic
+	glyphs; updated Hebrew parts to comply with Culmus v0.6.
+
+2002-09-09  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+	sfd/FreeMonoOblique.sfd, sfd/FreeSans.sfd,
+	sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+	sfd/FreeSansOblique.sfd - Updated Cyrillic part to match
+	Filippov's 1.0.7pre14
+
+	# sfd/FreeSansOblique.sfd - added Sam Stepanyan's Armenian glyphs
+	from FreeSans (skewed for 12 degrees).
+
+2002-09-06  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd,
+	sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd - Added Maxim
+	Iorsh's Hebrew characters.
+
+2002-08-29  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd,
+	sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd - Added Maxim
+	Iorsh's Hebrew characters.
+
+	# AUTHORS, CREDITS - Added Maxim Iorsh as author.
+
+2002-08-28  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# www/index.html - Added information of Microsoft's withdrawal of
+	freely available Unicode TrueType fonts
+
+	# www/resources.html - Added link to Maxim Iorsh's Culmus project.
+	
+2002-07-26  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - Added a couple of characters (Arrows area).
+
+2002-06-11  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning
+	perispomeni in Greek politoniko.
+
+2002-05-23  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning
+	psili in Greek politoniko. Also added two working variants of
+	chars in the IPA range.
+
+2002-05-15  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, sfd/FreeSerif.sfd,
+	sfd/FreeSerifBold.sfd - Deleted explicit ".notdef" character with
+	no contours.
+
+2002-05-14  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+	sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+	sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+	sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+	sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+	sfd/FreeSerifBoldItalic.sfd - The new version of PfaEdit saves
+	correctly formed Panose and LineGap lines.
+
+	# sfd/FreeSansBoldOblique.sfd - Filled-in the missing TTFWidth and
+	TTFWeight values.
+
+2002-05-09  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSans.sfd - Added diacritics to the Spacing Modifier
+	Letters and Combining Diacritical Marks areas. Added composed
+	glyphs to the Latin Extended-B area.
+
+2002-05-07  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+	sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+	sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+	sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+	sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+	sfd/FreeSerifBoldItalic.sfd - Updated Panose information with data
+	provided by Josef W. Segur. Updated TTF headers with English and
+	Slovenian text.
+
+2002-04-30  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMonoBold.sfd - Working on Greek small letters. Several
+	minor changes (lower carons etc.)
+
+2002-04-29  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# FreeMonoBoldOblique.sfd - Started adding Greek.
+
+	# sfd/FreeMonoBold.sfd - Added glyphs in the Geometrical Shapes
+	and Miscellaneous Symbols area. Harmonizing Greek with Latin. Done
+	with capitals.
+
+	# sfd/FreeMono.sfd - Deleted the explicit .notdef character. Added
+	one glyph to the Geometrical Shapes area, which is now completed;
+	added three glyphs to the Miscellaneous Symbols area. Harmonizing
+	Greek with Latin. Done with the capitals.
+
+2002-04-26  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSans.sfd - Adjusted accent positions on several glyphs
+	in the Latin Extended-A area.
+
+2002-04-25  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMonoBold.sfd - Box Drawing area completed. Added a
+	couple of glyphs in the Geometrical Shapes area.
+
+	# sfd/FreeMono.sfd - Small corrections in the Box Drawing area.
+
+2002-04-24  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - Box Drawing area completed.
+
+2002-04-23  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# tools/WGL4.lst - corrected.
+
+	# sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Box Drawing
+	area.
+
+2002-04-22  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Latin
+	Extended-B and Greek.
+
+2002-04-19  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd - Somewhat cleaner chess figures.
+
+	# tools/MES-2.txt, tools/MES-2.lst - Corrected list (it is not
+	203C-203E, it is 203C and 203E).
+
+	# sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+	sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+	sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+	sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+	sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+	sfd/FreeSerifBoldItalic.sfd - Changed "Family Name" from Free to
+	FreeSerif, FreeSans and FreeMono, as appropriate. Changed Font
+	Modifiers from MonoBold etc. to Bold, Italic, Oblique, BoldOblique
+	and BoldItalic.
+
+2002-04-18  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+	sfd/FreeMonoBoldOblique.sfd - Corrected metrics; now all character
+	widths are set to 600.
+
+2002-04-17  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd - Corrected glyphs in the Box Drawing area and
+	Block Elements area, which should extend through the ascender#and
+	descender# height.
+
+	# sfd/FreeMonoBold.sfd - Continued working on harmonizing Greek
+	letters with Latin and Cyrillic.
+
+	# sfd/FreeMonoBold.sfd - Added some box drawing characters.
+
+2002-04-16  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# www/design-notes.html - Updated notes on stroke width for
+	symbols in Free Mono Bold.
+
+	# sfd/FreeMono.sfd - Added a handful of characters in the
+	Miscellaneous Symbols area.
+
+	# sfd/FreeMonoBoldOblique.sfd - Added subscripts, superscripts and
+	vulgar fractions.
+
+	# sfd/FreeMonoBold.sfd - Started harmonizing Greek letters with
+	Latin and Cyrillic.
+
+	# sfd/FreeMonoBold.sfd - Added subscripts, superscripts and vulgar
+	fractions.
+
+2002-04-15  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# www/design-notes.html - Updated notes on super-/subscripts in
+	Free Mono Bold. Separate subsections for Free Mono regular and
+	Free Mono Bold.
+
+2002-04-12  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd - Added Ethiopian glyphs, converted from the
+	Metafont sources from TGI, Universitt Hamburg (authors Berhanu
+	Beyene, Prof. Dr. Manfred Kudlek, Olaf Kummer, and Jochen
+	Metzinger) using Szabo's TeXtrace and retouched using
+	PfaEdit. Ethiopian metafonts are released under GNU GPL,
+	<http://www.informatik.uni-hamburg.de/TGI/mitarbeiter/wimis/kummer/ethiop_eng.html>.
+
+	# sfd/FreeMonoBold.sfd - Added 40 characters, mostly in the Latin
+	Extended-B and IPA Extensions areas.
+
+2002-04-11  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - Added a handful of characters in the Latin
+	Extended-B, IPA Extensions, Currency Symbols and Miscellaneous
+	Symbols areas.
+
+2002-04-09  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - Correcting accent positioning in the Extended
+	Greek area; adding a couple of characters here and there. Still 20
+	characters short of MES-2 conformance.
+
+2002-04-08  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - Added some characters in the Arrows area;
+	more or less completed Extended Greek area (accents still need to
+	be fine-tuned).
+
+2002-04-05  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - Modern non-Russian Cyrilic mostly completed.
+
+	# sfd/FreeMonoOblique.sfd - Synchronized with FreeMono.
+
+	# sfd/FreeSerif.sfd - Added Thomas Ridgeway's Tamil characters
+	(converted from Metafont and edited somehwat).
+	
+2002-04-04  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMonoOblique.sfd - Armenian letters added.
+
+	# sfd/FreeMonoBold.sfd - Serbian Cyrillic letters dje, tshe, lje
+	and nje corrected.
+
+	# sfd/FreeMono.sfd - Serbian Cyrillic letters dje and tshe
+	corrected. Some other non-Russian Cyrillic letters modified and
+	"welded together".
+
+2002-04-03  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - Added more or less complete Armenian
+	area. The glyphs are a tidied-up version based on the Armenian
+	Courier on the <http://www.cilicia.com/armo8.html>. Now we have
+	1673 characters.
+
+2002-03-28  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - Added some mathematical symbols.
+
+2002-03-26  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSans.sfd - took H.S. Pannu's Gurmukhi from FreeSerif. It
+	actually fits to FreeSans much better. It seems I'll have to look
+	for another Gurmukhi font with modulated stroke for FreeSerif.
+
+	# sfd/FreeSerifItalic.sfd - replaced existing Hebrew glyphs by
+	those from FreeSerif (slanted for 15.5 degrees).
+
+	# sfd/FreeSerif.sfd - Added dotted Hebrew letters. Changed barred H.
+
+	# sfd/FreeMono.sfd - Completed vulgar fractions; minor changes in
+	Greek; added some mathematical operators.
+
+	# sfd/FreeMonoBold.sfd - added 12 characters to Latin Extended-B
+	and IPA Extensions areas (total 984).
+
+2002-03-25  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMonoBold.sfd - started adding Latin Extended-B and IPA
+	Extensions.
+
+	# sfd/FreeMono.sfd - Minor cosmetic changes; cleaning up Greek
+	(removing redundant control points), added some non-European
+	Cyrillic glyphs as a test.
+
+2002-03-22  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - Some minor modifications; letters in Latin
+	Extended-B area "welded" together.
+
+2002-03-20  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# www/index.html - finally linked the resources and design notes
+	pages.
+
+	# www/design-notes.html - added scaling information for super- and
+	subscript numerals in FreeMono.
+
+2002-03-19  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - the Latin Extended-B and IPA Extension area
+	characters moved from FreeMono and skewed for 12 degrees.
+
+2002-03-18  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - added a dozen or two of new characters, in
+	particular in the Latin Extended-B and IPA Extension area.
+
+2002-03-15  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - added a dozen of two of new characters, in
+	particular in the IPA Extension area.
+
+	# www/design-notes.html - Corrected data for x-height in FreeMono;
+	information on constructing small caps.
+
+2002-03-14  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeMono.sfd - added three smiley characters to the
+	Miscallaneous Symbols area.
+
+2002-03-10  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd - Anshuman Pandey has only converted Gurmukhi
+	from TrueType to Metafont; the original author of Gurkmukhi font
+	is Hardip Singh Pannu <http://members.aol.com/hspannu/punjabi.html>.
+	Got the permission from him to include the Gurmukhi glyph set.
+
+2002-03-08  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd - Added some more glyphs in the Mathematical
+	Symbols area to a total number of 3374.
+
+2002-03-06  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd - Added a basic Gurmukhi set.
+
+	# www/design-notes.html - started a page on design notes
+
+	# sfd/FreeMono.sfd - realized that glyphs in the Box Drawing area
+	and Block Elements area should extend through the ascender#and
+	descender# height, and corrected it.
+
+	# sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd - added some musical
+	glyphs, linking "no-break space" to space, "soft hyphen" to
+	hyphen-minus etc.
+
+2002-03-05  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# tools/WGL4.lst - Added Windows Glyph List 4.0
+
+	# tools/LigatureList.pl - Wrote a Perl script, which lists the
+	GSUB list (ligature list) of a OpenType font.
+
+	# sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd,
+	sfd/FreeSerifItalic.sfd - auxilliary Hebrew glyphs added. They are
+	too light compared with Latin and will be substituted with better
+	ones.
+
+2002-03-04  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd - Added some more glyphs to the Mathematical
+	Operators area (page 0x22).
+
+	# sfd/FreeSerif.sfd - Incomplete and fragmentary support for
+	Devanagari, originating from Harsh Kumar's Shusha fonts was
+	replaced by Frans Velthuis' Devanagari metafont, now maintained by
+	Anshuman Pandey <apandey@u.washington.edu> and available under
+	GPL. Until I figure out how to provide glyph substitution table in
+	OpenType, only the Unicode part is there.
+
+2002-02-28  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# ChangeLog file created
+
+	# sfd/FreeSerif.sfd - Added some Telugu glyphs to page 0x0C,
+	courtesy  Prasad A. Chodavarapu <http://chaitanya.bhaavana.net/fonts/>
+
+	# sfd/FreeSerif.sfd - Added some glyphs to the Miscellaneous
+	Symbols page (0x26).
+	
+2002-02-26  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# mailing lists freefont-announce and freefont-bugs created
+
+2002-02-25  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/FreeSerif.sfd - Added a couple of glyphs in Mathematics
+	Operators area.
+
+	# sfd/FreeMono.sfd 
+	- Added some more glyphs, in particular in the Mathematical
+	Operators section.
+	- Changed FamilyName to Free, FontName to FreeMono, and Full name
+	to "Free Monospaced".
+
+2002-02-20  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# sfd/ directory added containing FreeSerif, FreeSans and FreeMono
+	families.
+
+	# tools/ directory added containing lists with characters required
+	for MES (Multilinguag European Subset) compliance.
+
+	# tools/mes-list-expand.pl created - a Perl script for expanding MES
+	ranges into simple one-char-per-line format
+
+	# tools/CheckConformance.pl created - a Perl script for checking
+	conformance of a font file with a given coded character set
+
+	# homepage <http://www.freesoftware.fsf.org/freefont/> created
+
+2002-02-19  Primoz Peterlin  <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+	# freefont (Free UCS Scalable Fonts) project approved on
+	savannah.gnu.org: <http://savannah.gnu.org/projects/freefont/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/freefont/INSTALL	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,57 @@
+-*-mode:text;-*-
+$Id: INSTALL,v 1.1 2002/12/12 15:09:05 peterlin Exp $
+
+
+		Installing the Free UCS outline fonts
+		=====================================
+
+
+These installation notes are supposed to provide a helpful guidance
+through the process of installation of free UCS outline fonts. They
+can probably be significantly improved. Please direct your comments,
+suggestions for improvements, criticisms etc. to Primoz PETERLIN
+<primoz.peterlin@biofiz.mf.uni-lj.si> and thus help improve them.
+
+
+1. UNIX/GNU/Linux/BSD Systems
+
+The rather awkward "UNIX/GNU/Linux/BSD" agglomeration is used to
+denote any system capable of running XFree86 server with FreeType
+<http://www.freetype.org/>, a high-quality free font rasterizer.
+
+1.1 The rough way
+
+Unfortunately, hardly any other way exists at the moment.
+
+1) Fetch the freefont-ttf.tar.gz package with Free UCS outline fonts
+   in the TrueType format.
+
+2) Unpack TrueType fonts into a suitable directory,
+   e.g. /usr/share/fonts/default/TrueType/.
+
+3) If you have chosen any other directory, make sure the directory you
+   used to install the fonts is listed in the path searched by the X
+   Font Server. Append the directory to the "catalogue=" in the
+   /etc/X11/fs/config.
+
+4) Run ttmkfdir in the directory where you unpacked the fonts.
+
+
+1.2 Debian GNU/Linux
+
+Users of Debian GNU/Linux system will probably want to use the
+pre-packed Debian package, as available from the Debian site, 
+<http://packages.debian.org/unstable/x11/ttf-freefont.html>, or
+any of its mirrors. You can install them by issuing the command
+
+apt-get install ttf-freefont
+
+
+2. Microsoft Windows 95/98/NT/2000/XP
+
+To be written.
+
+
+3. MacOS
+
+To be written.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/freefont/README	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,113 @@
+-*-text-*-
+$Id: README,v 1.1 2002/11/28 10:10:30 peterlin Exp $
+
+Summary: This project aims to privide a set of free scalable
+(PostScript Type0, TrueType, OpenType...) fonts covering the ISO
+10646/Unicode UCS (Universal Character Set).
+
+
+Why do we need free scalable UCS fonts?
+
+A large number of free software users switched from free X11
+bitmapped fonts to proprietary Microsoft Truetype fonts, as a) they
+used to be freely downloaded from Microsoft Typography page
+<http://www.microsoft.com/typography/free.htm>, b) they contain a more
+or less decent subsed of the ISO 10646 UCS (Universal Character Set),
+c) they are high-quality, well hinted scalable Truetype fonts, and d)
+Freetype <http://www.freetype.org/>, a free high-quality Truetype font
+renderer exists and has been integrated into the latest release of
+XFree86, the free X11 server.
+
+Building a dependence on non-free software, even a niche one like
+fonts, is dangerous. Microsoft Truetype core fonts are not free, they
+are just costless. For now, at least. Citing the TrueType core fonts
+for the Web FAQ <http://www.microsoft.com/typography/faq/faq8.htm>:
+"You may only redistribute the fonts in their original form (.exe or
+.sit.hqx) and with their original file name from your Web site or
+intranet site. You must not supply the fonts, or any derivative fonts
+based on them, in any form that adds value to commercial products,
+such as CD-ROM or disk based multimedia programs, application software
+or utilities." As of August 2002, however, the fonts are not
+anymore available on the Web, which makes the situation clearer.
+
+Aren't there any free high-quality scalable fonts? Yes, there are.
+URW++, a German digital typefoundry, released their own version of the
+35 Postscript Type 1 core fonts under GPL as their donation to the
+Ghostscript project <http://www.gimp.org/fonts.html>. The Wadalab
+Kanji comittee has produced Type 1 font files with thousands of
+filigree Japanese glyphs <ftp:#ftp.ipl.t.u-tokyo.ac.jp/pub/Font/>.
+Yannis Haralambous has drawn beautiful glyphs for the Omega
+typesetting system <http://omega.cse.unsw.edu.au:8080/>. And so
+on. Scattered around the internet there are numerous other free
+resources for other national scripts, many of them aiming to be a
+suitable match for Latin fonts like Times or Helvetica.
+
+
+What do we plan to achieve, and how?
+
+Our aim is to collect available resources, fill in the missing pieces,
+and provide a set of free high-quality scalable (Type 1 and Truetype)
+UCS fonts, released under GPL. 
+
+Free UCS scalable fonts will cover the following character sets
+
+# ISO 8859 parts 1-15
+# CEN MES-3 European Unicode Subset
+  http://www.evertype.com/standards/iso10646/pdf/cwa13873.pdf
+# IBM/Microsoft code pages 437, 850, 852, 1250, 1252 and more
+# Microsoft/Adobe Windows Glyph List 4 (WGL4)
+  http://partners.adobe.com/asn/developer/opentype/appendices/wgl4.html
+# KOI8-R and KOI8-RU
+# DEC VT100 graphics symbols
+# International Phonetic Alphabet
+# Arabic, Hebrew, Armenian, Georgian, Ethiopian, Thai and Lao alphabets,
+  including Arabic presentation forms A/B
+# Japanese Katakana and Hiragana
+# mathematical symbols, including the whole TeX repertoire of symbols
+# APL symbols
+  etc.
+
+A free Postscript font editor, George Williams's Pfaedit
+<http://pfaedit.sourceforge.net/> will be used for creating new
+glyphs.
+
+Which font shapes should be made? As historical style terms like
+Renaissance or Baroque letterforms cannot be applied beyond
+Latin/Cyrillic/Greek scripts to any greater extent than Kufi or Nashki
+can be applied beyond Arabic script, a smaller subset of styles will
+be made: one monospaced and two proportional (one with uniform stroke
+and one with modulated) will be made at the start.
+
+In the beginning, however, we don't believe that Truetype hinting will
+be good enough to compete with neither the hand-crafted bitmapped
+fonts at small sizes, nor with commercial TrueType fonts. A companion
+program for modifying the TrueType font tables, TtfMod, is in the
+works, though: <http://pfaedit.sourceforge.net/TtfMod/>. For
+applications like xterm, users are referred to the existing UCS bitmap
+fonts, <http://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html>.
+
+
+What do the file suffices mean?
+
+The files with .sfd (Spline Font Database) are in PfaEdit's native
+format. Please use these if you plan to modify the font files. PfaEdit
+can export these to mostly any existing font file format.
+
+TrueType fonts for immediate consumption are the files with the .ttf
+(TrueType Font) suffix. You can use them directly, e.g. with the X
+font server.
+
+The files with .ps (PostScript) suffix are not font files at all -
+they are merely PostScript files with glyph tables, which can be used
+for overview, which glyphs are contained in which font file.
+
+You may have noticed the lacking of PostScript Type 1 (.pfa/.pfb) font
+files. Type 1 format does not support large (> 256) encoding vectors,
+so they can not be used with ISO 10646 encoding. If your printer
+supports it, you can use Type 0 format, though. Please use PfaEdit for
+conversion to Type 0.
+
+
+Primoz Peterlin, <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+Free UCS scalable fonts: ftp:#biofiz.mf.uni-lj.si/pub/fonts/elbrus/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/freemono.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,174 @@
+TCPDFFontDescriptor.define('freemono') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='FreeMono';
+  font[:desc]={'Ascent'=>1057,'Descent'=>-319,'CapHeight'=>1057,'Flags'=>32,'FontBBox'=>'[-557 -319 699 1057]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600}
+  font[:up]=-100;
+  font[:ut]=50;
+  font[:cw]={
+	13=>333, 32=>600, 33=>600, 34=>600, 35=>600, 36=>600, 37=>600, 38=>600, 39=>600, 40=>600, 41=>600, 42=>600, 43=>600, 44=>600, 45=>600, 46=>600, 
+	47=>600, 48=>600, 49=>600, 50=>600, 51=>600, 52=>600, 53=>600, 54=>600, 55=>600, 56=>600, 57=>600, 58=>600, 59=>600, 60=>600, 61=>600, 62=>600, 
+	63=>600, 64=>600, 65=>600, 66=>600, 67=>600, 68=>600, 69=>600, 70=>600, 71=>600, 72=>600, 73=>600, 74=>600, 75=>600, 76=>600, 77=>600, 78=>600, 
+	79=>600, 80=>600, 81=>600, 82=>600, 83=>600, 84=>600, 85=>600, 86=>600, 87=>600, 88=>600, 89=>600, 90=>600, 91=>600, 92=>600, 93=>600, 94=>600, 
+	95=>600, 96=>600, 97=>600, 98=>600, 99=>600, 100=>600, 101=>600, 102=>600, 103=>600, 104=>600, 105=>600, 106=>600, 107=>600, 108=>600, 109=>600, 110=>600, 
+	111=>600, 112=>600, 113=>600, 114=>600, 115=>600, 116=>600, 117=>600, 118=>600, 119=>600, 120=>600, 121=>600, 122=>600, 123=>600, 124=>600, 125=>600, 126=>600, 
+	8364=>600, 1027=>600, 8218=>600, 402=>600, 8222=>600, 8230=>600, 8224=>600, 8225=>600, 710=>600, 8240=>600, 352=>600, 8249=>600, 338=>600, 1036=>600, 381=>600, 1039=>600, 
+	8216=>600, 8217=>600, 8220=>600, 8221=>600, 8226=>600, 8211=>600, 8212=>600, 732=>600, 8482=>600, 353=>600, 8250=>600, 339=>600, 1116=>600, 382=>600, 376=>600, 160=>600, 
+	161=>600, 162=>600, 163=>600, 164=>600, 165=>600, 166=>600, 167=>600, 168=>600, 169=>600, 170=>600, 171=>600, 172=>600, 173=>600, 174=>600, 175=>600, 176=>600, 
+	177=>600, 178=>600, 179=>600, 180=>600, 181=>600, 182=>600, 183=>600, 184=>600, 185=>600, 186=>600, 187=>600, 188=>600, 189=>600, 190=>600, 191=>600, 192=>600, 
+	193=>600, 194=>600, 195=>600, 196=>600, 197=>600, 198=>600, 199=>600, 200=>600, 201=>600, 202=>600, 203=>600, 204=>600, 205=>600, 206=>600, 207=>600, 208=>600, 
+	209=>600, 210=>600, 211=>600, 212=>600, 213=>600, 214=>600, 215=>600, 216=>600, 217=>600, 218=>600, 219=>600, 220=>600, 221=>600, 222=>600, 223=>600, 224=>600, 
+	225=>600, 226=>600, 227=>600, 228=>600, 229=>600, 230=>600, 231=>600, 232=>600, 233=>600, 234=>600, 235=>600, 236=>600, 237=>600, 238=>600, 239=>600, 240=>600, 
+	241=>600, 242=>600, 243=>600, 244=>600, 245=>600, 246=>600, 247=>600, 248=>600, 249=>600, 250=>600, 251=>600, 252=>600, 253=>600, 254=>600, 255=>600, 256=>600, 
+	257=>600, 258=>600, 259=>600, 260=>600, 261=>600, 262=>600, 263=>600, 264=>600, 265=>600, 266=>600, 267=>600, 268=>600, 269=>600, 270=>600, 271=>600, 272=>600, 
+	273=>600, 274=>600, 275=>600, 276=>600, 277=>600, 278=>600, 279=>600, 280=>600, 281=>600, 282=>600, 283=>600, 284=>600, 285=>600, 286=>600, 287=>600, 288=>600, 
+	289=>600, 290=>600, 291=>600, 292=>600, 293=>600, 294=>600, 295=>600, 296=>600, 297=>600, 298=>600, 299=>600, 300=>600, 301=>600, 302=>600, 303=>600, 304=>600, 
+	305=>600, 306=>600, 307=>600, 308=>600, 309=>600, 310=>600, 311=>600, 312=>600, 313=>600, 314=>600, 315=>600, 316=>600, 317=>600, 318=>600, 319=>600, 320=>600, 
+	321=>600, 322=>600, 323=>600, 324=>600, 325=>600, 326=>600, 327=>600, 328=>600, 329=>600, 330=>600, 331=>600, 332=>600, 333=>600, 334=>600, 335=>600, 336=>600, 
+	337=>600, 340=>600, 341=>600, 342=>600, 343=>600, 344=>600, 345=>600, 346=>600, 347=>600, 348=>600, 349=>600, 350=>600, 351=>600, 354=>600, 355=>600, 356=>600, 
+	357=>600, 358=>600, 359=>600, 360=>600, 361=>600, 362=>600, 363=>600, 364=>600, 365=>600, 366=>600, 367=>600, 368=>600, 369=>600, 370=>600, 371=>600, 372=>600, 
+	373=>600, 374=>600, 375=>600, 377=>600, 378=>600, 379=>600, 380=>600, 383=>600, 384=>600, 385=>600, 386=>600, 387=>600, 388=>600, 389=>600, 390=>600, 391=>600, 
+	392=>600, 393=>600, 394=>600, 395=>600, 396=>600, 397=>600, 398=>600, 399=>600, 400=>600, 401=>600, 403=>600, 404=>600, 405=>600, 406=>600, 407=>600, 408=>600, 
+	409=>600, 410=>600, 411=>600, 412=>600, 413=>600, 414=>600, 415=>600, 416=>600, 417=>600, 418=>600, 419=>600, 420=>600, 421=>600, 422=>600, 423=>600, 424=>600, 
+	425=>600, 426=>600, 427=>600, 428=>600, 429=>600, 430=>600, 431=>600, 432=>600, 433=>600, 434=>600, 435=>600, 436=>600, 437=>600, 438=>600, 439=>600, 440=>600, 
+	441=>600, 442=>600, 443=>600, 444=>600, 445=>600, 446=>600, 447=>600, 448=>600, 449=>600, 450=>600, 451=>600, 452=>600, 453=>600, 454=>600, 455=>600, 456=>600, 
+	457=>600, 458=>600, 459=>600, 460=>600, 461=>600, 462=>600, 463=>600, 464=>600, 465=>600, 466=>600, 467=>600, 468=>600, 469=>600, 470=>600, 471=>600, 472=>600, 
+	473=>600, 474=>600, 475=>600, 476=>600, 477=>600, 478=>600, 479=>600, 480=>600, 481=>600, 482=>600, 483=>600, 484=>600, 485=>600, 486=>600, 487=>600, 488=>600, 
+	489=>600, 490=>600, 491=>600, 492=>600, 493=>600, 494=>600, 495=>600, 496=>600, 497=>600, 498=>600, 499=>600, 500=>600, 501=>600, 502=>600, 503=>600, 504=>600, 
+	505=>600, 506=>600, 507=>600, 508=>600, 509=>600, 510=>600, 511=>600, 512=>600, 513=>600, 514=>600, 515=>600, 516=>600, 517=>600, 518=>600, 519=>600, 520=>600, 
+	521=>600, 522=>600, 523=>600, 524=>600, 525=>600, 526=>600, 527=>600, 528=>600, 529=>600, 530=>600, 531=>600, 532=>600, 533=>600, 534=>600, 535=>600, 536=>600, 
+	537=>600, 538=>600, 539=>600, 540=>600, 541=>600, 542=>600, 543=>600, 548=>600, 549=>600, 550=>600, 551=>600, 552=>600, 553=>600, 554=>600, 555=>600, 556=>600, 
+	557=>600, 558=>600, 559=>600, 560=>600, 561=>600, 562=>600, 563=>600, 577=>600, 578=>600, 592=>600, 593=>600, 594=>600, 595=>600, 596=>600, 597=>600, 598=>600, 
+	599=>600, 600=>600, 601=>600, 602=>600, 603=>600, 604=>600, 607=>600, 608=>600, 609=>600, 610=>600, 611=>600, 612=>600, 613=>600, 614=>600, 615=>600, 616=>600, 
+	617=>600, 618=>600, 619=>600, 620=>600, 621=>600, 623=>600, 624=>600, 625=>600, 626=>600, 627=>600, 628=>600, 629=>600, 630=>600, 632=>600, 633=>600, 634=>600, 
+	635=>600, 636=>600, 637=>600, 638=>600, 639=>600, 640=>600, 641=>600, 642=>600, 643=>600, 644=>600, 645=>600, 646=>600, 647=>600, 648=>600, 649=>600, 652=>600, 
+	653=>600, 654=>600, 655=>600, 656=>600, 657=>600, 658=>600, 660=>600, 661=>600, 662=>600, 663=>600, 665=>600, 667=>600, 668=>600, 669=>600, 670=>600, 671=>600, 
+	672=>600, 673=>600, 674=>600, 675=>600, 676=>600, 678=>600, 679=>600, 699=>600, 700=>600, 701=>600, 702=>600, 703=>600, 711=>600, 712=>600, 713=>600, 714=>600, 
+	715=>600, 720=>600, 721=>600, 722=>600, 723=>600, 724=>600, 725=>600, 726=>600, 727=>600, 728=>600, 729=>600, 730=>600, 731=>600, 733=>600, 735=>600, 750=>600, 
+	768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, 783=>0, 
+	784=>0, 785=>0, 795=>0, 801=>0, 802=>0, 807=>0, 808=>0, 819=>600, 821=>0, 822=>0, 823=>0, 824=>0, 834=>0, 836=>0, 890=>600, 900=>600, 
+	901=>600, 902=>600, 903=>600, 904=>600, 905=>600, 906=>600, 908=>600, 910=>600, 911=>600, 912=>600, 913=>600, 914=>600, 915=>600, 916=>600, 917=>600, 918=>600, 
+	919=>600, 920=>600, 921=>600, 922=>600, 923=>600, 924=>600, 925=>600, 926=>600, 927=>600, 928=>600, 929=>600, 930=>600, 931=>600, 932=>600, 933=>600, 934=>600, 
+	935=>600, 936=>600, 937=>600, 938=>600, 939=>600, 940=>600, 941=>600, 942=>600, 943=>600, 944=>600, 945=>600, 946=>600, 947=>600, 948=>600, 949=>600, 950=>600, 
+	951=>600, 952=>600, 953=>600, 954=>600, 955=>600, 956=>600, 957=>600, 958=>600, 959=>600, 960=>600, 961=>600, 962=>600, 963=>600, 964=>600, 965=>600, 966=>600, 
+	967=>600, 968=>600, 969=>600, 970=>600, 971=>600, 972=>600, 973=>600, 974=>600, 976=>600, 977=>600, 978=>600, 979=>600, 981=>600, 986=>600, 987=>600, 988=>600, 
+	1024=>600, 1025=>600, 1026=>600, 1028=>600, 1029=>600, 1030=>600, 1031=>600, 1032=>600, 1033=>600, 1034=>600, 1035=>600, 1037=>600, 1038=>600, 1040=>600, 1041=>600, 1042=>600, 
+	1043=>600, 1044=>600, 1045=>600, 1046=>600, 1047=>600, 1048=>600, 1049=>600, 1050=>600, 1051=>600, 1052=>600, 1053=>600, 1054=>600, 1055=>600, 1056=>600, 1057=>600, 1058=>600, 
+	1059=>600, 1060=>600, 1061=>600, 1062=>600, 1063=>600, 1064=>600, 1065=>600, 1066=>600, 1067=>600, 1068=>600, 1069=>600, 1070=>600, 1071=>600, 1072=>600, 1073=>600, 1074=>600, 
+	1075=>600, 1076=>600, 1077=>600, 1078=>600, 1079=>600, 1080=>600, 1081=>600, 1082=>600, 1083=>600, 1084=>600, 1085=>600, 1086=>600, 1087=>600, 1088=>600, 1089=>600, 1090=>600, 
+	1091=>600, 1092=>600, 1093=>600, 1094=>600, 1095=>600, 1096=>600, 1097=>600, 1098=>600, 1099=>600, 1100=>600, 1101=>600, 1102=>600, 1103=>600, 1104=>600, 1105=>600, 1106=>600, 
+	1107=>600, 1108=>600, 1109=>600, 1110=>600, 1111=>600, 1112=>600, 1113=>600, 1114=>600, 1115=>600, 1117=>600, 1118=>600, 1119=>600, 1124=>600, 1130=>600, 1132=>600, 1136=>600, 
+	1137=>600, 1164=>600, 1165=>600, 1166=>600, 1167=>600, 1168=>600, 1169=>600, 1170=>600, 1171=>600, 1172=>600, 1173=>600, 1174=>600, 1175=>600, 1176=>600, 1177=>600, 1178=>600, 
+	1179=>600, 1180=>600, 1181=>600, 1182=>600, 1183=>600, 1184=>600, 1185=>600, 1186=>600, 1187=>600, 1188=>600, 1189=>600, 1190=>600, 1191=>600, 1192=>600, 1193=>600, 1194=>600, 
+	1195=>600, 1196=>600, 1197=>600, 1198=>600, 1199=>600, 1200=>600, 1201=>600, 1202=>600, 1203=>600, 1204=>600, 1205=>600, 1206=>600, 1207=>600, 1208=>600, 1209=>600, 1210=>600, 
+	1211=>600, 1212=>600, 1213=>600, 1214=>600, 1215=>600, 1216=>600, 1217=>600, 1218=>600, 1219=>600, 1220=>600, 1223=>600, 1224=>600, 1227=>600, 1228=>600, 1232=>600, 1233=>600, 
+	1234=>600, 1235=>600, 1236=>600, 1237=>600, 1238=>600, 1239=>600, 1240=>600, 1241=>600, 1242=>600, 1243=>600, 1244=>600, 1245=>600, 1246=>600, 1247=>600, 1248=>600, 1249=>600, 
+	1250=>600, 1251=>600, 1252=>600, 1253=>600, 1254=>600, 1255=>600, 1256=>600, 1257=>600, 1258=>600, 1259=>600, 1260=>600, 1261=>600, 1262=>600, 1263=>600, 1264=>600, 1265=>600, 
+	1266=>600, 1267=>600, 1268=>600, 1269=>600, 1272=>600, 1273=>600, 1329=>600, 1330=>600, 1331=>600, 1332=>600, 1333=>600, 1334=>600, 1335=>600, 1336=>600, 1337=>600, 1338=>600, 
+	1339=>600, 1340=>600, 1341=>600, 1342=>600, 1343=>600, 1344=>600, 1345=>600, 1346=>600, 1347=>600, 1348=>600, 1349=>600, 1350=>600, 1351=>600, 1352=>600, 1353=>600, 1354=>600, 
+	1355=>600, 1356=>600, 1357=>600, 1358=>600, 1359=>600, 1360=>600, 1361=>600, 1362=>600, 1363=>600, 1364=>600, 1365=>600, 1366=>600, 1377=>600, 1378=>600, 1379=>600, 1380=>600, 
+	1381=>600, 1382=>600, 1383=>600, 1384=>600, 1385=>600, 1386=>600, 1387=>600, 1388=>600, 1389=>600, 1390=>600, 1391=>600, 1392=>600, 1393=>600, 1394=>600, 1395=>600, 1396=>600, 
+	1397=>600, 1398=>600, 1399=>600, 1400=>600, 1401=>600, 1402=>600, 1403=>600, 1404=>600, 1405=>600, 1406=>600, 1407=>600, 1408=>600, 1409=>600, 1410=>600, 1411=>600, 1412=>600, 
+	1413=>600, 1414=>600, 1418=>600, 1456=>600, 1457=>600, 1458=>600, 1459=>600, 1460=>600, 1461=>600, 1462=>600, 1463=>600, 1464=>600, 1465=>600, 1467=>600, 1468=>600, 1469=>600, 
+	1470=>600, 1471=>600, 1472=>600, 1473=>600, 1474=>600, 1475=>600, 1476=>600, 1488=>600, 1489=>600, 1490=>600, 1491=>600, 1492=>600, 1493=>600, 1494=>600, 1495=>600, 1496=>600, 
+	1497=>600, 1498=>600, 1499=>600, 1500=>600, 1501=>600, 1502=>600, 1503=>600, 1504=>600, 1505=>600, 1506=>600, 1507=>600, 1508=>600, 1509=>600, 1510=>600, 1511=>600, 1512=>600, 
+	1513=>600, 1514=>600, 1520=>600, 1521=>600, 1522=>600, 1523=>600, 1524=>600, 5792=>600, 5793=>600, 5794=>600, 5795=>600, 5796=>600, 5797=>600, 5798=>600, 5799=>600, 5800=>600, 
+	5801=>600, 5802=>600, 5803=>600, 5804=>600, 5805=>600, 5806=>600, 5807=>600, 5808=>600, 5809=>600, 5810=>600, 5811=>600, 5812=>600, 5813=>600, 5814=>600, 5815=>600, 5816=>600, 
+	5817=>600, 5818=>600, 5819=>600, 5820=>600, 5821=>600, 5822=>600, 5823=>600, 5824=>600, 5825=>600, 5826=>600, 5827=>600, 5828=>600, 5829=>600, 5830=>600, 5831=>600, 5832=>600, 
+	5833=>600, 5834=>600, 5835=>600, 5836=>600, 5837=>600, 5838=>600, 5839=>600, 5840=>600, 5841=>600, 5842=>600, 5843=>600, 5844=>600, 5845=>600, 5846=>600, 5847=>600, 5848=>600, 
+	5849=>600, 5850=>600, 5851=>600, 5852=>600, 5853=>600, 5854=>600, 5855=>600, 5856=>600, 5857=>600, 5858=>600, 5859=>600, 5860=>600, 5861=>600, 5862=>600, 5863=>600, 5864=>600, 
+	5865=>600, 5866=>600, 5867=>600, 5868=>600, 5869=>600, 5870=>600, 5871=>600, 5872=>600, 7680=>600, 7681=>600, 7682=>600, 7683=>600, 7684=>600, 7685=>600, 7686=>600, 7687=>600, 
+	7688=>600, 7689=>600, 7690=>600, 7691=>600, 7692=>600, 7693=>600, 7694=>600, 7695=>600, 7696=>600, 7697=>600, 7698=>600, 7699=>600, 7700=>600, 7701=>600, 7702=>600, 7703=>600, 
+	7704=>600, 7705=>600, 7706=>600, 7707=>600, 7708=>600, 7709=>600, 7710=>600, 7711=>600, 7712=>600, 7713=>600, 7714=>600, 7715=>600, 7716=>600, 7717=>600, 7718=>600, 7719=>600, 
+	7720=>600, 7721=>600, 7722=>600, 7723=>600, 7724=>600, 7725=>600, 7726=>600, 7727=>600, 7728=>600, 7729=>600, 7730=>600, 7731=>600, 7732=>600, 7733=>600, 7734=>600, 7735=>600, 
+	7736=>600, 7737=>600, 7738=>600, 7739=>600, 7740=>600, 7741=>600, 7742=>600, 7743=>600, 7744=>600, 7745=>600, 7746=>600, 7747=>600, 7748=>600, 7749=>600, 7750=>600, 7751=>600, 
+	7752=>600, 7753=>600, 7754=>600, 7755=>600, 7756=>600, 7757=>600, 7758=>600, 7759=>600, 7760=>600, 7761=>600, 7762=>600, 7763=>600, 7764=>600, 7765=>600, 7766=>600, 7767=>600, 
+	7768=>600, 7769=>600, 7770=>600, 7771=>600, 7772=>600, 7773=>600, 7774=>600, 7775=>600, 7776=>600, 7777=>600, 7778=>600, 7779=>600, 7780=>600, 7781=>600, 7782=>600, 7783=>600, 
+	7784=>600, 7785=>600, 7786=>600, 7787=>600, 7788=>600, 7789=>600, 7790=>600, 7791=>600, 7792=>600, 7793=>600, 7794=>600, 7795=>600, 7796=>600, 7797=>600, 7798=>600, 7799=>600, 
+	7800=>600, 7801=>600, 7802=>600, 7803=>600, 7804=>600, 7805=>600, 7806=>600, 7807=>600, 7808=>600, 7809=>600, 7810=>600, 7811=>600, 7812=>600, 7813=>600, 7814=>600, 7815=>600, 
+	7816=>600, 7817=>600, 7818=>600, 7819=>600, 7820=>600, 7821=>600, 7822=>600, 7823=>600, 7824=>600, 7825=>600, 7826=>600, 7827=>600, 7828=>600, 7829=>600, 7830=>600, 7831=>600, 
+	7832=>600, 7833=>600, 7834=>600, 7835=>600, 7840=>600, 7841=>600, 7842=>600, 7843=>600, 7844=>600, 7845=>600, 7846=>600, 7847=>600, 7848=>600, 7849=>600, 7850=>600, 7851=>600, 
+	7852=>600, 7853=>600, 7854=>600, 7855=>600, 7856=>600, 7857=>600, 7858=>600, 7859=>600, 7860=>600, 7861=>600, 7862=>600, 7863=>600, 7864=>600, 7865=>600, 7866=>600, 7867=>600, 
+	7868=>600, 7869=>600, 7870=>600, 7871=>600, 7872=>600, 7873=>600, 7874=>600, 7875=>600, 7876=>600, 7877=>600, 7878=>600, 7879=>600, 7880=>600, 7881=>600, 7882=>600, 7883=>600, 
+	7884=>600, 7885=>600, 7886=>600, 7887=>600, 7888=>600, 7889=>600, 7890=>600, 7891=>600, 7892=>600, 7893=>600, 7894=>600, 7895=>600, 7896=>600, 7897=>600, 7898=>600, 7899=>600, 
+	7900=>600, 7901=>600, 7902=>600, 7903=>600, 7904=>600, 7905=>600, 7906=>600, 7907=>600, 7908=>600, 7909=>600, 7910=>600, 7911=>600, 7912=>600, 7913=>600, 7914=>600, 7915=>600, 
+	7916=>600, 7917=>600, 7918=>600, 7919=>600, 7920=>600, 7921=>600, 7922=>600, 7923=>600, 7924=>600, 7925=>600, 7926=>600, 7927=>600, 7928=>600, 7929=>600, 7936=>600, 7937=>600, 
+	7938=>600, 7939=>600, 7940=>600, 7941=>600, 7942=>600, 7943=>600, 7944=>600, 7945=>600, 7946=>600, 7947=>600, 7948=>600, 7949=>600, 7950=>600, 7951=>600, 7952=>600, 7953=>600, 
+	7954=>600, 7955=>600, 7956=>600, 7957=>600, 7960=>600, 7961=>600, 7962=>600, 7963=>600, 7964=>600, 7965=>600, 7968=>600, 7969=>600, 7970=>600, 7971=>600, 7972=>600, 7973=>600, 
+	7974=>600, 7975=>600, 7976=>600, 7977=>600, 7978=>600, 7979=>600, 7980=>600, 7981=>600, 7982=>600, 7983=>600, 7984=>600, 7985=>600, 7986=>600, 7987=>600, 7988=>600, 7989=>600, 
+	7990=>600, 7991=>600, 7992=>600, 7993=>600, 7994=>600, 7995=>600, 7996=>600, 7997=>600, 7998=>600, 7999=>600, 8000=>600, 8001=>600, 8002=>600, 8003=>600, 8004=>600, 8005=>600, 
+	8008=>600, 8009=>600, 8010=>600, 8011=>600, 8012=>600, 8013=>600, 8016=>600, 8017=>600, 8018=>600, 8019=>600, 8020=>600, 8021=>600, 8022=>600, 8023=>600, 8025=>600, 8027=>600, 
+	8029=>600, 8031=>600, 8032=>600, 8033=>600, 8034=>600, 8035=>600, 8036=>600, 8037=>600, 8038=>600, 8039=>600, 8040=>600, 8041=>600, 8042=>600, 8043=>600, 8044=>600, 8045=>600, 
+	8046=>600, 8047=>600, 8048=>600, 8049=>600, 8050=>600, 8051=>600, 8052=>600, 8053=>600, 8054=>600, 8055=>600, 8056=>600, 8057=>600, 8058=>600, 8059=>600, 8060=>600, 8061=>600, 
+	8064=>600, 8065=>600, 8066=>600, 8067=>600, 8068=>600, 8069=>600, 8070=>600, 8071=>600, 8072=>600, 8073=>600, 8074=>600, 8075=>600, 8076=>600, 8077=>600, 8078=>600, 8079=>600, 
+	8080=>600, 8081=>600, 8082=>600, 8083=>600, 8084=>600, 8085=>600, 8086=>600, 8087=>600, 8088=>600, 8089=>600, 8090=>600, 8091=>600, 8092=>600, 8093=>600, 8094=>600, 8095=>600, 
+	8096=>600, 8097=>600, 8098=>600, 8099=>600, 8100=>600, 8101=>600, 8102=>600, 8103=>600, 8104=>600, 8105=>600, 8106=>600, 8107=>600, 8108=>600, 8109=>600, 8110=>600, 8111=>600, 
+	8112=>600, 8113=>600, 8114=>600, 8115=>600, 8116=>600, 8118=>600, 8119=>600, 8120=>600, 8121=>600, 8122=>600, 8123=>600, 8124=>600, 8125=>600, 8126=>600, 8127=>600, 8128=>600, 
+	8129=>600, 8130=>600, 8131=>600, 8132=>600, 8134=>600, 8135=>600, 8136=>600, 8137=>600, 8138=>600, 8139=>600, 8140=>600, 8141=>600, 8142=>600, 8143=>600, 8144=>600, 8145=>600, 
+	8146=>600, 8147=>600, 8150=>600, 8151=>600, 8152=>600, 8153=>600, 8154=>600, 8155=>600, 8157=>600, 8158=>600, 8159=>600, 8160=>600, 8161=>600, 8162=>600, 8163=>600, 8164=>600, 
+	8165=>600, 8166=>600, 8167=>600, 8168=>600, 8169=>600, 8170=>600, 8171=>600, 8172=>600, 8173=>600, 8175=>600, 8178=>600, 8179=>600, 8180=>600, 8182=>600, 8183=>600, 8184=>600, 
+	8185=>600, 8186=>600, 8187=>600, 8188=>600, 8189=>600, 8190=>600, 8208=>600, 8213=>600, 8215=>600, 8219=>600, 8223=>600, 8229=>600, 8241=>600, 8242=>600, 8243=>600, 8244=>600, 
+	8245=>600, 8246=>600, 8247=>600, 8252=>600, 8253=>600, 8254=>600, 8259=>600, 8260=>600, 8261=>600, 8262=>600, 8264=>600, 8265=>600, 8267=>600, 8304=>600, 8305=>600, 8306=>600, 
+	8307=>600, 8308=>600, 8309=>600, 8310=>600, 8311=>600, 8312=>600, 8313=>600, 8314=>600, 8315=>600, 8316=>600, 8317=>600, 8318=>600, 8319=>600, 8320=>600, 8321=>600, 8322=>600, 
+	8323=>600, 8324=>600, 8325=>600, 8326=>600, 8327=>600, 8328=>600, 8329=>600, 8330=>600, 8331=>600, 8332=>600, 8333=>600, 8334=>600, 8355=>600, 8356=>600, 8359=>600, 8362=>600, 
+	8448=>600, 8449=>600, 8450=>600, 8451=>600, 8453=>600, 8454=>600, 8455=>600, 8461=>600, 8464=>600, 8465=>600, 8466=>600, 8467=>600, 8468=>600, 8469=>600, 8470=>600, 8471=>600, 
+	8472=>600, 8473=>600, 8474=>600, 8477=>600, 8478=>600, 8484=>600, 8485=>600, 8486=>600, 8487=>600, 8490=>600, 8491=>600, 8498=>600, 8501=>600, 8531=>600, 8532=>600, 8533=>600, 
+	8534=>600, 8535=>600, 8536=>600, 8537=>600, 8538=>600, 8539=>600, 8540=>600, 8541=>600, 8542=>600, 8543=>600, 8544=>600, 8545=>600, 8546=>600, 8547=>600, 8548=>600, 8549=>600, 
+	8550=>600, 8551=>600, 8552=>600, 8553=>600, 8554=>600, 8555=>600, 8556=>600, 8557=>600, 8558=>600, 8559=>600, 8592=>600, 8593=>600, 8594=>600, 8595=>600, 8596=>600, 8597=>600, 
+	8598=>600, 8599=>600, 8600=>600, 8601=>600, 8602=>600, 8603=>600, 8604=>600, 8605=>600, 8606=>600, 8607=>600, 8608=>600, 8609=>600, 8610=>600, 8611=>600, 8612=>600, 8613=>600, 
+	8614=>600, 8615=>600, 8616=>600, 8617=>600, 8618=>600, 8619=>600, 8620=>600, 8621=>600, 8622=>600, 8623=>600, 8624=>600, 8625=>600, 8626=>600, 8627=>600, 8628=>600, 8629=>600, 
+	8630=>600, 8631=>600, 8632=>600, 8633=>600, 8634=>600, 8635=>600, 8636=>600, 8637=>600, 8638=>600, 8639=>600, 8640=>600, 8641=>600, 8642=>600, 8643=>600, 8644=>600, 8645=>600, 
+	8646=>600, 8647=>600, 8648=>600, 8649=>600, 8650=>600, 8651=>600, 8652=>600, 8653=>600, 8654=>600, 8655=>600, 8656=>600, 8657=>600, 8658=>600, 8659=>600, 8660=>600, 8661=>600, 
+	8704=>600, 8705=>600, 8706=>600, 8707=>600, 8708=>600, 8709=>600, 8710=>600, 8711=>600, 8712=>600, 8713=>600, 8714=>600, 8715=>600, 8716=>600, 8717=>600, 8719=>600, 8721=>600, 
+	8722=>600, 8723=>600, 8724=>600, 8725=>600, 8729=>600, 8730=>600, 8731=>600, 8732=>600, 8733=>600, 8734=>600, 8735=>600, 8743=>600, 8744=>600, 8745=>600, 8746=>600, 8747=>600, 
+	8748=>600, 8749=>600, 8750=>600, 8751=>600, 8752=>600, 8756=>600, 8757=>600, 8759=>600, 8764=>600, 8765=>600, 8769=>600, 8770=>600, 8771=>600, 8772=>600, 8773=>600, 8776=>600, 
+	8784=>600, 8785=>600, 8786=>600, 8787=>600, 8793=>600, 8794=>600, 8800=>600, 8801=>600, 8804=>600, 8805=>600, 8806=>600, 8807=>600, 8810=>600, 8811=>600, 8812=>600, 8814=>600, 
+	8815=>600, 8822=>600, 8823=>600, 8834=>600, 8835=>600, 8838=>600, 8839=>600, 8853=>600, 8854=>600, 8855=>600, 8856=>600, 8857=>600, 8858=>600, 8859=>600, 8860=>600, 8861=>600, 
+	8866=>600, 8867=>600, 8868=>600, 8869=>600, 8870=>600, 8871=>600, 8872=>600, 8873=>600, 8874=>600, 8875=>600, 8876=>600, 8877=>600, 8878=>600, 8879=>600, 8894=>600, 8901=>600, 
+	8902=>600, 8960=>600, 8962=>600, 8963=>600, 8968=>600, 8969=>600, 8970=>600, 8971=>600, 8972=>600, 8973=>600, 8974=>600, 8975=>600, 8976=>600, 8981=>600, 8988=>600, 8989=>600, 
+	8990=>600, 8991=>600, 9001=>600, 9002=>600, 9115=>600, 9116=>600, 9117=>600, 9118=>600, 9119=>600, 9120=>600, 9121=>600, 9122=>600, 9123=>600, 9124=>600, 9125=>600, 9126=>600, 
+	9127=>600, 9128=>600, 9129=>600, 9130=>600, 9131=>600, 9132=>600, 9133=>600, 9134=>600, 9135=>600, 9136=>600, 9137=>600, 9138=>600, 9139=>600, 9140=>600, 9143=>600, 9146=>600, 
+	9147=>600, 9148=>600, 9149=>600, 9472=>600, 9473=>600, 9474=>600, 9475=>600, 9476=>600, 9477=>600, 9478=>600, 9479=>600, 9480=>600, 9481=>600, 9482=>600, 9483=>600, 9484=>600, 
+	9485=>600, 9486=>600, 9487=>600, 9488=>600, 9489=>600, 9490=>600, 9491=>600, 9492=>600, 9493=>600, 9494=>600, 9495=>600, 9496=>600, 9497=>600, 9498=>600, 9499=>600, 9500=>600, 
+	9501=>600, 9502=>600, 9503=>600, 9504=>600, 9505=>600, 9506=>600, 9507=>600, 9508=>600, 9509=>600, 9510=>600, 9511=>600, 9512=>600, 9513=>600, 9514=>600, 9515=>600, 9516=>600, 
+	9517=>600, 9518=>600, 9519=>600, 9520=>600, 9521=>600, 9522=>600, 9523=>600, 9524=>600, 9525=>600, 9526=>600, 9527=>600, 9528=>600, 9529=>600, 9530=>600, 9531=>600, 9532=>600, 
+	9533=>600, 9534=>600, 9535=>600, 9536=>600, 9537=>600, 9538=>600, 9539=>600, 9540=>600, 9541=>600, 9542=>600, 9543=>600, 9544=>600, 9545=>600, 9546=>600, 9547=>600, 9548=>600, 
+	9549=>600, 9550=>600, 9551=>600, 9552=>600, 9553=>600, 9554=>600, 9555=>600, 9556=>600, 9557=>600, 9558=>600, 9559=>600, 9560=>600, 9561=>600, 9562=>600, 9563=>600, 9564=>600, 
+	9565=>600, 9566=>600, 9567=>600, 9568=>600, 9569=>600, 9570=>600, 9571=>600, 9572=>600, 9573=>600, 9574=>600, 9575=>600, 9576=>600, 9577=>600, 9578=>600, 9579=>600, 9580=>600, 
+	9581=>600, 9582=>600, 9583=>600, 9584=>600, 9585=>600, 9586=>600, 9587=>600, 9588=>600, 9589=>600, 9590=>600, 9591=>600, 9592=>600, 9593=>600, 9594=>600, 9595=>600, 9596=>600, 
+	9597=>600, 9598=>600, 9599=>600, 9600=>600, 9601=>600, 9602=>600, 9603=>600, 9604=>600, 9605=>600, 9606=>600, 9607=>600, 9608=>600, 9609=>600, 9610=>600, 9611=>600, 9612=>600, 
+	9613=>600, 9614=>600, 9615=>600, 9616=>600, 9617=>600, 9618=>600, 9619=>600, 9620=>600, 9621=>600, 9622=>600, 9623=>600, 9624=>600, 9625=>600, 9626=>600, 9627=>600, 9628=>600, 
+	9629=>600, 9630=>600, 9631=>600, 9632=>600, 9633=>600, 9634=>600, 9635=>600, 9636=>600, 9637=>600, 9638=>600, 9639=>600, 9640=>600, 9641=>600, 9642=>600, 9643=>600, 9644=>600, 
+	9645=>600, 9646=>600, 9647=>600, 9648=>600, 9649=>600, 9650=>600, 9651=>600, 9652=>600, 9653=>600, 9654=>600, 9655=>600, 9656=>600, 9657=>600, 9658=>600, 9659=>600, 9660=>600, 
+	9661=>600, 9662=>600, 9663=>600, 9664=>600, 9665=>600, 9666=>600, 9667=>600, 9668=>600, 9669=>600, 9670=>600, 9671=>600, 9672=>600, 9673=>600, 9674=>600, 9675=>600, 9676=>600, 
+	9677=>600, 9678=>600, 9679=>600, 9680=>600, 9681=>600, 9682=>600, 9683=>600, 9684=>600, 9685=>600, 9686=>600, 9687=>600, 9688=>600, 9689=>600, 9690=>600, 9691=>600, 9692=>600, 
+	9693=>600, 9694=>600, 9695=>600, 9696=>600, 9697=>600, 9698=>600, 9699=>600, 9700=>600, 9701=>600, 9702=>600, 9703=>600, 9704=>600, 9705=>600, 9706=>600, 9707=>600, 9708=>600, 
+	9709=>600, 9710=>600, 9711=>600, 9712=>600, 9713=>600, 9714=>600, 9715=>600, 9716=>600, 9717=>600, 9718=>600, 9719=>600, 9720=>600, 9721=>600, 9722=>600, 9723=>600, 9724=>600, 
+	9725=>600, 9726=>600, 9727=>600, 9728=>600, 9729=>600, 9730=>600, 9733=>600, 9734=>600, 9735=>600, 9736=>600, 9737=>600, 9744=>600, 9745=>600, 9746=>600, 9756=>600, 9758=>600, 
+	9766=>600, 9768=>600, 9769=>600, 9774=>600, 9776=>600, 9777=>600, 9778=>600, 9779=>600, 9780=>600, 9781=>600, 9782=>600, 9783=>600, 9785=>600, 9786=>600, 9787=>600, 9788=>600, 
+	9791=>600, 9792=>600, 9793=>600, 9794=>600, 9833=>600, 9834=>600, 9835=>600, 9836=>600, 9837=>600, 9838=>600, 9839=>600, 10214=>600, 10215=>600, 10216=>600, 10217=>600, 10218=>600, 
+	10219=>600, 10240=>600, 10241=>600, 10242=>600, 10243=>600, 10244=>600, 10245=>600, 10246=>600, 10247=>600, 10248=>600, 10249=>600, 10250=>600, 10251=>600, 10252=>600, 10253=>600, 10254=>600, 
+	10255=>600, 10256=>600, 10257=>600, 10258=>600, 10259=>600, 10260=>600, 10261=>600, 10262=>600, 10263=>600, 10264=>600, 10265=>600, 10266=>600, 10267=>600, 10268=>600, 10269=>600, 10270=>600, 
+	10271=>600, 10272=>600, 10273=>600, 10274=>600, 10275=>600, 10276=>600, 10277=>600, 10278=>600, 10279=>600, 10280=>600, 10281=>600, 10282=>600, 10283=>600, 10284=>600, 10285=>600, 10286=>600, 
+	10287=>600, 10288=>600, 10289=>600, 10290=>600, 10291=>600, 10292=>600, 10293=>600, 10294=>600, 10295=>600, 10296=>600, 10297=>600, 10298=>600, 10299=>600, 10300=>600, 10301=>600, 10302=>600, 
+	10303=>600, 10304=>600, 10305=>600, 10306=>600, 10307=>600, 10308=>600, 10309=>600, 10310=>600, 10311=>600, 10312=>600, 10313=>600, 10314=>600, 10315=>600, 10316=>600, 10317=>600, 10318=>600, 
+	10319=>600, 10320=>600, 10321=>600, 10322=>600, 10323=>600, 10324=>600, 10325=>600, 10326=>600, 10327=>600, 10328=>600, 10329=>600, 10330=>600, 10331=>600, 10332=>600, 10333=>600, 10334=>600, 
+	10335=>600, 10336=>600, 10337=>600, 10338=>600, 10339=>600, 10340=>600, 10341=>600, 10342=>600, 10343=>600, 10344=>600, 10345=>600, 10346=>600, 10347=>600, 10348=>600, 10349=>600, 10350=>600, 
+	10351=>600, 10352=>600, 10353=>600, 10354=>600, 10355=>600, 10356=>600, 10357=>600, 10358=>600, 10359=>600, 10360=>600, 10361=>600, 10362=>600, 10363=>600, 10364=>600, 10365=>600, 10366=>600, 
+	10367=>600, 10368=>600, 10369=>600, 10370=>600, 10371=>600, 10372=>600, 10373=>600, 10374=>600, 10375=>600, 10376=>600, 10377=>600, 10378=>600, 10379=>600, 10380=>600, 10381=>600, 10382=>600, 
+	10383=>600, 10384=>600, 10385=>600, 10386=>600, 10387=>600, 10388=>600, 10389=>600, 10390=>600, 10391=>600, 10392=>600, 10393=>600, 10394=>600, 10395=>600, 10396=>600, 10397=>600, 10398=>600, 
+	10399=>600, 10400=>600, 10401=>600, 10402=>600, 10403=>600, 10404=>600, 10405=>600, 10406=>600, 10407=>600, 10408=>600, 10409=>600, 10410=>600, 10411=>600, 10412=>600, 10413=>600, 10414=>600, 
+	10415=>600, 10416=>600, 10417=>600, 10418=>600, 10419=>600, 10420=>600, 10421=>600, 10422=>600, 10423=>600, 10424=>600, 10425=>600, 10426=>600, 10427=>600, 10428=>600, 10429=>600, 10430=>600, 
+	10431=>600, 10432=>600, 10433=>600, 10434=>600, 10435=>600, 10436=>600, 10437=>600, 10438=>600, 10439=>600, 10440=>600, 10441=>600, 10442=>600, 10443=>600, 10444=>600, 10445=>600, 10446=>600, 
+	10447=>600, 10448=>600, 10449=>600, 10450=>600, 10451=>600, 10452=>600, 10453=>600, 10454=>600, 10455=>600, 10456=>600, 10457=>600, 10458=>600, 10459=>600, 10460=>600, 10461=>600, 10462=>600, 
+	10463=>600, 10464=>600, 10465=>600, 10466=>600, 10467=>600, 10468=>600, 10469=>600, 10470=>600, 10471=>600, 10472=>600, 10473=>600, 10474=>600, 10475=>600, 10476=>600, 10477=>600, 10478=>600, 
+	10479=>600, 10480=>600, 10481=>600, 10482=>600, 10483=>600, 10484=>600, 10485=>600, 10486=>600, 10487=>600, 10488=>600, 10489=>600, 10490=>600, 10491=>600, 10492=>600, 10493=>600, 10494=>600, 
+	10495=>600, 63171=>600, 64256=>600, 64257=>600, 64258=>600, 64261=>600, 64262=>600, 64285=>600, 64286=>600, 64287=>600, 64288=>600, 64289=>600, 64290=>600, 64291=>600, 64292=>600, 64293=>600, 
+	64294=>600, 64295=>600, 64296=>600, 64297=>600, 64298=>600, 64299=>600, 64300=>600, 64301=>600, 64302=>600, 64303=>600, 64304=>600, 64305=>600, 64306=>600, 64307=>600, 64308=>600, 64309=>600, 
+	64310=>600, 64312=>600, 64313=>600, 64314=>600, 64315=>600, 64316=>600, 64318=>600, 64320=>600, 64321=>600, 64323=>600, 64324=>600, 64326=>600, 64327=>600, 64328=>600, 64329=>600, 64330=>600, 
+	64331=>600, 64332=>600, 64333=>600, 64334=>600, 64335=>600, 65533=>600, 8174=>600}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='FreeMono.z';
+  font[:ctg]='FreeMono.ctg.z';
+  font[:originalsize]=293572;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/freemonob.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,107 @@
+TCPDFFontDescriptor.define('freemonob') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='FreeMonoBold';
+  font[:desc]={'Ascent'=>1155,'Descent'=>-365,'CapHeight'=>1155,'Flags'=>32,'FontBBox'=>'[-656 -365 950 1155]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600}
+  font[:up]=-100;
+  font[:ut]=50;
+  font[:cw]={
+	13=>333, 32=>600, 33=>600, 34=>600, 35=>600, 36=>600, 37=>600, 38=>600, 39=>600, 40=>600, 41=>600, 42=>600, 43=>600, 44=>600, 45=>600, 46=>600, 
+	47=>600, 48=>600, 49=>600, 50=>600, 51=>600, 52=>600, 53=>600, 54=>600, 55=>600, 56=>600, 57=>600, 58=>600, 59=>600, 60=>600, 61=>600, 62=>600, 
+	63=>600, 64=>600, 65=>600, 66=>600, 67=>600, 68=>600, 69=>600, 70=>600, 71=>600, 72=>600, 73=>600, 74=>600, 75=>600, 76=>600, 77=>600, 78=>600, 
+	79=>600, 80=>600, 81=>600, 82=>600, 83=>600, 84=>600, 85=>600, 86=>600, 87=>600, 88=>600, 89=>600, 90=>600, 91=>600, 92=>600, 93=>600, 94=>600, 
+	95=>600, 96=>600, 97=>600, 98=>600, 99=>600, 100=>600, 101=>600, 102=>600, 103=>600, 104=>600, 105=>600, 106=>600, 107=>600, 108=>600, 109=>600, 110=>600, 
+	111=>600, 112=>600, 113=>600, 114=>600, 115=>600, 116=>600, 117=>600, 118=>600, 119=>600, 120=>600, 121=>600, 122=>600, 123=>600, 124=>600, 125=>600, 126=>600, 
+	8364=>600, 1027=>600, 8218=>600, 402=>600, 8222=>600, 8230=>600, 8224=>600, 8225=>600, 710=>600, 8240=>600, 352=>600, 8249=>600, 338=>600, 1036=>600, 381=>600, 1039=>600, 
+	8216=>600, 8217=>600, 8220=>600, 8221=>600, 8226=>600, 8211=>600, 8212=>600, 732=>600, 8482=>600, 353=>600, 8250=>600, 339=>600, 1116=>600, 382=>600, 376=>600, 160=>600, 
+	161=>600, 162=>600, 163=>600, 164=>600, 165=>600, 166=>600, 167=>600, 168=>600, 169=>600, 170=>600, 171=>600, 172=>600, 173=>600, 174=>600, 175=>600, 176=>600, 
+	177=>600, 178=>600, 179=>600, 180=>600, 181=>600, 182=>600, 183=>600, 184=>600, 185=>600, 186=>600, 187=>600, 188=>600, 189=>600, 190=>600, 191=>600, 192=>600, 
+	193=>600, 194=>600, 195=>600, 196=>600, 197=>600, 198=>600, 199=>600, 200=>600, 201=>600, 202=>600, 203=>600, 204=>600, 205=>600, 206=>600, 207=>600, 208=>600, 
+	209=>600, 210=>600, 211=>600, 212=>600, 213=>600, 214=>600, 215=>600, 216=>600, 217=>600, 218=>600, 219=>600, 220=>600, 221=>600, 222=>600, 223=>600, 224=>600, 
+	225=>600, 226=>600, 227=>600, 228=>600, 229=>600, 230=>600, 231=>600, 232=>600, 233=>600, 234=>600, 235=>600, 236=>600, 237=>600, 238=>600, 239=>600, 240=>600, 
+	241=>600, 242=>600, 243=>600, 244=>600, 245=>600, 246=>600, 247=>600, 248=>600, 249=>600, 250=>600, 251=>600, 252=>600, 253=>600, 254=>600, 255=>600, 256=>600, 
+	257=>600, 258=>600, 259=>600, 260=>600, 261=>600, 262=>600, 263=>600, 264=>600, 265=>600, 266=>600, 267=>600, 268=>600, 269=>600, 270=>600, 271=>600, 272=>600, 
+	273=>600, 274=>600, 275=>600, 276=>600, 277=>600, 278=>600, 279=>600, 280=>600, 281=>600, 282=>600, 283=>600, 284=>600, 285=>600, 286=>600, 287=>600, 288=>600, 
+	289=>600, 290=>600, 291=>600, 292=>600, 293=>600, 294=>600, 295=>600, 296=>600, 297=>600, 298=>600, 299=>600, 300=>600, 301=>600, 302=>600, 303=>600, 304=>600, 
+	305=>600, 306=>600, 307=>600, 308=>600, 309=>600, 310=>600, 311=>600, 312=>600, 313=>600, 314=>600, 315=>600, 316=>600, 317=>600, 318=>600, 319=>600, 320=>600, 
+	321=>600, 322=>600, 323=>600, 324=>600, 325=>600, 326=>600, 327=>600, 328=>600, 329=>600, 330=>600, 331=>600, 332=>600, 333=>600, 334=>600, 335=>600, 336=>600, 
+	337=>600, 340=>600, 341=>600, 342=>600, 343=>600, 344=>600, 345=>600, 346=>600, 347=>600, 348=>600, 349=>600, 350=>600, 351=>600, 354=>600, 355=>600, 356=>600, 
+	357=>600, 358=>600, 359=>600, 360=>600, 361=>600, 362=>600, 363=>600, 364=>600, 365=>600, 366=>600, 367=>600, 368=>600, 369=>600, 370=>600, 371=>600, 372=>600, 
+	373=>600, 374=>600, 375=>600, 377=>600, 378=>600, 379=>600, 380=>600, 383=>600, 384=>600, 385=>600, 386=>600, 387=>600, 390=>600, 391=>600, 392=>600, 393=>600, 
+	394=>600, 395=>600, 396=>600, 397=>600, 398=>600, 400=>600, 401=>600, 403=>600, 405=>600, 406=>600, 407=>600, 409=>600, 410=>600, 411=>600, 412=>600, 413=>600, 
+	414=>600, 415=>600, 416=>600, 417=>600, 418=>600, 419=>600, 420=>600, 421=>600, 422=>600, 423=>600, 424=>600, 425=>600, 427=>600, 428=>600, 429=>600, 430=>600, 
+	431=>600, 432=>600, 435=>600, 436=>600, 437=>600, 438=>600, 439=>600, 440=>600, 443=>600, 448=>600, 449=>600, 451=>600, 455=>600, 456=>600, 457=>600, 459=>600, 
+	460=>600, 461=>600, 462=>600, 463=>600, 464=>600, 465=>600, 466=>600, 467=>600, 468=>600, 469=>600, 470=>600, 471=>600, 472=>600, 473=>600, 474=>600, 475=>600, 
+	476=>600, 477=>600, 478=>600, 479=>600, 480=>600, 481=>600, 482=>600, 483=>600, 484=>600, 485=>600, 486=>600, 487=>600, 488=>600, 489=>600, 490=>600, 491=>600, 
+	492=>600, 493=>600, 494=>600, 496=>600, 500=>600, 501=>600, 502=>600, 504=>600, 505=>600, 506=>600, 507=>600, 508=>600, 509=>600, 510=>600, 511=>600, 512=>600, 
+	513=>600, 514=>600, 515=>600, 516=>600, 517=>600, 518=>600, 519=>600, 520=>600, 521=>600, 522=>600, 523=>600, 524=>600, 525=>600, 526=>600, 527=>600, 528=>600, 
+	529=>600, 530=>600, 531=>600, 532=>600, 533=>600, 534=>600, 535=>600, 536=>600, 537=>600, 538=>600, 539=>600, 542=>600, 543=>600, 548=>600, 549=>600, 550=>600, 
+	551=>600, 552=>600, 553=>600, 554=>600, 555=>600, 556=>600, 557=>600, 558=>600, 559=>600, 560=>600, 561=>600, 562=>600, 563=>600, 592=>600, 593=>600, 594=>600, 
+	595=>600, 596=>600, 598=>600, 599=>600, 600=>600, 601=>600, 603=>600, 604=>600, 607=>600, 608=>600, 609=>600, 613=>600, 614=>600, 615=>600, 616=>600, 617=>600, 
+	618=>600, 619=>600, 621=>600, 623=>600, 624=>600, 625=>600, 626=>600, 627=>600, 628=>600, 629=>600, 633=>600, 634=>600, 635=>600, 636=>600, 637=>600, 638=>600, 
+	639=>600, 640=>600, 641=>600, 642=>600, 643=>600, 644=>600, 645=>600, 647=>600, 648=>600, 649=>600, 652=>600, 653=>600, 654=>600, 656=>600, 660=>600, 661=>600, 
+	662=>600, 663=>600, 664=>600, 668=>600, 670=>600, 671=>600, 672=>600, 673=>600, 674=>600, 711=>600, 720=>600, 721=>600, 728=>600, 729=>600, 730=>600, 731=>600, 
+	733=>600, 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, 
+	783=>0, 784=>0, 785=>0, 795=>0, 801=>0, 802=>0, 807=>0, 808=>0, 823=>0, 884=>600, 885=>600, 890=>600, 894=>600, 900=>600, 901=>600, 902=>600, 
+	903=>600, 904=>600, 905=>600, 906=>600, 908=>600, 910=>600, 911=>600, 912=>600, 913=>600, 914=>600, 915=>600, 916=>600, 917=>600, 918=>600, 919=>600, 920=>600, 
+	921=>600, 922=>600, 923=>600, 924=>600, 925=>600, 926=>600, 927=>600, 928=>600, 929=>600, 931=>600, 932=>600, 933=>600, 934=>600, 935=>600, 936=>600, 937=>600, 
+	938=>600, 939=>600, 940=>600, 941=>600, 942=>600, 943=>600, 944=>600, 945=>600, 946=>600, 947=>600, 948=>600, 949=>600, 950=>600, 951=>600, 952=>600, 953=>600, 
+	954=>600, 955=>600, 956=>600, 957=>600, 958=>600, 959=>600, 960=>600, 961=>600, 962=>600, 963=>600, 964=>600, 965=>600, 966=>600, 967=>600, 968=>600, 969=>600, 
+	970=>600, 971=>600, 972=>600, 973=>600, 974=>600, 976=>600, 977=>600, 981=>600, 1009=>600, 1024=>600, 1025=>600, 1026=>600, 1028=>600, 1029=>600, 1030=>600, 1031=>600, 
+	1032=>600, 1033=>600, 1034=>600, 1035=>600, 1037=>600, 1038=>600, 1040=>600, 1041=>600, 1042=>600, 1043=>600, 1044=>600, 1045=>600, 1046=>600, 1047=>600, 1048=>600, 1049=>600, 
+	1050=>600, 1051=>600, 1052=>600, 1053=>600, 1054=>600, 1055=>600, 1056=>600, 1057=>600, 1058=>600, 1059=>600, 1060=>600, 1061=>600, 1062=>600, 1063=>600, 1064=>600, 1065=>600, 
+	1066=>600, 1067=>600, 1068=>600, 1069=>600, 1070=>600, 1071=>600, 1072=>600, 1073=>600, 1074=>600, 1075=>600, 1076=>600, 1077=>600, 1078=>600, 1079=>600, 1080=>600, 1081=>600, 
+	1082=>600, 1083=>600, 1084=>600, 1085=>600, 1086=>600, 1087=>600, 1088=>600, 1089=>600, 1090=>600, 1091=>600, 1092=>600, 1093=>600, 1094=>600, 1095=>600, 1096=>600, 1097=>600, 
+	1098=>600, 1099=>600, 1100=>600, 1101=>600, 1102=>600, 1103=>600, 1104=>600, 1105=>600, 1106=>600, 1107=>600, 1108=>600, 1109=>600, 1110=>600, 1111=>600, 1112=>600, 1113=>600, 
+	1114=>600, 1115=>600, 1117=>600, 1118=>600, 1119=>600, 1164=>600, 1165=>600, 1166=>600, 1167=>600, 1168=>600, 1169=>600, 1170=>600, 1171=>600, 1172=>600, 1173=>600, 1174=>600, 
+	1175=>600, 1176=>600, 1177=>600, 1178=>600, 1179=>600, 1180=>600, 1181=>600, 1182=>600, 1183=>600, 1184=>600, 1185=>600, 1186=>600, 1187=>600, 1188=>600, 1189=>600, 1190=>600, 
+	1191=>600, 1192=>600, 1193=>600, 1194=>600, 1195=>600, 1196=>600, 1197=>600, 1198=>600, 1199=>600, 1200=>600, 1201=>600, 1202=>600, 1203=>600, 1204=>600, 1205=>600, 1206=>600, 
+	1207=>600, 1208=>600, 1209=>600, 1210=>600, 1211=>600, 1212=>600, 1213=>600, 1214=>600, 1215=>600, 1216=>600, 1217=>600, 1218=>600, 1219=>600, 1220=>600, 1221=>600, 1222=>600, 
+	1223=>600, 1224=>600, 1225=>600, 1226=>600, 1227=>600, 1228=>600, 1229=>600, 1230=>600, 1231=>600, 1232=>600, 1233=>600, 1234=>600, 1235=>600, 1236=>600, 1237=>600, 1238=>600, 
+	1239=>600, 1240=>600, 1241=>600, 1242=>600, 1243=>600, 1244=>600, 1245=>600, 1246=>600, 1247=>600, 1248=>600, 1249=>600, 1250=>600, 1251=>600, 1252=>600, 1253=>600, 1254=>600, 
+	1255=>600, 1256=>600, 1257=>600, 1258=>600, 1259=>600, 1260=>600, 1261=>600, 1262=>600, 1263=>600, 1264=>600, 1265=>600, 1266=>600, 1267=>600, 1268=>600, 1269=>600, 1270=>600, 
+	1271=>600, 1272=>600, 1273=>600, 1456=>600, 1457=>600, 1458=>600, 1459=>600, 1460=>600, 1461=>600, 1462=>600, 1463=>600, 1464=>600, 1465=>600, 1467=>600, 1468=>600, 1469=>600, 
+	1470=>600, 1471=>600, 1472=>600, 1473=>600, 1474=>600, 1475=>600, 1476=>600, 1488=>600, 1489=>600, 1490=>600, 1491=>600, 1492=>600, 1493=>600, 1494=>600, 1495=>600, 1496=>600, 
+	1497=>600, 1498=>600, 1499=>600, 1500=>600, 1501=>600, 1502=>600, 1503=>600, 1504=>600, 1505=>600, 1506=>600, 1507=>600, 1508=>600, 1509=>600, 1510=>600, 1511=>600, 1512=>600, 
+	1513=>600, 1514=>600, 1520=>600, 1521=>600, 1522=>600, 1523=>600, 1524=>600, 7680=>600, 7681=>600, 7682=>600, 7683=>600, 7684=>600, 7685=>600, 7686=>600, 7687=>600, 7688=>600, 
+	7689=>600, 7690=>600, 7691=>600, 7692=>600, 7693=>600, 7694=>600, 7695=>600, 7696=>600, 7697=>600, 7698=>600, 7699=>600, 7700=>600, 7701=>600, 7702=>600, 7703=>600, 7704=>600, 
+	7705=>600, 7706=>600, 7707=>600, 7708=>600, 7709=>600, 7710=>600, 7711=>600, 7712=>600, 7713=>600, 7714=>600, 7715=>600, 7716=>600, 7717=>600, 7718=>600, 7719=>600, 7720=>600, 
+	7721=>600, 7722=>600, 7723=>600, 7724=>600, 7725=>600, 7726=>600, 7727=>600, 7728=>600, 7729=>600, 7730=>600, 7731=>600, 7732=>600, 7733=>600, 7734=>600, 7735=>600, 7736=>600, 
+	7737=>600, 7738=>600, 7739=>600, 7740=>600, 7741=>600, 7742=>600, 7743=>600, 7744=>600, 7745=>600, 7746=>600, 7747=>600, 7748=>600, 7749=>600, 7750=>600, 7751=>600, 7752=>600, 
+	7753=>600, 7754=>600, 7755=>600, 7756=>600, 7757=>600, 7758=>600, 7759=>600, 7760=>600, 7761=>600, 7762=>600, 7763=>600, 7764=>600, 7765=>600, 7766=>600, 7767=>600, 7768=>600, 
+	7769=>600, 7770=>600, 7771=>600, 7772=>600, 7773=>600, 7774=>600, 7775=>600, 7776=>600, 7777=>600, 7778=>600, 7779=>600, 7780=>600, 7781=>600, 7782=>600, 7783=>600, 7784=>600, 
+	7785=>600, 7786=>600, 7787=>600, 7788=>600, 7789=>600, 7790=>600, 7791=>600, 7792=>600, 7793=>600, 7794=>600, 7795=>600, 7796=>600, 7797=>600, 7798=>600, 7799=>600, 7800=>600, 
+	7801=>600, 7802=>600, 7803=>600, 7804=>600, 7805=>600, 7806=>600, 7807=>600, 7808=>600, 7809=>600, 7810=>600, 7811=>600, 7812=>600, 7813=>600, 7814=>600, 7815=>600, 7816=>600, 
+	7817=>600, 7818=>600, 7819=>600, 7820=>600, 7821=>600, 7822=>600, 7823=>600, 7824=>600, 7825=>600, 7826=>600, 7827=>600, 7828=>600, 7829=>600, 7830=>600, 7831=>600, 7832=>600, 
+	7833=>600, 7835=>600, 7840=>600, 7841=>600, 7842=>600, 7843=>600, 7844=>600, 7845=>600, 7846=>600, 7847=>600, 7848=>600, 7849=>600, 7850=>600, 7851=>600, 7852=>600, 7853=>600, 
+	7854=>600, 7855=>600, 7856=>600, 7857=>600, 7858=>600, 7859=>600, 7860=>600, 7861=>600, 7862=>600, 7863=>600, 7864=>600, 7865=>600, 7866=>600, 7867=>600, 7868=>600, 7869=>600, 
+	7870=>600, 7871=>600, 7872=>600, 7873=>600, 7874=>600, 7875=>600, 7876=>600, 7877=>600, 7878=>600, 7879=>600, 7880=>600, 7881=>600, 7882=>600, 7883=>600, 7884=>600, 7885=>600, 
+	7886=>600, 7887=>600, 7888=>600, 7889=>600, 7890=>600, 7891=>600, 7892=>600, 7893=>600, 7894=>600, 7895=>600, 7896=>600, 7897=>600, 7898=>600, 7899=>600, 7900=>600, 7901=>600, 
+	7902=>600, 7903=>600, 7904=>600, 7905=>600, 7906=>600, 7907=>600, 7908=>600, 7909=>600, 7910=>600, 7911=>600, 7912=>600, 7913=>600, 7914=>600, 7915=>600, 7916=>600, 7917=>600, 
+	7918=>600, 7919=>600, 7920=>600, 7921=>600, 7922=>600, 7923=>600, 7924=>600, 7925=>600, 7926=>600, 7927=>600, 7928=>600, 7929=>600, 8209=>600, 8213=>600, 8219=>600, 8223=>600, 
+	8242=>600, 8243=>600, 8244=>600, 8245=>600, 8246=>600, 8247=>600, 8252=>600, 8260=>600, 8261=>600, 8262=>600, 8264=>600, 8265=>600, 8267=>600, 8292=>600, 8304=>600, 8305=>600, 
+	8306=>600, 8307=>600, 8308=>600, 8309=>600, 8310=>600, 8311=>600, 8312=>600, 8313=>600, 8314=>600, 8315=>600, 8316=>600, 8317=>600, 8318=>600, 8319=>600, 8320=>600, 8321=>600, 
+	8322=>600, 8323=>600, 8324=>600, 8325=>600, 8326=>600, 8327=>600, 8328=>600, 8329=>600, 8355=>600, 8356=>600, 8362=>600, 8466=>600, 8470=>600, 8486=>600, 8487=>600, 8490=>600, 
+	8491=>600, 8531=>600, 8532=>600, 8533=>600, 8534=>600, 8535=>600, 8536=>600, 8537=>600, 8538=>600, 8539=>600, 8540=>600, 8541=>600, 8542=>600, 8543=>600, 8592=>600, 8593=>600, 
+	8594=>600, 8595=>600, 8706=>600, 8709=>600, 8710=>600, 8711=>600, 8721=>600, 8722=>600, 8725=>600, 8730=>600, 8733=>600, 8734=>600, 8735=>600, 8800=>600, 8801=>600, 8804=>600, 
+	8805=>600, 8976=>600, 9472=>600, 9473=>600, 9474=>600, 9475=>600, 9476=>600, 9477=>600, 9478=>600, 9479=>600, 9480=>600, 9481=>600, 9482=>600, 9483=>600, 9484=>600, 9485=>600, 
+	9486=>600, 9487=>600, 9488=>600, 9489=>600, 9490=>600, 9491=>600, 9492=>600, 9493=>600, 9494=>600, 9495=>600, 9496=>600, 9497=>600, 9498=>600, 9499=>600, 9500=>600, 9501=>600, 
+	9502=>600, 9503=>600, 9504=>600, 9505=>600, 9506=>600, 9507=>600, 9508=>600, 9509=>600, 9510=>600, 9511=>600, 9512=>600, 9513=>600, 9514=>600, 9515=>600, 9516=>600, 9517=>600, 
+	9518=>600, 9519=>600, 9520=>600, 9521=>600, 9522=>600, 9523=>600, 9524=>600, 9525=>600, 9526=>600, 9527=>600, 9528=>600, 9529=>600, 9530=>600, 9531=>600, 9532=>600, 9533=>600, 
+	9534=>600, 9535=>600, 9536=>600, 9537=>600, 9538=>600, 9539=>600, 9540=>600, 9541=>600, 9542=>600, 9543=>600, 9544=>600, 9545=>600, 9546=>600, 9547=>600, 9548=>600, 9549=>600, 
+	9550=>600, 9551=>600, 9552=>600, 9553=>600, 9554=>600, 9555=>600, 9556=>600, 9557=>600, 9558=>600, 9559=>600, 9560=>600, 9561=>600, 9562=>600, 9563=>600, 9564=>600, 9565=>600, 
+	9566=>600, 9567=>600, 9568=>600, 9569=>600, 9570=>600, 9571=>600, 9572=>600, 9573=>600, 9574=>600, 9575=>600, 9576=>600, 9577=>600, 9578=>600, 9579=>600, 9580=>600, 9581=>600, 
+	9582=>600, 9583=>600, 9584=>600, 9585=>600, 9586=>600, 9587=>600, 9588=>600, 9589=>600, 9590=>600, 9591=>600, 9592=>600, 9593=>600, 9594=>600, 9595=>600, 9596=>600, 9597=>600, 
+	9598=>600, 9599=>600, 9600=>600, 9601=>600, 9602=>600, 9603=>600, 9604=>600, 9605=>600, 9606=>600, 9607=>600, 9608=>600, 9609=>600, 9610=>600, 9611=>600, 9612=>600, 9613=>600, 
+	9614=>600, 9615=>600, 9616=>600, 9617=>600, 9618=>600, 9619=>600, 9620=>600, 9621=>600, 9632=>600, 9633=>600, 9635=>600, 9636=>600, 9637=>600, 9638=>600, 9639=>600, 9640=>600, 
+	9641=>600, 9642=>600, 9643=>600, 9644=>600, 9645=>600, 9646=>600, 9647=>600, 9648=>600, 9649=>600, 9650=>600, 9651=>600, 9652=>600, 9653=>600, 9654=>600, 9655=>600, 9656=>600, 
+	9657=>600, 9658=>600, 9660=>600, 9661=>600, 9662=>600, 9663=>600, 9664=>600, 9665=>600, 9666=>600, 9667=>600, 9668=>600, 9669=>600, 9670=>600, 9671=>600, 9673=>600, 9674=>600, 
+	9675=>600, 9677=>600, 9679=>600, 9680=>600, 9681=>600, 9682=>600, 9683=>600, 9684=>600, 9685=>600, 9686=>600, 9687=>600, 9688=>600, 9689=>600, 9698=>600, 9699=>600, 9700=>600, 
+	9701=>600, 9702=>600, 9703=>600, 9704=>600, 9705=>600, 9706=>600, 9707=>600, 9708=>600, 9709=>600, 9710=>600, 9712=>600, 9713=>600, 9714=>600, 9715=>600, 9716=>600, 9717=>600, 
+	9718=>600, 9719=>600, 9735=>600, 9736=>600, 9737=>600, 9776=>600, 9777=>600, 9778=>600, 9779=>600, 9780=>600, 9781=>600, 9782=>600, 9783=>600, 9785=>600, 9786=>600, 9787=>600, 
+	9833=>600, 9834=>600, 9835=>600, 9836=>600, 63166=>600, 63171=>600, 64256=>600, 64257=>600, 64258=>600}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='FreeMonoBold.z';
+  font[:ctg]='FreeMonoBold.ctg.z';
+  font[:originalsize]=175016;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/freemonobi.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,62 @@
+TCPDFFontDescriptor.define('freemonobi') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='FreeMonoBoldOblique';
+  font[:desc]={'Ascent'=>1111,'Descent'=>-278,'CapHeight'=>1111,'Flags'=>96,'FontBBox'=>'[-513 -278 840 1111]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>600}
+  font[:up]=-100;
+  font[:ut]=50;
+  font[:cw]={
+	13=>333, 32=>600, 33=>600, 34=>600, 35=>600, 36=>600, 37=>600, 38=>600, 39=>600, 40=>600, 41=>600, 42=>600, 43=>600, 44=>600, 45=>600, 46=>600, 
+	47=>600, 48=>600, 49=>600, 50=>600, 51=>600, 52=>600, 53=>600, 54=>600, 55=>600, 56=>600, 57=>600, 58=>600, 59=>600, 60=>600, 61=>600, 62=>600, 
+	63=>600, 64=>600, 65=>600, 66=>600, 67=>600, 68=>600, 69=>600, 70=>600, 71=>600, 72=>600, 73=>600, 74=>600, 75=>600, 76=>600, 77=>600, 78=>600, 
+	79=>600, 80=>600, 81=>600, 82=>600, 83=>600, 84=>600, 85=>600, 86=>600, 87=>600, 88=>600, 89=>600, 90=>600, 91=>600, 92=>600, 93=>600, 94=>600, 
+	95=>600, 96=>600, 97=>600, 98=>600, 99=>600, 100=>600, 101=>600, 102=>600, 103=>600, 104=>600, 105=>600, 106=>600, 107=>600, 108=>600, 109=>600, 110=>600, 
+	111=>600, 112=>600, 113=>600, 114=>600, 115=>600, 116=>600, 117=>600, 118=>600, 119=>600, 120=>600, 121=>600, 122=>600, 123=>600, 124=>600, 125=>600, 126=>600, 
+	8364=>600, 1027=>600, 8218=>600, 402=>600, 8222=>600, 8230=>600, 8224=>600, 8225=>600, 710=>600, 8240=>600, 352=>600, 8249=>600, 338=>600, 1036=>600, 381=>600, 1039=>600, 
+	8216=>600, 8217=>600, 8220=>600, 8221=>600, 8226=>600, 8211=>600, 8212=>600, 732=>600, 8482=>600, 353=>600, 8250=>600, 339=>600, 1116=>600, 382=>600, 376=>600, 160=>600, 
+	161=>600, 162=>600, 163=>600, 164=>600, 165=>600, 166=>600, 167=>600, 168=>600, 169=>600, 170=>600, 171=>600, 172=>600, 173=>600, 174=>600, 175=>600, 176=>600, 
+	177=>600, 178=>600, 179=>600, 180=>600, 181=>600, 182=>600, 183=>600, 184=>600, 185=>600, 186=>600, 187=>600, 188=>600, 189=>600, 190=>600, 191=>600, 192=>600, 
+	193=>600, 194=>600, 195=>600, 196=>600, 197=>600, 198=>600, 199=>600, 200=>600, 201=>600, 202=>600, 203=>600, 204=>600, 205=>600, 206=>600, 207=>600, 208=>600, 
+	209=>600, 210=>600, 211=>600, 212=>600, 213=>600, 214=>600, 215=>600, 216=>600, 217=>600, 218=>600, 219=>600, 220=>600, 221=>600, 222=>600, 223=>600, 224=>600, 
+	225=>600, 226=>600, 227=>600, 228=>600, 229=>600, 230=>600, 231=>600, 232=>600, 233=>600, 234=>600, 235=>600, 236=>600, 237=>600, 238=>600, 239=>600, 240=>600, 
+	241=>600, 242=>600, 243=>600, 244=>600, 245=>600, 246=>600, 247=>600, 248=>600, 249=>600, 250=>600, 251=>600, 252=>600, 253=>600, 254=>600, 255=>600, 256=>600, 
+	257=>600, 258=>600, 259=>600, 260=>600, 261=>600, 262=>600, 263=>600, 264=>600, 265=>600, 266=>600, 267=>600, 268=>600, 269=>600, 270=>600, 271=>600, 272=>600, 
+	273=>600, 274=>600, 275=>600, 276=>600, 277=>600, 278=>600, 279=>600, 280=>600, 281=>600, 282=>600, 283=>600, 284=>600, 285=>600, 286=>600, 287=>600, 288=>600, 
+	289=>600, 290=>600, 291=>600, 292=>600, 293=>600, 294=>600, 295=>600, 296=>600, 297=>600, 298=>600, 299=>600, 300=>600, 301=>600, 302=>600, 303=>600, 304=>600, 
+	305=>600, 306=>600, 307=>600, 308=>600, 309=>600, 310=>600, 311=>600, 312=>600, 313=>600, 314=>600, 315=>600, 316=>600, 317=>600, 318=>600, 319=>600, 320=>600, 
+	321=>600, 322=>600, 323=>600, 324=>600, 325=>600, 326=>600, 327=>600, 328=>600, 329=>600, 330=>600, 331=>600, 332=>600, 333=>600, 334=>600, 335=>600, 336=>600, 
+	337=>600, 340=>600, 341=>600, 342=>600, 343=>600, 344=>600, 345=>600, 346=>600, 347=>600, 348=>600, 349=>600, 350=>600, 351=>600, 354=>600, 355=>600, 356=>600, 
+	357=>600, 358=>600, 359=>600, 360=>600, 361=>600, 362=>600, 363=>600, 364=>600, 365=>600, 366=>600, 367=>600, 368=>600, 369=>600, 370=>600, 371=>600, 372=>600, 
+	373=>600, 374=>600, 375=>600, 377=>600, 378=>600, 379=>600, 380=>600, 383=>600, 425=>600, 461=>600, 462=>600, 463=>600, 464=>600, 465=>600, 466=>600, 467=>600, 
+	468=>600, 469=>600, 470=>600, 471=>600, 472=>600, 473=>600, 474=>600, 475=>600, 476=>600, 477=>600, 478=>600, 479=>600, 482=>600, 483=>600, 486=>600, 487=>600, 
+	488=>600, 489=>600, 490=>600, 491=>600, 492=>600, 493=>600, 496=>600, 500=>600, 501=>600, 504=>600, 505=>600, 506=>600, 507=>600, 508=>600, 509=>600, 510=>600, 
+	511=>600, 512=>600, 513=>600, 514=>600, 515=>600, 516=>600, 517=>600, 518=>600, 519=>600, 520=>600, 521=>600, 522=>600, 523=>600, 524=>600, 525=>600, 526=>600, 
+	527=>600, 528=>600, 529=>600, 530=>600, 531=>600, 532=>600, 533=>600, 534=>600, 535=>600, 536=>600, 537=>600, 538=>600, 539=>600, 593=>600, 617=>600, 711=>600, 
+	728=>600, 729=>0, 730=>600, 731=>600, 733=>600, 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 774=>0, 775=>0, 776=>0, 778=>0, 779=>0, 780=>0, 
+	783=>0, 784=>0, 785=>0, 900=>600, 901=>600, 902=>600, 904=>600, 912=>600, 913=>600, 914=>600, 915=>600, 916=>600, 917=>600, 918=>600, 919=>600, 920=>600, 
+	921=>600, 922=>600, 923=>600, 924=>600, 925=>600, 926=>600, 927=>600, 928=>600, 929=>600, 931=>600, 932=>600, 933=>600, 934=>600, 935=>600, 936=>600, 937=>600, 
+	938=>600, 939=>600, 945=>600, 946=>600, 947=>600, 950=>600, 951=>600, 952=>600, 953=>600, 954=>600, 955=>600, 956=>600, 957=>600, 959=>600, 970=>600, 1024=>600, 
+	1025=>600, 1026=>600, 1028=>600, 1029=>600, 1030=>600, 1031=>600, 1032=>600, 1033=>600, 1034=>600, 1035=>600, 1037=>600, 1038=>600, 1040=>600, 1041=>600, 1042=>600, 1043=>600, 
+	1044=>600, 1045=>600, 1046=>600, 1047=>600, 1048=>600, 1049=>600, 1050=>600, 1051=>600, 1052=>600, 1053=>600, 1054=>600, 1055=>600, 1056=>600, 1057=>600, 1058=>600, 1059=>600, 
+	1060=>600, 1061=>600, 1062=>600, 1063=>600, 1064=>600, 1065=>600, 1066=>600, 1067=>600, 1068=>600, 1069=>600, 1070=>600, 1071=>600, 1072=>600, 1073=>600, 1074=>600, 1075=>600, 
+	1076=>600, 1077=>600, 1078=>600, 1079=>600, 1080=>600, 1081=>600, 1082=>600, 1083=>600, 1084=>600, 1085=>600, 1086=>600, 1087=>600, 1088=>600, 1089=>600, 1090=>600, 1091=>600, 
+	1092=>600, 1093=>600, 1094=>600, 1095=>600, 1096=>600, 1097=>600, 1098=>600, 1099=>600, 1100=>600, 1101=>600, 1102=>600, 1103=>600, 1104=>600, 1105=>600, 1106=>600, 1107=>600, 
+	1108=>600, 1109=>600, 1110=>600, 1111=>600, 1112=>600, 1113=>600, 1114=>600, 1115=>600, 1117=>600, 1118=>600, 1119=>600, 1164=>600, 1165=>600, 1166=>600, 1167=>600, 1168=>600, 
+	1169=>600, 1170=>600, 1171=>600, 1172=>600, 1173=>600, 1174=>600, 1175=>600, 1176=>600, 1177=>600, 1178=>600, 1179=>600, 1180=>600, 1181=>600, 1182=>600, 1183=>600, 1184=>600, 
+	1185=>600, 1186=>600, 1187=>600, 1188=>600, 1189=>600, 1190=>600, 1191=>600, 1192=>600, 1193=>600, 1194=>600, 1195=>600, 1196=>600, 1197=>600, 1198=>600, 1199=>600, 1200=>600, 
+	1201=>600, 1202=>600, 1203=>600, 1204=>600, 1205=>600, 1206=>600, 1207=>600, 1208=>600, 1209=>600, 1210=>600, 1211=>600, 1212=>600, 1213=>600, 1214=>600, 1215=>600, 1216=>600, 
+	1217=>600, 1218=>600, 1219=>600, 1220=>600, 1223=>600, 1224=>600, 1227=>600, 1228=>600, 1232=>600, 1233=>600, 1234=>600, 1235=>600, 1236=>600, 1237=>600, 1238=>600, 1239=>600, 
+	1240=>600, 1241=>600, 1242=>600, 1243=>600, 1244=>600, 1245=>600, 1246=>600, 1247=>600, 1248=>600, 1249=>600, 1250=>600, 1251=>600, 1252=>600, 1253=>600, 1254=>600, 1255=>600, 
+	1256=>600, 1257=>600, 1258=>600, 1259=>600, 1260=>600, 1261=>600, 1262=>600, 1263=>600, 1264=>600, 1265=>600, 1266=>600, 1267=>600, 1268=>600, 1269=>600, 1272=>600, 1273=>600, 
+	1456=>600, 1457=>600, 1458=>600, 1459=>600, 1460=>600, 1461=>600, 1462=>600, 1463=>600, 1464=>600, 1465=>600, 1467=>600, 1468=>600, 1469=>600, 1470=>600, 1471=>600, 1472=>600, 
+	1473=>600, 1474=>600, 1475=>600, 1476=>600, 1488=>600, 1489=>600, 1490=>600, 1491=>600, 1492=>600, 1493=>600, 1494=>600, 1495=>600, 1496=>600, 1497=>600, 1498=>600, 1499=>600, 
+	1500=>600, 1501=>600, 1502=>600, 1503=>600, 1504=>600, 1505=>600, 1506=>600, 1507=>600, 1508=>600, 1509=>600, 1510=>600, 1511=>600, 1512=>600, 1513=>600, 1514=>600, 1520=>600, 
+	1521=>600, 1522=>600, 1523=>600, 1524=>600, 8213=>600, 8260=>600, 8304=>600, 8305=>600, 8306=>600, 8307=>600, 8308=>600, 8309=>600, 8310=>600, 8311=>600, 8312=>600, 8313=>600, 
+	8320=>600, 8321=>600, 8322=>600, 8323=>600, 8324=>600, 8325=>600, 8326=>600, 8327=>600, 8328=>600, 8329=>600, 8362=>600, 8470=>600, 8486=>600, 8531=>600, 8532=>600, 8533=>600, 
+	8534=>600, 8535=>600, 8536=>600, 8537=>600, 8538=>600, 8539=>600, 8540=>600, 8541=>600, 8542=>600, 8543=>600, 8592=>600, 8593=>600, 8594=>600, 8595=>600, 8706=>600, 8710=>600, 
+	8721=>600, 8722=>600, 8730=>600, 8734=>600, 8800=>600, 8804=>600, 8805=>600, 9674=>600, 9833=>600, 9834=>600, 9835=>600, 9836=>600, 63166=>600, 63171=>600, 64257=>600, 64258=>600}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='FreeMonoBoldOblique.z';
+  font[:ctg]='FreeMonoBoldOblique.ctg.z';
+  font[:originalsize]=128384;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/freemonoi.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,89 @@
+TCPDFFontDescriptor.define('freemonoi') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='FreeMonoOblique';
+  font[:desc]={'Ascent'=>1000,'Descent'=>-273,'CapHeight'=>1000,'Flags'=>96,'FontBBox'=>'[-577 -273 779 1000]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>600}
+  font[:up]=-100;
+  font[:ut]=50;
+  font[:cw]={
+	13=>333, 32=>600, 33=>600, 34=>600, 35=>600, 36=>600, 37=>600, 38=>600, 39=>600, 40=>600, 41=>600, 42=>600, 43=>600, 44=>600, 45=>600, 46=>600, 
+	47=>600, 48=>600, 49=>600, 50=>600, 51=>600, 52=>600, 53=>600, 54=>600, 55=>600, 56=>600, 57=>600, 58=>600, 59=>600, 60=>600, 61=>600, 62=>600, 
+	63=>600, 64=>600, 65=>600, 66=>600, 67=>600, 68=>600, 69=>600, 70=>600, 71=>600, 72=>600, 73=>600, 74=>600, 75=>600, 76=>600, 77=>600, 78=>600, 
+	79=>600, 80=>600, 81=>600, 82=>600, 83=>600, 84=>600, 85=>600, 86=>600, 87=>600, 88=>600, 89=>600, 90=>600, 91=>600, 92=>600, 93=>600, 94=>600, 
+	95=>600, 96=>600, 97=>600, 98=>600, 99=>600, 100=>600, 101=>600, 102=>600, 103=>600, 104=>600, 105=>600, 106=>600, 107=>600, 108=>600, 109=>600, 110=>600, 
+	111=>600, 112=>600, 113=>600, 114=>600, 115=>600, 116=>600, 117=>600, 118=>600, 119=>600, 120=>600, 121=>600, 122=>600, 123=>600, 124=>600, 125=>600, 126=>600, 
+	8364=>600, 1027=>600, 8218=>600, 402=>600, 8222=>600, 8230=>600, 8224=>600, 8225=>600, 710=>600, 8240=>600, 352=>600, 8249=>600, 338=>600, 1036=>600, 381=>600, 1039=>600, 
+	8216=>600, 8217=>600, 8220=>600, 8221=>600, 8226=>600, 8211=>600, 8212=>600, 732=>600, 8482=>600, 353=>600, 8250=>600, 339=>600, 1116=>600, 382=>600, 376=>600, 160=>600, 
+	161=>600, 162=>600, 163=>600, 164=>600, 165=>600, 166=>600, 167=>600, 168=>600, 169=>600, 170=>600, 171=>600, 172=>600, 173=>600, 174=>600, 175=>600, 176=>600, 
+	177=>600, 178=>600, 179=>600, 180=>600, 181=>600, 182=>600, 183=>600, 184=>600, 185=>600, 186=>600, 187=>600, 188=>600, 189=>600, 190=>600, 191=>600, 192=>600, 
+	193=>600, 194=>600, 195=>600, 196=>600, 197=>600, 198=>600, 199=>600, 200=>600, 201=>600, 202=>600, 203=>600, 204=>600, 205=>600, 206=>600, 207=>600, 208=>600, 
+	209=>600, 210=>600, 211=>600, 212=>600, 213=>600, 214=>600, 215=>600, 216=>600, 217=>600, 218=>600, 219=>600, 220=>600, 221=>600, 222=>600, 223=>600, 224=>600, 
+	225=>600, 226=>600, 227=>600, 228=>600, 229=>600, 230=>600, 231=>600, 232=>600, 233=>600, 234=>600, 235=>600, 236=>600, 237=>600, 238=>600, 239=>600, 240=>600, 
+	241=>600, 242=>600, 243=>600, 244=>600, 245=>600, 246=>600, 247=>600, 248=>600, 249=>600, 250=>600, 251=>600, 252=>600, 253=>600, 254=>600, 255=>600, 256=>600, 
+	257=>600, 258=>600, 259=>600, 260=>600, 261=>600, 262=>600, 263=>600, 264=>600, 265=>600, 266=>600, 267=>600, 268=>600, 269=>600, 270=>600, 271=>600, 272=>600, 
+	273=>600, 274=>600, 275=>600, 276=>600, 277=>600, 278=>600, 279=>600, 280=>600, 281=>600, 282=>600, 283=>600, 284=>600, 285=>600, 286=>600, 287=>600, 288=>600, 
+	289=>600, 290=>600, 291=>600, 292=>600, 293=>600, 294=>600, 295=>600, 296=>600, 297=>600, 298=>600, 299=>600, 300=>600, 301=>600, 302=>600, 303=>600, 304=>600, 
+	305=>600, 306=>600, 307=>600, 308=>600, 309=>600, 310=>600, 311=>600, 312=>600, 313=>600, 314=>600, 315=>600, 316=>600, 317=>600, 318=>600, 319=>600, 320=>600, 
+	321=>600, 322=>600, 323=>600, 324=>600, 325=>600, 326=>600, 327=>600, 328=>600, 329=>600, 330=>600, 331=>600, 332=>600, 333=>600, 334=>600, 335=>600, 336=>600, 
+	337=>600, 340=>600, 341=>600, 342=>600, 343=>600, 344=>600, 345=>600, 346=>600, 347=>600, 348=>600, 349=>600, 350=>600, 351=>600, 354=>600, 355=>600, 356=>600, 
+	357=>600, 358=>600, 359=>600, 360=>600, 361=>600, 362=>600, 363=>600, 364=>600, 365=>600, 366=>600, 367=>600, 368=>600, 369=>600, 370=>600, 371=>600, 372=>600, 
+	373=>600, 374=>600, 375=>600, 377=>600, 378=>600, 379=>600, 380=>600, 383=>600, 384=>600, 385=>600, 386=>600, 387=>600, 388=>600, 389=>600, 390=>600, 391=>600, 
+	392=>600, 393=>600, 394=>600, 395=>600, 396=>600, 397=>600, 398=>600, 399=>600, 400=>600, 401=>600, 403=>600, 404=>600, 405=>600, 406=>600, 407=>600, 408=>600, 
+	409=>600, 410=>600, 411=>600, 412=>600, 413=>600, 414=>600, 415=>600, 416=>600, 417=>600, 418=>600, 419=>600, 420=>600, 421=>600, 422=>600, 423=>600, 424=>600, 
+	425=>600, 426=>600, 427=>600, 428=>600, 429=>600, 430=>600, 431=>600, 432=>600, 433=>600, 434=>600, 435=>600, 436=>600, 437=>600, 438=>600, 439=>600, 440=>600, 
+	441=>600, 442=>600, 443=>600, 444=>600, 445=>600, 446=>600, 448=>600, 449=>600, 450=>600, 451=>600, 452=>600, 453=>600, 454=>600, 455=>600, 456=>600, 457=>600, 
+	458=>600, 459=>600, 460=>600, 461=>600, 462=>600, 463=>600, 464=>600, 465=>600, 466=>600, 467=>600, 468=>600, 469=>600, 470=>600, 471=>600, 472=>600, 473=>600, 
+	474=>600, 475=>600, 476=>600, 477=>600, 478=>600, 479=>600, 480=>600, 481=>600, 482=>600, 483=>600, 484=>600, 485=>600, 486=>600, 487=>600, 488=>600, 489=>600, 
+	490=>600, 491=>600, 492=>600, 493=>600, 494=>600, 495=>600, 496=>600, 497=>600, 498=>600, 499=>600, 500=>600, 501=>600, 502=>600, 504=>600, 505=>600, 506=>600, 
+	507=>600, 508=>600, 509=>600, 510=>600, 511=>600, 512=>600, 513=>600, 514=>600, 515=>600, 516=>600, 517=>600, 518=>600, 519=>600, 520=>600, 521=>600, 522=>600, 
+	523=>600, 524=>600, 525=>600, 526=>600, 527=>600, 528=>600, 529=>600, 530=>600, 531=>600, 532=>600, 533=>600, 534=>600, 535=>600, 536=>600, 537=>600, 538=>600, 
+	539=>600, 542=>600, 543=>600, 548=>600, 549=>600, 550=>600, 551=>600, 552=>600, 553=>600, 554=>600, 555=>600, 556=>600, 557=>600, 558=>600, 559=>600, 560=>600, 
+	561=>600, 562=>600, 563=>600, 592=>600, 593=>600, 594=>600, 595=>600, 596=>600, 597=>600, 598=>600, 599=>600, 600=>600, 601=>600, 602=>600, 603=>600, 604=>600, 
+	605=>600, 606=>600, 607=>600, 608=>600, 609=>600, 610=>600, 611=>600, 612=>600, 613=>600, 614=>600, 615=>600, 616=>600, 617=>600, 618=>600, 619=>600, 620=>600, 
+	621=>600, 622=>600, 623=>600, 624=>600, 625=>600, 626=>600, 627=>600, 628=>600, 629=>600, 630=>600, 631=>600, 632=>600, 633=>600, 634=>600, 635=>600, 636=>600, 
+	637=>600, 638=>600, 639=>600, 640=>600, 641=>600, 642=>600, 643=>600, 644=>600, 645=>600, 646=>600, 647=>600, 648=>600, 649=>600, 650=>600, 651=>600, 652=>600, 
+	653=>600, 654=>600, 655=>600, 656=>600, 657=>600, 658=>600, 659=>600, 660=>600, 661=>600, 662=>600, 663=>600, 664=>600, 665=>600, 666=>600, 667=>600, 668=>600, 
+	669=>600, 670=>600, 671=>600, 672=>600, 673=>600, 674=>600, 711=>600, 712=>600, 713=>600, 714=>600, 715=>600, 728=>600, 729=>600, 730=>600, 731=>600, 733=>600, 
+	768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, 783=>0, 
+	807=>0, 808=>0, 821=>0, 822=>0, 823=>0, 824=>0, 901=>600, 902=>600, 904=>600, 905=>600, 906=>600, 908=>600, 910=>600, 911=>600, 912=>600, 913=>600, 
+	914=>600, 915=>600, 916=>600, 917=>600, 918=>600, 919=>600, 920=>600, 921=>600, 922=>600, 923=>600, 924=>600, 925=>600, 926=>600, 927=>600, 928=>600, 929=>600, 
+	931=>600, 932=>600, 933=>600, 934=>600, 935=>600, 936=>600, 937=>600, 938=>600, 939=>600, 940=>600, 941=>600, 942=>600, 943=>600, 944=>600, 945=>600, 946=>600, 
+	947=>600, 948=>600, 949=>600, 950=>600, 951=>600, 952=>600, 953=>600, 954=>600, 955=>600, 956=>600, 957=>600, 958=>600, 959=>600, 960=>600, 961=>600, 962=>600, 
+	963=>600, 964=>600, 965=>600, 966=>600, 967=>600, 968=>600, 969=>600, 970=>600, 971=>600, 972=>600, 973=>600, 974=>600, 1024=>600, 1025=>600, 1026=>600, 1028=>600, 
+	1029=>600, 1030=>600, 1031=>600, 1032=>600, 1033=>600, 1034=>600, 1035=>600, 1037=>600, 1038=>600, 1040=>600, 1041=>600, 1042=>600, 1043=>600, 1044=>600, 1045=>600, 1046=>600, 
+	1047=>600, 1048=>600, 1049=>600, 1050=>600, 1051=>600, 1052=>600, 1053=>600, 1054=>600, 1055=>600, 1056=>600, 1057=>600, 1058=>600, 1059=>600, 1060=>600, 1061=>600, 1062=>600, 
+	1063=>600, 1064=>600, 1065=>600, 1066=>600, 1067=>600, 1068=>600, 1069=>600, 1070=>600, 1071=>600, 1072=>600, 1073=>600, 1074=>600, 1075=>600, 1076=>600, 1077=>600, 1078=>600, 
+	1079=>600, 1080=>600, 1081=>600, 1082=>600, 1083=>600, 1084=>600, 1085=>600, 1086=>600, 1087=>600, 1088=>600, 1089=>600, 1090=>600, 1091=>600, 1092=>600, 1093=>600, 1094=>600, 
+	1095=>600, 1096=>600, 1097=>600, 1098=>600, 1099=>600, 1100=>600, 1101=>600, 1102=>600, 1103=>600, 1104=>600, 1105=>600, 1106=>600, 1107=>600, 1108=>600, 1109=>600, 1110=>600, 
+	1111=>600, 1112=>600, 1113=>600, 1114=>600, 1115=>600, 1117=>600, 1118=>600, 1119=>600, 1164=>600, 1165=>600, 1166=>600, 1167=>600, 1168=>600, 1169=>600, 1170=>600, 1171=>600, 
+	1172=>600, 1173=>600, 1174=>600, 1175=>600, 1176=>600, 1177=>600, 1178=>600, 1179=>600, 1180=>600, 1181=>600, 1182=>600, 1183=>600, 1184=>600, 1185=>600, 1186=>600, 1187=>600, 
+	1188=>600, 1189=>600, 1190=>600, 1191=>600, 1192=>600, 1193=>600, 1194=>600, 1195=>600, 1196=>600, 1197=>600, 1198=>600, 1199=>600, 1200=>600, 1201=>600, 1202=>600, 1203=>600, 
+	1204=>600, 1205=>600, 1206=>600, 1207=>600, 1208=>600, 1209=>600, 1210=>600, 1211=>600, 1212=>600, 1213=>600, 1214=>600, 1215=>600, 1216=>600, 1217=>600, 1218=>600, 1219=>600, 
+	1220=>600, 1223=>600, 1224=>600, 1227=>600, 1228=>600, 1232=>600, 1233=>600, 1234=>600, 1235=>600, 1236=>600, 1237=>600, 1238=>600, 1239=>600, 1240=>600, 1241=>600, 1242=>600, 
+	1243=>600, 1244=>600, 1245=>600, 1246=>600, 1247=>600, 1248=>600, 1249=>600, 1250=>600, 1251=>600, 1252=>600, 1253=>600, 1254=>600, 1255=>600, 1256=>600, 1257=>600, 1258=>600, 
+	1259=>600, 1260=>600, 1261=>600, 1262=>600, 1263=>600, 1264=>600, 1265=>600, 1266=>600, 1267=>600, 1268=>600, 1269=>600, 1272=>600, 1273=>600, 1328=>600, 1329=>600, 1330=>600, 
+	1331=>600, 1332=>600, 1333=>600, 1334=>600, 1335=>600, 1336=>600, 1337=>600, 1338=>600, 1339=>600, 1340=>600, 1341=>600, 1342=>600, 1343=>600, 1344=>600, 1345=>600, 1346=>600, 
+	1347=>600, 1348=>600, 1349=>600, 1350=>600, 1351=>600, 1352=>600, 1353=>600, 1354=>600, 1355=>600, 1356=>600, 1357=>600, 1358=>600, 1359=>600, 1360=>600, 1361=>600, 1362=>600, 
+	1363=>600, 1364=>600, 1365=>600, 1366=>600, 1367=>600, 1368=>600, 1369=>600, 1370=>600, 1371=>600, 1372=>600, 1373=>600, 1374=>600, 1375=>600, 1376=>600, 1377=>600, 1378=>600, 
+	1379=>600, 1380=>600, 1381=>600, 1382=>600, 1383=>600, 1384=>600, 1385=>600, 1386=>600, 1387=>600, 1388=>600, 1389=>600, 1390=>600, 1391=>600, 1392=>600, 1393=>600, 1394=>600, 
+	1395=>600, 1396=>600, 1397=>600, 1398=>600, 1399=>600, 1400=>600, 1401=>600, 1402=>600, 1403=>600, 1404=>600, 1405=>600, 1406=>600, 1407=>600, 1408=>600, 1409=>600, 1410=>600, 
+	1411=>600, 1412=>600, 1413=>600, 1414=>600, 1415=>600, 1416=>600, 1417=>600, 1418=>600, 1456=>600, 1457=>600, 1458=>600, 1459=>600, 1460=>600, 1461=>600, 1462=>600, 1463=>600, 
+	1464=>600, 1465=>600, 1467=>600, 1468=>600, 1469=>600, 1470=>600, 1471=>600, 1472=>600, 1473=>600, 1474=>600, 1475=>600, 1476=>600, 1488=>600, 1489=>600, 1490=>600, 1491=>600, 
+	1492=>600, 1493=>600, 1494=>600, 1495=>600, 1496=>600, 1497=>600, 1498=>600, 1499=>600, 1500=>600, 1501=>600, 1502=>600, 1503=>600, 1504=>600, 1505=>600, 1506=>600, 1507=>600, 
+	1508=>600, 1509=>600, 1510=>600, 1511=>600, 1512=>600, 1513=>600, 1514=>600, 1520=>600, 1521=>600, 1522=>600, 1523=>600, 1524=>600, 8213=>600, 8241=>600, 8242=>600, 8243=>600, 
+	8244=>600, 8245=>600, 8246=>600, 8247=>600, 8252=>600, 8253=>600, 8260=>600, 8261=>600, 8262=>600, 8263=>600, 8264=>600, 8265=>600, 8304=>600, 8305=>600, 8306=>600, 8307=>600, 
+	8308=>600, 8309=>600, 8310=>600, 8311=>600, 8312=>600, 8313=>600, 8314=>600, 8315=>600, 8316=>600, 8317=>600, 8318=>600, 8319=>600, 8320=>600, 8321=>600, 8322=>600, 8323=>600, 
+	8324=>600, 8325=>600, 8326=>600, 8327=>600, 8328=>600, 8329=>600, 8356=>600, 8362=>600, 8448=>600, 8449=>600, 8450=>600, 8451=>600, 8452=>600, 8453=>600, 8454=>600, 8455=>600, 
+	8456=>600, 8457=>600, 8458=>600, 8459=>600, 8460=>600, 8461=>600, 8462=>600, 8463=>600, 8464=>600, 8465=>600, 8466=>600, 8467=>600, 8468=>600, 8469=>600, 8470=>600, 8471=>600, 
+	8472=>600, 8473=>600, 8474=>600, 8475=>600, 8476=>600, 8477=>600, 8478=>600, 8479=>600, 8484=>600, 8486=>600, 8487=>600, 8490=>600, 8491=>600, 8531=>600, 8532=>600, 8533=>600, 
+	8534=>600, 8535=>600, 8536=>600, 8537=>600, 8538=>600, 8539=>600, 8540=>600, 8541=>600, 8542=>600, 8543=>600, 8592=>600, 8593=>600, 8594=>600, 8595=>600, 8596=>600, 8597=>600, 
+	8598=>600, 8599=>600, 8600=>600, 8601=>600, 8616=>600, 8706=>600, 8710=>600, 8721=>600, 8722=>600, 8730=>600, 8734=>600, 8800=>600, 8804=>600, 8805=>600, 9674=>600, 9833=>600, 
+	9834=>600, 9835=>600, 9836=>600, 9837=>600, 9838=>600, 9839=>600, 63171=>600, 64257=>600, 64258=>600, 64285=>600, 64286=>600, 64287=>600, 64288=>600, 64289=>600, 64290=>600, 64291=>600, 
+	64292=>600, 64293=>600, 64294=>600, 64295=>600, 64296=>600, 64297=>600, 64298=>600, 64299=>600, 64300=>600, 64301=>600, 64302=>600, 64303=>600, 64304=>600, 64305=>600, 64306=>600, 64307=>600, 
+	64308=>600, 64309=>600, 64310=>600, 64312=>600, 64313=>600, 64314=>600, 64315=>600, 64316=>600, 64318=>600, 64320=>600, 64321=>600, 64323=>600, 64324=>600, 64326=>600, 64327=>600, 64328=>600, 
+	64329=>600, 64330=>600, 64331=>600, 64332=>600, 64333=>600, 64334=>600, 64335=>600}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='FreeMonoOblique.z';
+  font[:ctg]='FreeMonoOblique.ctg.z';
+  font[:originalsize]=175484;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/freesans.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,149 @@
+TCPDFFontDescriptor.define('freesans') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='FreeSans';
+  font[:desc]={'Ascent'=>1141,'Descent'=>-459,'CapHeight'=>1141,'Flags'=>32,'FontBBox'=>'[-797 -459 1632 1141]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600}
+  font[:up]=-151;
+  font[:ut]=50;
+  font[:cw]={
+	13=>333, 32=>278, 33=>278, 34=>355, 35=>556, 36=>556, 37=>889, 38=>667, 39=>191, 40=>333, 41=>333, 42=>389, 43=>584, 44=>278, 45=>333, 46=>278, 
+	47=>278, 48=>556, 49=>556, 50=>556, 51=>556, 52=>556, 53=>556, 54=>556, 55=>556, 56=>556, 57=>556, 58=>278, 59=>278, 60=>584, 61=>584, 62=>584, 
+	63=>556, 64=>1015, 65=>667, 66=>667, 67=>722, 68=>722, 69=>667, 70=>611, 71=>778, 72=>722, 73=>278, 74=>500, 75=>667, 76=>556, 77=>833, 78=>722, 
+	79=>778, 80=>667, 81=>778, 82=>722, 83=>667, 84=>611, 85=>722, 86=>667, 87=>944, 88=>667, 89=>667, 90=>611, 91=>278, 92=>278, 93=>278, 94=>469, 
+	95=>556, 96=>333, 97=>556, 98=>556, 99=>500, 100=>556, 101=>556, 102=>278, 103=>556, 104=>556, 105=>222, 106=>222, 107=>500, 108=>222, 109=>833, 110=>556, 
+	111=>556, 112=>556, 113=>556, 114=>333, 115=>500, 116=>278, 117=>556, 118=>500, 119=>722, 120=>500, 121=>500, 122=>500, 123=>334, 124=>260, 125=>334, 126=>584, 
+	8364=>556, 1027=>611, 8218=>222, 402=>556, 8222=>333, 8230=>1000, 8224=>556, 8225=>556, 710=>333, 8240=>1000, 352=>667, 8249=>333, 338=>1000, 1036=>667, 381=>611, 1039=>722, 
+	8216=>222, 8217=>221, 8220=>333, 8221=>333, 8226=>350, 8211=>556, 8212=>1000, 732=>333, 8482=>1000, 353=>500, 8250=>333, 339=>944, 1116=>500, 382=>500, 376=>667, 160=>278, 
+	161=>333, 162=>556, 163=>556, 164=>556, 165=>556, 166=>260, 167=>556, 168=>333, 169=>737, 170=>370, 171=>556, 172=>584, 173=>333, 174=>737, 175=>333, 176=>606, 
+	177=>584, 178=>351, 179=>351, 180=>333, 181=>556, 182=>537, 183=>278, 184=>333, 185=>351, 186=>365, 187=>556, 188=>869, 189=>869, 190=>869, 191=>611, 192=>667, 
+	193=>667, 194=>667, 195=>667, 196=>667, 197=>667, 198=>1000, 199=>722, 200=>667, 201=>667, 202=>667, 203=>667, 204=>278, 205=>278, 206=>278, 207=>278, 208=>722, 
+	209=>722, 210=>778, 211=>778, 212=>778, 213=>778, 214=>778, 215=>584, 216=>778, 217=>722, 218=>722, 219=>722, 220=>722, 221=>666, 222=>666, 223=>611, 224=>556, 
+	225=>556, 226=>556, 227=>556, 228=>556, 229=>556, 230=>889, 231=>500, 232=>556, 233=>556, 234=>556, 235=>556, 236=>278, 237=>278, 238=>278, 239=>278, 240=>556, 
+	241=>556, 242=>556, 243=>556, 244=>556, 245=>556, 246=>556, 247=>584, 248=>611, 249=>556, 250=>556, 251=>556, 252=>556, 253=>500, 254=>555, 255=>500, 256=>667, 
+	257=>556, 258=>667, 259=>556, 260=>667, 261=>556, 262=>722, 263=>500, 264=>722, 265=>500, 266=>722, 267=>500, 268=>722, 269=>500, 270=>722, 271=>635, 272=>722, 
+	273=>556, 274=>667, 275=>556, 276=>667, 277=>556, 278=>667, 279=>556, 280=>667, 281=>556, 282=>667, 283=>556, 284=>778, 285=>556, 286=>778, 287=>556, 288=>778, 
+	289=>556, 290=>778, 291=>556, 292=>722, 293=>556, 294=>722, 295=>556, 296=>278, 297=>278, 298=>278, 299=>222, 300=>278, 301=>278, 302=>278, 303=>222, 304=>278, 
+	305=>278, 306=>700, 307=>374, 308=>500, 309=>222, 310=>667, 311=>500, 312=>500, 313=>556, 314=>222, 315=>556, 316=>222, 317=>556, 318=>292, 319=>556, 320=>500, 
+	321=>556, 322=>222, 323=>722, 324=>556, 325=>722, 326=>556, 327=>722, 328=>556, 329=>556, 330=>722, 331=>556, 332=>778, 333=>556, 334=>778, 335=>556, 336=>778, 
+	337=>556, 340=>722, 341=>333, 342=>722, 343=>333, 344=>722, 345=>333, 346=>667, 347=>500, 348=>667, 349=>500, 350=>667, 351=>500, 354=>611, 355=>278, 356=>611, 
+	357=>308, 358=>611, 359=>278, 360=>722, 361=>556, 362=>722, 363=>556, 364=>722, 365=>556, 366=>722, 367=>556, 368=>722, 369=>556, 370=>722, 371=>556, 372=>944, 
+	373=>722, 374=>667, 375=>500, 377=>611, 378=>500, 379=>611, 380=>500, 383=>278, 384=>556, 386=>667, 387=>556, 388=>667, 389=>556, 390=>722, 391=>722, 392=>500, 
+	393=>722, 395=>667, 396=>556, 398=>667, 399=>778, 400=>667, 401=>611, 403=>778, 409=>500, 413=>722, 414=>556, 415=>778, 421=>556, 423=>667, 424=>500, 425=>611, 
+	427=>278, 429=>278, 430=>611, 452=>1311, 453=>1208, 454=>1056, 455=>1056, 456=>778, 457=>444, 458=>1158, 459=>944, 460=>778, 461=>667, 462=>556, 463=>278, 464=>278, 
+	465=>778, 466=>556, 467=>722, 468=>556, 469=>722, 470=>556, 471=>722, 472=>556, 473=>722, 474=>556, 475=>722, 476=>556, 477=>556, 478=>667, 479=>556, 480=>667, 
+	481=>556, 482=>1000, 483=>889, 486=>778, 487=>556, 488=>667, 489=>500, 490=>778, 491=>556, 492=>778, 493=>556, 496=>222, 497=>1333, 498=>1222, 499=>1056, 500=>778, 
+	501=>556, 504=>722, 505=>556, 506=>667, 507=>556, 508=>1000, 509=>889, 510=>778, 511=>611, 512=>667, 513=>556, 514=>667, 515=>556, 516=>667, 517=>556, 518=>667, 
+	519=>556, 520=>278, 521=>278, 522=>278, 523=>278, 524=>778, 525=>556, 526=>778, 527=>556, 528=>722, 529=>333, 530=>722, 531=>333, 532=>722, 533=>556, 534=>722, 
+	535=>556, 536=>667, 537=>500, 538=>611, 539=>278, 542=>722, 543=>556, 550=>667, 551=>556, 552=>667, 553=>556, 554=>778, 555=>556, 556=>778, 557=>556, 558=>778, 
+	559=>556, 560=>778, 561=>556, 562=>667, 563=>500, 592=>556, 593=>556, 594=>556, 595=>556, 596=>500, 598=>556, 599=>556, 600=>556, 601=>556, 603=>500, 604=>500, 
+	608=>556, 609=>556, 613=>556, 614=>556, 615=>556, 616=>222, 617=>222, 618=>278, 621=>222, 623=>833, 624=>833, 625=>833, 626=>556, 627=>556, 629=>556, 633=>333, 
+	634=>333, 635=>333, 636=>333, 637=>333, 638=>278, 639=>278, 642=>500, 643=>278, 644=>278, 645=>278, 647=>278, 648=>278, 649=>556, 652=>500, 653=>722, 654=>500, 
+	656=>500, 668=>500, 670=>500, 672=>556, 711=>333, 714=>333, 715=>333, 728=>333, 729=>333, 730=>333, 731=>333, 733=>333, 768=>0, 769=>0, 770=>0, 771=>0, 
+	772=>0, 774=>0, 775=>0, 776=>0, 778=>0, 779=>0, 780=>0, 783=>0, 785=>0, 786=>0, 787=>0, 788=>0, 806=>0, 807=>0, 808=>0, 884=>199, 
+	885=>199, 890=>332, 894=>278, 900=>414, 901=>747, 902=>730, 903=>278, 904=>664, 905=>681, 906=>230, 908=>792, 910=>710, 911=>758, 912=>286, 913=>684, 914=>628, 
+	915=>582, 916=>684, 917=>650, 918=>628, 919=>683, 920=>750, 921=>236, 922=>684, 923=>684, 924=>800, 925=>654, 926=>630, 927=>750, 928=>721, 929=>638, 931=>628, 
+	932=>628, 933=>684, 934=>717, 935=>723, 936=>745, 937=>720, 938=>236, 939=>684, 940=>608, 941=>528, 942=>547, 943=>307, 944=>515, 945=>596, 946=>516, 947=>531, 
+	948=>560, 949=>510, 950=>462, 951=>526, 952=>526, 953=>286, 954=>516, 955=>560, 956=>574, 957=>504, 958=>470, 959=>550, 960=>661, 961=>566, 962=>535, 963=>616, 
+	964=>532, 965=>515, 966=>741, 967=>572, 968=>662, 969=>740, 970=>286, 971=>515, 972=>553, 973=>518, 974=>740, 1024=>667, 1025=>667, 1026=>766, 1028=>722, 1029=>667, 
+	1030=>278, 1031=>278, 1032=>500, 1033=>1080, 1034=>1014, 1035=>766, 1037=>722, 1038=>650, 1040=>667, 1041=>667, 1042=>667, 1043=>611, 1044=>812, 1045=>667, 1046=>1023, 1047=>667, 
+	1048=>728, 1049=>728, 1050=>667, 1051=>673, 1052=>844, 1053=>719, 1054=>778, 1055=>719, 1056=>667, 1057=>722, 1058=>611, 1059=>650, 1060=>936, 1061=>667, 1062=>741, 1063=>648, 
+	1064=>828, 1065=>850, 1066=>897, 1067=>872, 1068=>667, 1069=>722, 1070=>1032, 1071=>702, 1072=>556, 1073=>556, 1074=>522, 1075=>430, 1076=>602, 1077=>556, 1078=>837, 1079=>500, 
+	1080=>567, 1081=>567, 1082=>510, 1083=>557, 1084=>618, 1085=>558, 1086=>556, 1087=>557, 1088=>576, 1089=>500, 1090=>496, 1091=>500, 1092=>912, 1093=>500, 1094=>578, 1095=>520, 
+	1096=>692, 1097=>712, 1098=>734, 1099=>690, 1100=>552, 1101=>500, 1102=>758, 1103=>543, 1104=>556, 1105=>556, 1106=>568, 1107=>430, 1108=>500, 1109=>500, 1110=>222, 1111=>278, 
+	1112=>222, 1113=>840, 1114=>850, 1115=>568, 1117=>556, 1118=>500, 1119=>556, 1164=>667, 1165=>552, 1166=>667, 1167=>556, 1168=>611, 1169=>430, 1170=>611, 1171=>430, 1172=>611, 
+	1173=>430, 1174=>1023, 1175=>837, 1176=>667, 1177=>500, 1178=>667, 1179=>500, 1180=>667, 1181=>500, 1182=>667, 1183=>500, 1184=>667, 1185=>500, 1186=>722, 1187=>556, 1188=>1060, 
+	1189=>764, 1190=>722, 1191=>556, 1192=>722, 1193=>500, 1194=>722, 1195=>500, 1196=>611, 1197=>496, 1198=>667, 1199=>500, 1200=>667, 1201=>500, 1202=>667, 1203=>500, 1204=>774, 
+	1205=>608, 1206=>642, 1207=>508, 1208=>642, 1209=>508, 1210=>642, 1211=>508, 1212=>778, 1213=>556, 1214=>688, 1215=>556, 1216=>278, 1217=>1023, 1218=>837, 1219=>667, 1220=>500, 
+	1223=>722, 1224=>556, 1227=>642, 1228=>508, 1232=>667, 1233=>556, 1234=>667, 1235=>556, 1236=>1000, 1237=>889, 1238=>667, 1239=>556, 1240=>778, 1241=>556, 1242=>778, 1243=>556, 
+	1244=>1023, 1245=>837, 1246=>667, 1247=>500, 1248=>667, 1249=>500, 1250=>728, 1251=>567, 1252=>728, 1253=>567, 1254=>778, 1255=>556, 1256=>778, 1257=>556, 1258=>778, 1259=>556, 
+	1260=>722, 1261=>500, 1262=>650, 1263=>500, 1264=>650, 1265=>500, 1266=>650, 1267=>500, 1268=>648, 1269=>520, 1272=>872, 1273=>690, 1329=>722, 1330=>705, 1331=>774, 1332=>754, 
+	1333=>722, 1334=>751, 1335=>485, 1336=>722, 1337=>782, 1338=>655, 1339=>699, 1340=>417, 1341=>853, 1342=>791, 1343=>711, 1344=>588, 1345=>663, 1346=>665, 1347=>665, 1348=>756, 
+	1349=>623, 1350=>773, 1351=>603, 1352=>722, 1353=>648, 1354=>722, 1355=>751, 1356=>750, 1357=>722, 1358=>748, 1359=>667, 1360=>699, 1361=>623, 1362=>417, 1363=>785, 1364=>638, 
+	1365=>778, 1366=>716, 1370=>222, 1371=>133, 1372=>325, 1373=>333, 1374=>344, 1377=>833, 1378=>556, 1379=>572, 1380=>581, 1381=>550, 1382=>588, 1383=>448, 1384=>556, 1385=>568, 
+	1386=>582, 1387=>545, 1388=>301, 1389=>799, 1390=>556, 1391=>554, 1392=>533, 1393=>548, 1394=>552, 1395=>552, 1396=>544, 1397=>222, 1398=>544, 1399=>456, 1400=>556, 1401=>390, 
+	1402=>833, 1403=>509, 1404=>547, 1405=>533, 1406=>610, 1407=>887, 1408=>556, 1409=>545, 1410=>352, 1411=>853, 1412=>588, 1413=>579, 1414=>690, 1415=>545, 1417=>278, 1418=>367, 
+	1456=>70, 1457=>335, 1458=>329, 1459=>329, 1460=>70, 1461=>200, 1462=>200, 1463=>188, 1464=>188, 1465=>70, 1467=>329, 1468=>70, 1469=>70, 1470=>488, 1471=>200, 1472=>212, 
+	1473=>0, 1474=>0, 1475=>278, 1476=>70, 1488=>640, 1489=>591, 1490=>466, 1491=>598, 1492=>622, 1493=>212, 1494=>351, 1495=>623, 1496=>608, 1497=>200, 1498=>526, 1499=>550, 
+	1500=>600, 1501=>623, 1502=>621, 1503=>212, 1504=>378, 1505=>607, 1506=>587, 1507=>575, 1508=>568, 1509=>540, 1510=>590, 1511=>606, 1512=>547, 1513=>776, 1514=>687, 1792=>600, 
+	1793=>201, 1794=>201, 1795=>201, 1796=>201, 1797=>500, 1798=>500, 1799=>500, 1800=>370, 1801=>370, 1802=>574, 1803=>574, 1804=>645, 1805=>574, 1808=>452, 1809=>452, 1810=>574, 
+	1811=>645, 1812=>645, 1813=>509, 1814=>509, 1815=>682, 1816=>585, 1817=>404, 1818=>627, 1819=>718, 1820=>718, 1821=>484, 1822=>682, 1823=>600, 1824=>660, 1825=>682, 1826=>538, 
+	1827=>718, 1828=>718, 1829=>718, 1830=>574, 1831=>574, 1832=>638, 1833=>585, 1834=>509, 1835=>682, 1836=>682, 1840=>1, 1841=>1, 1842=>1, 1843=>1, 1844=>1, 1845=>1, 
+	1846=>1, 1847=>1, 1848=>1, 1849=>1, 1850=>1, 1851=>1, 1852=>1, 1853=>1, 1854=>1, 1855=>1, 1856=>1, 1857=>1, 1858=>1, 1859=>1, 1860=>1, 1861=>1, 
+	1862=>1, 1863=>1, 1864=>1, 1865=>1, 1866=>1, 2305=>6, 2306=>6, 2309=>644, 2310=>816, 2311=>392, 2312=>392, 2313=>459, 2314=>661, 2315=>641, 2317=>423, 2320=>423, 
+	2321=>816, 2323=>816, 2324=>816, 2325=>393, 2326=>622, 2327=>424, 2328=>472, 2329=>508, 2330=>517, 2331=>583, 2332=>549, 2333=>503, 2334=>538, 2335=>444, 2336=>480, 2337=>519, 
+	2338=>479, 2339=>504, 2340=>439, 2341=>542, 2342=>427, 2343=>520, 2344=>415, 2345=>415, 2346=>401, 2347=>401, 2348=>442, 2349=>520, 2350=>463, 2351=>451, 2352=>319, 2353=>319, 
+	2354=>549, 2355=>641, 2357=>442, 2358=>589, 2359=>398, 2360=>506, 2361=>430, 2364=>6, 2365=>438, 2366=>172, 2367=>172, 2368=>172, 2369=>6, 2370=>6, 2371=>6, 2373=>6, 
+	2375=>6, 2376=>6, 2377=>172, 2379=>172, 2380=>172, 2381=>6, 2384=>898, 2385=>6, 2406=>584, 2407=>584, 2408=>584, 2409=>584, 2410=>584, 2411=>584, 2412=>584, 2413=>584, 
+	2414=>584, 2415=>584, 2416=>898, 2433=>300, 2434=>400, 2435=>300, 2437=>640, 2438=>780, 2439=>520, 2440=>520, 2441=>530, 2442=>550, 2443=>620, 2444=>420, 2447=>480, 2448=>620, 
+	2451=>620, 2452=>720, 2453=>652, 2454=>500, 2455=>490, 2456=>466, 2457=>540, 2458=>490, 2459=>540, 2460=>630, 2461=>590, 2462=>680, 2463=>510, 2464=>490, 2465=>520, 2466=>520, 
+	2467=>470, 2468=>540, 2469=>490, 2470=>470, 2471=>490, 2472=>452, 2474=>560, 2475=>650, 2476=>480, 2477=>588, 2478=>480, 2479=>470, 2480=>480, 2482=>472, 2486=>512, 2487=>470, 
+	2488=>470, 2489=>520, 2492=>160, 2494=>180, 2495=>180, 2496=>180, 2497=>320, 2498=>329, 2499=>195, 2500=>260, 2503=>340, 2504=>340, 2507=>740, 2508=>740, 2509=>400, 2519=>180, 
+	2524=>540, 2525=>520, 2527=>470, 2528=>612, 2529=>420, 2530=>234, 2531=>360, 2534=>460, 2535=>420, 2536=>520, 2537=>540, 2538=>400, 2539=>400, 2540=>560, 2541=>390, 2542=>480, 
+	2543=>420, 2544=>480, 2545=>470, 2546=>400, 2547=>470, 2548=>400, 2549=>400, 2550=>400, 2551=>120, 2552=>440, 2553=>420, 2554=>420, 2565=>744, 2566=>914, 2567=>690, 2568=>670, 
+	2569=>596, 2570=>596, 2575=>498, 2576=>744, 2579=>596, 2580=>744, 2581=>550, 2582=>534, 2583=>618, 2584=>690, 2585=>546, 2586=>518, 2587=>592, 2588=>492, 2589=>574, 2590=>514, 
+	2591=>526, 2592=>556, 2593=>524, 2594=>528, 2595=>574, 2596=>484, 2597=>534, 2598=>504, 2599=>534, 2600=>538, 2602=>534, 2603=>506, 2604=>562, 2605=>516, 2606=>546, 2607=>670, 
+	2608=>538, 2610=>726, 2611=>726, 2613=>514, 2614=>546, 2616=>546, 2617=>517, 2620=>286, 2622=>172, 2623=>190, 2624=>190, 2625=>1, 2626=>1, 2631=>1, 2632=>1, 2635=>1, 
+	2636=>1, 2637=>1, 2649=>534, 2650=>618, 2651=>492, 2652=>484, 2654=>506, 2662=>616, 2663=>480, 2664=>560, 2665=>480, 2666=>468, 2667=>492, 2668=>514, 2669=>538, 2670=>572, 
+	2671=>560, 2672=>1, 2674=>498, 2675=>596, 2676=>900, 2689=>33, 2690=>33, 2693=>767, 2694=>961, 2695=>500, 2696=>495, 2697=>528, 2698=>702, 2699=>885, 2709=>501, 2710=>612, 
+	2711=>619, 2712=>569, 2713=>532, 2714=>358, 2715=>620, 2716=>606, 2717=>602, 2718=>631, 2719=>495, 2720=>528, 2721=>531, 2722=>511, 2723=>614, 2724=>294, 2725=>344, 2726=>425, 
+	2727=>345, 2728=>611, 2730=>512, 2731=>578, 2732=>428, 2733=>423, 2734=>231, 2735=>582, 2736=>344, 2738=>558, 2739=>670, 2741=>537, 2742=>592, 2743=>568, 2744=>600, 2745=>544, 
+	2749=>531, 2750=>232, 2751=>232, 2752=>232, 2753=>33, 2754=>33, 2755=>33, 2759=>33, 2760=>33, 2763=>232, 2764=>232, 2768=>903, 2790=>479, 2791=>416, 2792=>465, 2793=>469, 
+	2794=>498, 2795=>463, 2796=>451, 2797=>510, 2798=>455, 2799=>488, 2818=>131, 2819=>302, 2821=>560, 2822=>644, 2823=>632, 2825=>630, 2827=>553, 2831=>604, 2835=>520, 2837=>572, 
+	2838=>570, 2839=>580, 2840=>565, 2842=>580, 2844=>564, 2845=>575, 2847=>565, 2848=>565, 2849=>524, 2858=>572, 2859=>700, 2863=>655, 2864=>620, 2866=>652, 2867=>560, 2870=>565, 
+	2871=>565, 2872=>545, 2873=>524, 2878=>128, 2879=>1, 2880=>190, 2881=>1, 2882=>1, 2883=>1, 2887=>396, 2912=>563, 2918=>508, 2919=>424, 2920=>440, 2921=>600, 2922=>600, 
+	2923=>600, 2924=>600, 2925=>600, 2926=>511, 2927=>483, 2946=>479, 2947=>893, 2949=>1018, 2950=>1170, 2951=>916, 2952=>676, 2953=>836, 2954=>1225, 2958=>744, 2959=>744, 2960=>848, 
+	2962=>813, 2963=>813, 2964=>813, 2965=>688, 2969=>744, 2970=>676, 2972=>848, 2974=>984, 2975=>777, 2979=>1338, 2980=>664, 2984=>561, 2985=>1029, 2986=>607, 2990=>697, 2991=>697, 
+	2992=>434, 2993=>617, 2994=>869, 2995=>859, 2996=>697, 2997=>869, 2999=>1145, 3000=>1064, 3001=>1316, 3006=>424, 3007=>125, 3008=>596, 3009=>539, 3014=>596, 3015=>650, 3016=>973, 
+	3018=>1286, 3019=>1286, 3020=>1706, 3021=>333, 3031=>859, 3034=>778, 3035=>881, 3036=>876, 3037=>648, 3041=>744, 3203=>342, 3205=>620, 3206=>591, 3207=>600, 3208=>776, 3209=>1138, 
+	3210=>1464, 3214=>574, 3215=>570, 3216=>580, 3218=>589, 3219=>597, 3220=>625, 3221=>256, 3222=>565, 3223=>326, 3224=>604, 3225=>651, 3226=>408, 3228=>611, 3230=>843, 3231=>610, 
+	3232=>258, 3233=>317, 3234=>328, 3235=>803, 3236=>317, 3237=>328, 3238=>352, 3239=>352, 3240=>317, 3248=>248, 3249=>621, 3250=>620, 3251=>620, 3302=>649, 3303=>550, 3304=>573, 
+	3305=>567, 3306=>562, 3307=>557, 3308=>562, 3309=>567, 3310=>557, 3311=>557, 3458=>468, 3459=>318, 3461=>660, 3465=>778, 3466=>807, 3467=>830, 3473=>838, 3476=>860, 3481=>1000, 
+	3482=>973, 3483=>860, 3484=>997, 3486=>740, 3488=>838, 3489=>886, 3490=>886, 3492=>1295, 3493=>1295, 3495=>838, 3496=>860, 3497=>860, 3498=>860, 3499=>1403, 3501=>973, 3502=>838, 
+	3503=>660, 3504=>860, 3505=>973, 3507=>660, 3508=>886, 3509=>838, 3510=>860, 3511=>973, 3512=>838, 3513=>860, 3514=>886, 3515=>807, 3517=>830, 3520=>838, 3521=>973, 3522=>886, 
+	3523=>886, 3524=>973, 3525=>830, 3526=>973, 3530=>0, 3535=>432, 3536=>380, 3537=>420, 3538=>0, 3539=>0, 3540=>0, 3542=>0, 3544=>501, 3545=>652, 3551=>648, 7936=>596, 
+	7937=>596, 7938=>596, 7939=>596, 7940=>596, 7941=>596, 7942=>596, 7943=>596, 7944=>684, 7945=>684, 7946=>684, 7947=>684, 7948=>684, 7949=>684, 7950=>684, 7951=>684, 7952=>510, 
+	7953=>510, 7954=>510, 7955=>510, 7956=>510, 7957=>510, 7960=>650, 7961=>650, 7962=>650, 7963=>650, 7964=>650, 7965=>650, 7968=>526, 7969=>526, 7970=>526, 7971=>526, 7972=>526, 
+	7973=>526, 7974=>526, 7975=>526, 7976=>683, 7977=>683, 7978=>683, 7979=>683, 7980=>683, 7981=>683, 7982=>683, 7983=>683, 7984=>286, 7985=>286, 7986=>286, 7987=>286, 7988=>286, 
+	7989=>286, 7990=>286, 7991=>286, 7992=>236, 7993=>236, 7994=>236, 7995=>236, 7996=>236, 7997=>236, 7998=>236, 7999=>236, 8000=>550, 8001=>550, 8002=>550, 8003=>550, 8004=>550, 
+	8005=>550, 8008=>750, 8009=>750, 8010=>750, 8011=>750, 8012=>750, 8013=>750, 8016=>515, 8017=>515, 8018=>515, 8019=>515, 8020=>515, 8021=>515, 8022=>515, 8023=>515, 8025=>684, 
+	8027=>684, 8029=>684, 8031=>684, 8032=>740, 8033=>740, 8034=>740, 8035=>740, 8036=>740, 8037=>740, 8038=>740, 8039=>740, 8040=>720, 8041=>720, 8042=>720, 8043=>720, 8044=>720, 
+	8045=>720, 8046=>720, 8047=>720, 8048=>596, 8049=>596, 8050=>510, 8051=>510, 8052=>526, 8053=>526, 8054=>286, 8055=>286, 8056=>550, 8057=>550, 8058=>515, 8059=>515, 8060=>740, 
+	8061=>740, 8064=>596, 8065=>596, 8066=>596, 8067=>596, 8068=>596, 8069=>596, 8070=>596, 8071=>596, 8072=>882, 8073=>882, 8074=>882, 8075=>882, 8076=>882, 8077=>882, 8078=>882, 
+	8079=>882, 8080=>526, 8081=>526, 8082=>526, 8083=>526, 8084=>526, 8085=>526, 8086=>526, 8087=>526, 8088=>857, 8089=>857, 8090=>857, 8091=>857, 8092=>857, 8093=>857, 8094=>857, 
+	8095=>857, 8096=>740, 8097=>740, 8098=>740, 8099=>740, 8100=>740, 8101=>740, 8102=>740, 8103=>740, 8104=>945, 8105=>945, 8106=>945, 8107=>945, 8108=>945, 8109=>945, 8110=>945, 
+	8111=>945, 8112=>596, 8113=>596, 8114=>596, 8115=>596, 8116=>596, 8118=>596, 8119=>596, 8120=>684, 8121=>684, 8122=>684, 8123=>684, 8124=>882, 8125=>278, 8126=>201, 8127=>333, 
+	8128=>278, 8129=>333, 8130=>526, 8131=>526, 8132=>536, 8134=>526, 8135=>526, 8136=>650, 8137=>650, 8138=>683, 8139=>683, 8140=>857, 8141=>582, 8142=>582, 8143=>333, 8144=>286, 
+	8145=>286, 8146=>286, 8147=>286, 8150=>286, 8151=>312, 8152=>236, 8153=>236, 8154=>236, 8155=>236, 8157=>582, 8158=>582, 8159=>333, 8160=>515, 8161=>515, 8162=>515, 8163=>515, 
+	8164=>566, 8165=>566, 8166=>515, 8167=>515, 8168=>684, 8169=>684, 8170=>684, 8171=>684, 8172=>638, 8173=>333, 8174=>393, 8175=>333, 8178=>740, 8179=>740, 8180=>740, 8182=>740, 
+	8183=>740, 8184=>750, 8185=>750, 8186=>720, 8187=>720, 8188=>939, 8189=>333, 8190=>333, 8208=>333, 8219=>221, 8223=>333, 8227=>350, 8241=>1360, 8242=>278, 8243=>469, 8244=>680, 
+	8245=>278, 8246=>469, 8247=>680, 8251=>622, 8252=>556, 8253=>556, 8260=>167, 8263=>1112, 8264=>834, 8265=>834, 8267=>537, 8304=>351, 8305=>351, 8308=>351, 8309=>351, 8310=>351, 
+	8311=>351, 8312=>351, 8313=>351, 8320=>351, 8321=>351, 8322=>351, 8323=>351, 8324=>351, 8325=>353, 8326=>351, 8327=>351, 8328=>351, 8329=>351, 8359=>1445, 8360=>1222, 8362=>869, 
+	8459=>969, 8460=>615, 8464=>809, 8465=>519, 8466=>874, 8470=>1008, 8475=>850, 8476=>644, 8486=>720, 8487=>720, 8488=>512, 8490=>667, 8491=>667, 8492=>908, 8493=>623, 8496=>562, 
+	8497=>611, 8498=>611, 8499=>1080, 8531=>869, 8532=>869, 8533=>869, 8534=>869, 8535=>869, 8536=>869, 8537=>869, 8538=>869, 8539=>869, 8540=>869, 8541=>869, 8542=>869, 8543=>869, 
+	8544=>278, 8545=>556, 8546=>834, 8547=>945, 8548=>667, 8549=>945, 8550=>1223, 8551=>1501, 8552=>945, 8553=>667, 8554=>945, 8555=>1223, 8556=>556, 8557=>722, 8558=>722, 8559=>833, 
+	8560=>222, 8561=>444, 8562=>666, 8563=>722, 8564=>500, 8565=>722, 8566=>944, 8567=>1166, 8568=>722, 8569=>500, 8570=>722, 8571=>944, 8572=>222, 8573=>500, 8574=>556, 8575=>833, 
+	8592=>987, 8593=>603, 8594=>987, 8595=>603, 8596=>1042, 8597=>1042, 8629=>658, 8656=>987, 8657=>603, 8658=>987, 8659=>603, 8660=>1042, 8704=>667, 8706=>556, 8707=>667, 8709=>556, 
+	8710=>711, 8711=>711, 8712=>713, 8713=>713, 8719=>823, 8720=>823, 8721=>804, 8722=>584, 8723=>584, 8727=>500, 8730=>542, 8733=>713, 8734=>713, 8736=>768, 8743=>603, 8744=>603, 
+	8745=>768, 8746=>768, 8747=>556, 8748=>796, 8749=>956, 8750=>556, 8756=>863, 8764=>549, 8766=>584, 8769=>584, 8770=>584, 8771=>584, 8777=>636, 8800=>548, 8804=>584, 8805=>584, 
+	8853=>768, 8854=>768, 8855=>768, 8869=>658, 8960=>823, 9674=>489, 9834=>555, 12289=>1000, 12290=>1000, 12291=>1000, 12293=>1000, 12295=>1000, 12296=>1000, 12297=>1000, 12298=>1000, 12299=>1000, 
+	12300=>1000, 12301=>1000, 12302=>1000, 12303=>1000, 12304=>1000, 12305=>1000, 12308=>1000, 12309=>1000, 12353=>1000, 12354=>1000, 12355=>1000, 12356=>1000, 12357=>1000, 12358=>1000, 12359=>1000, 12360=>1000, 
+	12361=>1000, 12362=>1000, 12363=>1000, 12364=>1000, 12365=>1000, 12366=>1000, 12367=>1000, 12368=>1000, 12369=>1000, 12370=>1000, 12371=>1000, 12372=>1000, 12373=>1000, 12374=>1000, 12375=>1000, 12376=>1000, 
+	12377=>1000, 12378=>1000, 12379=>1000, 12380=>1000, 12381=>1000, 12382=>1000, 12383=>1000, 12384=>1000, 12385=>1000, 12386=>1000, 12387=>1000, 12388=>1000, 12389=>1000, 12390=>1000, 12391=>1000, 12392=>1000, 
+	12393=>1000, 12394=>1000, 12395=>1000, 12396=>1000, 12397=>1000, 12398=>1000, 12399=>1000, 12400=>1000, 12401=>1000, 12402=>1000, 12403=>1000, 12404=>1000, 12405=>1000, 12406=>1000, 12407=>1000, 12408=>1000, 
+	12409=>1000, 12410=>1000, 12411=>1000, 12412=>1000, 12413=>1000, 12414=>1000, 12415=>1000, 12416=>1000, 12417=>1000, 12418=>1000, 12419=>1000, 12420=>1000, 12421=>1000, 12422=>1000, 12423=>1000, 12424=>1000, 
+	12425=>1000, 12426=>1000, 12427=>1000, 12428=>1000, 12429=>1000, 12430=>1000, 12431=>1000, 12432=>1000, 12433=>1000, 12434=>1000, 12435=>1000, 12441=>1000, 12443=>1000, 12449=>1000, 12450=>1000, 12451=>1000, 
+	12452=>1000, 12453=>1000, 12454=>1000, 12455=>1000, 12456=>1000, 12457=>1000, 12458=>1000, 12459=>1000, 12460=>1000, 12461=>1000, 12462=>1000, 12463=>1000, 12464=>1000, 12465=>1000, 12466=>1000, 12467=>1000, 
+	12468=>1000, 12469=>1000, 12470=>1000, 12471=>1000, 12472=>1000, 12473=>1000, 12474=>1000, 12475=>1000, 12476=>1000, 12477=>1000, 12478=>1000, 12479=>1000, 12480=>1000, 12481=>1000, 12482=>1000, 12483=>1000, 
+	12484=>1000, 12485=>1000, 12486=>1000, 12487=>1000, 12488=>1000, 12489=>1000, 12490=>1000, 12491=>1000, 12492=>1000, 12493=>1000, 12494=>1000, 12495=>1000, 12496=>1000, 12497=>1000, 12498=>1000, 12499=>1000, 
+	12500=>1000, 12501=>1000, 12502=>1000, 12503=>1000, 12504=>1000, 12505=>1000, 12506=>1000, 12507=>1000, 12508=>1000, 12509=>1000, 12510=>1000, 12511=>1000, 12512=>1000, 12513=>1000, 12514=>1000, 12515=>1000, 
+	12516=>1000, 12517=>1000, 12518=>1000, 12519=>1000, 12520=>1000, 12521=>1000, 12522=>1000, 12523=>1000, 12524=>1000, 12525=>1000, 12526=>1000, 12527=>1000, 12528=>1000, 12529=>1000, 12530=>1000, 12531=>1000, 
+	12532=>1000, 12533=>1000, 12534=>1000, 12535=>1000, 12536=>1000, 12537=>1000, 12538=>1000, 12539=>278, 12540=>1000, 12541=>1000, 12542=>1000, 63033=>556, 63034=>556, 63035=>556, 63036=>556, 63037=>556, 
+	63038=>556, 63039=>556, 63040=>556, 63041=>556, 63166=>222, 63171=>333, 63196=>556, 64256=>556, 64257=>500, 64258=>500, 64259=>778, 64260=>778, 64261=>556, 64262=>778, 64285=>200, 64286=>305, 
+	64287=>400, 64288=>587, 64289=>890, 64290=>848, 64291=>872, 64292=>800, 64293=>850, 64294=>873, 64295=>797, 64296=>937, 64297=>584, 64298=>776, 64299=>776, 64300=>776, 64301=>776, 64302=>640, 
+	64303=>640, 64304=>640, 64305=>591, 64306=>466, 64307=>598, 64308=>622, 64309=>262, 64310=>351, 64312=>608, 64313=>270, 64314=>526, 64315=>550, 64316=>600, 64318=>621, 64320=>378, 64321=>607, 
+	64323=>575, 64324=>568, 64326=>590, 64327=>606, 64328=>547, 64329=>776, 64330=>687, 64331=>212, 64332=>591, 64333=>550, 64334=>568, 64335=>640, 65533=>788}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='FreeSans.z';
+  font[:ctg]='FreeSans.ctg.z';
+  font[:originalsize]=264072;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/freesansb.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,79 @@
+TCPDFFontDescriptor.define('freesansb') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='FreeSansBold';
+  font[:desc]={'Ascent'=>1159,'Descent'=>-355,'CapHeight'=>1159,'Flags'=>32,'FontBBox'=>'[-459 -355 1300 1159]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600};
+  font[:up]=-155;
+  font[:ut]=69;
+  font[:cw]={
+	13=>333, 32=>278, 33=>333, 34=>474, 35=>556, 36=>556, 37=>889, 38=>722, 39=>238, 40=>333, 41=>333, 42=>389, 43=>584, 44=>278, 45=>333, 46=>278, 
+	47=>278, 48=>556, 49=>556, 50=>556, 51=>556, 52=>556, 53=>556, 54=>556, 55=>556, 56=>556, 57=>556, 58=>333, 59=>333, 60=>584, 61=>584, 62=>584, 
+	63=>611, 64=>975, 65=>722, 66=>722, 67=>722, 68=>722, 69=>667, 70=>611, 71=>778, 72=>722, 73=>278, 74=>556, 75=>722, 76=>611, 77=>833, 78=>722, 
+	79=>778, 80=>667, 81=>778, 82=>722, 83=>667, 84=>611, 85=>722, 86=>667, 87=>944, 88=>667, 89=>667, 90=>611, 91=>333, 92=>278, 93=>333, 94=>584, 
+	95=>556, 96=>333, 97=>556, 98=>611, 99=>556, 100=>611, 101=>556, 102=>333, 103=>611, 104=>611, 105=>278, 106=>278, 107=>556, 108=>278, 109=>889, 110=>611, 
+	111=>611, 112=>611, 113=>611, 114=>389, 115=>556, 116=>333, 117=>611, 118=>556, 119=>778, 120=>556, 121=>556, 122=>500, 123=>389, 124=>280, 125=>389, 126=>584, 
+	8364=>556, 1027=>611, 8218=>278, 402=>556, 8222=>500, 8230=>1000, 8224=>556, 8225=>556, 710=>333, 8240=>1000, 352=>667, 8249=>333, 338=>1000, 1036=>722, 381=>611, 1039=>722, 
+	8216=>278, 8217=>278, 8220=>500, 8221=>500, 8226=>350, 8211=>556, 8212=>1000, 732=>333, 8482=>1000, 353=>556, 8250=>333, 339=>944, 1116=>573, 382=>500, 376=>667, 161=>333, 
+	162=>556, 163=>556, 164=>556, 165=>556, 166=>280, 167=>556, 168=>333, 169=>737, 170=>370, 171=>556, 172=>584, 174=>737, 175=>333, 176=>606, 177=>584, 178=>351, 
+	179=>351, 180=>333, 181=>611, 182=>556, 183=>278, 184=>333, 185=>351, 186=>365, 187=>556, 188=>869, 189=>869, 190=>869, 191=>611, 192=>722, 193=>722, 194=>722, 
+	195=>722, 196=>722, 197=>722, 198=>1000, 199=>722, 200=>667, 201=>667, 202=>667, 203=>667, 204=>278, 205=>278, 206=>278, 207=>278, 208=>722, 209=>722, 210=>778, 
+	211=>778, 212=>778, 213=>778, 214=>778, 215=>584, 216=>778, 217=>722, 218=>722, 219=>722, 220=>722, 221=>667, 222=>667, 223=>611, 224=>556, 225=>556, 226=>556, 
+	227=>556, 228=>556, 229=>556, 230=>889, 231=>556, 232=>556, 233=>556, 234=>556, 235=>556, 236=>278, 237=>278, 238=>278, 239=>278, 240=>611, 241=>611, 242=>611, 
+	243=>611, 244=>611, 245=>611, 246=>611, 247=>584, 248=>611, 249=>611, 250=>611, 251=>611, 252=>611, 253=>556, 254=>611, 255=>556, 256=>722, 257=>556, 258=>722, 
+	259=>556, 260=>722, 261=>556, 262=>722, 263=>556, 264=>722, 265=>556, 266=>722, 267=>556, 268=>722, 269=>556, 270=>722, 271=>611, 272=>722, 273=>611, 274=>667, 
+	275=>556, 276=>667, 277=>556, 278=>667, 279=>556, 280=>667, 281=>556, 282=>667, 283=>556, 284=>778, 285=>611, 286=>778, 287=>611, 288=>778, 289=>611, 290=>778, 
+	291=>611, 292=>722, 293=>611, 294=>722, 295=>611, 296=>278, 297=>278, 298=>278, 299=>278, 300=>278, 301=>278, 302=>278, 303=>278, 304=>278, 305=>278, 306=>808, 
+	307=>492, 308=>556, 309=>278, 310=>722, 311=>556, 312=>573, 313=>611, 314=>278, 315=>611, 316=>278, 317=>611, 318=>278, 319=>611, 320=>556, 321=>611, 322=>278, 
+	323=>722, 324=>611, 325=>722, 326=>611, 327=>722, 328=>611, 329=>611, 330=>722, 331=>611, 332=>778, 333=>611, 334=>778, 335=>611, 336=>778, 337=>611, 340=>722, 
+	341=>389, 342=>722, 343=>389, 344=>722, 345=>389, 346=>667, 347=>556, 348=>667, 349=>556, 350=>667, 351=>556, 354=>611, 355=>333, 356=>611, 357=>333, 358=>611, 
+	359=>333, 360=>722, 361=>611, 362=>722, 363=>611, 364=>722, 365=>611, 366=>722, 367=>611, 368=>722, 369=>611, 370=>722, 371=>611, 372=>944, 373=>778, 374=>667, 
+	375=>556, 377=>611, 378=>500, 379=>611, 380=>500, 383=>333, 452=>1333, 453=>1222, 454=>1111, 455=>1167, 456=>889, 457=>556, 458=>1278, 459=>1000, 460=>889, 461=>722, 
+	462=>556, 463=>278, 464=>278, 465=>778, 466=>611, 467=>722, 468=>611, 469=>722, 470=>611, 471=>722, 472=>611, 473=>722, 474=>611, 475=>722, 476=>611, 478=>722, 
+	479=>556, 482=>1000, 483=>889, 486=>778, 487=>611, 488=>722, 489=>556, 490=>778, 491=>611, 492=>778, 493=>611, 497=>1333, 498=>1222, 499=>1111, 504=>722, 505=>611, 
+	506=>722, 507=>556, 508=>1000, 509=>889, 510=>778, 511=>611, 514=>722, 515=>556, 518=>667, 519=>556, 522=>278, 523=>278, 526=>778, 527=>611, 530=>722, 531=>389, 
+	534=>722, 535=>611, 536=>667, 537=>556, 538=>611, 539=>333, 711=>333, 728=>333, 729=>333, 730=>333, 731=>333, 733=>333, 884=>379, 885=>379, 890=>332, 894=>333, 
+	900=>325, 901=>658, 902=>761, 903=>474, 904=>706, 905=>733, 906=>285, 908=>785, 910=>823, 911=>819, 913=>722, 914=>722, 915=>642, 916=>726, 917=>667, 918=>611, 
+	919=>722, 920=>810, 921=>278, 922=>722, 923=>744, 924=>860, 925=>714, 926=>690, 927=>822, 928=>781, 929=>698, 931=>688, 932=>688, 933=>804, 934=>777, 935=>783, 
+	936=>805, 937=>780, 938=>278, 939=>804, 940=>660, 941=>559, 942=>560, 943=>356, 944=>575, 945=>656, 946=>576, 947=>591, 948=>620, 949=>570, 950=>522, 951=>586, 
+	952=>586, 953=>346, 954=>576, 955=>620, 956=>667, 957=>564, 958=>530, 959=>610, 960=>721, 961=>626, 962=>595, 963=>676, 964=>592, 965=>575, 966=>801, 967=>632, 
+	968=>722, 969=>800, 970=>346, 971=>575, 972=>599, 973=>567, 974=>1125, 1024=>667, 1025=>709, 1026=>790, 1028=>722, 1029=>667, 1030=>278, 1031=>278, 1032=>556, 1033=>1110, 
+	1034=>1113, 1035=>790, 1037=>726, 1038=>718, 1040=>722, 1041=>722, 1042=>722, 1043=>611, 1044=>900, 1045=>709, 1046=>1093, 1047=>672, 1048=>757, 1049=>757, 1050=>750, 1051=>729, 
+	1052=>874, 1053=>753, 1054=>778, 1055=>753, 1056=>671, 1057=>722, 1058=>611, 1059=>718, 1060=>892, 1061=>667, 1062=>816, 1063=>685, 1064=>1057, 1065=>1183, 1066=>928, 1067=>949, 
+	1068=>687, 1069=>722, 1070=>1109, 1071=>698, 1072=>556, 1073=>606, 1074=>572, 1075=>454, 1076=>685, 1077=>556, 1078=>809, 1079=>546, 1080=>615, 1081=>615, 1082=>573, 1083=>577, 
+	1084=>666, 1085=>603, 1086=>611, 1087=>603, 1088=>611, 1089=>556, 1090=>454, 1091=>556, 1092=>957, 1093=>556, 1094=>652, 1095=>578, 1096=>886, 1097=>968, 1098=>693, 1099=>811, 
+	1100=>562, 1101=>564, 1102=>908, 1103=>596, 1104=>556, 1105=>556, 1106=>606, 1107=>454, 1108=>556, 1109=>556, 1110=>278, 1111=>278, 1112=>278, 1113=>900, 1114=>611, 1115=>606, 
+	1117=>608, 1118=>556, 1119=>608, 1164=>687, 1165=>562, 1166=>667, 1167=>611, 1168=>611, 1169=>454, 1170=>611, 1171=>454, 1172=>611, 1173=>454, 1174=>1093, 1175=>809, 1176=>672, 
+	1177=>546, 1178=>722, 1179=>573, 1180=>722, 1181=>573, 1182=>722, 1183=>573, 1184=>722, 1185=>573, 1186=>722, 1187=>608, 1188=>722, 1189=>608, 1190=>722, 1191=>608, 1192=>722, 
+	1193=>556, 1194=>722, 1195=>556, 1196=>611, 1197=>454, 1198=>667, 1199=>556, 1200=>667, 1201=>556, 1202=>667, 1203=>556, 1204=>814, 1205=>685, 1206=>675, 1207=>580, 1208=>675, 
+	1209=>580, 1210=>675, 1211=>580, 1212=>722, 1213=>556, 1214=>722, 1215=>556, 1216=>278, 1217=>1093, 1218=>809, 1219=>722, 1220=>573, 1223=>722, 1224=>608, 1227=>675, 1228=>580, 
+	1232=>722, 1233=>556, 1234=>722, 1235=>556, 1236=>1000, 1237=>889, 1238=>709, 1239=>556, 1240=>722, 1241=>556, 1242=>722, 1243=>556, 1244=>1093, 1245=>809, 1246=>672, 1247=>546, 
+	1248=>672, 1249=>546, 1250=>757, 1251=>615, 1252=>757, 1253=>615, 1254=>778, 1255=>611, 1256=>778, 1257=>611, 1258=>778, 1259=>611, 1260=>722, 1261=>564, 1262=>718, 1263=>556, 
+	1264=>718, 1265=>556, 1266=>718, 1267=>556, 1268=>685, 1269=>578, 1272=>949, 1273=>811, 1456=>82, 1457=>347, 1458=>341, 1459=>341, 1460=>82, 1461=>211, 1462=>211, 1463=>200, 
+	1464=>200, 1465=>82, 1467=>341, 1468=>82, 1469=>82, 1470=>516, 1471=>200, 1472=>297, 1473=>1038, 1474=>1038, 1475=>333, 1476=>82, 1488=>714, 1489=>651, 1490=>557, 1491=>638, 
+	1492=>682, 1493=>297, 1494=>443, 1495=>682, 1496=>670, 1497=>284, 1498=>590, 1499=>595, 1500=>667, 1501=>683, 1502=>704, 1503=>297, 1504=>429, 1505=>670, 1506=>653, 1507=>661, 
+	1508=>660, 1509=>616, 1510=>671, 1511=>672, 1512=>600, 1513=>840, 1514=>756, 1520=>554, 1521=>550, 1522=>542, 1523=>238, 1524=>474, 1559=>556, 1560=>778, 1561=>944, 1562=>611, 
+	1563=>278, 1564=>889, 1569=>844, 1576=>923, 1578=>922, 1579=>922, 1581=>649, 1582=>704, 1587=>1221, 7936=>656, 7937=>656, 7938=>656, 7939=>656, 7940=>656, 7941=>656, 7942=>656, 
+	7943=>656, 7944=>722, 7945=>722, 7946=>722, 7947=>722, 7948=>722, 7949=>722, 7950=>722, 7951=>722, 7952=>570, 7953=>570, 7954=>570, 7955=>570, 7956=>570, 7957=>570, 7960=>667, 
+	7961=>667, 7962=>667, 7963=>667, 7964=>667, 7965=>667, 7968=>586, 7969=>586, 7970=>586, 7971=>586, 7972=>586, 7973=>586, 7974=>586, 7975=>586, 7976=>722, 7977=>722, 7978=>722, 
+	7979=>722, 7980=>722, 7981=>722, 7982=>722, 7983=>722, 7984=>346, 7985=>346, 7986=>346, 7987=>346, 7988=>346, 7989=>346, 7990=>346, 7991=>346, 7992=>278, 7993=>278, 7994=>278, 
+	7995=>278, 7996=>278, 7997=>278, 7998=>278, 7999=>278, 8000=>610, 8001=>610, 8002=>610, 8003=>610, 8004=>610, 8005=>610, 8008=>822, 8009=>822, 8010=>822, 8011=>822, 8012=>822, 
+	8013=>822, 8016=>575, 8017=>575, 8018=>575, 8019=>575, 8020=>575, 8021=>575, 8022=>575, 8023=>575, 8025=>804, 8027=>804, 8029=>804, 8031=>804, 8032=>800, 8033=>800, 8034=>800, 
+	8035=>800, 8036=>800, 8037=>800, 8038=>800, 8039=>800, 8040=>780, 8041=>780, 8042=>780, 8043=>780, 8044=>780, 8045=>780, 8046=>780, 8047=>780, 8048=>656, 8049=>656, 8050=>570, 
+	8051=>570, 8052=>586, 8053=>586, 8054=>346, 8055=>346, 8056=>610, 8057=>610, 8058=>575, 8059=>575, 8060=>800, 8061=>800, 8064=>656, 8065=>656, 8066=>656, 8067=>656, 8068=>656, 
+	8069=>656, 8070=>656, 8071=>656, 8072=>968, 8073=>968, 8074=>968, 8075=>968, 8076=>968, 8077=>968, 8078=>968, 8079=>968, 8080=>586, 8081=>586, 8082=>586, 8083=>586, 8084=>586, 
+	8085=>586, 8086=>586, 8087=>586, 8088=>968, 8089=>968, 8090=>968, 8091=>968, 8092=>968, 8093=>968, 8094=>968, 8095=>968, 8096=>800, 8097=>800, 8098=>800, 8099=>800, 8100=>800, 
+	8101=>800, 8102=>800, 8103=>800, 8104=>1026, 8105=>1026, 8106=>1026, 8107=>1026, 8108=>1026, 8109=>1026, 8110=>1026, 8111=>1026, 8112=>656, 8113=>656, 8114=>656, 8115=>656, 8116=>660, 
+	8118=>656, 8119=>656, 8120=>722, 8121=>722, 8122=>722, 8123=>722, 8124=>968, 8125=>278, 8126=>346, 8127=>278, 8128=>278, 8129=>333, 8130=>586, 8131=>586, 8132=>560, 8134=>586, 
+	8135=>586, 8136=>667, 8137=>667, 8138=>722, 8139=>722, 8140=>968, 8141=>492, 8142=>489, 8143=>394, 8144=>346, 8145=>346, 8146=>346, 8147=>346, 8150=>346, 8151=>346, 8152=>278, 
+	8153=>278, 8154=>278, 8155=>278, 8157=>481, 8158=>589, 8159=>333, 8160=>575, 8161=>575, 8162=>575, 8163=>575, 8164=>626, 8165=>626, 8166=>575, 8167=>575, 8168=>804, 8169=>804, 
+	8170=>804, 8171=>804, 8172=>698, 8173=>333, 8174=>333, 8175=>333, 8178=>800, 8179=>800, 8180=>1125, 8182=>800, 8183=>800, 8184=>822, 8185=>822, 8186=>780, 8187=>780, 8188=>1111, 
+	8189=>333, 8190=>278, 8260=>167, 8308=>351, 8321=>351, 8322=>351, 8323=>351, 8324=>351, 8362=>1049, 8543=>869, 8706=>490, 8710=>729, 8721=>711, 8722=>584, 8730=>542, 8800=>548, 
+	8804=>584, 8805=>584, 9674=>489, 63033=>556, 63034=>556, 63035=>556, 63036=>556, 63037=>556, 63038=>556, 63039=>556, 63040=>556, 63041=>556, 63171=>333, 63196=>556, 64257=>611, 64258=>611, 
+	64285=>284, 64286=>305, 64287=>542, 64288=>653, 64289=>964, 64290=>888, 64291=>932, 64292=>845, 64293=>917, 64294=>933, 64295=>850, 64296=>1006, 64297=>584, 64298=>840, 64299=>840, 64300=>840, 
+	64301=>840, 64302=>714, 64303=>714, 64304=>714, 64305=>651, 64306=>557, 64307=>638, 64308=>682, 64309=>367, 64310=>443, 64312=>670, 64313=>354, 64314=>590, 64315=>595, 64316=>667, 64318=>704, 
+	64320=>429, 64321=>670, 64323=>661, 64324=>660, 64326=>671, 64327=>672, 64328=>600, 64329=>840, 64330=>756, 64331=>297, 64332=>651, 64333=>595, 64334=>660, 64335=>714, 65182=>636}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='FreeSansBold.z';
+  font[:ctg]='FreeSansBold.ctg.z';
+  font[:originalsize]=91432;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/freesansbi.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,76 @@
+TCPDFFontDescriptor.define('freesansbi') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='FreeSansBoldOblique';
+  font[:desc]={'Ascent'=>979,'Descent'=>-309,'CapHeight'=>979,'Flags'=>96,'FontBBox'=>'[-379 -309 1283 979]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>600};
+  font[:up]=-111;
+  font[:ut]=69;
+  font[:cw]={
+	13=>333, 32=>278, 33=>333, 34=>474, 35=>556, 36=>556, 37=>889, 38=>722, 39=>238, 40=>333, 41=>333, 42=>389, 43=>584, 44=>278, 45=>333, 46=>278, 
+	47=>278, 48=>556, 49=>556, 50=>556, 51=>556, 52=>556, 53=>556, 54=>556, 55=>556, 56=>556, 57=>556, 58=>333, 59=>333, 60=>584, 61=>584, 62=>584, 
+	63=>611, 64=>975, 65=>722, 66=>722, 67=>722, 68=>722, 69=>667, 70=>611, 71=>778, 72=>722, 73=>278, 74=>556, 75=>722, 76=>611, 77=>833, 78=>722, 
+	79=>778, 80=>667, 81=>778, 82=>722, 83=>667, 84=>611, 85=>722, 86=>667, 87=>944, 88=>667, 89=>667, 90=>611, 91=>333, 92=>278, 93=>333, 94=>584, 
+	95=>556, 96=>333, 97=>556, 98=>611, 99=>556, 100=>611, 101=>556, 102=>333, 103=>611, 104=>611, 105=>278, 106=>278, 107=>556, 108=>278, 109=>889, 110=>611, 
+	111=>611, 112=>611, 113=>611, 114=>389, 115=>556, 116=>333, 117=>611, 118=>556, 119=>778, 120=>556, 121=>556, 122=>500, 123=>389, 124=>280, 125=>389, 126=>584, 
+	8364=>556, 1027=>611, 8218=>278, 402=>556, 8222=>500, 8230=>1000, 8224=>556, 8225=>556, 710=>333, 8240=>1000, 352=>667, 8249=>333, 338=>1000, 1036=>722, 381=>611, 1039=>722, 
+	8216=>278, 8217=>278, 8220=>500, 8221=>500, 8226=>350, 8211=>556, 8212=>1000, 732=>333, 8482=>1000, 353=>556, 8250=>333, 339=>944, 1116=>556, 382=>500, 376=>667, 161=>333, 
+	162=>556, 163=>556, 164=>556, 165=>556, 166=>280, 167=>556, 168=>333, 169=>737, 170=>370, 171=>556, 172=>584, 174=>737, 175=>333, 176=>606, 177=>584, 178=>444, 
+	179=>444, 180=>333, 181=>611, 182=>556, 183=>278, 184=>333, 185=>444, 186=>365, 187=>556, 188=>1055, 189=>1055, 190=>1055, 191=>611, 192=>722, 193=>722, 194=>722, 
+	195=>722, 196=>722, 197=>722, 198=>1000, 199=>722, 200=>667, 201=>667, 202=>667, 203=>667, 204=>278, 205=>278, 206=>278, 207=>278, 208=>722, 209=>722, 210=>778, 
+	211=>778, 212=>778, 213=>778, 214=>778, 215=>584, 216=>778, 217=>722, 218=>722, 219=>722, 220=>722, 221=>667, 222=>667, 223=>611, 224=>556, 225=>556, 226=>556, 
+	227=>556, 228=>556, 229=>556, 230=>889, 231=>556, 232=>556, 233=>556, 234=>556, 235=>556, 236=>278, 237=>278, 238=>278, 239=>278, 240=>611, 241=>611, 242=>611, 
+	243=>611, 244=>611, 245=>611, 246=>611, 247=>584, 248=>611, 249=>611, 250=>611, 251=>611, 252=>611, 253=>556, 254=>611, 255=>556, 256=>722, 257=>556, 258=>722, 
+	259=>556, 260=>722, 261=>556, 262=>722, 263=>556, 264=>722, 265=>556, 266=>722, 267=>556, 268=>722, 269=>556, 270=>722, 271=>722, 272=>722, 273=>611, 274=>667, 
+	275=>556, 276=>667, 277=>556, 278=>667, 279=>556, 280=>667, 281=>556, 282=>667, 283=>556, 284=>778, 285=>611, 286=>778, 287=>611, 288=>778, 289=>611, 290=>778, 
+	291=>611, 292=>722, 293=>611, 294=>722, 295=>611, 296=>278, 297=>278, 298=>278, 299=>278, 300=>278, 301=>278, 302=>278, 303=>268, 304=>278, 305=>278, 306=>278, 
+	307=>278, 308=>556, 309=>278, 310=>722, 311=>556, 312=>529, 313=>611, 314=>278, 315=>611, 316=>278, 317=>611, 318=>384, 319=>611, 320=>556, 321=>611, 322=>278, 
+	323=>722, 324=>611, 325=>722, 326=>611, 327=>722, 328=>611, 329=>611, 330=>722, 331=>611, 332=>778, 333=>611, 334=>778, 335=>611, 336=>778, 337=>611, 340=>722, 
+	341=>389, 342=>722, 343=>389, 344=>722, 345=>389, 346=>667, 347=>556, 348=>667, 349=>556, 350=>667, 351=>556, 354=>611, 355=>333, 356=>611, 357=>404, 358=>611, 
+	359=>333, 360=>722, 361=>611, 362=>722, 363=>611, 364=>722, 365=>611, 366=>722, 367=>611, 368=>722, 369=>611, 370=>722, 371=>611, 372=>944, 373=>778, 374=>667, 
+	375=>556, 377=>611, 378=>500, 379=>611, 380=>500, 383=>333, 536=>667, 537=>556, 538=>611, 539=>333, 711=>333, 728=>333, 729=>333, 730=>333, 731=>333, 733=>333, 
+	768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 774=>0, 775=>0, 776=>0, 778=>0, 779=>0, 780=>0, 783=>0, 785=>0, 787=>0, 788=>0, 884=>208, 
+	885=>247, 890=>364, 894=>333, 900=>308, 901=>446, 902=>688, 903=>418, 904=>642, 905=>743, 906=>228, 908=>754, 910=>736, 911=>743, 912=>346, 913=>764, 914=>688, 
+	915=>642, 916=>744, 917=>710, 918=>688, 919=>743, 920=>810, 921=>296, 922=>744, 923=>744, 924=>860, 925=>714, 926=>690, 927=>822, 928=>781, 929=>698, 931=>688, 
+	932=>688, 933=>744, 934=>777, 935=>783, 936=>805, 937=>780, 938=>296, 939=>744, 940=>640, 941=>530, 942=>597, 943=>339, 944=>575, 945=>656, 946=>576, 947=>591, 
+	948=>620, 949=>570, 950=>522, 951=>586, 952=>586, 953=>346, 954=>576, 955=>620, 956=>667, 957=>564, 958=>530, 959=>610, 960=>721, 961=>626, 962=>595, 963=>676, 
+	964=>592, 965=>575, 966=>801, 967=>632, 968=>722, 969=>800, 970=>346, 971=>575, 972=>609, 973=>604, 974=>769, 1024=>666, 1025=>666, 1026=>790, 1028=>722, 1029=>667, 
+	1030=>278, 1031=>278, 1032=>556, 1033=>1110, 1034=>1088, 1035=>790, 1037=>722, 1038=>718, 1040=>722, 1041=>722, 1042=>723, 1043=>611, 1044=>918, 1045=>666, 1046=>1054, 1047=>659, 
+	1048=>722, 1049=>722, 1050=>720, 1051=>722, 1052=>843, 1053=>722, 1054=>778, 1055=>722, 1056=>649, 1057=>837, 1058=>611, 1059=>698, 1060=>902, 1061=>664, 1062=>730, 1063=>671, 
+	1064=>1101, 1065=>1179, 1066=>816, 1067=>939, 1068=>639, 1069=>737, 1070=>1080, 1071=>690, 1072=>554, 1073=>611, 1074=>621, 1075=>475, 1076=>804, 1077=>552, 1078=>775, 1079=>556, 
+	1080=>636, 1081=>636, 1082=>529, 1083=>608, 1084=>697, 1085=>636, 1086=>611, 1087=>636, 1088=>611, 1089=>554, 1090=>454, 1091=>552, 1092=>989, 1093=>554, 1094=>690, 1095=>606, 
+	1096=>934, 1097=>987, 1098=>741, 1099=>839, 1100=>619, 1101=>575, 1102=>908, 1103=>636, 1104=>552, 1105=>552, 1106=>606, 1107=>454, 1108=>556, 1109=>556, 1110=>278, 1111=>278, 
+	1112=>278, 1113=>900, 1114=>611, 1115=>606, 1117=>636, 1118=>556, 1119=>636, 1164=>639, 1165=>619, 1166=>649, 1167=>611, 1168=>611, 1169=>454, 1170=>611, 1171=>475, 1172=>611, 
+	1173=>475, 1174=>1054, 1175=>775, 1176=>659, 1177=>556, 1178=>720, 1179=>529, 1180=>720, 1181=>529, 1182=>720, 1183=>529, 1184=>720, 1185=>529, 1186=>722, 1187=>636, 1188=>722, 
+	1189=>636, 1190=>722, 1191=>636, 1192=>837, 1193=>554, 1194=>837, 1195=>554, 1196=>611, 1197=>454, 1198=>667, 1199=>556, 1200=>667, 1201=>556, 1202=>664, 1203=>554, 1204=>730, 
+	1205=>690, 1206=>671, 1207=>606, 1208=>671, 1209=>606, 1210=>671, 1211=>606, 1212=>837, 1213=>554, 1214=>837, 1215=>554, 1216=>278, 1217=>1054, 1218=>775, 1219=>720, 1220=>529, 
+	1223=>722, 1224=>636, 1227=>671, 1228=>606, 1232=>722, 1233=>554, 1234=>722, 1235=>554, 1236=>1000, 1237=>889, 1238=>666, 1239=>552, 1240=>837, 1241=>554, 1242=>837, 1243=>554, 
+	1244=>1054, 1245=>775, 1246=>659, 1247=>556, 1248=>659, 1249=>556, 1250=>722, 1251=>636, 1252=>722, 1253=>636, 1254=>778, 1255=>611, 1256=>778, 1257=>611, 1258=>778, 1259=>611, 
+	1260=>737, 1261=>575, 1262=>698, 1263=>552, 1264=>698, 1265=>552, 1266=>698, 1267=>552, 1268=>671, 1269=>606, 1272=>939, 1273=>839, 1456=>82, 1457=>347, 1458=>341, 1459=>341, 
+	1460=>82, 1461=>211, 1462=>211, 1463=>200, 1464=>200, 1465=>82, 1467=>341, 1468=>82, 1469=>82, 1470=>516, 1471=>200, 1472=>297, 1473=>1038, 1474=>1038, 1475=>333, 1476=>82, 
+	1488=>714, 1489=>651, 1490=>557, 1491=>638, 1492=>682, 1493=>297, 1494=>443, 1495=>682, 1496=>670, 1497=>284, 1498=>590, 1499=>595, 1500=>667, 1501=>683, 1502=>704, 1503=>297, 
+	1504=>429, 1505=>670, 1506=>653, 1507=>661, 1508=>660, 1509=>616, 1510=>671, 1511=>672, 1512=>600, 1513=>840, 1514=>756, 1520=>554, 1521=>550, 1522=>542, 1523=>238, 1524=>474, 
+	7936=>656, 7937=>656, 7938=>656, 7939=>656, 7940=>656, 7941=>656, 7942=>656, 7943=>656, 7944=>764, 7945=>764, 7946=>764, 7947=>764, 7948=>764, 7949=>764, 7950=>764, 7951=>764, 
+	7952=>570, 7953=>570, 7954=>570, 7955=>570, 7956=>570, 7957=>570, 7960=>710, 7961=>710, 7962=>710, 7963=>710, 7964=>710, 7965=>710, 7968=>586, 7969=>586, 7970=>586, 7971=>586, 
+	7972=>586, 7973=>586, 7974=>586, 7975=>586, 7976=>743, 7977=>743, 7978=>743, 7979=>743, 7980=>743, 7981=>743, 7982=>743, 7983=>743, 7984=>346, 7985=>346, 7986=>346, 7987=>346, 
+	7988=>346, 7989=>346, 7990=>346, 7991=>346, 7992=>296, 7993=>296, 7994=>296, 7995=>296, 7996=>296, 7997=>296, 7998=>296, 7999=>296, 8000=>610, 8001=>610, 8002=>610, 8003=>610, 
+	8004=>610, 8005=>610, 8008=>822, 8009=>822, 8010=>822, 8011=>822, 8012=>822, 8013=>822, 8016=>575, 8017=>575, 8018=>575, 8019=>575, 8020=>575, 8021=>575, 8022=>575, 8023=>575, 
+	8025=>744, 8027=>744, 8029=>744, 8031=>744, 8032=>800, 8033=>800, 8034=>800, 8035=>800, 8036=>800, 8037=>800, 8038=>800, 8039=>800, 8040=>780, 8041=>780, 8042=>780, 8043=>780, 
+	8044=>780, 8045=>780, 8046=>780, 8047=>780, 8048=>656, 8049=>656, 8050=>570, 8051=>570, 8052=>586, 8053=>586, 8054=>346, 8055=>346, 8056=>610, 8057=>610, 8058=>575, 8059=>575, 
+	8060=>800, 8061=>800, 8064=>656, 8065=>656, 8066=>656, 8067=>656, 8068=>656, 8069=>656, 8070=>656, 8071=>656, 8072=>1007, 8073=>1007, 8074=>1007, 8075=>1007, 8076=>1007, 8077=>1007, 
+	8078=>1007, 8079=>1007, 8080=>586, 8081=>586, 8082=>586, 8083=>586, 8084=>586, 8085=>586, 8086=>586, 8087=>586, 8088=>986, 8089=>986, 8090=>986, 8091=>986, 8092=>986, 8093=>986, 
+	8094=>986, 8095=>986, 8096=>800, 8097=>800, 8098=>800, 8099=>800, 8100=>800, 8101=>800, 8102=>800, 8103=>800, 8104=>1023, 8105=>1023, 8106=>1023, 8107=>1023, 8108=>1023, 8109=>1023, 
+	8110=>1023, 8111=>1023, 8112=>656, 8113=>656, 8114=>656, 8115=>656, 8116=>640, 8118=>656, 8119=>656, 8120=>764, 8121=>764, 8122=>764, 8123=>764, 8124=>1007, 8125=>278, 8126=>201, 
+	8127=>147, 8128=>278, 8129=>333, 8130=>586, 8131=>586, 8132=>597, 8134=>586, 8135=>586, 8136=>710, 8137=>710, 8138=>743, 8139=>743, 8140=>986, 8141=>402, 8142=>403, 8143=>147, 
+	8144=>346, 8145=>346, 8146=>346, 8147=>346, 8150=>346, 8151=>346, 8152=>296, 8153=>296, 8154=>296, 8155=>296, 8157=>434, 8158=>433, 8159=>333, 8160=>575, 8161=>575, 8162=>575, 
+	8163=>575, 8164=>626, 8165=>626, 8166=>575, 8167=>575, 8168=>744, 8169=>744, 8173=>333, 8174=>351, 8175=>303, 8182=>800, 8183=>800, 8184=>822, 8185=>822, 8186=>780, 8187=>780, 
+	8188=>1023, 8189=>333, 8190=>159, 8260=>167, 8263=>1222, 8264=>944, 8265=>944, 8362=>1049, 8706=>490, 8710=>729, 8721=>711, 8722=>584, 8730=>542, 8800=>584, 8804=>584, 8805=>584, 
+	9674=>489, 63033=>556, 63034=>556, 63035=>556, 63036=>556, 63037=>556, 63038=>556, 63039=>556, 63040=>556, 63041=>556, 63166=>278, 63171=>333, 63196=>556, 64256=>666, 64257=>611, 64258=>611, 
+	64259=>944, 64260=>944, 64261=>666, 64262=>889, 64285=>284, 64286=>305, 64287=>542, 64288=>653, 64289=>964, 64290=>888, 64291=>932, 64292=>845, 64293=>917, 64294=>933, 64295=>850, 64296=>1006, 
+	64297=>584, 64298=>840, 64299=>840, 64300=>840, 64301=>840, 64302=>714, 64303=>714, 64304=>714, 64305=>651, 64306=>557, 64307=>638, 64308=>682, 64309=>367, 64310=>443, 64312=>670, 64313=>354, 
+	64314=>590, 64315=>595, 64316=>667, 64318=>704, 64320=>429, 64321=>670, 64323=>661, 64324=>660, 64326=>671, 64327=>672, 64328=>600, 64329=>840, 64330=>756, 64331=>297, 64332=>651, 64333=>595, 
+	64334=>660, 64335=>714};
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='FreeSansBoldOblique.z';
+  font[:ctg]='FreeSansBoldOblique.ctg.z';
+  font[:originalsize]=95508;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/freesansi.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,85 @@
+TCPDFFontDescriptor.define('freesansi') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='FreeSansOblique';
+  font[:desc]={'Ascent'=>1141,'Descent'=>-419,'CapHeight'=>1141,'Flags'=>96,'FontBBox'=>'[-313 -419 1129 1141]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>600};
+  font[:up]=-151;
+  font[:ut]=50;
+  font[:cw]={
+	13=>333, 32=>278, 33=>278, 34=>355, 35=>556, 36=>556, 37=>889, 38=>667, 39=>191, 40=>333, 41=>333, 42=>389, 43=>584, 44=>278, 45=>333, 46=>278, 
+	47=>278, 48=>556, 49=>556, 50=>556, 51=>556, 52=>556, 53=>556, 54=>556, 55=>556, 56=>556, 57=>556, 58=>278, 59=>278, 60=>584, 61=>584, 62=>584, 
+	63=>556, 64=>1015, 65=>667, 66=>667, 67=>722, 68=>722, 69=>667, 70=>611, 71=>778, 72=>722, 73=>278, 74=>500, 75=>667, 76=>556, 77=>833, 78=>722, 
+	79=>778, 80=>667, 81=>778, 82=>722, 83=>667, 84=>611, 85=>722, 86=>667, 87=>944, 88=>667, 89=>667, 90=>611, 91=>278, 92=>278, 93=>278, 94=>469, 
+	95=>556, 96=>333, 97=>556, 98=>556, 99=>500, 100=>556, 101=>556, 102=>278, 103=>556, 104=>556, 105=>222, 106=>222, 107=>500, 108=>222, 109=>833, 110=>556, 
+	111=>556, 112=>556, 113=>556, 114=>333, 115=>500, 116=>278, 117=>556, 118=>500, 119=>722, 120=>500, 121=>500, 122=>500, 123=>334, 124=>260, 125=>334, 126=>584, 
+	8364=>556, 1027=>611, 8218=>222, 402=>556, 8222=>333, 8230=>1000, 8224=>556, 8225=>556, 710=>333, 8240=>1000, 352=>667, 8249=>333, 338=>1000, 1036=>667, 381=>611, 1039=>722, 
+	8216=>222, 8217=>222, 8220=>333, 8221=>333, 8226=>350, 8211=>556, 8212=>1000, 732=>333, 8482=>1000, 353=>500, 8250=>333, 339=>944, 1116=>500, 382=>500, 376=>667, 161=>333, 
+	162=>556, 163=>556, 164=>556, 165=>556, 166=>260, 167=>556, 168=>333, 169=>737, 170=>370, 171=>556, 172=>584, 173=>333, 174=>737, 175=>333, 176=>606, 177=>584, 
+	178=>390, 179=>390, 180=>333, 181=>556, 182=>537, 183=>278, 184=>333, 185=>390, 186=>365, 187=>556, 188=>947, 189=>947, 190=>947, 191=>611, 192=>667, 193=>667, 
+	194=>667, 195=>667, 196=>667, 197=>667, 198=>1000, 199=>722, 200=>667, 201=>667, 202=>667, 203=>667, 204=>278, 205=>278, 206=>278, 207=>278, 208=>722, 209=>722, 
+	210=>778, 211=>778, 212=>778, 213=>778, 214=>778, 215=>584, 216=>778, 217=>722, 218=>722, 219=>722, 220=>722, 221=>667, 222=>667, 223=>611, 224=>556, 225=>556, 
+	226=>556, 227=>556, 228=>556, 229=>556, 230=>889, 231=>500, 232=>556, 233=>556, 234=>556, 235=>556, 236=>278, 237=>278, 238=>278, 239=>278, 240=>556, 241=>556, 
+	242=>556, 243=>556, 244=>556, 245=>556, 246=>556, 247=>584, 248=>611, 249=>556, 250=>556, 251=>556, 252=>556, 253=>500, 254=>556, 255=>500, 256=>667, 257=>556, 
+	258=>667, 259=>556, 260=>667, 261=>556, 262=>722, 263=>500, 264=>722, 265=>500, 266=>722, 267=>500, 268=>722, 269=>500, 270=>722, 271=>650, 272=>722, 273=>556, 
+	274=>667, 275=>556, 276=>667, 277=>556, 278=>667, 279=>556, 280=>667, 281=>556, 282=>667, 283=>556, 284=>778, 285=>556, 286=>778, 287=>556, 288=>778, 289=>556, 
+	290=>778, 291=>527, 292=>722, 293=>556, 294=>722, 295=>556, 296=>278, 297=>278, 298=>278, 299=>222, 300=>278, 301=>278, 302=>278, 303=>222, 304=>278, 305=>278, 
+	306=>742, 307=>362, 308=>500, 309=>222, 310=>667, 311=>500, 312=>510, 313=>556, 314=>222, 315=>556, 316=>222, 317=>556, 318=>307, 319=>556, 320=>500, 321=>556, 
+	322=>222, 323=>722, 324=>556, 325=>722, 326=>556, 327=>722, 328=>556, 329=>556, 330=>722, 331=>556, 332=>778, 333=>556, 334=>778, 335=>556, 336=>778, 337=>556, 
+	340=>722, 341=>333, 342=>722, 343=>333, 344=>722, 345=>333, 346=>667, 347=>500, 348=>667, 349=>500, 350=>667, 351=>500, 354=>611, 355=>278, 356=>611, 357=>319, 
+	358=>611, 359=>278, 360=>722, 361=>556, 362=>722, 363=>556, 364=>722, 365=>556, 366=>722, 367=>556, 368=>722, 369=>556, 370=>722, 371=>556, 372=>944, 373=>722, 
+	374=>667, 375=>500, 377=>611, 378=>500, 379=>611, 380=>500, 383=>278, 461=>667, 462=>556, 463=>278, 464=>278, 465=>778, 466=>556, 467=>722, 468=>556, 469=>722, 
+	470=>556, 471=>722, 472=>556, 473=>722, 474=>556, 475=>722, 476=>556, 478=>667, 479=>556, 482=>1000, 483=>889, 486=>778, 487=>556, 488=>667, 489=>500, 490=>778, 
+	491=>556, 492=>778, 493=>556, 496=>222, 500=>778, 501=>556, 504=>722, 505=>556, 506=>667, 507=>556, 508=>1000, 509=>889, 510=>778, 511=>611, 512=>667, 513=>556, 
+	514=>667, 515=>556, 516=>667, 517=>556, 518=>667, 519=>556, 520=>278, 521=>278, 522=>278, 523=>278, 524=>778, 525=>556, 526=>778, 527=>556, 528=>722, 529=>333, 
+	530=>722, 531=>333, 532=>722, 533=>556, 534=>722, 535=>556, 536=>667, 537=>500, 538=>611, 539=>278, 711=>333, 728=>333, 729=>333, 730=>333, 731=>333, 733=>333, 
+	768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 774=>0, 775=>0, 776=>0, 778=>0, 779=>0, 783=>0, 785=>0, 787=>0, 788=>0, 884=>199, 885=>199, 
+	890=>332, 894=>278, 900=>291, 901=>624, 902=>659, 903=>358, 904=>657, 905=>678, 906=>183, 908=>729, 910=>699, 911=>747, 912=>286, 913=>684, 914=>628, 915=>582, 
+	916=>684, 917=>650, 918=>628, 919=>683, 920=>750, 921=>236, 922=>684, 923=>684, 924=>800, 925=>654, 926=>630, 927=>750, 928=>721, 929=>638, 931=>628, 932=>628, 
+	933=>684, 934=>717, 935=>723, 936=>745, 937=>720, 938=>236, 939=>684, 940=>593, 941=>519, 942=>595, 943=>271, 944=>515, 945=>596, 946=>516, 947=>531, 948=>560, 
+	949=>510, 950=>462, 951=>526, 952=>526, 953=>286, 954=>516, 955=>560, 956=>607, 957=>504, 958=>470, 959=>550, 960=>661, 961=>566, 962=>535, 963=>616, 964=>532, 
+	965=>515, 966=>741, 967=>572, 968=>662, 969=>740, 970=>286, 971=>515, 972=>535, 973=>503, 974=>725, 1024=>667, 1025=>667, 1026=>766, 1028=>722, 1029=>667, 1030=>278, 
+	1031=>278, 1032=>500, 1033=>968, 1034=>1173, 1035=>766, 1037=>731, 1038=>650, 1040=>667, 1041=>639, 1042=>667, 1043=>611, 1044=>816, 1045=>667, 1046=>897, 1047=>652, 1048=>731, 
+	1049=>731, 1050=>664, 1051=>646, 1052=>833, 1053=>722, 1054=>778, 1055=>722, 1056=>667, 1057=>722, 1058=>611, 1059=>530, 1060=>891, 1061=>667, 1062=>722, 1063=>642, 1064=>836, 
+	1065=>837, 1066=>866, 1067=>886, 1068=>698, 1069=>717, 1070=>1079, 1071=>691, 1072=>556, 1073=>556, 1074=>538, 1075=>430, 1076=>640, 1077=>556, 1078=>818, 1079=>495, 1080=>560, 
+	1081=>560, 1082=>510, 1083=>556, 1084=>621, 1085=>561, 1086=>556, 1087=>560, 1088=>556, 1089=>500, 1090=>400, 1091=>500, 1092=>916, 1093=>500, 1094=>560, 1095=>497, 1096=>695, 
+	1097=>695, 1098=>640, 1099=>734, 1100=>523, 1101=>534, 1102=>788, 1103=>564, 1104=>556, 1105=>556, 1106=>568, 1107=>430, 1108=>500, 1109=>500, 1110=>222, 1111=>278, 1112=>222, 
+	1113=>840, 1114=>850, 1115=>568, 1117=>560, 1118=>500, 1119=>560, 1164=>698, 1165=>523, 1166=>667, 1167=>556, 1168=>611, 1169=>430, 1170=>611, 1171=>430, 1172=>611, 1173=>430, 
+	1174=>897, 1175=>818, 1176=>652, 1177=>495, 1178=>664, 1179=>510, 1180=>664, 1181=>510, 1182=>664, 1183=>510, 1184=>664, 1185=>510, 1186=>722, 1187=>561, 1188=>722, 1189=>561, 
+	1190=>722, 1191=>560, 1192=>722, 1193=>495, 1194=>722, 1195=>495, 1196=>611, 1197=>400, 1198=>667, 1199=>500, 1200=>667, 1201=>500, 1202=>665, 1203=>496, 1204=>722, 1205=>560, 
+	1206=>642, 1207=>497, 1208=>642, 1209=>497, 1210=>642, 1211=>497, 1212=>722, 1213=>495, 1214=>722, 1215=>495, 1216=>278, 1217=>897, 1218=>818, 1219=>664, 1220=>510, 1223=>722, 
+	1224=>561, 1227=>642, 1228=>497, 1232=>667, 1233=>556, 1234=>667, 1235=>556, 1236=>1000, 1237=>889, 1238=>667, 1239=>556, 1240=>722, 1241=>495, 1242=>722, 1243=>495, 1244=>897, 
+	1245=>818, 1246=>652, 1247=>495, 1248=>652, 1249=>495, 1250=>731, 1251=>560, 1252=>731, 1253=>560, 1254=>778, 1255=>556, 1256=>780, 1257=>554, 1258=>780, 1259=>554, 1260=>717, 
+	1261=>534, 1262=>530, 1263=>500, 1264=>530, 1265=>500, 1266=>530, 1267=>500, 1268=>642, 1269=>497, 1272=>886, 1273=>734, 1329=>722, 1330=>705, 1331=>774, 1332=>754, 1333=>722, 
+	1334=>751, 1335=>485, 1336=>722, 1337=>782, 1338=>655, 1339=>699, 1340=>417, 1341=>853, 1342=>791, 1343=>711, 1344=>588, 1345=>663, 1346=>665, 1347=>665, 1348=>756, 1349=>623, 
+	1350=>773, 1351=>603, 1352=>722, 1353=>648, 1354=>722, 1355=>751, 1356=>750, 1357=>722, 1358=>748, 1359=>667, 1360=>699, 1361=>623, 1362=>417, 1363=>785, 1364=>638, 1365=>778, 
+	1366=>716, 1370=>222, 1371=>133, 1372=>325, 1373=>333, 1374=>344, 1377=>833, 1378=>556, 1379=>572, 1380=>581, 1381=>550, 1382=>588, 1383=>448, 1384=>556, 1385=>568, 1386=>582, 
+	1387=>545, 1388=>301, 1389=>799, 1390=>556, 1391=>554, 1392=>533, 1393=>548, 1394=>552, 1395=>552, 1396=>544, 1397=>222, 1398=>544, 1399=>456, 1400=>556, 1401=>390, 1402=>833, 
+	1403=>509, 1404=>547, 1405=>533, 1406=>610, 1407=>887, 1408=>556, 1409=>545, 1410=>352, 1411=>853, 1412=>588, 1413=>579, 1414=>690, 1415=>545, 1417=>278, 1418=>367, 1456=>70, 
+	1457=>335, 1458=>329, 1459=>329, 1460=>70, 1461=>200, 1462=>200, 1463=>188, 1464=>188, 1465=>70, 1467=>329, 1468=>70, 1469=>70, 1470=>488, 1471=>200, 1472=>212, 1473=>0, 
+	1474=>0, 1475=>278, 1476=>70, 1488=>640, 1489=>591, 1490=>466, 1491=>598, 1492=>622, 1493=>212, 1494=>351, 1495=>623, 1496=>608, 1497=>200, 1498=>526, 1499=>550, 1500=>600, 
+	1501=>623, 1502=>621, 1503=>212, 1504=>378, 1505=>607, 1506=>587, 1507=>575, 1508=>568, 1509=>540, 1510=>590, 1511=>606, 1512=>547, 1513=>776, 1514=>687, 1520=>424, 1521=>412, 
+	1522=>400, 1523=>184, 1524=>344, 7936=>596, 7937=>596, 7938=>596, 7939=>596, 7940=>596, 7941=>596, 7942=>596, 7943=>596, 7944=>684, 7945=>684, 7946=>684, 7947=>684, 7948=>684, 
+	7949=>684, 7950=>684, 7951=>684, 7952=>510, 7953=>510, 7954=>510, 7955=>510, 7956=>510, 7957=>510, 7960=>650, 7961=>650, 7962=>650, 7963=>650, 7964=>650, 7965=>650, 7968=>526, 
+	7969=>526, 7970=>526, 7971=>526, 7972=>526, 7973=>526, 7974=>526, 7975=>526, 7976=>683, 7977=>683, 7978=>683, 7979=>683, 7980=>683, 7981=>683, 7982=>683, 7983=>683, 7984=>286, 
+	7985=>286, 7986=>286, 7987=>286, 7988=>286, 7989=>286, 7990=>286, 7991=>286, 7992=>236, 7993=>236, 7994=>236, 7995=>236, 7996=>236, 7997=>236, 7998=>236, 7999=>236, 8000=>550, 
+	8001=>550, 8002=>550, 8003=>550, 8004=>550, 8005=>550, 8008=>750, 8009=>750, 8010=>750, 8011=>750, 8012=>750, 8013=>750, 8016=>515, 8017=>515, 8018=>515, 8019=>515, 8020=>515, 
+	8021=>515, 8022=>515, 8023=>515, 8025=>684, 8027=>684, 8029=>684, 8031=>684, 8032=>740, 8033=>740, 8034=>740, 8035=>740, 8036=>740, 8037=>740, 8038=>740, 8039=>740, 8040=>720, 
+	8041=>720, 8042=>720, 8043=>720, 8044=>720, 8045=>720, 8046=>720, 8047=>720, 8048=>596, 8049=>596, 8050=>510, 8051=>510, 8052=>526, 8053=>526, 8054=>286, 8055=>286, 8056=>550, 
+	8057=>550, 8058=>515, 8059=>515, 8060=>740, 8061=>740, 8064=>596, 8065=>596, 8066=>596, 8067=>596, 8068=>596, 8069=>596, 8070=>596, 8071=>596, 8072=>900, 8073=>900, 8074=>900, 
+	8075=>900, 8076=>900, 8077=>900, 8078=>900, 8079=>900, 8080=>526, 8081=>526, 8082=>526, 8083=>526, 8084=>526, 8085=>526, 8086=>526, 8087=>526, 8088=>899, 8089=>899, 8090=>899, 
+	8091=>899, 8092=>899, 8093=>899, 8094=>899, 8095=>899, 8096=>740, 8097=>740, 8098=>740, 8099=>740, 8100=>740, 8101=>740, 8102=>740, 8103=>740, 8104=>936, 8105=>936, 8106=>936, 
+	8107=>936, 8108=>936, 8109=>936, 8110=>936, 8111=>936, 8112=>596, 8113=>596, 8114=>596, 8115=>596, 8116=>593, 8118=>596, 8119=>596, 8120=>684, 8121=>684, 8122=>684, 8123=>684, 
+	8124=>900, 8125=>278, 8126=>201, 8127=>147, 8128=>278, 8129=>333, 8130=>526, 8131=>526, 8132=>595, 8134=>526, 8135=>526, 8136=>650, 8137=>650, 8138=>683, 8139=>683, 8140=>899, 
+	8141=>602, 8142=>601, 8143=>333, 8144=>286, 8145=>286, 8146=>286, 8147=>286, 8150=>286, 8151=>286, 8152=>236, 8153=>236, 8154=>236, 8155=>236, 8157=>434, 8158=>433, 8159=>333, 
+	8160=>515, 8161=>515, 8162=>515, 8163=>515, 8164=>566, 8165=>566, 8166=>515, 8167=>515, 8168=>684, 8169=>684, 8170=>684, 8171=>684, 8172=>638, 8173=>333, 8174=>624, 8175=>303, 
+	8178=>740, 8179=>740, 8180=>725, 8182=>740, 8183=>740, 8184=>750, 8185=>750, 8186=>720, 8187=>720, 8188=>936, 8189=>333, 8190=>159, 8260=>167, 8362=>869, 8706=>490, 8710=>712, 
+	8721=>711, 8722=>584, 8730=>542, 8800=>584, 8804=>584, 8805=>584, 9674=>489, 63033=>556, 63034=>556, 63035=>556, 63036=>556, 63037=>556, 63038=>556, 63039=>556, 63040=>556, 63041=>556, 
+	63166=>222, 63171=>333, 63196=>556, 64256=>556, 64257=>500, 64258=>500, 64259=>778, 64260=>778, 64261=>556, 64262=>778, 64285=>200, 64286=>305, 64287=>400, 64288=>587, 64289=>890, 64290=>848, 
+	64291=>872, 64292=>800, 64293=>850, 64294=>873, 64295=>797, 64296=>937, 64297=>584, 64298=>776, 64299=>776, 64300=>776, 64301=>776, 64302=>640, 64303=>640, 64304=>640, 64305=>591, 64306=>466, 
+	64307=>598, 64308=>622, 64309=>262, 64310=>351, 64312=>608, 64313=>270, 64314=>526, 64315=>550, 64316=>600, 64318=>621, 64320=>378, 64321=>607, 64323=>575, 64324=>568, 64326=>590, 64327=>606, 
+	64328=>547, 64329=>776, 64330=>687, 64331=>212, 64332=>591, 64333=>550, 64334=>568, 64335=>640};
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='FreeSansOblique.z';
+  font[:ctg]='FreeSansOblique.ctg.z';
+  font[:originalsize]=110740;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/helvetica.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,4 @@
+TCPDFFontDescriptor.define('helvetica') do |font|
+  font[:cw]={
+	0.chr=>278, 1.chr=>278, 2.chr=>278, 3.chr=>278, 4.chr=>278, 5.chr=>278, 6.chr=>278, 7.chr=>278, 8.chr=>278, 9.chr=>278, 10.chr=>278, 11.chr=>278, 12.chr=>278, 13.chr=>278, 14.chr=>278, 15.chr=>278, 16.chr=>278, 17.chr=>278, 18.chr=>278, 19.chr=>278, 20.chr=>278, 21.chr=>278, 22.chr=>278, 23.chr=>278, 24.chr=>278, 25.chr=>278, 26.chr=>278, 27.chr=>278, 28.chr=>278, 29.chr=>278, 30.chr=>278, 31.chr=>278, ' '=>278, '!'=>278, '"'=>355, '#'=>556, '$'=>556, '%'=>889, '&'=>667, '\''=>191, '('=>333, ')'=>333, '*'=>389, '+'=>584, 	','=>278, '-'=>333, '.'=>278, '/'=>278, '0'=>556, '1'=>556, '2'=>556, '3'=>556, '4'=>556, '5'=>556, '6'=>556, '7'=>556, '8'=>556, '9'=>556, ':'=>278, ';'=>278, '<'=>584, '='=>584, '>'=>584, '?'=>556, '@'=>1015, 'A'=>667, 	'B'=>667, 'C'=>722, 'D'=>722, 'E'=>667, 'F'=>611, 'G'=>778, 'H'=>722, 'I'=>278, 'J'=>500, 'K'=>667, 'L'=>556, 'M'=>833, 'N'=>722, 'O'=>778, 'P'=>667, 'Q'=>778, 'R'=>722, 'S'=>667, 'T'=>611, 'U'=>722, 'V'=>667, 'W'=>944, 	'X'=>667, 'Y'=>667, 'Z'=>611, '['=>278, '\\'=>278, ']'=>278, '^'=>469, '_'=>556, '`'=>333, 'a'=>556, 'b'=>556, 'c'=>500, 'd'=>556, 'e'=>556, 'f'=>278, 'g'=>556, 'h'=>556, 'i'=>222, 'j'=>222, 'k'=>500, 'l'=>222, 'm'=>833, 	'n'=>556, 'o'=>556, 'p'=>556, 'q'=>556, 'r'=>333, 's'=>500, 't'=>278, 'u'=>556, 'v'=>500, 'w'=>722, 'x'=>500, 'y'=>500, 'z'=>500, '{'=>334, '|'=>260, '}'=>334, '~'=>584, 127.chr=>350, 128.chr=>556, 129.chr=>350, 130.chr=>222, 131.chr=>556, 	132.chr=>333, 133.chr=>1000, 134.chr=>556, 135.chr=>556, 136.chr=>333, 137.chr=>1000, 138.chr=>667, 139.chr=>333, 140.chr=>1000, 141.chr=>350, 142.chr=>611, 143.chr=>350, 144.chr=>350, 145.chr=>222, 146.chr=>222, 147.chr=>333, 148.chr=>333, 149.chr=>350, 150.chr=>556, 151.chr=>1000, 152.chr=>333, 153.chr=>1000, 	154.chr=>500, 155.chr=>333, 156.chr=>944, 157.chr=>350, 158.chr=>500, 159.chr=>667, 160.chr=>278, 161.chr=>333, 162.chr=>556, 163.chr=>556, 164.chr=>556, 165.chr=>556, 166.chr=>260, 167.chr=>556, 168.chr=>333, 169.chr=>737, 170.chr=>370, 171.chr=>556, 172.chr=>584, 173.chr=>333, 174.chr=>737, 175.chr=>333, 	176.chr=>400, 177.chr=>584, 178.chr=>333, 179.chr=>333, 180.chr=>333, 181.chr=>556, 182.chr=>537, 183.chr=>278, 184.chr=>333, 185.chr=>333, 186.chr=>365, 187.chr=>556, 188.chr=>834, 189.chr=>834, 190.chr=>834, 191.chr=>611, 192.chr=>667, 193.chr=>667, 194.chr=>667, 195.chr=>667, 196.chr=>667, 197.chr=>667, 	198.chr=>1000, 199.chr=>722, 200.chr=>667, 201.chr=>667, 202.chr=>667, 203.chr=>667, 204.chr=>278, 205.chr=>278, 206.chr=>278, 207.chr=>278, 208.chr=>722, 209.chr=>722, 210.chr=>778, 211.chr=>778, 212.chr=>778, 213.chr=>778, 214.chr=>778, 215.chr=>584, 216.chr=>778, 217.chr=>722, 218.chr=>722, 219.chr=>722, 	220.chr=>722, 221.chr=>667, 222.chr=>667, 223.chr=>611, 224.chr=>556, 225.chr=>556, 226.chr=>556, 227.chr=>556, 228.chr=>556, 229.chr=>556, 230.chr=>889, 231.chr=>500, 232.chr=>556, 233.chr=>556, 234.chr=>556, 235.chr=>556, 236.chr=>278, 237.chr=>278, 238.chr=>278, 239.chr=>278, 240.chr=>556, 241.chr=>556, 	242.chr=>556, 243.chr=>556, 244.chr=>556, 245.chr=>556, 246.chr=>556, 247.chr=>584, 248.chr=>611, 249.chr=>556, 250.chr=>556, 251.chr=>556, 252.chr=>556, 253.chr=>500, 254.chr=>556, 255.chr=>500}
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/helveticab.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,15 @@
+TCPDFFontDescriptor.define('helveticab') do |font|
+  font[:cw]={
+	0.chr=>278,1.chr=>278,2.chr=>278,3.chr=>278,4.chr=>278,5.chr=>278,6.chr=>278,7.chr=>278,8.chr=>278,9.chr=>278,10.chr=>278,11.chr=>278,12.chr=>278,13.chr=>278,14.chr=>278,15.chr=>278,16.chr=>278,17.chr=>278,18.chr=>278,19.chr=>278,20.chr=>278,21.chr=>278,
+	22.chr=>278,23.chr=>278,24.chr=>278,25.chr=>278,26.chr=>278,27.chr=>278,28.chr=>278,29.chr=>278,30.chr=>278,31.chr=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+	'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+	'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,127.chr=>350,128.chr=>556,129.chr=>350,130.chr=>278,131.chr=>556,
+	132.chr=>500,133.chr=>1000,134.chr=>556,135.chr=>556,136.chr=>333,137.chr=>1000,138.chr=>667,139.chr=>333,140.chr=>1000,141.chr=>350,142.chr=>611,143.chr=>350,144.chr=>350,145.chr=>278,146.chr=>278,147.chr=>500,148.chr=>500,149.chr=>350,150.chr=>556,151.chr=>1000,152.chr=>333,153.chr=>1000,
+	154.chr=>556,155.chr=>333,156.chr=>944,157.chr=>350,158.chr=>500,159.chr=>667,160.chr=>278,161.chr=>333,162.chr=>556,163.chr=>556,164.chr=>556,165.chr=>556,166.chr=>280,167.chr=>556,168.chr=>333,169.chr=>737,170.chr=>370,171.chr=>556,172.chr=>584,173.chr=>333,174.chr=>737,175.chr=>333,
+	176.chr=>400,177.chr=>584,178.chr=>333,179.chr=>333,180.chr=>333,181.chr=>611,182.chr=>556,183.chr=>278,184.chr=>333,185.chr=>333,186.chr=>365,187.chr=>556,188.chr=>834,189.chr=>834,190.chr=>834,191.chr=>611,192.chr=>722,193.chr=>722,194.chr=>722,195.chr=>722,196.chr=>722,197.chr=>722,
+	198.chr=>1000,199.chr=>722,200.chr=>667,201.chr=>667,202.chr=>667,203.chr=>667,204.chr=>278,205.chr=>278,206.chr=>278,207.chr=>278,208.chr=>722,209.chr=>722,210.chr=>778,211.chr=>778,212.chr=>778,213.chr=>778,214.chr=>778,215.chr=>584,216.chr=>778,217.chr=>722,218.chr=>722,219.chr=>722,
+	220.chr=>722,221.chr=>667,222.chr=>667,223.chr=>611,224.chr=>556,225.chr=>556,226.chr=>556,227.chr=>556,228.chr=>556,229.chr=>556,230.chr=>889,231.chr=>556,232.chr=>556,233.chr=>556,234.chr=>556,235.chr=>556,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>611,241.chr=>611,
+	242.chr=>611,243.chr=>611,244.chr=>611,245.chr=>611,246.chr=>611,247.chr=>584,248.chr=>611,249.chr=>611,250.chr=>611,251.chr=>611,252.chr=>611,253.chr=>556,254.chr=>611,255.chr=>556}
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/helveticabi.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,15 @@
+TCPDFFontDescriptor.define('helveticabi') do |font|
+  font[:cw]={
+	0.chr=>278,1.chr=>278,2.chr=>278,3.chr=>278,4.chr=>278,5.chr=>278,6.chr=>278,7.chr=>278,8.chr=>278,9.chr=>278,10.chr=>278,11.chr=>278,12.chr=>278,13.chr=>278,14.chr=>278,15.chr=>278,16.chr=>278,17.chr=>278,18.chr=>278,19.chr=>278,20.chr=>278,21.chr=>278,
+	22.chr=>278,23.chr=>278,24.chr=>278,25.chr=>278,26.chr=>278,27.chr=>278,28.chr=>278,29.chr=>278,30.chr=>278,31.chr=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+	'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+	'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,127.chr=>350,128.chr=>556,129.chr=>350,130.chr=>278,131.chr=>556,
+	132.chr=>500,133.chr=>1000,134.chr=>556,135.chr=>556,136.chr=>333,137.chr=>1000,138.chr=>667,139.chr=>333,140.chr=>1000,141.chr=>350,142.chr=>611,143.chr=>350,144.chr=>350,145.chr=>278,146.chr=>278,147.chr=>500,148.chr=>500,149.chr=>350,150.chr=>556,151.chr=>1000,152.chr=>333,153.chr=>1000,
+	154.chr=>556,155.chr=>333,156.chr=>944,157.chr=>350,158.chr=>500,159.chr=>667,160.chr=>278,161.chr=>333,162.chr=>556,163.chr=>556,164.chr=>556,165.chr=>556,166.chr=>280,167.chr=>556,168.chr=>333,169.chr=>737,170.chr=>370,171.chr=>556,172.chr=>584,173.chr=>333,174.chr=>737,175.chr=>333,
+	176.chr=>400,177.chr=>584,178.chr=>333,179.chr=>333,180.chr=>333,181.chr=>611,182.chr=>556,183.chr=>278,184.chr=>333,185.chr=>333,186.chr=>365,187.chr=>556,188.chr=>834,189.chr=>834,190.chr=>834,191.chr=>611,192.chr=>722,193.chr=>722,194.chr=>722,195.chr=>722,196.chr=>722,197.chr=>722,
+	198.chr=>1000,199.chr=>722,200.chr=>667,201.chr=>667,202.chr=>667,203.chr=>667,204.chr=>278,205.chr=>278,206.chr=>278,207.chr=>278,208.chr=>722,209.chr=>722,210.chr=>778,211.chr=>778,212.chr=>778,213.chr=>778,214.chr=>778,215.chr=>584,216.chr=>778,217.chr=>722,218.chr=>722,219.chr=>722,
+	220.chr=>722,221.chr=>667,222.chr=>667,223.chr=>611,224.chr=>556,225.chr=>556,226.chr=>556,227.chr=>556,228.chr=>556,229.chr=>556,230.chr=>889,231.chr=>556,232.chr=>556,233.chr=>556,234.chr=>556,235.chr=>556,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>611,241.chr=>611,
+	242.chr=>611,243.chr=>611,244.chr=>611,245.chr=>611,246.chr=>611,247.chr=>584,248.chr=>611,249.chr=>611,250.chr=>611,251.chr=>611,252.chr=>611,253.chr=>556,254.chr=>611,255.chr=>556}
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/helveticai.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,15 @@
+TCPDFFontDescriptor.define('helveticai') do |font|
+  font[:cw]={
+	0.chr=>278,1.chr=>278,2.chr=>278,3.chr=>278,4.chr=>278,5.chr=>278,6.chr=>278,7.chr=>278,8.chr=>278,9.chr=>278,10.chr=>278,11.chr=>278,12.chr=>278,13.chr=>278,14.chr=>278,15.chr=>278,16.chr=>278,17.chr=>278,18.chr=>278,19.chr=>278,20.chr=>278,21.chr=>278,
+	22.chr=>278,23.chr=>278,24.chr=>278,25.chr=>278,26.chr=>278,27.chr=>278,28.chr=>278,29.chr=>278,30.chr=>278,31.chr=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+	'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,127.chr=>350,128.chr=>556,129.chr=>350,130.chr=>222,131.chr=>556,
+	132.chr=>333,133.chr=>1000,134.chr=>556,135.chr=>556,136.chr=>333,137.chr=>1000,138.chr=>667,139.chr=>333,140.chr=>1000,141.chr=>350,142.chr=>611,143.chr=>350,144.chr=>350,145.chr=>222,146.chr=>222,147.chr=>333,148.chr=>333,149.chr=>350,150.chr=>556,151.chr=>1000,152.chr=>333,153.chr=>1000,
+	154.chr=>500,155.chr=>333,156.chr=>944,157.chr=>350,158.chr=>500,159.chr=>667,160.chr=>278,161.chr=>333,162.chr=>556,163.chr=>556,164.chr=>556,165.chr=>556,166.chr=>260,167.chr=>556,168.chr=>333,169.chr=>737,170.chr=>370,171.chr=>556,172.chr=>584,173.chr=>333,174.chr=>737,175.chr=>333,
+	176.chr=>400,177.chr=>584,178.chr=>333,179.chr=>333,180.chr=>333,181.chr=>556,182.chr=>537,183.chr=>278,184.chr=>333,185.chr=>333,186.chr=>365,187.chr=>556,188.chr=>834,189.chr=>834,190.chr=>834,191.chr=>611,192.chr=>667,193.chr=>667,194.chr=>667,195.chr=>667,196.chr=>667,197.chr=>667,
+	198.chr=>1000,199.chr=>722,200.chr=>667,201.chr=>667,202.chr=>667,203.chr=>667,204.chr=>278,205.chr=>278,206.chr=>278,207.chr=>278,208.chr=>722,209.chr=>722,210.chr=>778,211.chr=>778,212.chr=>778,213.chr=>778,214.chr=>778,215.chr=>584,216.chr=>778,217.chr=>722,218.chr=>722,219.chr=>722,
+	220.chr=>722,221.chr=>667,222.chr=>667,223.chr=>611,224.chr=>556,225.chr=>556,226.chr=>556,227.chr=>556,228.chr=>556,229.chr=>556,230.chr=>889,231.chr=>500,232.chr=>556,233.chr=>556,234.chr=>556,235.chr=>556,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>556,241.chr=>556,
+	242.chr=>556,243.chr=>556,244.chr=>556,245.chr=>556,246.chr=>556,247.chr=>584,248.chr=>611,249.chr=>556,250.chr=>556,251.chr=>556,252.chr=>556,253.chr=>500,254.chr=>556,255.chr=>500}
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1250.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,251 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!89 U+2030 perthousand
+!8A U+0160 Scaron
+!8B U+2039 guilsinglleft
+!8C U+015A Sacute
+!8D U+0164 Tcaron
+!8E U+017D Zcaron
+!8F U+0179 Zacute
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!99 U+2122 trademark
+!9A U+0161 scaron
+!9B U+203A guilsinglright
+!9C U+015B sacute
+!9D U+0165 tcaron
+!9E U+017E zcaron
+!9F U+017A zacute
+!A0 U+00A0 space
+!A1 U+02C7 caron
+!A2 U+02D8 breve
+!A3 U+0141 Lslash
+!A4 U+00A4 currency
+!A5 U+0104 Aogonek
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+015E Scedilla
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+017B Zdotaccent
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+02DB ogonek
+!B3 U+0142 lslash
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+0105 aogonek
+!BA U+015F scedilla
+!BB U+00BB guillemotright
+!BC U+013D Lcaron
+!BD U+02DD hungarumlaut
+!BE U+013E lcaron
+!BF U+017C zdotaccent
+!C0 U+0154 Racute
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+0102 Abreve
+!C4 U+00C4 Adieresis
+!C5 U+0139 Lacute
+!C6 U+0106 Cacute
+!C7 U+00C7 Ccedilla
+!C8 U+010C Ccaron
+!C9 U+00C9 Eacute
+!CA U+0118 Eogonek
+!CB U+00CB Edieresis
+!CC U+011A Ecaron
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+010E Dcaron
+!D0 U+0110 Dcroat
+!D1 U+0143 Nacute
+!D2 U+0147 Ncaron
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+0150 Ohungarumlaut
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+0158 Rcaron
+!D9 U+016E Uring
+!DA U+00DA Uacute
+!DB U+0170 Uhungarumlaut
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+0162 Tcommaaccent
+!DF U+00DF germandbls
+!E0 U+0155 racute
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+0103 abreve
+!E4 U+00E4 adieresis
+!E5 U+013A lacute
+!E6 U+0107 cacute
+!E7 U+00E7 ccedilla
+!E8 U+010D ccaron
+!E9 U+00E9 eacute
+!EA U+0119 eogonek
+!EB U+00EB edieresis
+!EC U+011B ecaron
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+010F dcaron
+!F0 U+0111 dcroat
+!F1 U+0144 nacute
+!F2 U+0148 ncaron
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+0151 ohungarumlaut
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+0159 rcaron
+!F9 U+016F uring
+!FA U+00FA uacute
+!FB U+0171 uhungarumlaut
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+0163 tcommaaccent
+!FF U+02D9 dotaccent
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1251.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,255 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0402 afii10051
+!81 U+0403 afii10052
+!82 U+201A quotesinglbase
+!83 U+0453 afii10100
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+20AC Euro
+!89 U+2030 perthousand
+!8A U+0409 afii10058
+!8B U+2039 guilsinglleft
+!8C U+040A afii10059
+!8D U+040C afii10061
+!8E U+040B afii10060
+!8F U+040F afii10145
+!90 U+0452 afii10099
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!99 U+2122 trademark
+!9A U+0459 afii10106
+!9B U+203A guilsinglright
+!9C U+045A afii10107
+!9D U+045C afii10109
+!9E U+045B afii10108
+!9F U+045F afii10193
+!A0 U+00A0 space
+!A1 U+040E afii10062
+!A2 U+045E afii10110
+!A3 U+0408 afii10057
+!A4 U+00A4 currency
+!A5 U+0490 afii10050
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+0401 afii10023
+!A9 U+00A9 copyright
+!AA U+0404 afii10053
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+0407 afii10056
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+0406 afii10055
+!B3 U+0456 afii10103
+!B4 U+0491 afii10098
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+0451 afii10071
+!B9 U+2116 afii61352
+!BA U+0454 afii10101
+!BB U+00BB guillemotright
+!BC U+0458 afii10105
+!BD U+0405 afii10054
+!BE U+0455 afii10102
+!BF U+0457 afii10104
+!C0 U+0410 afii10017
+!C1 U+0411 afii10018
+!C2 U+0412 afii10019
+!C3 U+0413 afii10020
+!C4 U+0414 afii10021
+!C5 U+0415 afii10022
+!C6 U+0416 afii10024
+!C7 U+0417 afii10025
+!C8 U+0418 afii10026
+!C9 U+0419 afii10027
+!CA U+041A afii10028
+!CB U+041B afii10029
+!CC U+041C afii10030
+!CD U+041D afii10031
+!CE U+041E afii10032
+!CF U+041F afii10033
+!D0 U+0420 afii10034
+!D1 U+0421 afii10035
+!D2 U+0422 afii10036
+!D3 U+0423 afii10037
+!D4 U+0424 afii10038
+!D5 U+0425 afii10039
+!D6 U+0426 afii10040
+!D7 U+0427 afii10041
+!D8 U+0428 afii10042
+!D9 U+0429 afii10043
+!DA U+042A afii10044
+!DB U+042B afii10045
+!DC U+042C afii10046
+!DD U+042D afii10047
+!DE U+042E afii10048
+!DF U+042F afii10049
+!E0 U+0430 afii10065
+!E1 U+0431 afii10066
+!E2 U+0432 afii10067
+!E3 U+0433 afii10068
+!E4 U+0434 afii10069
+!E5 U+0435 afii10070
+!E6 U+0436 afii10072
+!E7 U+0437 afii10073
+!E8 U+0438 afii10074
+!E9 U+0439 afii10075
+!EA U+043A afii10076
+!EB U+043B afii10077
+!EC U+043C afii10078
+!ED U+043D afii10079
+!EE U+043E afii10080
+!EF U+043F afii10081
+!F0 U+0440 afii10082
+!F1 U+0441 afii10083
+!F2 U+0442 afii10084
+!F3 U+0443 afii10085
+!F4 U+0444 afii10086
+!F5 U+0445 afii10087
+!F6 U+0446 afii10088
+!F7 U+0447 afii10089
+!F8 U+0448 afii10090
+!F9 U+0449 afii10091
+!FA U+044A afii10092
+!FB U+044B afii10093
+!FC U+044C afii10094
+!FD U+044D afii10095
+!FE U+044E afii10096
+!FF U+044F afii10097
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1252.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,251 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+02C6 circumflex
+!89 U+2030 perthousand
+!8A U+0160 Scaron
+!8B U+2039 guilsinglleft
+!8C U+0152 OE
+!8E U+017D Zcaron
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!98 U+02DC tilde
+!99 U+2122 trademark
+!9A U+0161 scaron
+!9B U+203A guilsinglright
+!9C U+0153 oe
+!9E U+017E zcaron
+!9F U+0178 Ydieresis
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+00D0 Eth
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+00DE Thorn
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+00F0 eth
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+00FE thorn
+!FF U+00FF ydieresis
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1253.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,239 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!89 U+2030 perthousand
+!8B U+2039 guilsinglleft
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!99 U+2122 trademark
+!9B U+203A guilsinglright
+!A0 U+00A0 space
+!A1 U+0385 dieresistonos
+!A2 U+0386 Alphatonos
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+2015 afii00208
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+0384 tonos
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+0388 Epsilontonos
+!B9 U+0389 Etatonos
+!BA U+038A Iotatonos
+!BB U+00BB guillemotright
+!BC U+038C Omicrontonos
+!BD U+00BD onehalf
+!BE U+038E Upsilontonos
+!BF U+038F Omegatonos
+!C0 U+0390 iotadieresistonos
+!C1 U+0391 Alpha
+!C2 U+0392 Beta
+!C3 U+0393 Gamma
+!C4 U+0394 Delta
+!C5 U+0395 Epsilon
+!C6 U+0396 Zeta
+!C7 U+0397 Eta
+!C8 U+0398 Theta
+!C9 U+0399 Iota
+!CA U+039A Kappa
+!CB U+039B Lambda
+!CC U+039C Mu
+!CD U+039D Nu
+!CE U+039E Xi
+!CF U+039F Omicron
+!D0 U+03A0 Pi
+!D1 U+03A1 Rho
+!D3 U+03A3 Sigma
+!D4 U+03A4 Tau
+!D5 U+03A5 Upsilon
+!D6 U+03A6 Phi
+!D7 U+03A7 Chi
+!D8 U+03A8 Psi
+!D9 U+03A9 Omega
+!DA U+03AA Iotadieresis
+!DB U+03AB Upsilondieresis
+!DC U+03AC alphatonos
+!DD U+03AD epsilontonos
+!DE U+03AE etatonos
+!DF U+03AF iotatonos
+!E0 U+03B0 upsilondieresistonos
+!E1 U+03B1 alpha
+!E2 U+03B2 beta
+!E3 U+03B3 gamma
+!E4 U+03B4 delta
+!E5 U+03B5 epsilon
+!E6 U+03B6 zeta
+!E7 U+03B7 eta
+!E8 U+03B8 theta
+!E9 U+03B9 iota
+!EA U+03BA kappa
+!EB U+03BB lambda
+!EC U+03BC mu
+!ED U+03BD nu
+!EE U+03BE xi
+!EF U+03BF omicron
+!F0 U+03C0 pi
+!F1 U+03C1 rho
+!F2 U+03C2 sigma1
+!F3 U+03C3 sigma
+!F4 U+03C4 tau
+!F5 U+03C5 upsilon
+!F6 U+03C6 phi
+!F7 U+03C7 chi
+!F8 U+03C8 psi
+!F9 U+03C9 omega
+!FA U+03CA iotadieresis
+!FB U+03CB upsilondieresis
+!FC U+03CC omicrontonos
+!FD U+03CD upsilontonos
+!FE U+03CE omegatonos
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1254.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,249 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+02C6 circumflex
+!89 U+2030 perthousand
+!8A U+0160 Scaron
+!8B U+2039 guilsinglleft
+!8C U+0152 OE
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!98 U+02DC tilde
+!99 U+2122 trademark
+!9A U+0161 scaron
+!9B U+203A guilsinglright
+!9C U+0153 oe
+!9F U+0178 Ydieresis
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+011E Gbreve
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+0130 Idotaccent
+!DE U+015E Scedilla
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+011F gbreve
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+0131 dotlessi
+!FE U+015F scedilla
+!FF U+00FF ydieresis
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1255.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,233 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+02C6 circumflex
+!89 U+2030 perthousand
+!8B U+2039 guilsinglleft
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!98 U+02DC tilde
+!99 U+2122 trademark
+!9B U+203A guilsinglright
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+20AA afii57636
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00D7 multiply
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD sfthyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 middot
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00F7 divide
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+05B0 afii57799
+!C1 U+05B1 afii57801
+!C2 U+05B2 afii57800
+!C3 U+05B3 afii57802
+!C4 U+05B4 afii57793
+!C5 U+05B5 afii57794
+!C6 U+05B6 afii57795
+!C7 U+05B7 afii57798
+!C8 U+05B8 afii57797
+!C9 U+05B9 afii57806
+!CB U+05BB afii57796
+!CC U+05BC afii57807
+!CD U+05BD afii57839
+!CE U+05BE afii57645
+!CF U+05BF afii57841
+!D0 U+05C0 afii57842
+!D1 U+05C1 afii57804
+!D2 U+05C2 afii57803
+!D3 U+05C3 afii57658
+!D4 U+05F0 afii57716
+!D5 U+05F1 afii57717
+!D6 U+05F2 afii57718
+!D7 U+05F3 gereshhebrew
+!D8 U+05F4 gershayimhebrew
+!E0 U+05D0 afii57664
+!E1 U+05D1 afii57665
+!E2 U+05D2 afii57666
+!E3 U+05D3 afii57667
+!E4 U+05D4 afii57668
+!E5 U+05D5 afii57669
+!E6 U+05D6 afii57670
+!E7 U+05D7 afii57671
+!E8 U+05D8 afii57672
+!E9 U+05D9 afii57673
+!EA U+05DA afii57674
+!EB U+05DB afii57675
+!EC U+05DC afii57676
+!ED U+05DD afii57677
+!EE U+05DE afii57678
+!EF U+05DF afii57679
+!F0 U+05E0 afii57680
+!F1 U+05E1 afii57681
+!F2 U+05E2 afii57682
+!F3 U+05E3 afii57683
+!F4 U+05E4 afii57684
+!F5 U+05E5 afii57685
+!F6 U+05E6 afii57686
+!F7 U+05E7 afii57687
+!F8 U+05E8 afii57688
+!F9 U+05E9 afii57689
+!FA U+05EA afii57690
+!FD U+200E afii299
+!FE U+200F afii300
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1257.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,244 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!89 U+2030 perthousand
+!8B U+2039 guilsinglleft
+!8D U+00A8 dieresis
+!8E U+02C7 caron
+!8F U+00B8 cedilla
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!99 U+2122 trademark
+!9B U+203A guilsinglright
+!9D U+00AF macron
+!9E U+02DB ogonek
+!A0 U+00A0 space
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00D8 Oslash
+!A9 U+00A9 copyright
+!AA U+0156 Rcommaaccent
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00C6 AE
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00F8 oslash
+!B9 U+00B9 onesuperior
+!BA U+0157 rcommaaccent
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00E6 ae
+!C0 U+0104 Aogonek
+!C1 U+012E Iogonek
+!C2 U+0100 Amacron
+!C3 U+0106 Cacute
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+0118 Eogonek
+!C7 U+0112 Emacron
+!C8 U+010C Ccaron
+!C9 U+00C9 Eacute
+!CA U+0179 Zacute
+!CB U+0116 Edotaccent
+!CC U+0122 Gcommaaccent
+!CD U+0136 Kcommaaccent
+!CE U+012A Imacron
+!CF U+013B Lcommaaccent
+!D0 U+0160 Scaron
+!D1 U+0143 Nacute
+!D2 U+0145 Ncommaaccent
+!D3 U+00D3 Oacute
+!D4 U+014C Omacron
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+0172 Uogonek
+!D9 U+0141 Lslash
+!DA U+015A Sacute
+!DB U+016A Umacron
+!DC U+00DC Udieresis
+!DD U+017B Zdotaccent
+!DE U+017D Zcaron
+!DF U+00DF germandbls
+!E0 U+0105 aogonek
+!E1 U+012F iogonek
+!E2 U+0101 amacron
+!E3 U+0107 cacute
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+0119 eogonek
+!E7 U+0113 emacron
+!E8 U+010D ccaron
+!E9 U+00E9 eacute
+!EA U+017A zacute
+!EB U+0117 edotaccent
+!EC U+0123 gcommaaccent
+!ED U+0137 kcommaaccent
+!EE U+012B imacron
+!EF U+013C lcommaaccent
+!F0 U+0161 scaron
+!F1 U+0144 nacute
+!F2 U+0146 ncommaaccent
+!F3 U+00F3 oacute
+!F4 U+014D omacron
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+0173 uogonek
+!F9 U+0142 lslash
+!FA U+015B sacute
+!FB U+016B umacron
+!FC U+00FC udieresis
+!FD U+017C zdotaccent
+!FE U+017E zcaron
+!FF U+02D9 dotaccent
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1258.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,247 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+02C6 circumflex
+!89 U+2030 perthousand
+!8B U+2039 guilsinglleft
+!8C U+0152 OE
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!98 U+02DC tilde
+!99 U+2122 trademark
+!9B U+203A guilsinglright
+!9C U+0153 oe
+!9F U+0178 Ydieresis
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+0102 Abreve
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+0300 gravecomb
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+0110 Dcroat
+!D1 U+00D1 Ntilde
+!D2 U+0309 hookabovecomb
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+01A0 Ohorn
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+01AF Uhorn
+!DE U+0303 tildecomb
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+0103 abreve
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+0301 acutecomb
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+0111 dcroat
+!F1 U+00F1 ntilde
+!F2 U+0323 dotbelowcomb
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+01A1 ohorn
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+01B0 uhorn
+!FE U+20AB dong
+!FF U+00FF ydieresis
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp874.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,225 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!85 U+2026 ellipsis
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!A0 U+00A0 space
+!A1 U+0E01 kokaithai
+!A2 U+0E02 khokhaithai
+!A3 U+0E03 khokhuatthai
+!A4 U+0E04 khokhwaithai
+!A5 U+0E05 khokhonthai
+!A6 U+0E06 khorakhangthai
+!A7 U+0E07 ngonguthai
+!A8 U+0E08 chochanthai
+!A9 U+0E09 chochingthai
+!AA U+0E0A chochangthai
+!AB U+0E0B sosothai
+!AC U+0E0C chochoethai
+!AD U+0E0D yoyingthai
+!AE U+0E0E dochadathai
+!AF U+0E0F topatakthai
+!B0 U+0E10 thothanthai
+!B1 U+0E11 thonangmonthothai
+!B2 U+0E12 thophuthaothai
+!B3 U+0E13 nonenthai
+!B4 U+0E14 dodekthai
+!B5 U+0E15 totaothai
+!B6 U+0E16 thothungthai
+!B7 U+0E17 thothahanthai
+!B8 U+0E18 thothongthai
+!B9 U+0E19 nonuthai
+!BA U+0E1A bobaimaithai
+!BB U+0E1B poplathai
+!BC U+0E1C phophungthai
+!BD U+0E1D fofathai
+!BE U+0E1E phophanthai
+!BF U+0E1F fofanthai
+!C0 U+0E20 phosamphaothai
+!C1 U+0E21 momathai
+!C2 U+0E22 yoyakthai
+!C3 U+0E23 roruathai
+!C4 U+0E24 ruthai
+!C5 U+0E25 lolingthai
+!C6 U+0E26 luthai
+!C7 U+0E27 wowaenthai
+!C8 U+0E28 sosalathai
+!C9 U+0E29 sorusithai
+!CA U+0E2A sosuathai
+!CB U+0E2B hohipthai
+!CC U+0E2C lochulathai
+!CD U+0E2D oangthai
+!CE U+0E2E honokhukthai
+!CF U+0E2F paiyannoithai
+!D0 U+0E30 saraathai
+!D1 U+0E31 maihanakatthai
+!D2 U+0E32 saraaathai
+!D3 U+0E33 saraamthai
+!D4 U+0E34 saraithai
+!D5 U+0E35 saraiithai
+!D6 U+0E36 sarauethai
+!D7 U+0E37 saraueethai
+!D8 U+0E38 sarauthai
+!D9 U+0E39 sarauuthai
+!DA U+0E3A phinthuthai
+!DF U+0E3F bahtthai
+!E0 U+0E40 saraethai
+!E1 U+0E41 saraaethai
+!E2 U+0E42 saraothai
+!E3 U+0E43 saraaimaimuanthai
+!E4 U+0E44 saraaimaimalaithai
+!E5 U+0E45 lakkhangyaothai
+!E6 U+0E46 maiyamokthai
+!E7 U+0E47 maitaikhuthai
+!E8 U+0E48 maiekthai
+!E9 U+0E49 maithothai
+!EA U+0E4A maitrithai
+!EB U+0E4B maichattawathai
+!EC U+0E4C thanthakhatthai
+!ED U+0E4D nikhahitthai
+!EE U+0E4E yamakkanthai
+!EF U+0E4F fongmanthai
+!F0 U+0E50 zerothai
+!F1 U+0E51 onethai
+!F2 U+0E52 twothai
+!F3 U+0E53 threethai
+!F4 U+0E54 fourthai
+!F5 U+0E55 fivethai
+!F6 U+0E56 sixthai
+!F7 U+0E57 seventhai
+!F8 U+0E58 eightthai
+!F9 U+0E59 ninethai
+!FA U+0E5A angkhankhuthai
+!FB U+0E5B khomutthai
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-1.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+00D0 Eth
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+00DE Thorn
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+00F0 eth
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+00FE thorn
+!FF U+00FF ydieresis
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-11.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,248 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0E01 kokaithai
+!A2 U+0E02 khokhaithai
+!A3 U+0E03 khokhuatthai
+!A4 U+0E04 khokhwaithai
+!A5 U+0E05 khokhonthai
+!A6 U+0E06 khorakhangthai
+!A7 U+0E07 ngonguthai
+!A8 U+0E08 chochanthai
+!A9 U+0E09 chochingthai
+!AA U+0E0A chochangthai
+!AB U+0E0B sosothai
+!AC U+0E0C chochoethai
+!AD U+0E0D yoyingthai
+!AE U+0E0E dochadathai
+!AF U+0E0F topatakthai
+!B0 U+0E10 thothanthai
+!B1 U+0E11 thonangmonthothai
+!B2 U+0E12 thophuthaothai
+!B3 U+0E13 nonenthai
+!B4 U+0E14 dodekthai
+!B5 U+0E15 totaothai
+!B6 U+0E16 thothungthai
+!B7 U+0E17 thothahanthai
+!B8 U+0E18 thothongthai
+!B9 U+0E19 nonuthai
+!BA U+0E1A bobaimaithai
+!BB U+0E1B poplathai
+!BC U+0E1C phophungthai
+!BD U+0E1D fofathai
+!BE U+0E1E phophanthai
+!BF U+0E1F fofanthai
+!C0 U+0E20 phosamphaothai
+!C1 U+0E21 momathai
+!C2 U+0E22 yoyakthai
+!C3 U+0E23 roruathai
+!C4 U+0E24 ruthai
+!C5 U+0E25 lolingthai
+!C6 U+0E26 luthai
+!C7 U+0E27 wowaenthai
+!C8 U+0E28 sosalathai
+!C9 U+0E29 sorusithai
+!CA U+0E2A sosuathai
+!CB U+0E2B hohipthai
+!CC U+0E2C lochulathai
+!CD U+0E2D oangthai
+!CE U+0E2E honokhukthai
+!CF U+0E2F paiyannoithai
+!D0 U+0E30 saraathai
+!D1 U+0E31 maihanakatthai
+!D2 U+0E32 saraaathai
+!D3 U+0E33 saraamthai
+!D4 U+0E34 saraithai
+!D5 U+0E35 saraiithai
+!D6 U+0E36 sarauethai
+!D7 U+0E37 saraueethai
+!D8 U+0E38 sarauthai
+!D9 U+0E39 sarauuthai
+!DA U+0E3A phinthuthai
+!DF U+0E3F bahtthai
+!E0 U+0E40 saraethai
+!E1 U+0E41 saraaethai
+!E2 U+0E42 saraothai
+!E3 U+0E43 saraaimaimuanthai
+!E4 U+0E44 saraaimaimalaithai
+!E5 U+0E45 lakkhangyaothai
+!E6 U+0E46 maiyamokthai
+!E7 U+0E47 maitaikhuthai
+!E8 U+0E48 maiekthai
+!E9 U+0E49 maithothai
+!EA U+0E4A maitrithai
+!EB U+0E4B maichattawathai
+!EC U+0E4C thanthakhatthai
+!ED U+0E4D nikhahitthai
+!EE U+0E4E yamakkanthai
+!EF U+0E4F fongmanthai
+!F0 U+0E50 zerothai
+!F1 U+0E51 onethai
+!F2 U+0E52 twothai
+!F3 U+0E53 threethai
+!F4 U+0E54 fourthai
+!F5 U+0E55 fivethai
+!F6 U+0E56 sixthai
+!F7 U+0E57 seventhai
+!F8 U+0E58 eightthai
+!F9 U+0E59 ninethai
+!FA U+0E5A angkhankhuthai
+!FB U+0E5B khomutthai
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-15.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+20AC Euro
+!A5 U+00A5 yen
+!A6 U+0160 Scaron
+!A7 U+00A7 section
+!A8 U+0161 scaron
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+017D Zcaron
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+017E zcaron
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+0152 OE
+!BD U+0153 oe
+!BE U+0178 Ydieresis
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+00D0 Eth
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+00DE Thorn
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+00F0 eth
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+00FE thorn
+!FF U+00FF ydieresis
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-16.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0104 Aogonek
+!A2 U+0105 aogonek
+!A3 U+0141 Lslash
+!A4 U+20AC Euro
+!A5 U+201E quotedblbase
+!A6 U+0160 Scaron
+!A7 U+00A7 section
+!A8 U+0161 scaron
+!A9 U+00A9 copyright
+!AA U+0218 Scommaaccent
+!AB U+00AB guillemotleft
+!AC U+0179 Zacute
+!AD U+00AD hyphen
+!AE U+017A zacute
+!AF U+017B Zdotaccent
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+010C Ccaron
+!B3 U+0142 lslash
+!B4 U+017D Zcaron
+!B5 U+201D quotedblright
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+017E zcaron
+!B9 U+010D ccaron
+!BA U+0219 scommaaccent
+!BB U+00BB guillemotright
+!BC U+0152 OE
+!BD U+0153 oe
+!BE U+0178 Ydieresis
+!BF U+017C zdotaccent
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+0102 Abreve
+!C4 U+00C4 Adieresis
+!C5 U+0106 Cacute
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+0110 Dcroat
+!D1 U+0143 Nacute
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+0150 Ohungarumlaut
+!D6 U+00D6 Odieresis
+!D7 U+015A Sacute
+!D8 U+0170 Uhungarumlaut
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+0118 Eogonek
+!DE U+021A Tcommaaccent
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+0103 abreve
+!E4 U+00E4 adieresis
+!E5 U+0107 cacute
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+0111 dcroat
+!F1 U+0144 nacute
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+0151 ohungarumlaut
+!F6 U+00F6 odieresis
+!F7 U+015B sacute
+!F8 U+0171 uhungarumlaut
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+0119 eogonek
+!FE U+021B tcommaaccent
+!FF U+00FF ydieresis
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-2.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0104 Aogonek
+!A2 U+02D8 breve
+!A3 U+0141 Lslash
+!A4 U+00A4 currency
+!A5 U+013D Lcaron
+!A6 U+015A Sacute
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+0160 Scaron
+!AA U+015E Scedilla
+!AB U+0164 Tcaron
+!AC U+0179 Zacute
+!AD U+00AD hyphen
+!AE U+017D Zcaron
+!AF U+017B Zdotaccent
+!B0 U+00B0 degree
+!B1 U+0105 aogonek
+!B2 U+02DB ogonek
+!B3 U+0142 lslash
+!B4 U+00B4 acute
+!B5 U+013E lcaron
+!B6 U+015B sacute
+!B7 U+02C7 caron
+!B8 U+00B8 cedilla
+!B9 U+0161 scaron
+!BA U+015F scedilla
+!BB U+0165 tcaron
+!BC U+017A zacute
+!BD U+02DD hungarumlaut
+!BE U+017E zcaron
+!BF U+017C zdotaccent
+!C0 U+0154 Racute
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+0102 Abreve
+!C4 U+00C4 Adieresis
+!C5 U+0139 Lacute
+!C6 U+0106 Cacute
+!C7 U+00C7 Ccedilla
+!C8 U+010C Ccaron
+!C9 U+00C9 Eacute
+!CA U+0118 Eogonek
+!CB U+00CB Edieresis
+!CC U+011A Ecaron
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+010E Dcaron
+!D0 U+0110 Dcroat
+!D1 U+0143 Nacute
+!D2 U+0147 Ncaron
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+0150 Ohungarumlaut
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+0158 Rcaron
+!D9 U+016E Uring
+!DA U+00DA Uacute
+!DB U+0170 Uhungarumlaut
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+0162 Tcommaaccent
+!DF U+00DF germandbls
+!E0 U+0155 racute
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+0103 abreve
+!E4 U+00E4 adieresis
+!E5 U+013A lacute
+!E6 U+0107 cacute
+!E7 U+00E7 ccedilla
+!E8 U+010D ccaron
+!E9 U+00E9 eacute
+!EA U+0119 eogonek
+!EB U+00EB edieresis
+!EC U+011B ecaron
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+010F dcaron
+!F0 U+0111 dcroat
+!F1 U+0144 nacute
+!F2 U+0148 ncaron
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+0151 ohungarumlaut
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+0159 rcaron
+!F9 U+016F uring
+!FA U+00FA uacute
+!FB U+0171 uhungarumlaut
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+0163 tcommaaccent
+!FF U+02D9 dotaccent
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-4.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0104 Aogonek
+!A2 U+0138 kgreenlandic
+!A3 U+0156 Rcommaaccent
+!A4 U+00A4 currency
+!A5 U+0128 Itilde
+!A6 U+013B Lcommaaccent
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+0160 Scaron
+!AA U+0112 Emacron
+!AB U+0122 Gcommaaccent
+!AC U+0166 Tbar
+!AD U+00AD hyphen
+!AE U+017D Zcaron
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+0105 aogonek
+!B2 U+02DB ogonek
+!B3 U+0157 rcommaaccent
+!B4 U+00B4 acute
+!B5 U+0129 itilde
+!B6 U+013C lcommaaccent
+!B7 U+02C7 caron
+!B8 U+00B8 cedilla
+!B9 U+0161 scaron
+!BA U+0113 emacron
+!BB U+0123 gcommaaccent
+!BC U+0167 tbar
+!BD U+014A Eng
+!BE U+017E zcaron
+!BF U+014B eng
+!C0 U+0100 Amacron
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+012E Iogonek
+!C8 U+010C Ccaron
+!C9 U+00C9 Eacute
+!CA U+0118 Eogonek
+!CB U+00CB Edieresis
+!CC U+0116 Edotaccent
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+012A Imacron
+!D0 U+0110 Dcroat
+!D1 U+0145 Ncommaaccent
+!D2 U+014C Omacron
+!D3 U+0136 Kcommaaccent
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+0172 Uogonek
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+0168 Utilde
+!DE U+016A Umacron
+!DF U+00DF germandbls
+!E0 U+0101 amacron
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+012F iogonek
+!E8 U+010D ccaron
+!E9 U+00E9 eacute
+!EA U+0119 eogonek
+!EB U+00EB edieresis
+!EC U+0117 edotaccent
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+012B imacron
+!F0 U+0111 dcroat
+!F1 U+0146 ncommaaccent
+!F2 U+014D omacron
+!F3 U+0137 kcommaaccent
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+0173 uogonek
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+0169 utilde
+!FE U+016B umacron
+!FF U+02D9 dotaccent
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-5.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0401 afii10023
+!A2 U+0402 afii10051
+!A3 U+0403 afii10052
+!A4 U+0404 afii10053
+!A5 U+0405 afii10054
+!A6 U+0406 afii10055
+!A7 U+0407 afii10056
+!A8 U+0408 afii10057
+!A9 U+0409 afii10058
+!AA U+040A afii10059
+!AB U+040B afii10060
+!AC U+040C afii10061
+!AD U+00AD hyphen
+!AE U+040E afii10062
+!AF U+040F afii10145
+!B0 U+0410 afii10017
+!B1 U+0411 afii10018
+!B2 U+0412 afii10019
+!B3 U+0413 afii10020
+!B4 U+0414 afii10021
+!B5 U+0415 afii10022
+!B6 U+0416 afii10024
+!B7 U+0417 afii10025
+!B8 U+0418 afii10026
+!B9 U+0419 afii10027
+!BA U+041A afii10028
+!BB U+041B afii10029
+!BC U+041C afii10030
+!BD U+041D afii10031
+!BE U+041E afii10032
+!BF U+041F afii10033
+!C0 U+0420 afii10034
+!C1 U+0421 afii10035
+!C2 U+0422 afii10036
+!C3 U+0423 afii10037
+!C4 U+0424 afii10038
+!C5 U+0425 afii10039
+!C6 U+0426 afii10040
+!C7 U+0427 afii10041
+!C8 U+0428 afii10042
+!C9 U+0429 afii10043
+!CA U+042A afii10044
+!CB U+042B afii10045
+!CC U+042C afii10046
+!CD U+042D afii10047
+!CE U+042E afii10048
+!CF U+042F afii10049
+!D0 U+0430 afii10065
+!D1 U+0431 afii10066
+!D2 U+0432 afii10067
+!D3 U+0433 afii10068
+!D4 U+0434 afii10069
+!D5 U+0435 afii10070
+!D6 U+0436 afii10072
+!D7 U+0437 afii10073
+!D8 U+0438 afii10074
+!D9 U+0439 afii10075
+!DA U+043A afii10076
+!DB U+043B afii10077
+!DC U+043C afii10078
+!DD U+043D afii10079
+!DE U+043E afii10080
+!DF U+043F afii10081
+!E0 U+0440 afii10082
+!E1 U+0441 afii10083
+!E2 U+0442 afii10084
+!E3 U+0443 afii10085
+!E4 U+0444 afii10086
+!E5 U+0445 afii10087
+!E6 U+0446 afii10088
+!E7 U+0447 afii10089
+!E8 U+0448 afii10090
+!E9 U+0449 afii10091
+!EA U+044A afii10092
+!EB U+044B afii10093
+!EC U+044C afii10094
+!ED U+044D afii10095
+!EE U+044E afii10096
+!EF U+044F afii10097
+!F0 U+2116 afii61352
+!F1 U+0451 afii10071
+!F2 U+0452 afii10099
+!F3 U+0453 afii10100
+!F4 U+0454 afii10101
+!F5 U+0455 afii10102
+!F6 U+0456 afii10103
+!F7 U+0457 afii10104
+!F8 U+0458 afii10105
+!F9 U+0459 afii10106
+!FA U+045A afii10107
+!FB U+045B afii10108
+!FC U+045C afii10109
+!FD U+00A7 section
+!FE U+045E afii10110
+!FF U+045F afii10193
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-7.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,250 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+2018 quoteleft
+!A2 U+2019 quoteright
+!A3 U+00A3 sterling
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AF U+2015 afii00208
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+0384 tonos
+!B5 U+0385 dieresistonos
+!B6 U+0386 Alphatonos
+!B7 U+00B7 periodcentered
+!B8 U+0388 Epsilontonos
+!B9 U+0389 Etatonos
+!BA U+038A Iotatonos
+!BB U+00BB guillemotright
+!BC U+038C Omicrontonos
+!BD U+00BD onehalf
+!BE U+038E Upsilontonos
+!BF U+038F Omegatonos
+!C0 U+0390 iotadieresistonos
+!C1 U+0391 Alpha
+!C2 U+0392 Beta
+!C3 U+0393 Gamma
+!C4 U+0394 Delta
+!C5 U+0395 Epsilon
+!C6 U+0396 Zeta
+!C7 U+0397 Eta
+!C8 U+0398 Theta
+!C9 U+0399 Iota
+!CA U+039A Kappa
+!CB U+039B Lambda
+!CC U+039C Mu
+!CD U+039D Nu
+!CE U+039E Xi
+!CF U+039F Omicron
+!D0 U+03A0 Pi
+!D1 U+03A1 Rho
+!D3 U+03A3 Sigma
+!D4 U+03A4 Tau
+!D5 U+03A5 Upsilon
+!D6 U+03A6 Phi
+!D7 U+03A7 Chi
+!D8 U+03A8 Psi
+!D9 U+03A9 Omega
+!DA U+03AA Iotadieresis
+!DB U+03AB Upsilondieresis
+!DC U+03AC alphatonos
+!DD U+03AD epsilontonos
+!DE U+03AE etatonos
+!DF U+03AF iotatonos
+!E0 U+03B0 upsilondieresistonos
+!E1 U+03B1 alpha
+!E2 U+03B2 beta
+!E3 U+03B3 gamma
+!E4 U+03B4 delta
+!E5 U+03B5 epsilon
+!E6 U+03B6 zeta
+!E7 U+03B7 eta
+!E8 U+03B8 theta
+!E9 U+03B9 iota
+!EA U+03BA kappa
+!EB U+03BB lambda
+!EC U+03BC mu
+!ED U+03BD nu
+!EE U+03BE xi
+!EF U+03BF omicron
+!F0 U+03C0 pi
+!F1 U+03C1 rho
+!F2 U+03C2 sigma1
+!F3 U+03C3 sigma
+!F4 U+03C4 tau
+!F5 U+03C5 upsilon
+!F6 U+03C6 phi
+!F7 U+03C7 chi
+!F8 U+03C8 psi
+!F9 U+03C9 omega
+!FA U+03CA iotadieresis
+!FB U+03CB upsilondieresis
+!FC U+03CC omicrontonos
+!FD U+03CD upsilontonos
+!FE U+03CE omegatonos
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-9.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+011E Gbreve
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+0130 Idotaccent
+!DE U+015E Scedilla
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+011F gbreve
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+0131 dotlessi
+!FE U+015F scedilla
+!FF U+00FF ydieresis
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/koi8-r.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+2500 SF100000
+!81 U+2502 SF110000
+!82 U+250C SF010000
+!83 U+2510 SF030000
+!84 U+2514 SF020000
+!85 U+2518 SF040000
+!86 U+251C SF080000
+!87 U+2524 SF090000
+!88 U+252C SF060000
+!89 U+2534 SF070000
+!8A U+253C SF050000
+!8B U+2580 upblock
+!8C U+2584 dnblock
+!8D U+2588 block
+!8E U+258C lfblock
+!8F U+2590 rtblock
+!90 U+2591 ltshade
+!91 U+2592 shade
+!92 U+2593 dkshade
+!93 U+2320 integraltp
+!94 U+25A0 filledbox
+!95 U+2219 periodcentered
+!96 U+221A radical
+!97 U+2248 approxequal
+!98 U+2264 lessequal
+!99 U+2265 greaterequal
+!9A U+00A0 space
+!9B U+2321 integralbt
+!9C U+00B0 degree
+!9D U+00B2 twosuperior
+!9E U+00B7 periodcentered
+!9F U+00F7 divide
+!A0 U+2550 SF430000
+!A1 U+2551 SF240000
+!A2 U+2552 SF510000
+!A3 U+0451 afii10071
+!A4 U+2553 SF520000
+!A5 U+2554 SF390000
+!A6 U+2555 SF220000
+!A7 U+2556 SF210000
+!A8 U+2557 SF250000
+!A9 U+2558 SF500000
+!AA U+2559 SF490000
+!AB U+255A SF380000
+!AC U+255B SF280000
+!AD U+255C SF270000
+!AE U+255D SF260000
+!AF U+255E SF360000
+!B0 U+255F SF370000
+!B1 U+2560 SF420000
+!B2 U+2561 SF190000
+!B3 U+0401 afii10023
+!B4 U+2562 SF200000
+!B5 U+2563 SF230000
+!B6 U+2564 SF470000
+!B7 U+2565 SF480000
+!B8 U+2566 SF410000
+!B9 U+2567 SF450000
+!BA U+2568 SF460000
+!BB U+2569 SF400000
+!BC U+256A SF540000
+!BD U+256B SF530000
+!BE U+256C SF440000
+!BF U+00A9 copyright
+!C0 U+044E afii10096
+!C1 U+0430 afii10065
+!C2 U+0431 afii10066
+!C3 U+0446 afii10088
+!C4 U+0434 afii10069
+!C5 U+0435 afii10070
+!C6 U+0444 afii10086
+!C7 U+0433 afii10068
+!C8 U+0445 afii10087
+!C9 U+0438 afii10074
+!CA U+0439 afii10075
+!CB U+043A afii10076
+!CC U+043B afii10077
+!CD U+043C afii10078
+!CE U+043D afii10079
+!CF U+043E afii10080
+!D0 U+043F afii10081
+!D1 U+044F afii10097
+!D2 U+0440 afii10082
+!D3 U+0441 afii10083
+!D4 U+0442 afii10084
+!D5 U+0443 afii10085
+!D6 U+0436 afii10072
+!D7 U+0432 afii10067
+!D8 U+044C afii10094
+!D9 U+044B afii10093
+!DA U+0437 afii10073
+!DB U+0448 afii10090
+!DC U+044D afii10095
+!DD U+0449 afii10091
+!DE U+0447 afii10089
+!DF U+044A afii10092
+!E0 U+042E afii10048
+!E1 U+0410 afii10017
+!E2 U+0411 afii10018
+!E3 U+0426 afii10040
+!E4 U+0414 afii10021
+!E5 U+0415 afii10022
+!E6 U+0424 afii10038
+!E7 U+0413 afii10020
+!E8 U+0425 afii10039
+!E9 U+0418 afii10026
+!EA U+0419 afii10027
+!EB U+041A afii10028
+!EC U+041B afii10029
+!ED U+041C afii10030
+!EE U+041D afii10031
+!EF U+041E afii10032
+!F0 U+041F afii10033
+!F1 U+042F afii10049
+!F2 U+0420 afii10034
+!F3 U+0421 afii10035
+!F4 U+0422 afii10036
+!F5 U+0423 afii10037
+!F6 U+0416 afii10024
+!F7 U+0412 afii10019
+!F8 U+042C afii10046
+!F9 U+042B afii10045
+!FA U+0417 afii10025
+!FB U+0428 afii10042
+!FC U+042D afii10047
+!FD U+0429 afii10043
+!FE U+0427 afii10041
+!FF U+042A afii10044
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/koi8-u.map	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+2500 SF100000
+!81 U+2502 SF110000
+!82 U+250C SF010000
+!83 U+2510 SF030000
+!84 U+2514 SF020000
+!85 U+2518 SF040000
+!86 U+251C SF080000
+!87 U+2524 SF090000
+!88 U+252C SF060000
+!89 U+2534 SF070000
+!8A U+253C SF050000
+!8B U+2580 upblock
+!8C U+2584 dnblock
+!8D U+2588 block
+!8E U+258C lfblock
+!8F U+2590 rtblock
+!90 U+2591 ltshade
+!91 U+2592 shade
+!92 U+2593 dkshade
+!93 U+2320 integraltp
+!94 U+25A0 filledbox
+!95 U+2022 bullet
+!96 U+221A radical
+!97 U+2248 approxequal
+!98 U+2264 lessequal
+!99 U+2265 greaterequal
+!9A U+00A0 space
+!9B U+2321 integralbt
+!9C U+00B0 degree
+!9D U+00B2 twosuperior
+!9E U+00B7 periodcentered
+!9F U+00F7 divide
+!A0 U+2550 SF430000
+!A1 U+2551 SF240000
+!A2 U+2552 SF510000
+!A3 U+0451 afii10071
+!A4 U+0454 afii10101
+!A5 U+2554 SF390000
+!A6 U+0456 afii10103
+!A7 U+0457 afii10104
+!A8 U+2557 SF250000
+!A9 U+2558 SF500000
+!AA U+2559 SF490000
+!AB U+255A SF380000
+!AC U+255B SF280000
+!AD U+0491 afii10098
+!AE U+255D SF260000
+!AF U+255E SF360000
+!B0 U+255F SF370000
+!B1 U+2560 SF420000
+!B2 U+2561 SF190000
+!B3 U+0401 afii10023
+!B4 U+0404 afii10053
+!B5 U+2563 SF230000
+!B6 U+0406 afii10055
+!B7 U+0407 afii10056
+!B8 U+2566 SF410000
+!B9 U+2567 SF450000
+!BA U+2568 SF460000
+!BB U+2569 SF400000
+!BC U+256A SF540000
+!BD U+0490 afii10050
+!BE U+256C SF440000
+!BF U+00A9 copyright
+!C0 U+044E afii10096
+!C1 U+0430 afii10065
+!C2 U+0431 afii10066
+!C3 U+0446 afii10088
+!C4 U+0434 afii10069
+!C5 U+0435 afii10070
+!C6 U+0444 afii10086
+!C7 U+0433 afii10068
+!C8 U+0445 afii10087
+!C9 U+0438 afii10074
+!CA U+0439 afii10075
+!CB U+043A afii10076
+!CC U+043B afii10077
+!CD U+043C afii10078
+!CE U+043D afii10079
+!CF U+043E afii10080
+!D0 U+043F afii10081
+!D1 U+044F afii10097
+!D2 U+0440 afii10082
+!D3 U+0441 afii10083
+!D4 U+0442 afii10084
+!D5 U+0443 afii10085
+!D6 U+0436 afii10072
+!D7 U+0432 afii10067
+!D8 U+044C afii10094
+!D9 U+044B afii10093
+!DA U+0437 afii10073
+!DB U+0448 afii10090
+!DC U+044D afii10095
+!DD U+0449 afii10091
+!DE U+0447 afii10089
+!DF U+044A afii10092
+!E0 U+042E afii10048
+!E1 U+0410 afii10017
+!E2 U+0411 afii10018
+!E3 U+0426 afii10040
+!E4 U+0414 afii10021
+!E5 U+0415 afii10022
+!E6 U+0424 afii10038
+!E7 U+0413 afii10020
+!E8 U+0425 afii10039
+!E9 U+0418 afii10026
+!EA U+0419 afii10027
+!EB U+041A afii10028
+!EC U+041B afii10029
+!ED U+041C afii10030
+!EE U+041D afii10031
+!EF U+041E afii10032
+!F0 U+041F afii10033
+!F1 U+042F afii10049
+!F2 U+0420 afii10034
+!F3 U+0421 afii10035
+!F4 U+0422 afii10036
+!F5 U+0423 afii10037
+!F6 U+0416 afii10024
+!F7 U+0412 afii10019
+!F8 U+042C afii10046
+!F9 U+042B afii10045
+!FA U+0417 afii10025
+!FB U+0428 afii10042
+!FC U+042D afii10047
+!FD U+0429 afii10043
+!FE U+0427 afii10041
+!FF U+042A afii10044
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/makefont.php	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,411 @@
+
+#*****************************************************************************
+# Utility to generate font definition files                                   #
+# Version: 1.13                                                               #
+# Date:    2004-12-31                                                         #
+******************************************************************************#
+
+function ReadMap($enc)
+{
+	#Read a map file
+	$file=dirname(__FILE__) + '/' + $enc.downcase + '.map';
+	$a=file($file);
+	if ($a))
+		die('<B>Error:</B> encoding not found: '.$enc);
+	$cc2gn = []
+	foreach($a as $l)
+	{
+		if ($l{0}=='!')
+		{
+			$e=rtrim($l).scan('/[ \\t]+/');
+			$cc=hexdec(substr($e[0],1));
+			$gn=$e[2];
+			$cc2gn[$cc]=$gn;
+		end
+	end
+	for($i=0;$i<=255;$i++)
+	{
+		if (!$cc2gn[$i].nil?)
+			$cc2gn[$i]='.notdef';
+	end
+	return $cc2gn;
+}
+
+function ReadAFM($file,&$map)
+{
+	#Read a font metric file
+	$a=file($file);
+	if ($a.empty?)
+		die('File not found');
+	$widths = []
+	$fm = []
+	$fix=Hash.new('Edot'=>'Edotaccent','edot'=>'edotaccent','Idot'=>'Idotaccent','Zdot'=>'Zdotaccent','zdot'=>'zdotaccent',
+		'Odblacute'=>'Ohungarumlaut','odblacute'=>'ohungarumlaut','Udblacute'=>'Uhungarumlaut','udblacute'=>'uhungarumlaut',
+		'Gcedilla'=>'Gcommaaccent','gcedilla'=>'gcommaaccent','Kcedilla'=>'Kcommaaccent','kcedilla'=>'kcommaaccent',
+		'Lcedilla'=>'Lcommaaccent','lcedilla'=>'lcommaaccent','Ncedilla'=>'Ncommaaccent','ncedilla'=>'ncommaaccent',
+		'Rcedilla'=>'Rcommaaccent','rcedilla'=>'rcommaaccent','Scedilla'=>'Scommaaccent','scedilla'=>'scommaaccent',
+		'Tcedilla'=>'Tcommaaccent','tcedilla'=>'tcommaaccent','Dslash'=>'Dcroat','dslash'=>'dcroat','Dmacron'=>'Dcroat','dmacron'=>'dcroat',
+		'combininggraveaccent'=>'gravecomb','combininghookabove'=>'hookabovecomb','combiningtildeaccent'=>'tildecomb',
+		'combiningacuteaccent'=>'acutecomb','combiningdotbelow'=>'dotbelowcomb','dongsign'=>'dong');
+	foreach($a as $l)
+	{
+		$e=explode(' ',rtrim($l));
+		if ($e.length<2)
+			continue;
+		$code=$e[0];
+		$param=$e[1];
+		if ($code=='C')
+		{
+			#Character metrics
+			$cc=(int)$e[1];
+			$w=$e[4];
+			$gn=$e[7];
+			if (substr($gn,-4)=='20AC')
+				$gn='Euro';
+			if ($fix[$gn].nil?)
+			{
+				#Fix incorrect glyph name
+				foreach($map as $c=>$n)
+				{
+					if ($n==$fix[$gn])
+						$map[$c]=$gn;
+				end
+			end
+			if ($map.empty?)
+			{
+				#Symbolic font: use built-in encoding
+				$widths[$cc]=$w;
+			else
+			{
+				$widths[$gn]=$w;
+				if ($gn=='X')
+					$fm['CapXHeight']=$e[13];
+			end
+			if ($gn=='.notdef')
+				$fm['MissingWidth']=$w;
+		elsif ($code=='FontName')
+			$fm['FontName']=$param;
+		elsif ($code=='Weight')
+			$fm['Weight']=$param;
+		elsif ($code=='ItalicAngle')
+			$fm['ItalicAngle']=(double)$param;
+		elsif ($code=='Ascender')
+			$fm['Ascender']=(int)$param;
+		elsif ($code=='Descender')
+			$fm['Descender']=(int)$param;
+		elsif ($code=='UnderlineThickness')
+			$fm['UnderlineThickness']=(int)$param;
+		elsif ($code=='UnderlinePosition')
+			$fm['UnderlinePosition']=(int)$param;
+		elsif ($code=='IsFixedPitch')
+			$fm['IsFixedPitch']=($param=='true');
+		elsif ($code=='FontBBox')
+			$fm['FontBBox']=Hash.new($e[1],$e[2],$e[3],$e[4]);
+		elsif ($code=='CapHeight')
+			$fm['CapHeight']=(int)$param;
+		elsif ($code=='StdVW')
+			$fm['StdVW']=(int)$param;
+	end
+	if (!$fm['FontName'].nil?)
+		die('FontName not found');
+	if (!$map.empty?)
+	{
+		if (!$widths['.notdef'].nil?)
+			$widths['.notdef']=600;
+		if (!$widths['Delta'].nil? and $widths['increment'].nil?)
+			$widths['Delta']=$widths['increment'];
+		#Order widths according to map
+		for($i=0;$i<=255;$i++)
+		{
+			if (!$widths[$map[$i]].nil?)
+			{
+				echo '<B>Warning:</B> character '.$map[$i].' is missing<BR>';
+				$widths[$i]=$widths['.notdef'];
+			else
+				$widths[$i]=$widths[$map[$i]];
+		end
+	end
+	$fm['Widths']=$widths;
+	return $fm;
+}
+
+function MakeFontDescriptor($fm,$symbolic)
+{
+	#Ascent
+	$asc=($fm['Ascender'].nil? ? $fm['Ascender'] : 1000);
+	$fd="Hash.new('Ascent'=>".$asc;
+	#Descent
+	$desc=($fm['Descender'].nil? ? $fm['Descender'] : -200);
+	$fd<<",'Descent'=>".$desc;
+	#CapHeight
+	if ($fm['CapHeight'].nil?)
+		$ch=$fm['CapHeight'];
+	elsif ($fm['CapXHeight'].nil?)
+		$ch=$fm['CapXHeight'];
+	else
+		$ch=$asc;
+	$fd<<",'CapHeight'=>".$ch;
+	#Flags
+	$flags=0;
+	if ($fm['IsFixedPitch'].nil? and $fm['IsFixedPitch'])
+		$flags+=1<<0;
+	if ($symbolic)
+		$flags+=1<<2;
+	if (!$symbolic)
+		$flags+=1<<5;
+	if ($fm['ItalicAngle'].nil? and $fm['ItalicAngle']!=0)
+		$flags+=1<<6;
+	$fd<<",'Flags'=>".$flags;
+	#FontBBox
+	if ($fm['FontBBox'].nil?)
+		$fbb=$fm['FontBBox'];
+	else
+		$fbb=Hash.new(0,$des-100,1000,$asc+100);
+	$fd<<",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'";
+	#ItalicAngle
+	$ia=($fm['ItalicAngle'].nil? ? $fm['ItalicAngle'] : 0);
+	$fd<<",'ItalicAngle'=>".$ia;
+	#StemV
+	if ($fm['StdVW'].nil?)
+		$stemv=$fm['StdVW'];
+	elsif ($fm['Weight'].nil? and eregi('(bold|black)',$fm['Weight']))
+		$stemv=120;
+	else
+		$stemv=70;
+	$fd<<",'StemV'=>".$stemv;
+	#MissingWidth
+	if ($fm['MissingWidth'].nil?)
+		$fd<<",'MissingWidth'=>".$fm['MissingWidth'];
+	$fd<<')';
+	return $fd;
+}
+
+function MakeWidthArray($fm)
+{
+	#Make character width array
+	$s="Hash.new(\n\t";
+	$cw=$fm['Widths'];
+	for($i=0;$i<=255;$i++)
+	{
+		if ($i.chr=="'")
+			$s<<"'\\''";
+		elsif ($i.chr=="\\")
+			$s<<"'\\\\'";
+		elsif ($i>=32 and $i<=126)
+			$s<<"'".$i.chr."'";
+		else
+			$s<<"$i.chr";
+		$s<<'=>'.$fm['Widths'][$i];
+		if ($i<255)
+			$s<<',';
+		if (($i+1)%22==0)
+			$s<<"\n\t";
+	end
+	$s<<')';
+	return $s;
+}
+
+function MakeFontEncoding($map)
+{
+	#Build differences from reference encoding
+	$ref=ReadMap('cp1252');
+	$s='';
+	$last=0;
+	for($i=32;$i<=255;$i++)
+	{
+		if ($map[$i]!=$ref[$i])
+		{
+			if ($i!=$last+1)
+				$s<<$i.' ';
+			$last=$i;
+			$s<<'/'.$map[$i].' ';
+		end
+	end
+	return rtrim($s);
+}
+
+function SaveToFile($file,$s,$mode='t')
+{
+	$f=fopen($file,'w'.$mode);
+	if (!$f)
+		die('Can\'t write to file '.$file);
+	fwrite($f,$s,$s.length);
+	fclose($f);
+}
+
+function ReadShort($f)
+{
+	$a=unpack('n1n',fread($f,2));
+	return $a['n'];
+}
+
+function ReadLong($f)
+{
+	$a=unpack('N1N',fread($f,4));
+	return $a['N'];
+}
+
+function CheckTTF($file)
+{
+	#Check if font license allows embedding
+	$f=fopen($file,'rb');
+	if (!$f)
+		die('<B>Error:</B> Can\'t open '.$file);
+	#Extract number of tables
+	fseek($f,4,SEEK_CUR);
+	$nb=ReadShort($f);
+	fseek($f,6,SEEK_CUR);
+	#Seek OS/2 table
+	$found=false;
+	for($i=0;$i<$nb;$i++)
+	{
+		if (fread($f,4)=='OS/2')
+		{
+			$found=true;
+			break;
+		end
+		fseek($f,12,SEEK_CUR);
+	end
+	if (!$found)
+	{
+		fclose($f);
+		return;
+	end
+	fseek($f,4,SEEK_CUR);
+	$offset=ReadLong($f);
+	fseek($f,$offset,SEEK_SET);
+	#Extract fsType flags
+	fseek($f,8,SEEK_CUR);
+	$fsType=ReadShort($f);
+	$rl=($fsType & 0x02)!=0;
+	$pp=($fsType & 0x04)!=0;
+	$e=($fsType & 0x08)!=0;
+	fclose($f);
+	if ($rl and !$pp and !$e)
+		echo '<B>Warning:</B> font license does not allow embedding';
+}
+
+#*****************************************************************************
+# $fontfile : chemin du fichier TTF (ou chane vide si pas d'incorporation)   #
+# $afmfile :  chemin du fichier AFM                                           #
+# $enc :      encodage (ou chane vide si la police est symbolique)           #
+# $patch :    patch optionnel pour l'encodage                                 #
+# $type :     type de la police si $fontfile est vide                         #
+******************************************************************************#
+function MakeFont($fontfile,$afmfile,$enc='cp1252',$patch=Hash.new(),$type='TrueType')
+{
+	#Generate a font definition file
+	set_magic_quotes_runtime(0);
+	ini_set('auto_detect_line_endings','1');
+	if ($enc)
+	{
+		$map=ReadMap($enc);
+		foreach($patch as $cc=>$gn)
+			$map[$cc]=$gn;
+	end
+	else
+		$map = []
+	if (!file_exists($afmfile))
+		die('<B>Error:</B> AFM file not found: '.$afmfile);
+	$fm=ReadAFM($afmfile,$map);
+	if ($enc)
+		$diff=MakeFontEncoding($map);
+	else
+		$diff='';
+	$fd=MakeFontDescriptor($fm,$map.empty?);
+	#Find font type
+	if ($fontfile)
+	{
+		$ext=strtolower(substr($fontfile,-3));
+		if ($ext=='ttf')
+			$type='TrueType';
+		elsif ($ext=='pfb')
+			$type='Type1';
+		else
+			die('<B>Error:</B> unrecognized font file extension: '.$ext);
+	end
+	else
+	{
+		if ($type!='TrueType' and $type!='Type1')
+			die('<B>Error:</B> incorrect font type: '.$type);
+	end
+	#Start generation
+	$s=''."\n";
+	$s<<'$type=\''.$type."';\n";
+	$s<<'$name=\''.$fm['FontName']."';\n";
+	$s<<'$desc='.$fd.";\n";
+	if (!$fm['UnderlinePosition'].nil?)
+		$fm['UnderlinePosition']=-100;
+	if (!$fm['UnderlineThickness'].nil?)
+		$fm['UnderlineThickness']=50;
+	$s<<'$up='.$fm['UnderlinePosition'].";\n";
+	$s<<'$ut='.$fm['UnderlineThickness'].";\n";
+	$w=MakeWidthArray($fm);
+	$s<<'$cw='.$w.";\n";
+	$s<<'$enc=\''.$enc."';\n";
+	$s<<'$diff=\''.$diff."';\n";
+	$basename=substr(basename($afmfile),0,-4);
+	if ($fontfile)
+	{
+		#Embedded font
+		if (!file_exists($fontfile))
+			die('<B>Error:</B> font file not found: '.$fontfile);
+		if ($type=='TrueType')
+			CheckTTF($fontfile);
+		$f=fopen($fontfile,'rb');
+		if (!$f)
+			die('<B>Error:</B> Can\'t open '.$fontfile);
+		$file=fread($f,filesize($fontfile));
+		fclose($f);
+		if ($type=='Type1')
+		{
+			#Find first two sections and discard third one
+			$header=($file[0][0]==128);
+			if ($header)
+			{
+				#Strip first binary header
+				$file=substr($file,6);
+			end
+			$pos=$file.include?('eexec');
+			if (!$pos)
+				die('<B>Error:</B> font file does not seem to be valid Type1');
+			$size1=$pos+6;
+			if ($header and ?($file{$size1})==128)
+			{
+				#Strip second binary header
+				$file=substr($file,0,$size1).substr($file,$size1+6);
+			end
+			$pos=$file.include?('00000000');
+			if (!$pos)
+				die('<B>Error:</B> font file does not seem to be valid Type1');
+			$size2=$pos-$size1;
+			$file=substr($file,0,$size1+$size2);
+		end
+		if (respond_to('gzcompress'))
+		{
+			$cmp=$basename.'.z';
+			SaveToFile($cmp,gzcompress($file),'b');
+			$s<<'$file=\''.$cmp."';\n";
+			echo 'Font file compressed ('.$cmp.')<BR>';
+		else
+		{
+			$s<<'$file=\''.basename($fontfile)."';\n";
+			echo '<B>Notice:</B> font file could not be compressed (zlib extension not available)<BR>';
+		end
+		if ($type=='Type1')
+		{
+			$s<<'$size1='.$size1.";\n";
+			$s<<'$size2='.$size2.";\n";
+		else
+			$s<<'$originalsize='.filesize($fontfile).";\n";
+	end
+	else
+	{
+		#Not embedded font
+		$s<<'$file='."'';\n";
+	end
+	$s<<"\n";
+	SaveToFile($basename.'.rb',$s);
+	echo 'Font definition file generated ('.$basename.'.rb'.')<BR>';
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/sjis.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,834 @@
+TCPDFFontDescriptor.define('sjis') do |font|
+  font[:type]='Type0';
+  font[:name]='KozMinPro-Regular-Acro';
+  font[:desc]={'Ascent'=>995,'Descent'=>-203,'CapHeight'=>6,'Flags'=>32,'FontBBox'=>'[-50 -203 1041 995]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>1000}
+  font[:up]=-120;
+  font[:ut]=40
+  font[:cMap]='90msp-RKSJ-H'
+  font[:cw]={
+	0=>1000, 32=>500, 33=>500, 34=>500, 35=>500, 36=>500, 37=>500, 38=>500, 39=>500, 40=>500, 41=>500, 42=>500, 43=>500, 44=>500, 45=>500, 46=>500, 
+	47=>500, 48=>500, 49=>500, 50=>500, 51=>500, 52=>500, 53=>500, 54=>500, 55=>500, 56=>500, 57=>500, 58=>500, 59=>500, 60=>500, 61=>500, 62=>500, 
+	63=>500, 64=>500, 65=>500, 66=>500, 67=>500, 68=>500, 69=>500, 70=>500, 71=>500, 72=>500, 73=>500, 74=>500, 75=>500, 76=>500, 77=>500, 78=>500, 
+	79=>500, 80=>500, 81=>500, 82=>500, 83=>500, 84=>500, 85=>500, 86=>500, 87=>500, 88=>500, 89=>500, 90=>500, 91=>500, 92=>500, 93=>500, 94=>500, 
+	95=>500, 96=>500, 97=>500, 98=>500, 99=>500, 100=>500, 101=>500, 102=>500, 103=>500, 104=>500, 105=>500, 106=>500, 107=>500, 108=>500, 109=>500, 110=>500, 
+	111=>500, 112=>500, 113=>500, 114=>500, 115=>500, 116=>500, 117=>500, 118=>500, 119=>500, 120=>500, 121=>500, 122=>500, 123=>500, 124=>500, 125=>500, 126=>500, 
+	8364=>1000, 402=>500, 8230=>1000, 8224=>1000, 8225=>1000, 710=>500, 8240=>1000, 338=>875, 8216=>1000, 8217=>1000, 8220=>1000, 8221=>1000, 732=>500, 339=>875, 160=>446, 161=>500, 
+	162=>500, 163=>500, 164=>1000, 165=>500, 166=>500, 167=>1000, 168=>1000, 169=>500, 170=>500, 171=>500, 172=>490, 173=>500, 174=>500, 175=>500, 176=>1000, 177=>1000, 
+	178=>500, 179=>500, 180=>1000, 181=>500, 182=>1000, 183=>500, 184=>500, 185=>500, 186=>500, 187=>500, 188=>500, 189=>500, 190=>500, 191=>500, 192=>500, 193=>500, 
+	194=>500, 195=>500, 196=>500, 197=>500, 198=>875, 199=>500, 200=>500, 201=>500, 202=>500, 203=>500, 204=>500, 205=>500, 206=>500, 207=>500, 208=>500, 209=>500, 
+	210=>500, 211=>500, 212=>500, 213=>500, 214=>500, 215=>1000, 216=>500, 217=>500, 218=>500, 219=>500, 220=>500, 221=>500, 222=>500, 223=>500, 224=>500, 225=>500, 
+	226=>500, 227=>500, 228=>500, 229=>500, 230=>813, 231=>500, 232=>500, 233=>500, 234=>500, 235=>500, 236=>500, 237=>500, 238=>500, 239=>500, 240=>500, 241=>500, 
+	242=>500, 243=>500, 244=>500, 245=>500, 246=>500, 247=>1000, 248=>500, 249=>500, 250=>500, 251=>500, 252=>500, 253=>500, 254=>500, 255=>500, 305=>500, 321=>500, 
+	322=>500, 331=>500, 593=>500, 602=>500, 658=>500, 711=>500, 714=>500, 715=>500, 728=>500, 730=>500, 913=>1000, 914=>1000, 915=>1000, 916=>1000, 917=>1000, 918=>1000, 
+	919=>1000, 920=>1000, 921=>1000, 922=>1000, 923=>1000, 924=>1000, 925=>1000, 926=>1000, 927=>1000, 928=>1000, 929=>1000, 931=>1000, 932=>1000, 933=>1000, 934=>1000, 935=>1000, 
+	936=>1000, 937=>1000, 945=>1000, 946=>1000, 947=>1000, 948=>1000, 949=>1000, 950=>1000, 951=>1000, 952=>1000, 953=>1000, 954=>1000, 955=>1000, 956=>1000, 957=>1000, 958=>1000, 
+	959=>1000, 960=>1000, 961=>1000, 962=>1000, 963=>1000, 964=>1000, 965=>1000, 966=>1000, 967=>1000, 968=>1000, 969=>1000, 977=>1000, 981=>1000, 1025=>1000, 1040=>1000, 1041=>1000, 
+	1042=>1000, 1043=>1000, 1044=>1000, 1045=>1000, 1046=>1000, 1047=>1000, 1048=>1000, 1049=>1000, 1050=>1000, 1051=>1000, 1052=>1000, 1053=>1000, 1054=>1000, 1055=>1000, 1056=>1000, 1057=>1000, 
+	1058=>1000, 1059=>1000, 1060=>1000, 1061=>1000, 1062=>1000, 1063=>1000, 1064=>1000, 1065=>1000, 1066=>1000, 1067=>1000, 1068=>1000, 1069=>1000, 1070=>1000, 1071=>1000, 1072=>1000, 1073=>1000, 
+	1074=>1000, 1075=>1000, 1076=>1000, 1077=>1000, 1078=>1000, 1079=>1000, 1080=>1000, 1081=>1000, 1082=>1000, 1083=>1000, 1084=>1000, 1085=>1000, 1086=>1000, 1087=>1000, 1088=>1000, 1089=>1000, 
+	1090=>1000, 1091=>1000, 1092=>1000, 1093=>1000, 1094=>1000, 1095=>1000, 1096=>1000, 1097=>1000, 1098=>1000, 1099=>1000, 1100=>1000, 1101=>1000, 1102=>1000, 1103=>1000, 1105=>1000, 8195=>915, 
+	8208=>1000, 8213=>1000, 8214=>915, 8215=>500, 8229=>1000, 8242=>1000, 8243=>1000, 8251=>1000, 8254=>766, 8451=>1000, 8467=>1000, 8470=>915, 8481=>1000, 8491=>1000, 8544=>915, 8545=>915, 
+	8546=>915, 8547=>915, 8548=>915, 8549=>915, 8550=>915, 8551=>915, 8552=>915, 8553=>915, 8592=>1000, 8593=>1000, 8594=>1000, 8595=>1000, 8658=>1000, 8660=>1000, 8704=>1000, 8706=>1000, 
+	8707=>1000, 8711=>1000, 8712=>1000, 8715=>1000, 8722=>915, 8730=>1000, 8733=>1000, 8734=>1000, 8735=>915, 8736=>1000, 8741=>1000, 8743=>1000, 8744=>1000, 8745=>1000, 8746=>1000, 8747=>1000, 
+	8748=>1000, 8749=>1000, 8750=>915, 8756=>1000, 8757=>1000, 8765=>1000, 8771=>1000, 8786=>1000, 8800=>1000, 8801=>1000, 8806=>1000, 8807=>1000, 8810=>1000, 8811=>1000, 8818=>977, 8819=>977, 
+	8834=>1000, 8835=>1000, 8838=>1000, 8839=>1000, 8869=>1000, 8895=>915, 8978=>1000, 9312=>1000, 9313=>1000, 9314=>1000, 9315=>1000, 9316=>1000, 9317=>1000, 9318=>1000, 9319=>1000, 9320=>1000, 
+	9321=>1000, 9322=>1000, 9323=>1000, 9324=>1000, 9325=>1000, 9326=>1000, 9327=>1000, 9328=>1000, 9329=>1000, 9330=>1000, 9331=>1000, 9472=>1000, 9473=>1000, 9474=>1000, 9475=>1000, 9484=>1000, 
+	9487=>1000, 9488=>1000, 9491=>1000, 9492=>1000, 9495=>1000, 9496=>1000, 9499=>1000, 9500=>1000, 9501=>1000, 9504=>1000, 9507=>1000, 9508=>1000, 9509=>1000, 9512=>1000, 9515=>1000, 9516=>1000, 
+	9519=>1000, 9520=>1000, 9523=>1000, 9524=>1000, 9527=>1000, 9528=>1000, 9531=>1000, 9532=>1000, 9535=>1000, 9538=>1000, 9547=>1000, 9632=>1000, 9633=>1000, 9634=>977, 9650=>1000, 9651=>1000, 
+	9660=>1000, 9661=>1000, 9670=>1000, 9671=>1000, 9675=>1000, 9678=>1000, 9679=>1000, 9711=>1000, 9733=>1000, 9734=>1000, 9792=>1000, 9794=>1000, 9825=>977, 9826=>977, 9828=>977, 9831=>977, 
+	9834=>1000, 9837=>1000, 9839=>1000, 12288=>1000, 12289=>1000, 12290=>1000, 12291=>1000, 12293=>1000, 12294=>1000, 12295=>1000, 12296=>1000, 12297=>1000, 12298=>1000, 12299=>1000, 12300=>1000, 12301=>1000, 
+	12302=>1000, 12303=>1000, 12304=>1000, 12305=>1000, 12306=>1000, 12307=>1000, 12308=>1000, 12309=>1000, 12316=>1000, 12339=>1000, 12340=>1000, 12341=>1000, 12353=>1000, 12354=>1000, 12355=>1000, 12356=>1000, 
+	12357=>1000, 12358=>1000, 12359=>1000, 12360=>1000, 12361=>1000, 12362=>1000, 12363=>1000, 12364=>1000, 12365=>1000, 12366=>1000, 12367=>1000, 12368=>1000, 12369=>1000, 12370=>1000, 12371=>1000, 12372=>1000, 
+	12373=>1000, 12374=>1000, 12375=>1000, 12376=>1000, 12377=>1000, 12378=>1000, 12379=>1000, 12380=>1000, 12381=>1000, 12382=>1000, 12383=>1000, 12384=>1000, 12385=>1000, 12386=>1000, 12387=>1000, 12388=>1000, 
+	12389=>1000, 12390=>1000, 12391=>1000, 12392=>1000, 12393=>1000, 12394=>1000, 12395=>1000, 12396=>1000, 12397=>1000, 12398=>1000, 12399=>1000, 12400=>1000, 12401=>1000, 12402=>1000, 12403=>1000, 12404=>1000, 
+	12405=>1000, 12406=>1000, 12407=>1000, 12408=>1000, 12409=>1000, 12410=>1000, 12411=>1000, 12412=>1000, 12413=>1000, 12414=>1000, 12415=>1000, 12416=>1000, 12417=>1000, 12418=>1000, 12419=>1000, 12420=>1000, 
+	12421=>1000, 12422=>1000, 12423=>1000, 12424=>1000, 12425=>1000, 12426=>1000, 12427=>1000, 12428=>1000, 12429=>1000, 12430=>1000, 12431=>1000, 12432=>1000, 12433=>1000, 12434=>1000, 12435=>1000, 12436=>1000, 
+	12437=>1000, 12438=>1000, 12443=>1000, 12444=>1000, 12445=>1000, 12446=>1000, 12449=>1000, 12450=>1000, 12451=>1000, 12452=>1000, 12453=>1000, 12454=>1000, 12455=>1000, 12456=>1000, 12457=>1000, 12458=>1000, 
+	12459=>1000, 12460=>1000, 12461=>1000, 12462=>1000, 12463=>1000, 12464=>1000, 12465=>1000, 12466=>1000, 12467=>1000, 12468=>1000, 12469=>1000, 12470=>1000, 12471=>1000, 12472=>1000, 12473=>1000, 12474=>1000, 
+	12475=>1000, 12476=>1000, 12477=>1000, 12478=>1000, 12479=>1000, 12480=>1000, 12481=>1000, 12482=>1000, 12483=>1000, 12484=>1000, 12485=>1000, 12486=>1000, 12487=>1000, 12488=>1000, 12489=>1000, 12490=>1000, 
+	12491=>1000, 12492=>1000, 12493=>1000, 12494=>1000, 12495=>1000, 12496=>1000, 12497=>1000, 12498=>1000, 12499=>1000, 12500=>1000, 12501=>1000, 12502=>1000, 12503=>1000, 12504=>1000, 12505=>1000, 12506=>1000, 
+	12507=>1000, 12508=>1000, 12509=>1000, 12510=>1000, 12511=>1000, 12512=>1000, 12513=>1000, 12514=>1000, 12515=>1000, 12516=>1000, 12517=>1000, 12518=>1000, 12519=>1000, 12520=>1000, 12521=>1000, 12522=>1000, 
+	12523=>1000, 12524=>1000, 12525=>1000, 12526=>1000, 12527=>1000, 12528=>1000, 12529=>1000, 12530=>1000, 12531=>1000, 12532=>1000, 12533=>1000, 12534=>1000, 12535=>1000, 12536=>1000, 12537=>1000, 12538=>1000, 
+	12539=>1000, 12540=>1000, 12541=>1000, 12542=>1000, 12849=>1000, 12850=>915, 12857=>915, 12964=>915, 12965=>915, 12966=>915, 12967=>915, 12968=>915, 13059=>915, 13069=>915, 13076=>915, 13080=>915, 
+	13090=>915, 13091=>915, 13094=>915, 13095=>915, 13099=>915, 13110=>915, 13115=>915, 13129=>915, 13130=>915, 13133=>915, 13137=>915, 13143=>915, 13179=>915, 13180=>915, 13181=>915, 13182=>915, 
+	13198=>915, 13199=>915, 13212=>915, 13213=>915, 13214=>915, 13217=>915, 13252=>915, 13259=>1000, 13261=>915, 19968=>1000, 19969=>1000, 19970=>1000, 19971=>1000, 19972=>1000, 19973=>1000, 19975=>1000, 
+	19976=>1000, 19977=>1000, 19978=>1000, 19979=>1000, 19980=>1000, 19981=>1000, 19982=>1000, 19984=>1000, 19985=>1000, 19986=>1000, 19988=>1000, 19989=>1000, 19990=>1000, 19991=>1000, 19992=>1000, 19993=>1000, 
+	19998=>1000, 19999=>1000, 20001=>1000, 20003=>1000, 20004=>1000, 20006=>1000, 20008=>1000, 20010=>1000, 20011=>1000, 20013=>1000, 20014=>1000, 20015=>1000, 20016=>1000, 20017=>1000, 20018=>1000, 20021=>1000, 
+	20022=>1000, 20024=>1000, 20025=>1000, 20027=>1000, 20028=>1000, 20031=>1000, 20032=>1000, 20033=>1000, 20034=>1000, 20035=>1000, 20036=>1000, 20037=>1000, 20039=>1000, 20043=>1000, 20045=>1000, 20046=>1000, 
+	20047=>1000, 20049=>1000, 20053=>1000, 20054=>1000, 20055=>1000, 20056=>1000, 20057=>1000, 20058=>1000, 20060=>1000, 20061=>1000, 20062=>1000, 20063=>1000, 20066=>1000, 20067=>1000, 20072=>1000, 20073=>1000, 
+	20081=>1000, 20083=>1000, 20084=>1000, 20085=>1000, 20089=>1000, 20094=>1000, 20095=>1000, 20096=>1000, 20098=>1000, 20101=>1000, 20102=>1000, 20104=>1000, 20105=>1000, 20106=>1000, 20107=>1000, 20108=>1000, 
+	20109=>1000, 20110=>1000, 20113=>1000, 20114=>1000, 20116=>1000, 20117=>1000, 20118=>1000, 20119=>1000, 20120=>1000, 20121=>1000, 20123=>1000, 20124=>1000, 20125=>1000, 20126=>1000, 20127=>1000, 20128=>1000, 
+	20129=>1000, 20130=>1000, 20132=>1000, 20133=>1000, 20134=>1000, 20136=>1000, 20139=>1000, 20140=>1000, 20141=>1000, 20142=>1000, 20143=>1000, 20144=>1000, 20147=>1000, 20150=>1000, 20153=>1000, 20154=>1000, 
+	20160=>1000, 20161=>1000, 20162=>1000, 20163=>1000, 20164=>1000, 20166=>1000, 20167=>1000, 20170=>1000, 20171=>1000, 20173=>1000, 20174=>1000, 20175=>1000, 20176=>1000, 20180=>1000, 20181=>1000, 20182=>1000, 
+	20183=>1000, 20184=>1000, 20185=>1000, 20186=>1000, 20187=>1000, 20189=>1000, 20190=>1000, 20191=>1000, 20192=>1000, 20193=>1000, 20194=>1000, 20195=>1000, 20196=>1000, 20197=>1000, 20200=>1000, 20205=>1000, 
+	20206=>1000, 20207=>1000, 20208=>1000, 20209=>1000, 20210=>1000, 20211=>1000, 20213=>1000, 20214=>1000, 20215=>1000, 20219=>1000, 20220=>1000, 20221=>1000, 20222=>1000, 20223=>1000, 20224=>1000, 20225=>1000, 
+	20226=>1000, 20227=>1000, 20232=>1000, 20233=>1000, 20234=>1000, 20235=>1000, 20236=>1000, 20237=>1000, 20238=>1000, 20239=>1000, 20240=>1000, 20241=>1000, 20242=>1000, 20245=>1000, 20246=>1000, 20247=>1000, 
+	20249=>1000, 20250=>1000, 20252=>1000, 20253=>1000, 20270=>1000, 20271=>1000, 20272=>1000, 20273=>1000, 20275=>1000, 20276=>1000, 20277=>1000, 20278=>1000, 20279=>1000, 20280=>1000, 20281=>1000, 20282=>1000, 
+	20283=>1000, 20284=>1000, 20285=>1000, 20286=>1000, 20288=>1000, 20290=>1000, 20291=>1000, 20294=>1000, 20295=>1000, 20296=>1000, 20297=>1000, 20299=>1000, 20300=>1000, 20301=>1000, 20302=>1000, 20303=>1000, 
+	20304=>1000, 20305=>1000, 20306=>1000, 20307=>1000, 20308=>1000, 20309=>1000, 20310=>1000, 20311=>1000, 20312=>1000, 20313=>1000, 20314=>1000, 20315=>1000, 20316=>1000, 20317=>1000, 20318=>1000, 20319=>1000, 
+	20320=>1000, 20323=>1000, 20329=>1000, 20330=>1000, 20332=>1000, 20334=>1000, 20335=>1000, 20336=>1000, 20337=>1000, 20339=>1000, 20341=>1000, 20342=>1000, 20343=>1000, 20344=>1000, 20345=>1000, 20346=>1000, 
+	20347=>1000, 20348=>1000, 20349=>1000, 20350=>1000, 20351=>1000, 20353=>1000, 20354=>1000, 20355=>1000, 20356=>1000, 20357=>1000, 20358=>1000, 20360=>1000, 20361=>1000, 20362=>1000, 20363=>1000, 20364=>1000, 
+	20365=>1000, 20366=>1000, 20367=>1000, 20368=>1000, 20369=>1000, 20370=>1000, 20371=>1000, 20372=>1000, 20374=>1000, 20375=>1000, 20376=>1000, 20377=>1000, 20378=>1000, 20379=>1000, 20381=>1000, 20382=>1000, 
+	20383=>1000, 20384=>1000, 20385=>1000, 20395=>1000, 20397=>1000, 20398=>1000, 20399=>1000, 20402=>1000, 20405=>1000, 20406=>1000, 20407=>1000, 20409=>1000, 20411=>1000, 20412=>1000, 20413=>1000, 20414=>1000, 
+	20415=>1000, 20416=>1000, 20417=>1000, 20418=>1000, 20419=>1000, 20420=>1000, 20421=>1000, 20422=>1000, 20424=>1000, 20425=>1000, 20426=>1000, 20427=>1000, 20428=>1000, 20429=>1000, 20430=>1000, 20431=>1000, 
+	20432=>1000, 20433=>1000, 20434=>1000, 20436=>1000, 20439=>1000, 20440=>1000, 20442=>1000, 20443=>1000, 20444=>1000, 20445=>1000, 20447=>1000, 20448=>1000, 20449=>1000, 20450=>1000, 20451=>1000, 20452=>1000, 
+	20453=>1000, 20462=>1000, 20463=>1000, 20464=>1000, 20466=>1000, 20467=>1000, 20469=>1000, 20470=>1000, 20472=>1000, 20474=>1000, 20476=>1000, 20477=>1000, 20478=>1000, 20479=>1000, 20480=>1000, 20481=>1000, 
+	20484=>1000, 20485=>1000, 20486=>1000, 20487=>1000, 20489=>1000, 20490=>1000, 20491=>1000, 20492=>1000, 20493=>1000, 20494=>1000, 20495=>1000, 20496=>1000, 20497=>1000, 20498=>1000, 20499=>1000, 20500=>1000, 
+	20502=>1000, 20503=>1000, 20504=>1000, 20505=>1000, 20506=>1000, 20507=>1000, 20508=>1000, 20509=>1000, 20510=>1000, 20511=>1000, 20513=>1000, 20514=>1000, 20515=>1000, 20516=>1000, 20517=>1000, 20518=>1000, 
+	20519=>1000, 20520=>1000, 20521=>1000, 20522=>1000, 20523=>1000, 20524=>1000, 20525=>1000, 20526=>1000, 20528=>1000, 20530=>1000, 20531=>1000, 20533=>1000, 20534=>1000, 20537=>1000, 20539=>1000, 20544=>1000, 
+	20545=>1000, 20546=>1000, 20547=>1000, 20549=>1000, 20550=>1000, 20551=>1000, 20552=>1000, 20553=>1000, 20554=>1000, 20556=>1000, 20558=>1000, 20559=>1000, 20560=>1000, 20561=>1000, 20562=>1000, 20563=>1000, 
+	20565=>1000, 20566=>1000, 20567=>1000, 20569=>1000, 20570=>1000, 20572=>1000, 20575=>1000, 20576=>1000, 20578=>1000, 20579=>1000, 20581=>1000, 20582=>1000, 20583=>1000, 20586=>1000, 20588=>1000, 20589=>1000, 
+	20592=>1000, 20593=>1000, 20594=>1000, 20596=>1000, 20597=>1000, 20598=>1000, 20600=>1000, 20605=>1000, 20608=>1000, 20609=>1000, 20611=>1000, 20612=>1000, 20613=>1000, 20614=>1000, 20618=>1000, 20621=>1000, 
+	20622=>1000, 20623=>1000, 20624=>1000, 20625=>1000, 20626=>1000, 20627=>1000, 20628=>1000, 20630=>1000, 20632=>1000, 20633=>1000, 20634=>1000, 20635=>1000, 20636=>1000, 20638=>1000, 20639=>1000, 20640=>1000, 
+	20641=>1000, 20642=>1000, 20650=>1000, 20652=>1000, 20653=>1000, 20655=>1000, 20656=>1000, 20658=>1000, 20659=>1000, 20660=>1000, 20661=>1000, 20663=>1000, 20665=>1000, 20666=>1000, 20669=>1000, 20670=>1000, 
+	20672=>1000, 20674=>1000, 20675=>1000, 20676=>1000, 20677=>1000, 20679=>1000, 20681=>1000, 20682=>1000, 20684=>1000, 20685=>1000, 20686=>1000, 20687=>1000, 20688=>1000, 20689=>1000, 20691=>1000, 20692=>1000, 
+	20693=>1000, 20694=>1000, 20696=>1000, 20698=>1000, 20700=>1000, 20701=>1000, 20702=>1000, 20703=>1000, 20706=>1000, 20707=>1000, 20708=>1000, 20709=>1000, 20710=>1000, 20711=>1000, 20712=>1000, 20713=>1000, 
+	20717=>1000, 20718=>1000, 20719=>1000, 20721=>1000, 20722=>1000, 20724=>1000, 20725=>1000, 20726=>1000, 20729=>1000, 20730=>1000, 20731=>1000, 20734=>1000, 20736=>1000, 20737=>1000, 20738=>1000, 20739=>1000, 
+	20740=>1000, 20742=>1000, 20743=>1000, 20744=>1000, 20745=>1000, 20747=>1000, 20748=>1000, 20749=>1000, 20750=>1000, 20752=>1000, 20754=>1000, 20756=>1000, 20757=>1000, 20758=>1000, 20759=>1000, 20760=>1000, 
+	20761=>1000, 20762=>1000, 20763=>1000, 20764=>1000, 20765=>1000, 20766=>1000, 20767=>1000, 20769=>1000, 20771=>1000, 20775=>1000, 20776=>1000, 20778=>1000, 20780=>1000, 20781=>1000, 20783=>1000, 20785=>1000, 
+	20786=>1000, 20787=>1000, 20788=>1000, 20789=>1000, 20791=>1000, 20792=>1000, 20793=>1000, 20794=>1000, 20795=>1000, 20796=>1000, 20799=>1000, 20800=>1000, 20801=>1000, 20802=>1000, 20803=>1000, 20804=>1000, 
+	20805=>1000, 20806=>1000, 20807=>1000, 20808=>1000, 20809=>1000, 20810=>1000, 20811=>1000, 20812=>1000, 20813=>1000, 20814=>1000, 20815=>1000, 20816=>1000, 20818=>1000, 20819=>1000, 20820=>1000, 20821=>1000, 
+	20823=>1000, 20824=>1000, 20826=>1000, 20828=>1000, 20831=>1000, 20834=>1000, 20836=>1000, 20837=>1000, 20838=>1000, 20840=>1000, 20841=>1000, 20842=>1000, 20843=>1000, 20844=>1000, 20845=>1000, 20846=>1000, 
+	20849=>1000, 20853=>1000, 20854=>1000, 20855=>1000, 20856=>1000, 20860=>1000, 20862=>1000, 20864=>1000, 20866=>1000, 20867=>1000, 20868=>1000, 20869=>1000, 20870=>1000, 20873=>1000, 20874=>1000, 20875=>1000, 
+	20876=>1000, 20877=>1000, 20878=>1000, 20879=>1000, 20880=>1000, 20881=>1000, 20882=>1000, 20883=>1000, 20885=>1000, 20886=>1000, 20887=>1000, 20888=>1000, 20889=>1000, 20893=>1000, 20896=>1000, 20897=>1000, 
+	20898=>1000, 20899=>1000, 20900=>1000, 20901=>1000, 20902=>1000, 20904=>1000, 20905=>1000, 20906=>1000, 20907=>1000, 20908=>1000, 20909=>1000, 20912=>1000, 20913=>1000, 20914=>1000, 20915=>1000, 20916=>1000, 
+	20917=>1000, 20918=>1000, 20919=>1000, 20920=>1000, 20922=>1000, 20924=>1000, 20925=>1000, 20926=>1000, 20927=>1000, 20930=>1000, 20932=>1000, 20933=>1000, 20934=>1000, 20936=>1000, 20937=>1000, 20939=>1000, 
+	20940=>1000, 20941=>1000, 20943=>1000, 20945=>1000, 20946=>1000, 20947=>1000, 20949=>1000, 20950=>1000, 20952=>1000, 20955=>1000, 20956=>1000, 20957=>1000, 20958=>1000, 20960=>1000, 20961=>1000, 20962=>1000, 
+	20965=>1000, 20966=>1000, 20967=>1000, 20969=>1000, 20970=>1000, 20972=>1000, 20973=>1000, 20974=>1000, 20976=>1000, 20977=>1000, 20978=>1000, 20979=>1000, 20980=>1000, 20981=>1000, 20982=>1000, 20983=>1000, 
+	20984=>1000, 20985=>1000, 20986=>1000, 20989=>1000, 20990=>1000, 20992=>1000, 20993=>1000, 20994=>1000, 20995=>1000, 20996=>1000, 20997=>1000, 20998=>1000, 20999=>1000, 21000=>1000, 21002=>1000, 21003=>1000, 
+	21006=>1000, 21009=>1000, 21010=>1000, 21011=>1000, 21012=>1000, 21013=>1000, 21014=>1000, 21015=>1000, 21016=>1000, 21021=>1000, 21026=>1000, 21028=>1000, 21029=>1000, 21031=>1000, 21032=>1000, 21033=>1000, 
+	21034=>1000, 21038=>1000, 21040=>1000, 21041=>1000, 21042=>1000, 21043=>1000, 21045=>1000, 21046=>1000, 21047=>1000, 21048=>1000, 21049=>1000, 21050=>1000, 21051=>1000, 21052=>1000, 21059=>1000, 21060=>1000, 
+	21061=>1000, 21063=>1000, 21065=>1000, 21066=>1000, 21067=>1000, 21068=>1000, 21069=>1000, 21071=>1000, 21076=>1000, 21077=>1000, 21078=>1000, 21079=>1000, 21080=>1000, 21082=>1000, 21083=>1000, 21084=>1000, 
+	21086=>1000, 21087=>1000, 21088=>1000, 21089=>1000, 21091=>1000, 21092=>1000, 21093=>1000, 21094=>1000, 21097=>1000, 21098=>1000, 21102=>1000, 21103=>1000, 21104=>1000, 21105=>1000, 21106=>1000, 21107=>1000, 
+	21108=>1000, 21109=>1000, 21111=>1000, 21112=>1000, 21113=>1000, 21117=>1000, 21119=>1000, 21120=>1000, 21122=>1000, 21123=>1000, 21125=>1000, 21127=>1000, 21128=>1000, 21129=>1000, 21130=>1000, 21132=>1000, 
+	21133=>1000, 21137=>1000, 21138=>1000, 21139=>1000, 21140=>1000, 21141=>1000, 21142=>1000, 21143=>1000, 21144=>1000, 21146=>1000, 21147=>1000, 21148=>1000, 21151=>1000, 21152=>1000, 21155=>1000, 21156=>1000, 
+	21157=>1000, 21158=>1000, 21159=>1000, 21161=>1000, 21162=>1000, 21163=>1000, 21164=>1000, 21165=>1000, 21167=>1000, 21168=>1000, 21169=>1000, 21172=>1000, 21173=>1000, 21174=>1000, 21175=>1000, 21176=>1000, 
+	21177=>1000, 21178=>1000, 21179=>1000, 21180=>1000, 21181=>1000, 21182=>1000, 21184=>1000, 21185=>1000, 21187=>1000, 21188=>1000, 21189=>1000, 21190=>1000, 21191=>1000, 21192=>1000, 21193=>1000, 21196=>1000, 
+	21197=>1000, 21199=>1000, 21201=>1000, 21202=>1000, 21204=>1000, 21205=>1000, 21206=>1000, 21207=>1000, 21208=>1000, 21209=>1000, 21211=>1000, 21212=>1000, 21213=>1000, 21214=>1000, 21215=>1000, 21216=>1000, 
+	21217=>1000, 21218=>1000, 21219=>1000, 21220=>1000, 21221=>1000, 21222=>1000, 21223=>1000, 21224=>1000, 21225=>1000, 21226=>1000, 21228=>1000, 21232=>1000, 21233=>1000, 21234=>1000, 21235=>1000, 21236=>1000, 
+	21237=>1000, 21238=>1000, 21239=>1000, 21240=>1000, 21241=>1000, 21242=>1000, 21246=>1000, 21247=>1000, 21248=>1000, 21249=>1000, 21250=>1000, 21251=>1000, 21253=>1000, 21254=>1000, 21255=>1000, 21256=>1000, 
+	21258=>1000, 21259=>1000, 21260=>1000, 21261=>1000, 21263=>1000, 21264=>1000, 21265=>1000, 21267=>1000, 21269=>1000, 21270=>1000, 21271=>1000, 21272=>1000, 21273=>1000, 21274=>1000, 21275=>1000, 21276=>1000, 
+	21277=>1000, 21278=>1000, 21279=>1000, 21280=>1000, 21281=>1000, 21283=>1000, 21284=>1000, 21285=>1000, 21287=>1000, 21288=>1000, 21289=>1000, 21290=>1000, 21291=>1000, 21292=>1000, 21293=>1000, 21295=>1000, 
+	21296=>1000, 21297=>1000, 21298=>1000, 21299=>1000, 21301=>1000, 21304=>1000, 21305=>1000, 21306=>1000, 21307=>1000, 21308=>1000, 21309=>1000, 21310=>1000, 21311=>1000, 21312=>1000, 21313=>1000, 21314=>1000, 
+	21315=>1000, 21317=>1000, 21318=>1000, 21319=>1000, 21320=>1000, 21321=>1000, 21322=>1000, 21323=>1000, 21324=>1000, 21325=>1000, 21329=>1000, 21330=>1000, 21331=>1000, 21332=>1000, 21335=>1000, 21336=>1000, 
+	21337=>1000, 21338=>1000, 21339=>1000, 21340=>1000, 21342=>1000, 21344=>1000, 21345=>1000, 21347=>1000, 21349=>1000, 21350=>1000, 21353=>1000, 21356=>1000, 21357=>1000, 21358=>1000, 21359=>1000, 21360=>1000, 
+	21361=>1000, 21362=>1000, 21363=>1000, 21364=>1000, 21365=>1000, 21367=>1000, 21368=>1000, 21369=>1000, 21371=>1000, 21374=>1000, 21375=>1000, 21378=>1000, 21379=>1000, 21380=>1000, 21383=>1000, 21384=>1000, 
+	21390=>1000, 21395=>1000, 21396=>1000, 21398=>1000, 21400=>1000, 21401=>1000, 21402=>1000, 21405=>1000, 21407=>1000, 21408=>1000, 21409=>1000, 21412=>1000, 21413=>1000, 21414=>1000, 21416=>1000, 21417=>1000, 
+	21418=>1000, 21419=>1000, 21421=>1000, 21422=>1000, 21423=>1000, 21424=>1000, 21426=>1000, 21427=>1000, 21428=>1000, 21429=>1000, 21430=>1000, 21431=>1000, 21432=>1000, 21434=>1000, 21435=>1000, 21437=>1000, 
+	21440=>1000, 21442=>1000, 21443=>1000, 21445=>1000, 21448=>1000, 21449=>1000, 21450=>1000, 21451=>1000, 21452=>1000, 21453=>1000, 21454=>1000, 21455=>1000, 21458=>1000, 21459=>1000, 21460=>1000, 21461=>1000, 
+	21462=>1000, 21463=>1000, 21465=>1000, 21466=>1000, 21467=>1000, 21469=>1000, 21470=>1000, 21471=>1000, 21472=>1000, 21473=>1000, 21474=>1000, 21475=>1000, 21476=>1000, 21477=>1000, 21478=>1000, 21479=>1000, 
+	21480=>1000, 21481=>1000, 21482=>1000, 21483=>1000, 21484=>1000, 21485=>1000, 21486=>1000, 21487=>1000, 21488=>1000, 21489=>1000, 21490=>1000, 21491=>1000, 21493=>1000, 21494=>1000, 21495=>1000, 21496=>1000, 
+	21498=>1000, 21505=>1000, 21506=>1000, 21507=>1000, 21508=>1000, 21512=>1000, 21513=>1000, 21514=>1000, 21515=>1000, 21516=>1000, 21517=>1000, 21518=>1000, 21519=>1000, 21520=>1000, 21521=>1000, 21523=>1000, 
+	21530=>1000, 21531=>1000, 21533=>1000, 21535=>1000, 21536=>1000, 21537=>1000, 21542=>1000, 21543=>1000, 21544=>1000, 21545=>1000, 21546=>1000, 21547=>1000, 21548=>1000, 21549=>1000, 21550=>1000, 21551=>1000, 
+	21553=>1000, 21556=>1000, 21557=>1000, 21558=>1000, 21560=>1000, 21561=>1000, 21563=>1000, 21564=>1000, 21565=>1000, 21566=>1000, 21568=>1000, 21570=>1000, 21571=>1000, 21572=>1000, 21574=>1000, 21575=>1000, 
+	21576=>1000, 21577=>1000, 21578=>1000, 21581=>1000, 21582=>1000, 21583=>1000, 21585=>1000, 21598=>1000, 21599=>1000, 21602=>1000, 21604=>1000, 21606=>1000, 21607=>1000, 21608=>1000, 21609=>1000, 21610=>1000, 
+	21611=>1000, 21613=>1000, 21614=>1000, 21616=>1000, 21617=>1000, 21619=>1000, 21620=>1000, 21621=>1000, 21622=>1000, 21623=>1000, 21627=>1000, 21628=>1000, 21629=>1000, 21631=>1000, 21632=>1000, 21633=>1000, 
+	21635=>1000, 21636=>1000, 21637=>1000, 21638=>1000, 21640=>1000, 21641=>1000, 21642=>1000, 21643=>1000, 21644=>1000, 21645=>1000, 21646=>1000, 21647=>1000, 21648=>1000, 21649=>1000, 21650=>1000, 21653=>1000, 
+	21654=>1000, 21660=>1000, 21663=>1000, 21665=>1000, 21666=>1000, 21668=>1000, 21669=>1000, 21670=>1000, 21671=>1000, 21672=>1000, 21673=>1000, 21674=>1000, 21675=>1000, 21676=>1000, 21677=>1000, 21678=>1000, 
+	21679=>1000, 21681=>1000, 21682=>1000, 21683=>1000, 21687=>1000, 21688=>1000, 21689=>1000, 21690=>1000, 21691=>1000, 21692=>1000, 21693=>1000, 21694=>1000, 21695=>1000, 21696=>1000, 21697=>1000, 21698=>1000, 
+	21700=>1000, 21702=>1000, 21703=>1000, 21704=>1000, 21705=>1000, 21706=>1000, 21709=>1000, 21710=>1000, 21720=>1000, 21728=>1000, 21729=>1000, 21730=>1000, 21733=>1000, 21734=>1000, 21736=>1000, 21737=>1000, 
+	21738=>1000, 21740=>1000, 21741=>1000, 21742=>1000, 21743=>1000, 21746=>1000, 21750=>1000, 21754=>1000, 21756=>1000, 21757=>1000, 21758=>1000, 21759=>1000, 21760=>1000, 21761=>1000, 21764=>1000, 21765=>1000, 
+	21766=>1000, 21767=>1000, 21768=>1000, 21769=>1000, 21772=>1000, 21773=>1000, 21774=>1000, 21775=>1000, 21776=>1000, 21780=>1000, 21781=>1000, 21782=>1000, 21802=>1000, 21803=>1000, 21806=>1000, 21807=>1000, 
+	21809=>1000, 21810=>1000, 21811=>1000, 21813=>1000, 21814=>1000, 21816=>1000, 21817=>1000, 21819=>1000, 21820=>1000, 21821=>1000, 21822=>1000, 21824=>1000, 21825=>1000, 21828=>1000, 21829=>1000, 21830=>1000, 
+	21831=>1000, 21833=>1000, 21834=>1000, 21836=>1000, 21837=>1000, 21839=>1000, 21840=>1000, 21841=>1000, 21843=>1000, 21846=>1000, 21847=>1000, 21848=>1000, 21850=>1000, 21851=>1000, 21852=>1000, 21853=>1000, 
+	21854=>1000, 21856=>1000, 21857=>1000, 21859=>1000, 21860=>1000, 21862=>1000, 21883=>1000, 21884=>1000, 21886=>1000, 21887=>1000, 21888=>1000, 21889=>1000, 21890=>1000, 21891=>1000, 21892=>1000, 21894=>1000, 
+	21895=>1000, 21896=>1000, 21897=>1000, 21898=>1000, 21899=>1000, 21902=>1000, 21903=>1000, 21905=>1000, 21906=>1000, 21907=>1000, 21908=>1000, 21911=>1000, 21912=>1000, 21913=>1000, 21914=>1000, 21916=>1000, 
+	21917=>1000, 21918=>1000, 21919=>1000, 21923=>1000, 21924=>1000, 21927=>1000, 21928=>1000, 21929=>1000, 21930=>1000, 21931=>1000, 21932=>1000, 21933=>1000, 21934=>1000, 21936=>1000, 21938=>1000, 21942=>1000, 
+	21951=>1000, 21953=>1000, 21955=>1000, 21956=>1000, 21957=>1000, 21958=>1000, 21959=>1000, 21961=>1000, 21963=>1000, 21964=>1000, 21966=>1000, 21969=>1000, 21970=>1000, 21971=>1000, 21972=>1000, 21975=>1000, 
+	21976=>1000, 21978=>1000, 21979=>1000, 21980=>1000, 21982=>1000, 21983=>1000, 21986=>1000, 21987=>1000, 21988=>1000, 21993=>1000, 22006=>1000, 22007=>1000, 22009=>1000, 22013=>1000, 22014=>1000, 22015=>1000, 
+	22021=>1000, 22022=>1000, 22024=>1000, 22025=>1000, 22026=>1000, 22029=>1000, 22030=>1000, 22031=>1000, 22032=>1000, 22033=>1000, 22034=>1000, 22036=>1000, 22038=>1000, 22039=>1000, 22040=>1000, 22041=>1000, 
+	22043=>1000, 22057=>1000, 22060=>1000, 22063=>1000, 22064=>1000, 22065=>1000, 22066=>1000, 22067=>1000, 22068=>1000, 22069=>1000, 22070=>1000, 22071=>1000, 22072=>1000, 22073=>1000, 22075=>1000, 22076=>1000, 
+	22077=>1000, 22079=>1000, 22080=>1000, 22081=>1000, 22082=>1000, 22083=>1000, 22084=>1000, 22086=>1000, 22089=>1000, 22091=>1000, 22092=>1000, 22093=>1000, 22094=>1000, 22095=>1000, 22096=>1000, 22100=>1000, 
+	22107=>1000, 22110=>1000, 22112=>1000, 22113=>1000, 22114=>1000, 22115=>1000, 22116=>1000, 22118=>1000, 22120=>1000, 22121=>1000, 22122=>1000, 22123=>1000, 22124=>1000, 22125=>1000, 22127=>1000, 22129=>1000, 
+	22130=>1000, 22132=>1000, 22133=>1000, 22136=>1000, 22138=>1000, 22144=>1000, 22148=>1000, 22149=>1000, 22150=>1000, 22151=>1000, 22152=>1000, 22154=>1000, 22155=>1000, 22156=>1000, 22159=>1000, 22164=>1000, 
+	22165=>1000, 22169=>1000, 22170=>1000, 22173=>1000, 22174=>1000, 22175=>1000, 22176=>1000, 22178=>1000, 22181=>1000, 22182=>1000, 22183=>1000, 22184=>1000, 22185=>1000, 22187=>1000, 22188=>1000, 22189=>1000, 
+	22190=>1000, 22193=>1000, 22195=>1000, 22196=>1000, 22198=>1000, 22199=>1000, 22204=>1000, 22206=>1000, 22208=>1000, 22209=>1000, 22210=>1000, 22211=>1000, 22213=>1000, 22216=>1000, 22217=>1000, 22218=>1000, 
+	22219=>1000, 22220=>1000, 22221=>1000, 22222=>1000, 22223=>1000, 22224=>1000, 22225=>1000, 22227=>1000, 22231=>1000, 22232=>1000, 22233=>1000, 22234=>1000, 22235=>1000, 22236=>1000, 22237=>1000, 22238=>1000, 
+	22239=>1000, 22240=>1000, 22241=>1000, 22243=>1000, 22244=>1000, 22245=>1000, 22246=>1000, 22247=>1000, 22248=>1000, 22251=>1000, 22253=>1000, 22254=>1000, 22256=>1000, 22257=>1000, 22258=>1000, 22259=>1000, 
+	22262=>1000, 22263=>1000, 22265=>1000, 22266=>1000, 22269=>1000, 22271=>1000, 22272=>1000, 22273=>1000, 22274=>1000, 22275=>1000, 22276=>1000, 22279=>1000, 22280=>1000, 22281=>1000, 22282=>1000, 22283=>1000, 
+	22284=>1000, 22285=>1000, 22287=>1000, 22289=>1000, 22290=>1000, 22291=>1000, 22293=>1000, 22294=>1000, 22296=>1000, 22298=>1000, 22299=>1000, 22300=>1000, 22301=>1000, 22303=>1000, 22304=>1000, 22306=>1000, 
+	22307=>1000, 22308=>1000, 22309=>1000, 22310=>1000, 22311=>1000, 22312=>1000, 22313=>1000, 22314=>1000, 22316=>1000, 22317=>1000, 22318=>1000, 22319=>1000, 22320=>1000, 22323=>1000, 22324=>1000, 22327=>1000, 
+	22328=>1000, 22331=>1000, 22333=>1000, 22334=>1000, 22335=>1000, 22336=>1000, 22338=>1000, 22341=>1000, 22342=>1000, 22343=>1000, 22346=>1000, 22348=>1000, 22349=>1000, 22350=>1000, 22351=>1000, 22352=>1000, 
+	22353=>1000, 22354=>1000, 22361=>1000, 22369=>1000, 22370=>1000, 22372=>1000, 22373=>1000, 22374=>1000, 22375=>1000, 22376=>1000, 22377=>1000, 22378=>1000, 22379=>1000, 22381=>1000, 22382=>1000, 22383=>1000, 
+	22384=>1000, 22385=>1000, 22387=>1000, 22388=>1000, 22389=>1000, 22391=>1000, 22393=>1000, 22394=>1000, 22395=>1000, 22396=>1000, 22398=>1000, 22399=>1000, 22401=>1000, 22402=>1000, 22403=>1000, 22408=>1000, 
+	22409=>1000, 22411=>1000, 22412=>1000, 22419=>1000, 22420=>1000, 22421=>1000, 22423=>1000, 22425=>1000, 22426=>1000, 22428=>1000, 22429=>1000, 22430=>1000, 22431=>1000, 22432=>1000, 22433=>1000, 22434=>1000, 
+	22435=>1000, 22436=>1000, 22439=>1000, 22440=>1000, 22441=>1000, 22442=>1000, 22444=>1000, 22448=>1000, 22451=>1000, 22456=>1000, 22461=>1000, 22464=>1000, 22467=>1000, 22470=>1000, 22471=>1000, 22472=>1000, 
+	22475=>1000, 22476=>1000, 22478=>1000, 22479=>1000, 22482=>1000, 22483=>1000, 22484=>1000, 22485=>1000, 22486=>1000, 22492=>1000, 22493=>1000, 22494=>1000, 22495=>1000, 22496=>1000, 22497=>1000, 22499=>1000, 
+	22500=>1000, 22502=>1000, 22503=>1000, 22505=>1000, 22509=>1000, 22512=>1000, 22516=>1000, 22517=>1000, 22518=>1000, 22519=>1000, 22520=>1000, 22521=>1000, 22522=>1000, 22524=>1000, 22525=>1000, 22526=>1000, 
+	22527=>1000, 22528=>1000, 22530=>1000, 22531=>1000, 22532=>1000, 22533=>1000, 22534=>1000, 22536=>1000, 22537=>1000, 22538=>1000, 22539=>1000, 22540=>1000, 22541=>1000, 22549=>1000, 22553=>1000, 22555=>1000, 
+	22557=>1000, 22558=>1000, 22559=>1000, 22560=>1000, 22561=>1000, 22564=>1000, 22566=>1000, 22567=>1000, 22570=>1000, 22573=>1000, 22575=>1000, 22576=>1000, 22577=>1000, 22578=>1000, 22580=>1000, 22581=>1000, 
+	22585=>1000, 22586=>1000, 22589=>1000, 22591=>1000, 22592=>1000, 22593=>1000, 22601=>1000, 22602=>1000, 22603=>1000, 22604=>1000, 22605=>1000, 22607=>1000, 22608=>1000, 22609=>1000, 22610=>1000, 22612=>1000, 
+	22613=>1000, 22615=>1000, 22616=>1000, 22617=>1000, 22618=>1000, 22622=>1000, 22623=>1000, 22625=>1000, 22626=>1000, 22628=>1000, 22631=>1000, 22632=>1000, 22633=>1000, 22635=>1000, 22640=>1000, 22642=>1000, 
+	22645=>1000, 22648=>1000, 22649=>1000, 22652=>1000, 22654=>1000, 22655=>1000, 22656=>1000, 22657=>1000, 22659=>1000, 22661=>1000, 22663=>1000, 22664=>1000, 22665=>1000, 22666=>1000, 22668=>1000, 22669=>1000, 
+	22671=>1000, 22672=>1000, 22675=>1000, 22676=>1000, 22678=>1000, 22679=>1000, 22684=>1000, 22685=>1000, 22686=>1000, 22687=>1000, 22688=>1000, 22689=>1000, 22690=>1000, 22694=>1000, 22696=>1000, 22697=>1000, 
+	22699=>1000, 22702=>1000, 22705=>1000, 22706=>1000, 22707=>1000, 22712=>1000, 22713=>1000, 22714=>1000, 22715=>1000, 22716=>1000, 22718=>1000, 22721=>1000, 22722=>1000, 22724=>1000, 22725=>1000, 22727=>1000, 
+	22728=>1000, 22730=>1000, 22732=>1000, 22733=>1000, 22734=>1000, 22736=>1000, 22737=>1000, 22738=>1000, 22739=>1000, 22740=>1000, 22741=>1000, 22742=>1000, 22743=>1000, 22744=>1000, 22745=>1000, 22746=>1000, 
+	22748=>1000, 22749=>1000, 22750=>1000, 22751=>1000, 22753=>1000, 22754=>1000, 22756=>1000, 22757=>1000, 22761=>1000, 22763=>1000, 22764=>1000, 22766=>1000, 22767=>1000, 22768=>1000, 22769=>1000, 22770=>1000, 
+	22771=>1000, 22775=>1000, 22777=>1000, 22778=>1000, 22779=>1000, 22780=>1000, 22781=>1000, 22786=>1000, 22789=>1000, 22790=>1000, 22793=>1000, 22794=>1000, 22795=>1000, 22796=>1000, 22799=>1000, 22800=>1000, 
+	22802=>1000, 22803=>1000, 22804=>1000, 22805=>1000, 22806=>1000, 22808=>1000, 22809=>1000, 22810=>1000, 22811=>1000, 22812=>1000, 22813=>1000, 22817=>1000, 22818=>1000, 22819=>1000, 22820=>1000, 22821=>1000, 
+	22823=>1000, 22824=>1000, 22825=>1000, 22826=>1000, 22827=>1000, 22828=>1000, 22829=>1000, 22830=>1000, 22831=>1000, 22832=>1000, 22833=>1000, 22834=>1000, 22835=>1000, 22837=>1000, 22838=>1000, 22839=>1000, 
+	22840=>1000, 22846=>1000, 22847=>1000, 22851=>1000, 22852=>1000, 22854=>1000, 22855=>1000, 22856=>1000, 22857=>1000, 22862=>1000, 22863=>1000, 22864=>1000, 22865=>1000, 22866=>1000, 22867=>1000, 22868=>1000, 
+	22869=>1000, 22871=>1000, 22872=>1000, 22873=>1000, 22874=>1000, 22875=>1000, 22877=>1000, 22878=>1000, 22879=>1000, 22880=>1000, 22881=>1000, 22882=>1000, 22883=>1000, 22885=>1000, 22887=>1000, 22888=>1000, 
+	22889=>1000, 22890=>1000, 22891=>1000, 22892=>1000, 22893=>1000, 22894=>1000, 22895=>1000, 22898=>1000, 22899=>1000, 22900=>1000, 22901=>1000, 22902=>1000, 22904=>1000, 22905=>1000, 22907=>1000, 22908=>1000, 
+	22909=>1000, 22913=>1000, 22914=>1000, 22915=>1000, 22916=>1000, 22922=>1000, 22923=>1000, 22924=>1000, 22925=>1000, 22926=>1000, 22930=>1000, 22931=>1000, 22933=>1000, 22934=>1000, 22935=>1000, 22937=>1000, 
+	22939=>1000, 22941=>1000, 22943=>1000, 22947=>1000, 22948=>1000, 22949=>1000, 22951=>1000, 22952=>1000, 22956=>1000, 22957=>1000, 22958=>1000, 22959=>1000, 22960=>1000, 22962=>1000, 22963=>1000, 22967=>1000, 
+	22969=>1000, 22970=>1000, 22971=>1000, 22972=>1000, 22974=>1000, 22977=>1000, 22979=>1000, 22980=>1000, 22982=>1000, 22984=>1000, 22985=>1000, 22986=>1000, 22987=>1000, 22989=>1000, 22992=>1000, 22993=>1000, 
+	22994=>1000, 22995=>1000, 22996=>1000, 23001=>1000, 23002=>1000, 23004=>1000, 23005=>1000, 23006=>1000, 23007=>1000, 23011=>1000, 23012=>1000, 23013=>1000, 23014=>1000, 23015=>1000, 23016=>1000, 23018=>1000, 
+	23019=>1000, 23022=>1000, 23023=>1000, 23025=>1000, 23026=>1000, 23028=>1000, 23030=>1000, 23031=>1000, 23035=>1000, 23039=>1000, 23040=>1000, 23041=>1000, 23043=>1000, 23044=>1000, 23049=>1000, 23052=>1000, 
+	23053=>1000, 23054=>1000, 23057=>1000, 23058=>1000, 23059=>1000, 23064=>1000, 23066=>1000, 23068=>1000, 23070=>1000, 23071=>1000, 23072=>1000, 23075=>1000, 23076=>1000, 23077=>1000, 23079=>1000, 23080=>1000, 
+	23081=>1000, 23082=>1000, 23085=>1000, 23087=>1000, 23088=>1000, 23093=>1000, 23094=>1000, 23100=>1000, 23104=>1000, 23105=>1000, 23108=>1000, 23109=>1000, 23110=>1000, 23111=>1000, 23112=>1000, 23113=>1000, 
+	23116=>1000, 23120=>1000, 23125=>1000, 23130=>1000, 23134=>1000, 23138=>1000, 23139=>1000, 23141=>1000, 23142=>1000, 23143=>1000, 23146=>1000, 23148=>1000, 23149=>1000, 23159=>1000, 23162=>1000, 23163=>1000, 
+	23166=>1000, 23167=>1000, 23179=>1000, 23184=>1000, 23186=>1000, 23187=>1000, 23190=>1000, 23193=>1000, 23194=>1000, 23195=>1000, 23196=>1000, 23198=>1000, 23199=>1000, 23200=>1000, 23202=>1000, 23207=>1000, 
+	23212=>1000, 23217=>1000, 23218=>1000, 23219=>1000, 23221=>1000, 23224=>1000, 23226=>1000, 23227=>1000, 23228=>1000, 23229=>1000, 23230=>1000, 23231=>1000, 23233=>1000, 23234=>1000, 23236=>1000, 23238=>1000, 
+	23240=>1000, 23241=>1000, 23243=>1000, 23244=>1000, 23247=>1000, 23248=>1000, 23254=>1000, 23255=>1000, 23258=>1000, 23260=>1000, 23264=>1000, 23265=>1000, 23267=>1000, 23269=>1000, 23270=>1000, 23273=>1000, 
+	23274=>1000, 23278=>1000, 23285=>1000, 23286=>1000, 23290=>1000, 23291=>1000, 23293=>1000, 23296=>1000, 23297=>1000, 23304=>1000, 23305=>1000, 23307=>1000, 23308=>1000, 23318=>1000, 23319=>1000, 23321=>1000, 
+	23323=>1000, 23325=>1000, 23329=>1000, 23330=>1000, 23333=>1000, 23338=>1000, 23340=>1000, 23341=>1000, 23344=>1000, 23346=>1000, 23348=>1000, 23350=>1000, 23352=>1000, 23358=>1000, 23360=>1000, 23361=>1000, 
+	23363=>1000, 23365=>1000, 23371=>1000, 23372=>1000, 23376=>1000, 23377=>1000, 23378=>1000, 23380=>1000, 23381=>1000, 23382=>1000, 23383=>1000, 23384=>1000, 23386=>1000, 23387=>1000, 23388=>1000, 23389=>1000, 
+	23390=>1000, 23391=>1000, 23395=>1000, 23396=>1000, 23397=>1000, 23398=>1000, 23400=>1000, 23401=>1000, 23403=>1000, 23406=>1000, 23407=>1000, 23408=>1000, 23409=>1000, 23411=>1000, 23413=>1000, 23416=>1000, 
+	23418=>1000, 23420=>1000, 23421=>1000, 23422=>1000, 23423=>1000, 23424=>1000, 23425=>1000, 23427=>1000, 23428=>1000, 23429=>1000, 23430=>1000, 23431=>1000, 23432=>1000, 23433=>1000, 23434=>1000, 23435=>1000, 
+	23436=>1000, 23437=>1000, 23438=>1000, 23439=>1000, 23440=>1000, 23441=>1000, 23443=>1000, 23444=>1000, 23445=>1000, 23446=>1000, 23447=>1000, 23448=>1000, 23449=>1000, 23450=>1000, 23451=>1000, 23452=>1000, 
+	23453=>1000, 23455=>1000, 23458=>1000, 23459=>1000, 23460=>1000, 23461=>1000, 23462=>1000, 23464=>1000, 23465=>1000, 23468=>1000, 23469=>1000, 23470=>1000, 23471=>1000, 23472=>1000, 23473=>1000, 23474=>1000, 
+	23475=>1000, 23476=>1000, 23477=>1000, 23478=>1000, 23479=>1000, 23480=>1000, 23481=>1000, 23482=>1000, 23484=>1000, 23487=>1000, 23488=>1000, 23489=>1000, 23490=>1000, 23491=>1000, 23492=>1000, 23493=>1000, 
+	23494=>1000, 23495=>1000, 23497=>1000, 23500=>1000, 23501=>1000, 23503=>1000, 23504=>1000, 23506=>1000, 23507=>1000, 23508=>1000, 23510=>1000, 23511=>1000, 23512=>1000, 23513=>1000, 23514=>1000, 23515=>1000, 
+	23517=>1000, 23518=>1000, 23519=>1000, 23520=>1000, 23521=>1000, 23522=>1000, 23524=>1000, 23525=>1000, 23526=>1000, 23527=>1000, 23528=>1000, 23529=>1000, 23531=>1000, 23532=>1000, 23534=>1000, 23535=>1000, 
+	23536=>1000, 23537=>1000, 23539=>1000, 23540=>1000, 23541=>1000, 23542=>1000, 23544=>1000, 23546=>1000, 23549=>1000, 23550=>1000, 23551=>1000, 23553=>1000, 23554=>1000, 23556=>1000, 23557=>1000, 23558=>1000, 
+	23559=>1000, 23560=>1000, 23561=>1000, 23562=>1000, 23563=>1000, 23564=>1000, 23565=>1000, 23566=>1000, 23567=>1000, 23569=>1000, 23571=>1000, 23574=>1000, 23575=>1000, 23578=>1000, 23582=>1000, 23583=>1000, 
+	23584=>1000, 23586=>1000, 23587=>1000, 23588=>1000, 23590=>1000, 23592=>1000, 23593=>1000, 23595=>1000, 23596=>1000, 23597=>1000, 23598=>1000, 23600=>1000, 23601=>1000, 23602=>1000, 23605=>1000, 23606=>1000, 
+	23608=>1000, 23609=>1000, 23610=>1000, 23611=>1000, 23612=>1000, 23613=>1000, 23614=>1000, 23615=>1000, 23616=>1000, 23617=>1000, 23621=>1000, 23622=>1000, 23624=>1000, 23626=>1000, 23627=>1000, 23629=>1000, 
+	23630=>1000, 23631=>1000, 23632=>1000, 23633=>1000, 23635=>1000, 23637=>1000, 23641=>1000, 23642=>1000, 23644=>1000, 23646=>1000, 23648=>1000, 23649=>1000, 23650=>1000, 23651=>1000, 23652=>1000, 23653=>1000, 
+	23655=>1000, 23656=>1000, 23657=>1000, 23660=>1000, 23661=>1000, 23662=>1000, 23663=>1000, 23664=>1000, 23665=>1000, 23668=>1000, 23669=>1000, 23670=>1000, 23673=>1000, 23674=>1000, 23675=>1000, 23676=>1000, 
+	23677=>1000, 23687=>1000, 23688=>1000, 23690=>1000, 23692=>1000, 23695=>1000, 23696=>1000, 23697=>1000, 23698=>1000, 23700=>1000, 23709=>1000, 23711=>1000, 23712=>1000, 23713=>1000, 23714=>1000, 23715=>1000, 
+	23718=>1000, 23720=>1000, 23721=>1000, 23722=>1000, 23723=>1000, 23724=>1000, 23729=>1000, 23730=>1000, 23731=>1000, 23732=>1000, 23733=>1000, 23734=>1000, 23735=>1000, 23736=>1000, 23738=>1000, 23739=>1000, 
+	23740=>1000, 23742=>1000, 23749=>1000, 23751=>1000, 23753=>1000, 23755=>1000, 23762=>1000, 23767=>1000, 23769=>1000, 23773=>1000, 23776=>1000, 23777=>1000, 23784=>1000, 23785=>1000, 23786=>1000, 23789=>1000, 
+	23790=>1000, 23791=>1000, 23792=>1000, 23793=>1000, 23794=>1000, 23796=>1000, 23797=>1000, 23798=>1000, 23802=>1000, 23803=>1000, 23805=>1000, 23809=>1000, 23814=>1000, 23815=>1000, 23819=>1000, 23821=>1000, 
+	23822=>1000, 23825=>1000, 23826=>1000, 23828=>1000, 23829=>1000, 23830=>1000, 23831=>1000, 23832=>1000, 23833=>1000, 23834=>1000, 23835=>1000, 23839=>1000, 23842=>1000, 23843=>1000, 23844=>1000, 23846=>1000, 
+	23847=>1000, 23849=>1000, 23851=>1000, 23857=>1000, 23860=>1000, 23865=>1000, 23869=>1000, 23871=>1000, 23874=>1000, 23875=>1000, 23878=>1000, 23880=>1000, 23882=>1000, 23883=>1000, 23884=>1000, 23886=>1000, 
+	23888=>1000, 23889=>1000, 23890=>1000, 23893=>1000, 23897=>1000, 23900=>1000, 23903=>1000, 23904=>1000, 23905=>1000, 23906=>1000, 23908=>1000, 23913=>1000, 23914=>1000, 23916=>1000, 23917=>1000, 23919=>1000, 
+	23920=>1000, 23923=>1000, 23926=>1000, 23929=>1000, 23930=>1000, 23934=>1000, 23935=>1000, 23937=>1000, 23938=>1000, 23939=>1000, 23940=>1000, 23943=>1000, 23944=>1000, 23946=>1000, 23947=>1000, 23948=>1000, 
+	23952=>1000, 23954=>1000, 23955=>1000, 23956=>1000, 23957=>1000, 23961=>1000, 23963=>1000, 23965=>1000, 23967=>1000, 23968=>1000, 23970=>1000, 23975=>1000, 23979=>1000, 23980=>1000, 23982=>1000, 23984=>1000, 
+	23986=>1000, 23988=>1000, 23991=>1000, 23992=>1000, 23993=>1000, 23994=>1000, 23996=>1000, 23997=>1000, 24003=>1000, 24007=>1000, 24009=>1000, 24011=>1000, 24012=>1000, 24013=>1000, 24014=>1000, 24016=>1000, 
+	24018=>1000, 24019=>1000, 24022=>1000, 24024=>1000, 24025=>1000, 24027=>1000, 24029=>1000, 24030=>1000, 24032=>1000, 24033=>1000, 24035=>1000, 24036=>1000, 24037=>1000, 24038=>1000, 24039=>1000, 24040=>1000, 
+	24041=>1000, 24043=>1000, 24046=>1000, 24049=>1000, 24050=>1000, 24051=>1000, 24052=>1000, 24053=>1000, 24055=>1000, 24056=>1000, 24057=>1000, 24059=>1000, 24061=>1000, 24062=>1000, 24064=>1000, 24066=>1000, 
+	24067=>1000, 24070=>1000, 24071=>1000, 24075=>1000, 24076=>1000, 24077=>1000, 24081=>1000, 24082=>1000, 24084=>1000, 24085=>1000, 24086=>1000, 24088=>1000, 24089=>1000, 24090=>1000, 24091=>1000, 24093=>1000, 
+	24095=>1000, 24096=>1000, 24101=>1000, 24104=>1000, 24107=>1000, 24109=>1000, 24110=>1000, 24111=>1000, 24112=>1000, 24114=>1000, 24115=>1000, 24117=>1000, 24118=>1000, 24119=>1000, 24120=>1000, 24125=>1000, 
+	24126=>1000, 24128=>1000, 24131=>1000, 24132=>1000, 24133=>1000, 24135=>1000, 24137=>1000, 24139=>1000, 24140=>1000, 24142=>1000, 24144=>1000, 24145=>1000, 24148=>1000, 24149=>1000, 24150=>1000, 24151=>1000, 
+	24152=>1000, 24155=>1000, 24156=>1000, 24158=>1000, 24159=>1000, 24161=>1000, 24162=>1000, 24163=>1000, 24164=>1000, 24168=>1000, 24170=>1000, 24171=>1000, 24172=>1000, 24173=>1000, 24174=>1000, 24176=>1000, 
+	24178=>1000, 24179=>1000, 24180=>1000, 24181=>1000, 24182=>1000, 24184=>1000, 24185=>1000, 24186=>1000, 24187=>1000, 24188=>1000, 24189=>1000, 24190=>1000, 24191=>1000, 24192=>1000, 24193=>1000, 24195=>1000, 
+	24196=>1000, 24199=>1000, 24202=>1000, 24203=>1000, 24206=>1000, 24207=>1000, 24213=>1000, 24214=>1000, 24215=>1000, 24218=>1000, 24220=>1000, 24224=>1000, 24226=>1000, 24228=>1000, 24229=>1000, 24230=>1000, 
+	24231=>1000, 24232=>1000, 24234=>1000, 24235=>1000, 24236=>1000, 24237=>1000, 24241=>1000, 24243=>1000, 24245=>1000, 24246=>1000, 24247=>1000, 24248=>1000, 24253=>1000, 24254=>1000, 24255=>1000, 24257=>1000, 
+	24258=>1000, 24259=>1000, 24262=>1000, 24264=>1000, 24265=>1000, 24266=>1000, 24267=>1000, 24268=>1000, 24270=>1000, 24271=>1000, 24272=>1000, 24273=>1000, 24274=>1000, 24275=>1000, 24276=>1000, 24277=>1000, 
+	24278=>1000, 24282=>1000, 24283=>1000, 24284=>1000, 24285=>1000, 24286=>1000, 24287=>1000, 24288=>1000, 24289=>1000, 24290=>1000, 24291=>1000, 24293=>1000, 24296=>1000, 24297=>1000, 24299=>1000, 24300=>1000, 
+	24304=>1000, 24305=>1000, 24307=>1000, 24308=>1000, 24310=>1000, 24311=>1000, 24312=>1000, 24314=>1000, 24315=>1000, 24316=>1000, 24318=>1000, 24319=>1000, 24321=>1000, 24322=>1000, 24323=>1000, 24324=>1000, 
+	24326=>1000, 24327=>1000, 24328=>1000, 24329=>1000, 24330=>1000, 24331=>1000, 24332=>1000, 24333=>1000, 24334=>1000, 24335=>1000, 24336=>1000, 24337=>1000, 24339=>1000, 24340=>1000, 24341=>1000, 24342=>1000, 
+	24343=>1000, 24344=>1000, 24345=>1000, 24347=>1000, 24348=>1000, 24349=>1000, 24351=>1000, 24353=>1000, 24354=>1000, 24355=>1000, 24356=>1000, 24357=>1000, 24358=>1000, 24359=>1000, 24360=>1000, 24361=>1000, 
+	24363=>1000, 24364=>1000, 24365=>1000, 24366=>1000, 24367=>1000, 24368=>1000, 24369=>1000, 24372=>1000, 24373=>1000, 24374=>1000, 24375=>1000, 24376=>1000, 24379=>1000, 24380=>1000, 24381=>1000, 24382=>1000, 
+	24383=>1000, 24384=>1000, 24385=>1000, 24388=>1000, 24389=>1000, 24391=>1000, 24392=>1000, 24394=>1000, 24396=>1000, 24397=>1000, 24398=>1000, 24400=>1000, 24401=>1000, 24403=>1000, 24404=>1000, 24406=>1000, 
+	24407=>1000, 24408=>1000, 24409=>1000, 24411=>1000, 24412=>1000, 24413=>1000, 24416=>1000, 24417=>1000, 24418=>1000, 24419=>1000, 24420=>1000, 24422=>1000, 24423=>1000, 24425=>1000, 24426=>1000, 24427=>1000, 
+	24428=>1000, 24429=>1000, 24431=>1000, 24432=>1000, 24433=>1000, 24434=>1000, 24435=>1000, 24436=>1000, 24437=>1000, 24439=>1000, 24440=>1000, 24441=>1000, 24442=>1000, 24444=>1000, 24445=>1000, 24446=>1000, 
+	24447=>1000, 24448=>1000, 24449=>1000, 24450=>1000, 24451=>1000, 24452=>1000, 24453=>1000, 24455=>1000, 24456=>1000, 24457=>1000, 24458=>1000, 24459=>1000, 24460=>1000, 24461=>1000, 24463=>1000, 24464=>1000, 
+	24465=>1000, 24466=>1000, 24467=>1000, 24470=>1000, 24471=>1000, 24472=>1000, 24473=>1000, 24476=>1000, 24477=>1000, 24478=>1000, 24480=>1000, 24481=>1000, 24482=>1000, 24484=>1000, 24487=>1000, 24488=>1000, 
+	24489=>1000, 24490=>1000, 24491=>1000, 24492=>1000, 24493=>1000, 24494=>1000, 24495=>1000, 24496=>1000, 24497=>1000, 24499=>1000, 24500=>1000, 24503=>1000, 24504=>1000, 24505=>1000, 24508=>1000, 24509=>1000, 
+	24515=>1000, 24516=>1000, 24517=>1000, 24519=>1000, 24520=>1000, 24521=>1000, 24523=>1000, 24524=>1000, 24525=>1000, 24528=>1000, 24529=>1000, 24530=>1000, 24531=>1000, 24532=>1000, 24534=>1000, 24535=>1000, 
+	24536=>1000, 24537=>1000, 24540=>1000, 24541=>1000, 24542=>1000, 24544=>1000, 24545=>1000, 24546=>1000, 24548=>1000, 24552=>1000, 24553=>1000, 24554=>1000, 24555=>1000, 24556=>1000, 24557=>1000, 24558=>1000, 
+	24559=>1000, 24560=>1000, 24561=>1000, 24562=>1000, 24563=>1000, 24565=>1000, 24566=>1000, 24568=>1000, 24570=>1000, 24571=>1000, 24572=>1000, 24573=>1000, 24575=>1000, 24583=>1000, 24586=>1000, 24589=>1000, 
+	24590=>1000, 24591=>1000, 24592=>1000, 24594=>1000, 24595=>1000, 24596=>1000, 24597=>1000, 24598=>1000, 24599=>1000, 24600=>1000, 24601=>1000, 24602=>1000, 24603=>1000, 24604=>1000, 24605=>1000, 24607=>1000, 
+	24608=>1000, 24609=>1000, 24612=>1000, 24613=>1000, 24614=>1000, 24615=>1000, 24616=>1000, 24617=>1000, 24618=>1000, 24619=>1000, 24621=>1000, 24623=>1000, 24625=>1000, 24627=>1000, 24629=>1000, 24634=>1000, 
+	24640=>1000, 24641=>1000, 24642=>1000, 24643=>1000, 24646=>1000, 24647=>1000, 24648=>1000, 24649=>1000, 24650=>1000, 24651=>1000, 24652=>1000, 24653=>1000, 24656=>1000, 24657=>1000, 24658=>1000, 24660=>1000, 
+	24661=>1000, 24662=>1000, 24663=>1000, 24665=>1000, 24666=>1000, 24669=>1000, 24671=>1000, 24672=>1000, 24673=>1000, 24674=>1000, 24675=>1000, 24676=>1000, 24677=>1000, 24679=>1000, 24680=>1000, 24681=>1000, 
+	24682=>1000, 24683=>1000, 24684=>1000, 24685=>1000, 24687=>1000, 24688=>1000, 24689=>1000, 24693=>1000, 24695=>1000, 24702=>1000, 24703=>1000, 24705=>1000, 24706=>1000, 24707=>1000, 24708=>1000, 24709=>1000, 
+	24710=>1000, 24712=>1000, 24713=>1000, 24714=>1000, 24715=>1000, 24716=>1000, 24717=>1000, 24718=>1000, 24721=>1000, 24722=>1000, 24723=>1000, 24724=>1000, 24725=>1000, 24726=>1000, 24727=>1000, 24728=>1000, 
+	24730=>1000, 24731=>1000, 24733=>1000, 24734=>1000, 24735=>1000, 24736=>1000, 24738=>1000, 24739=>1000, 24740=>1000, 24741=>1000, 24742=>1000, 24743=>1000, 24744=>1000, 24745=>1000, 24746=>1000, 24752=>1000, 
+	24753=>1000, 24754=>1000, 24755=>1000, 24756=>1000, 24757=>1000, 24758=>1000, 24759=>1000, 24760=>1000, 24763=>1000, 24764=>1000, 24765=>1000, 24766=>1000, 24770=>1000, 24772=>1000, 24773=>1000, 24774=>1000, 
+	24775=>1000, 24776=>1000, 24777=>1000, 24778=>1000, 24779=>1000, 24782=>1000, 24783=>1000, 24785=>1000, 24787=>1000, 24788=>1000, 24789=>1000, 24792=>1000, 24793=>1000, 24794=>1000, 24795=>1000, 24796=>1000, 
+	24797=>1000, 24798=>1000, 24799=>1000, 24800=>1000, 24801=>1000, 24802=>1000, 24803=>1000, 24805=>1000, 24807=>1000, 24808=>1000, 24816=>1000, 24817=>1000, 24818=>1000, 24819=>1000, 24820=>1000, 24821=>1000, 
+	24822=>1000, 24823=>1000, 24824=>1000, 24825=>1000, 24826=>1000, 24827=>1000, 24828=>1000, 24829=>1000, 24832=>1000, 24833=>1000, 24834=>1000, 24835=>1000, 24838=>1000, 24839=>1000, 24840=>1000, 24841=>1000, 
+	24842=>1000, 24844=>1000, 24845=>1000, 24846=>1000, 24847=>1000, 24848=>1000, 24849=>1000, 24850=>1000, 24851=>1000, 24852=>1000, 24853=>1000, 24854=>1000, 24855=>1000, 24857=>1000, 24858=>1000, 24859=>1000, 
+	24860=>1000, 24862=>1000, 24863=>1000, 24864=>1000, 24865=>1000, 24866=>1000, 24871=>1000, 24872=>1000, 24874=>1000, 24875=>1000, 24876=>1000, 24880=>1000, 24881=>1000, 24884=>1000, 24885=>1000, 24886=>1000, 
+	24887=>1000, 24889=>1000, 24892=>1000, 24893=>1000, 24894=>1000, 24895=>1000, 24897=>1000, 24898=>1000, 24900=>1000, 24901=>1000, 24902=>1000, 24903=>1000, 24904=>1000, 24905=>1000, 24906=>1000, 24907=>1000, 
+	24908=>1000, 24909=>1000, 24910=>1000, 24915=>1000, 24917=>1000, 24920=>1000, 24921=>1000, 24922=>1000, 24925=>1000, 24926=>1000, 24927=>1000, 24928=>1000, 24930=>1000, 24931=>1000, 24933=>1000, 24935=>1000, 
+	24936=>1000, 24939=>1000, 24940=>1000, 24942=>1000, 24943=>1000, 24944=>1000, 24945=>1000, 24946=>1000, 24947=>1000, 24948=>1000, 24949=>1000, 24950=>1000, 24951=>1000, 24952=>1000, 24955=>1000, 24956=>1000, 
+	24958=>1000, 24959=>1000, 24960=>1000, 24961=>1000, 24962=>1000, 24963=>1000, 24964=>1000, 24967=>1000, 24970=>1000, 24971=>1000, 24973=>1000, 24974=>1000, 24976=>1000, 24977=>1000, 24978=>1000, 24979=>1000, 
+	24980=>1000, 24982=>1000, 24983=>1000, 24984=>1000, 24985=>1000, 24986=>1000, 24988=>1000, 24989=>1000, 24991=>1000, 24992=>1000, 24996=>1000, 24997=>1000, 24999=>1000, 25000=>1000, 25001=>1000, 25002=>1000, 
+	25003=>1000, 25004=>1000, 25005=>1000, 25006=>1000, 25010=>1000, 25014=>1000, 25016=>1000, 25017=>1000, 25018=>1000, 25020=>1000, 25022=>1000, 25024=>1000, 25025=>1000, 25026=>1000, 25027=>1000, 25030=>1000, 
+	25031=>1000, 25032=>1000, 25033=>1000, 25034=>1000, 25035=>1000, 25036=>1000, 25037=>1000, 25038=>1000, 25039=>1000, 25040=>1000, 25045=>1000, 25052=>1000, 25053=>1000, 25054=>1000, 25055=>1000, 25057=>1000, 
+	25058=>1000, 25059=>1000, 25061=>1000, 25062=>1000, 25063=>1000, 25065=>1000, 25068=>1000, 25069=>1000, 25071=>1000, 25074=>1000, 25076=>1000, 25078=>1000, 25079=>1000, 25080=>1000, 25082=>1000, 25084=>1000, 
+	25085=>1000, 25086=>1000, 25087=>1000, 25088=>1000, 25089=>1000, 25091=>1000, 25092=>1000, 25095=>1000, 25096=>1000, 25097=>1000, 25098=>1000, 25100=>1000, 25101=>1000, 25102=>1000, 25104=>1000, 25105=>1000, 
+	25106=>1000, 25107=>1000, 25108=>1000, 25109=>1000, 25110=>1000, 25114=>1000, 25115=>1000, 25116=>1000, 25117=>1000, 25118=>1000, 25119=>1000, 25120=>1000, 25121=>1000, 25122=>1000, 25123=>1000, 25126=>1000, 
+	25127=>1000, 25129=>1000, 25130=>1000, 25131=>1000, 25134=>1000, 25135=>1000, 25136=>1000, 25138=>1000, 25139=>1000, 25140=>1000, 25144=>1000, 25145=>1000, 25147=>1000, 25149=>1000, 25151=>1000, 25152=>1000, 
+	25153=>1000, 25154=>1000, 25155=>1000, 25156=>1000, 25158=>1000, 25159=>1000, 25160=>1000, 25161=>1000, 25163=>1000, 25164=>1000, 25165=>1000, 25166=>1000, 25168=>1000, 25169=>1000, 25170=>1000, 25171=>1000, 
+	25172=>1000, 25173=>1000, 25174=>1000, 25176=>1000, 25178=>1000, 25179=>1000, 25180=>1000, 25182=>1000, 25184=>1000, 25187=>1000, 25188=>1000, 25192=>1000, 25197=>1000, 25198=>1000, 25199=>1000, 25201=>1000, 
+	25203=>1000, 25206=>1000, 25209=>1000, 25210=>1000, 25212=>1000, 25213=>1000, 25214=>1000, 25215=>1000, 25216=>1000, 25218=>1000, 25219=>1000, 25220=>1000, 25225=>1000, 25226=>1000, 25229=>1000, 25230=>1000, 
+	25231=>1000, 25232=>1000, 25233=>1000, 25234=>1000, 25235=>1000, 25236=>1000, 25237=>1000, 25238=>1000, 25239=>1000, 25240=>1000, 25243=>1000, 25244=>1000, 25246=>1000, 25254=>1000, 25256=>1000, 25259=>1000, 
+	25260=>1000, 25265=>1000, 25267=>1000, 25269=>1000, 25270=>1000, 25271=>1000, 25273=>1000, 25274=>1000, 25275=>1000, 25276=>1000, 25277=>1000, 25278=>1000, 25279=>1000, 25282=>1000, 25284=>1000, 25285=>1000, 
+	25286=>1000, 25287=>1000, 25288=>1000, 25289=>1000, 25290=>1000, 25292=>1000, 25293=>1000, 25294=>1000, 25295=>1000, 25296=>1000, 25297=>1000, 25298=>1000, 25299=>1000, 25300=>1000, 25301=>1000, 25302=>1000, 
+	25303=>1000, 25304=>1000, 25305=>1000, 25306=>1000, 25307=>1000, 25308=>1000, 25309=>1000, 25312=>1000, 25313=>1000, 25322=>1000, 25324=>1000, 25325=>1000, 25326=>1000, 25327=>1000, 25329=>1000, 25330=>1000, 
+	25331=>1000, 25332=>1000, 25333=>1000, 25334=>1000, 25335=>1000, 25340=>1000, 25341=>1000, 25342=>1000, 25343=>1000, 25345=>1000, 25346=>1000, 25347=>1000, 25348=>1000, 25351=>1000, 25352=>1000, 25353=>1000, 
+	25354=>1000, 25355=>1000, 25356=>1000, 25357=>1000, 25360=>1000, 25361=>1000, 25363=>1000, 25366=>1000, 25368=>1000, 25369=>1000, 25375=>1000, 25383=>1000, 25384=>1000, 25385=>1000, 25386=>1000, 25387=>1000, 
+	25389=>1000, 25391=>1000, 25397=>1000, 25398=>1000, 25401=>1000, 25402=>1000, 25404=>1000, 25405=>1000, 25406=>1000, 25407=>1000, 25409=>1000, 25410=>1000, 25411=>1000, 25412=>1000, 25414=>1000, 25417=>1000, 
+	25418=>1000, 25419=>1000, 25420=>1000, 25421=>1000, 25422=>1000, 25423=>1000, 25424=>1000, 25426=>1000, 25427=>1000, 25428=>1000, 25429=>1000, 25431=>1000, 25432=>1000, 25435=>1000, 25436=>1000, 25445=>1000, 
+	25446=>1000, 25447=>1000, 25448=>1000, 25449=>1000, 25451=>1000, 25452=>1000, 25453=>1000, 25454=>1000, 25457=>1000, 25458=>1000, 25460=>1000, 25461=>1000, 25462=>1000, 25463=>1000, 25464=>1000, 25466=>1000, 
+	25467=>1000, 25468=>1000, 25469=>1000, 25471=>1000, 25472=>1000, 25474=>1000, 25475=>1000, 25476=>1000, 25479=>1000, 25480=>1000, 25481=>1000, 25482=>1000, 25484=>1000, 25486=>1000, 25487=>1000, 25488=>1000, 
+	25490=>1000, 25492=>1000, 25493=>1000, 25494=>1000, 25496=>1000, 25497=>1000, 25498=>1000, 25499=>1000, 25502=>1000, 25503=>1000, 25504=>1000, 25505=>1000, 25506=>1000, 25507=>1000, 25508=>1000, 25509=>1000, 
+	25510=>1000, 25511=>1000, 25512=>1000, 25513=>1000, 25514=>1000, 25515=>1000, 25516=>1000, 25517=>1000, 25518=>1000, 25519=>1000, 25522=>1000, 25524=>1000, 25525=>1000, 25531=>1000, 25533=>1000, 25534=>1000, 
+	25536=>1000, 25537=>1000, 25539=>1000, 25540=>1000, 25541=>1000, 25542=>1000, 25544=>1000, 25545=>1000, 25550=>1000, 25551=>1000, 25552=>1000, 25553=>1000, 25554=>1000, 25555=>1000, 25556=>1000, 25557=>1000, 
+	25558=>1000, 25562=>1000, 25563=>1000, 25564=>1000, 25568=>1000, 25569=>1000, 25571=>1000, 25573=>1000, 25577=>1000, 25578=>1000, 25580=>1000, 25582=>1000, 25586=>1000, 25587=>1000, 25588=>1000, 25589=>1000, 
+	25590=>1000, 25592=>1000, 25593=>1000, 25594=>1000, 25606=>1000, 25609=>1000, 25610=>1000, 25613=>1000, 25615=>1000, 25616=>1000, 25618=>1000, 25619=>1000, 25620=>1000, 25622=>1000, 25623=>1000, 25624=>1000, 
+	25628=>1000, 25630=>1000, 25632=>1000, 25634=>1000, 25636=>1000, 25637=>1000, 25638=>1000, 25640=>1000, 25641=>1000, 25642=>1000, 25644=>1000, 25645=>1000, 25647=>1000, 25648=>1000, 25652=>1000, 25653=>1000, 
+	25654=>1000, 25658=>1000, 25661=>1000, 25662=>1000, 25663=>1000, 25666=>1000, 25675=>1000, 25678=>1000, 25679=>1000, 25681=>1000, 25682=>1000, 25683=>1000, 25684=>1000, 25688=>1000, 25690=>1000, 25691=>1000, 
+	25692=>1000, 25693=>1000, 25695=>1000, 25696=>1000, 25697=>1000, 25699=>1000, 25703=>1000, 25705=>1000, 25709=>1000, 25711=>1000, 25715=>1000, 25716=>1000, 25718=>1000, 25720=>1000, 25722=>1000, 25723=>1000, 
+	25725=>1000, 25731=>1000, 25733=>1000, 25735=>1000, 25736=>1000, 25743=>1000, 25744=>1000, 25745=>1000, 25746=>1000, 25747=>1000, 25749=>1000, 25752=>1000, 25753=>1000, 25754=>1000, 25755=>1000, 25757=>1000, 
+	25758=>1000, 25759=>1000, 25761=>1000, 25763=>1000, 25764=>1000, 25765=>1000, 25766=>1000, 25768=>1000, 25769=>1000, 25771=>1000, 25772=>1000, 25773=>1000, 25774=>1000, 25776=>1000, 25778=>1000, 25779=>1000, 
+	25785=>1000, 25787=>1000, 25788=>1000, 25789=>1000, 25790=>1000, 25791=>1000, 25793=>1000, 25794=>1000, 25796=>1000, 25797=>1000, 25799=>1000, 25801=>1000, 25802=>1000, 25803=>1000, 25804=>1000, 25805=>1000, 
+	25806=>1000, 25808=>1000, 25809=>1000, 25810=>1000, 25812=>1000, 25813=>1000, 25815=>1000, 25816=>1000, 25818=>1000, 25824=>1000, 25825=>1000, 25826=>1000, 25827=>1000, 25828=>1000, 25829=>1000, 25830=>1000, 
+	25831=>1000, 25833=>1000, 25834=>1000, 25836=>1000, 25837=>1000, 25839=>1000, 25840=>1000, 25841=>1000, 25842=>1000, 25844=>1000, 25845=>1000, 25846=>1000, 25847=>1000, 25850=>1000, 25851=>1000, 25853=>1000, 
+	25854=>1000, 25855=>1000, 25856=>1000, 25857=>1000, 25860=>1000, 25861=>1000, 25864=>1000, 25865=>1000, 25866=>1000, 25871=>1000, 25875=>1000, 25876=>1000, 25878=>1000, 25880=>1000, 25881=>1000, 25883=>1000, 
+	25884=>1000, 25885=>1000, 25886=>1000, 25887=>1000, 25890=>1000, 25891=>1000, 25892=>1000, 25894=>1000, 25897=>1000, 25898=>1000, 25899=>1000, 25900=>1000, 25902=>1000, 25903=>1000, 25905=>1000, 25908=>1000, 
+	25909=>1000, 25910=>1000, 25911=>1000, 25912=>1000, 25913=>1000, 25914=>1000, 25915=>1000, 25916=>1000, 25917=>1000, 25918=>1000, 25919=>1000, 25923=>1000, 25925=>1000, 25927=>1000, 25928=>1000, 25929=>1000, 
+	25933=>1000, 25934=>1000, 25935=>1000, 25936=>1000, 25937=>1000, 25938=>1000, 25940=>1000, 25941=>1000, 25942=>1000, 25943=>1000, 25944=>1000, 25945=>1000, 25949=>1000, 25950=>1000, 25951=>1000, 25952=>1000, 
+	25954=>1000, 25955=>1000, 25958=>1000, 25959=>1000, 25963=>1000, 25964=>1000, 25968=>1000, 25970=>1000, 25972=>1000, 25973=>1000, 25975=>1000, 25976=>1000, 25978=>1000, 25981=>1000, 25985=>1000, 25986=>1000, 
+	25987=>1000, 25989=>1000, 25991=>1000, 25992=>1000, 25993=>1000, 25994=>1000, 25996=>1000, 25998=>1000, 26000=>1000, 26001=>1000, 26002=>1000, 26005=>1000, 26007=>1000, 26008=>1000, 26009=>1000, 26011=>1000, 
+	26012=>1000, 26013=>1000, 26015=>1000, 26016=>1000, 26017=>1000, 26019=>1000, 26020=>1000, 26021=>1000, 26022=>1000, 26023=>1000, 26027=>1000, 26028=>1000, 26029=>1000, 26030=>1000, 26031=>1000, 26032=>1000, 
+	26034=>1000, 26035=>1000, 26036=>1000, 26039=>1000, 26041=>1000, 26044=>1000, 26045=>1000, 26047=>1000, 26049=>1000, 26050=>1000, 26051=>1000, 26052=>1000, 26053=>1000, 26054=>1000, 26056=>1000, 26057=>1000, 
+	26059=>1000, 26060=>1000, 26062=>1000, 26063=>1000, 26064=>1000, 26066=>1000, 26068=>1000, 26070=>1000, 26071=>1000, 26072=>1000, 26073=>1000, 26075=>1000, 26079=>1000, 26080=>1000, 26081=>1000, 26082=>1000, 
+	26085=>1000, 26086=>1000, 26087=>1000, 26088=>1000, 26089=>1000, 26092=>1000, 26093=>1000, 26096=>1000, 26097=>1000, 26098=>1000, 26100=>1000, 26101=>1000, 26105=>1000, 26106=>1000, 26107=>1000, 26110=>1000, 
+	26111=>1000, 26112=>1000, 26114=>1000, 26115=>1000, 26116=>1000, 26118=>1000, 26119=>1000, 26120=>1000, 26121=>1000, 26122=>1000, 26124=>1000, 26125=>1000, 26126=>1000, 26127=>1000, 26129=>1000, 26130=>1000, 
+	26131=>1000, 26132=>1000, 26133=>1000, 26134=>1000, 26140=>1000, 26141=>1000, 26142=>1000, 26143=>1000, 26144=>1000, 26145=>1000, 26146=>1000, 26147=>1000, 26148=>1000, 26149=>1000, 26150=>1000, 26151=>1000, 
+	26152=>1000, 26153=>1000, 26154=>1000, 26155=>1000, 26156=>1000, 26157=>1000, 26158=>1000, 26159=>1000, 26160=>1000, 26161=>1000, 26163=>1000, 26164=>1000, 26165=>1000, 26166=>1000, 26167=>1000, 26169=>1000, 
+	26172=>1000, 26175=>1000, 26176=>1000, 26177=>1000, 26178=>1000, 26179=>1000, 26180=>1000, 26181=>1000, 26182=>1000, 26185=>1000, 26186=>1000, 26187=>1000, 26188=>1000, 26190=>1000, 26191=>1000, 26193=>1000, 
+	26194=>1000, 26199=>1000, 26200=>1000, 26201=>1000, 26203=>1000, 26204=>1000, 26205=>1000, 26206=>1000, 26207=>1000, 26208=>1000, 26209=>1000, 26210=>1000, 26212=>1000, 26213=>1000, 26214=>1000, 26215=>1000, 
+	26216=>1000, 26217=>1000, 26218=>1000, 26219=>1000, 26220=>1000, 26222=>1000, 26223=>1000, 26224=>1000, 26227=>1000, 26228=>1000, 26229=>1000, 26230=>1000, 26231=>1000, 26232=>1000, 26233=>1000, 26234=>1000, 
+	26235=>1000, 26236=>1000, 26238=>1000, 26239=>1000, 26240=>1000, 26241=>1000, 26243=>1000, 26244=>1000, 26247=>1000, 26248=>1000, 26249=>1000, 26251=>1000, 26252=>1000, 26253=>1000, 26254=>1000, 26256=>1000, 
+	26257=>1000, 26258=>1000, 26262=>1000, 26263=>1000, 26264=>1000, 26265=>1000, 26266=>1000, 26267=>1000, 26268=>1000, 26269=>1000, 26271=>1000, 26272=>1000, 26274=>1000, 26276=>1000, 26278=>1000, 26283=>1000, 
+	26285=>1000, 26286=>1000, 26289=>1000, 26290=>1000, 26292=>1000, 26293=>1000, 26296=>1000, 26297=>1000, 26299=>1000, 26300=>1000, 26302=>1000, 26303=>1000, 26304=>1000, 26305=>1000, 26306=>1000, 26307=>1000, 
+	26308=>1000, 26311=>1000, 26312=>1000, 26313=>1000, 26316=>1000, 26318=>1000, 26319=>1000, 26324=>1000, 26326=>1000, 26329=>1000, 26330=>1000, 26331=>1000, 26332=>1000, 26333=>1000, 26335=>1000, 26336=>1000, 
+	26342=>1000, 26344=>1000, 26345=>1000, 26347=>1000, 26348=>1000, 26350=>1000, 26352=>1000, 26354=>1000, 26355=>1000, 26356=>1000, 26357=>1000, 26359=>1000, 26360=>1000, 26361=>1000, 26362=>1000, 26363=>1000, 
+	26364=>1000, 26365=>1000, 26366=>1000, 26367=>1000, 26368=>1000, 26371=>1000, 26373=>1000, 26375=>1000, 26376=>1000, 26377=>1000, 26379=>1000, 26381=>1000, 26382=>1000, 26383=>1000, 26387=>1000, 26388=>1000, 
+	26389=>1000, 26390=>1000, 26391=>1000, 26393=>1000, 26395=>1000, 26396=>1000, 26397=>1000, 26398=>1000, 26399=>1000, 26400=>1000, 26402=>1000, 26406=>1000, 26407=>1000, 26408=>1000, 26410=>1000, 26411=>1000, 
+	26412=>1000, 26413=>1000, 26414=>1000, 26417=>1000, 26419=>1000, 26420=>1000, 26422=>1000, 26423=>1000, 26424=>1000, 26426=>1000, 26429=>1000, 26430=>1000, 26431=>1000, 26433=>1000, 26437=>1000, 26438=>1000, 
+	26439=>1000, 26440=>1000, 26441=>1000, 26444=>1000, 26446=>1000, 26447=>1000, 26448=>1000, 26449=>1000, 26451=>1000, 26452=>1000, 26453=>1000, 26454=>1000, 26457=>1000, 26460=>1000, 26461=>1000, 26462=>1000, 
+	26463=>1000, 26464=>1000, 26465=>1000, 26466=>1000, 26467=>1000, 26468=>1000, 26469=>1000, 26470=>1000, 26474=>1000, 26476=>1000, 26477=>1000, 26478=>1000, 26479=>1000, 26480=>1000, 26481=>1000, 26482=>1000, 
+	26483=>1000, 26484=>1000, 26485=>1000, 26486=>1000, 26487=>1000, 26491=>1000, 26492=>1000, 26494=>1000, 26495=>1000, 26497=>1000, 26500=>1000, 26501=>1000, 26503=>1000, 26505=>1000, 26507=>1000, 26508=>1000, 
+	26510=>1000, 26511=>1000, 26512=>1000, 26513=>1000, 26515=>1000, 26517=>1000, 26518=>1000, 26519=>1000, 26520=>1000, 26521=>1000, 26522=>1000, 26523=>1000, 26524=>1000, 26525=>1000, 26528=>1000, 26529=>1000, 
+	26530=>1000, 26534=>1000, 26537=>1000, 26543=>1000, 26544=>1000, 26545=>1000, 26546=>1000, 26547=>1000, 26548=>1000, 26549=>1000, 26550=>1000, 26551=>1000, 26552=>1000, 26553=>1000, 26555=>1000, 26556=>1000, 
+	26557=>1000, 26560=>1000, 26561=>1000, 26562=>1000, 26563=>1000, 26564=>1000, 26565=>1000, 26566=>1000, 26568=>1000, 26569=>1000, 26570=>1000, 26574=>1000, 26575=>1000, 26576=>1000, 26577=>1000, 26578=>1000, 
+	26579=>1000, 26580=>1000, 26583=>1000, 26584=>1000, 26585=>1000, 26586=>1000, 26588=>1000, 26589=>1000, 26590=>1000, 26593=>1000, 26594=>1000, 26596=>1000, 26598=>1000, 26599=>1000, 26601=>1000, 26604=>1000, 
+	26606=>1000, 26607=>1000, 26608=>1000, 26609=>1000, 26610=>1000, 26611=>1000, 26612=>1000, 26613=>1000, 26614=>1000, 26615=>1000, 26617=>1000, 26619=>1000, 26622=>1000, 26623=>1000, 26625=>1000, 26626=>1000, 
+	26627=>1000, 26628=>1000, 26643=>1000, 26644=>1000, 26646=>1000, 26647=>1000, 26649=>1000, 26653=>1000, 26654=>1000, 26655=>1000, 26657=>1000, 26658=>1000, 26663=>1000, 26664=>1000, 26665=>1000, 26666=>1000, 
+	26667=>1000, 26668=>1000, 26669=>1000, 26671=>1000, 26672=>1000, 26673=>1000, 26674=>1000, 26675=>1000, 26676=>1000, 26680=>1000, 26681=>1000, 26683=>1000, 26684=>1000, 26685=>1000, 26687=>1000, 26688=>1000, 
+	26689=>1000, 26690=>1000, 26691=>1000, 26692=>1000, 26693=>1000, 26694=>1000, 26696=>1000, 26698=>1000, 26700=>1000, 26701=>1000, 26702=>1000, 26704=>1000, 26705=>1000, 26706=>1000, 26707=>1000, 26708=>1000, 
+	26709=>1000, 26711=>1000, 26712=>1000, 26713=>1000, 26715=>1000, 26716=>1000, 26717=>1000, 26719=>1000, 26723=>1000, 26727=>1000, 26731=>1000, 26734=>1000, 26735=>1000, 26736=>1000, 26737=>1000, 26738=>1000, 
+	26740=>1000, 26741=>1000, 26742=>1000, 26743=>1000, 26745=>1000, 26746=>1000, 26747=>1000, 26748=>1000, 26750=>1000, 26751=>1000, 26753=>1000, 26754=>1000, 26755=>1000, 26756=>1000, 26757=>1000, 26758=>1000, 
+	26760=>1000, 26765=>1000, 26767=>1000, 26771=>1000, 26772=>1000, 26774=>1000, 26775=>1000, 26776=>1000, 26778=>1000, 26779=>1000, 26780=>1000, 26781=>1000, 26783=>1000, 26784=>1000, 26785=>1000, 26786=>1000, 
+	26787=>1000, 26789=>1000, 26790=>1000, 26791=>1000, 26792=>1000, 26793=>1000, 26794=>1000, 26797=>1000, 26798=>1000, 26799=>1000, 26800=>1000, 26801=>1000, 26802=>1000, 26803=>1000, 26805=>1000, 26806=>1000, 
+	26809=>1000, 26810=>1000, 26811=>1000, 26812=>1000, 26820=>1000, 26821=>1000, 26822=>1000, 26824=>1000, 26825=>1000, 26826=>1000, 26827=>1000, 26828=>1000, 26829=>1000, 26831=>1000, 26832=>1000, 26833=>1000, 
+	26834=>1000, 26835=>1000, 26836=>1000, 26837=>1000, 26838=>1000, 26839=>1000, 26840=>1000, 26841=>1000, 26842=>1000, 26844=>1000, 26845=>1000, 26847=>1000, 26848=>1000, 26849=>1000, 26851=>1000, 26853=>1000, 
+	26855=>1000, 26856=>1000, 26858=>1000, 26859=>1000, 26860=>1000, 26861=>1000, 26862=>1000, 26863=>1000, 26864=>1000, 26865=>1000, 26866=>1000, 26869=>1000, 26870=>1000, 26873=>1000, 26874=>1000, 26875=>1000, 
+	26876=>1000, 26877=>1000, 26880=>1000, 26881=>1000, 26884=>1000, 26885=>1000, 26886=>1000, 26888=>1000, 26889=>1000, 26890=>1000, 26891=>1000, 26892=>1000, 26893=>1000, 26894=>1000, 26895=>1000, 26896=>1000, 
+	26897=>1000, 26898=>1000, 26899=>1000, 26902=>1000, 26903=>1000, 26905=>1000, 26906=>1000, 26907=>1000, 26908=>1000, 26913=>1000, 26914=>1000, 26915=>1000, 26917=>1000, 26918=>1000, 26920=>1000, 26922=>1000, 
+	26928=>1000, 26929=>1000, 26931=>1000, 26932=>1000, 26933=>1000, 26934=>1000, 26936=>1000, 26937=>1000, 26939=>1000, 26941=>1000, 26943=>1000, 26946=>1000, 26949=>1000, 26953=>1000, 26954=>1000, 26958=>1000, 
+	26963=>1000, 26964=>1000, 26965=>1000, 26967=>1000, 26969=>1000, 26970=>1000, 26971=>1000, 26972=>1000, 26973=>1000, 26974=>1000, 26976=>1000, 26977=>1000, 26978=>1000, 26979=>1000, 26980=>1000, 26981=>1000, 
+	26982=>1000, 26984=>1000, 26985=>1000, 26986=>1000, 26987=>1000, 26988=>1000, 26989=>1000, 26990=>1000, 26991=>1000, 26992=>1000, 26993=>1000, 26994=>1000, 26995=>1000, 26996=>1000, 26997=>1000, 26999=>1000, 
+	27000=>1000, 27001=>1000, 27002=>1000, 27003=>1000, 27004=>1000, 27005=>1000, 27006=>1000, 27007=>1000, 27008=>1000, 27009=>1000, 27010=>1000, 27018=>1000, 27021=>1000, 27022=>1000, 27025=>1000, 27026=>1000, 
+	27028=>1000, 27029=>1000, 27030=>1000, 27032=>1000, 27035=>1000, 27036=>1000, 27040=>1000, 27041=>1000, 27045=>1000, 27046=>1000, 27047=>1000, 27048=>1000, 27051=>1000, 27053=>1000, 27054=>1000, 27055=>1000, 
+	27057=>1000, 27058=>1000, 27060=>1000, 27063=>1000, 27064=>1000, 27066=>1000, 27067=>1000, 27068=>1000, 27070=>1000, 27071=>1000, 27073=>1000, 27075=>1000, 27077=>1000, 27079=>1000, 27080=>1000, 27082=>1000, 
+	27083=>1000, 27084=>1000, 27085=>1000, 27086=>1000, 27088=>1000, 27089=>1000, 27091=>1000, 27094=>1000, 27095=>1000, 27096=>1000, 27097=>1000, 27101=>1000, 27102=>1000, 27106=>1000, 27109=>1000, 27111=>1000, 
+	27112=>1000, 27115=>1000, 27117=>1000, 27118=>1000, 27119=>1000, 27121=>1000, 27122=>1000, 27123=>1000, 27125=>1000, 27129=>1000, 27131=>1000, 27133=>1000, 27134=>1000, 27135=>1000, 27136=>1000, 27137=>1000, 
+	27138=>1000, 27139=>1000, 27141=>1000, 27146=>1000, 27147=>1000, 27148=>1000, 27151=>1000, 27153=>1000, 27154=>1000, 27155=>1000, 27156=>1000, 27157=>1000, 27159=>1000, 27161=>1000, 27162=>1000, 27163=>1000, 
+	27165=>1000, 27166=>1000, 27167=>1000, 27168=>1000, 27169=>1000, 27170=>1000, 27171=>1000, 27172=>1000, 27176=>1000, 27177=>1000, 27178=>1000, 27179=>1000, 27182=>1000, 27184=>1000, 27186=>1000, 27188=>1000, 
+	27189=>1000, 27190=>1000, 27191=>1000, 27192=>1000, 27193=>1000, 27194=>1000, 27195=>1000, 27197=>1000, 27198=>1000, 27199=>1000, 27204=>1000, 27205=>1000, 27206=>1000, 27207=>1000, 27208=>1000, 27209=>1000, 
+	27210=>1000, 27211=>1000, 27214=>1000, 27216=>1000, 27217=>1000, 27218=>1000, 27221=>1000, 27222=>1000, 27224=>1000, 27225=>1000, 27227=>1000, 27231=>1000, 27233=>1000, 27234=>1000, 27236=>1000, 27238=>1000, 
+	27239=>1000, 27242=>1000, 27243=>1000, 27249=>1000, 27250=>1000, 27251=>1000, 27256=>1000, 27262=>1000, 27263=>1000, 27264=>1000, 27265=>1000, 27267=>1000, 27268=>1000, 27270=>1000, 27271=>1000, 27273=>1000, 
+	27275=>1000, 27277=>1000, 27278=>1000, 27280=>1000, 27281=>1000, 27287=>1000, 27291=>1000, 27292=>1000, 27293=>1000, 27294=>1000, 27295=>1000, 27296=>1000, 27298=>1000, 27299=>1000, 27301=>1000, 27306=>1000, 
+	27307=>1000, 27308=>1000, 27310=>1000, 27311=>1000, 27312=>1000, 27313=>1000, 27315=>1000, 27316=>1000, 27320=>1000, 27323=>1000, 27325=>1000, 27326=>1000, 27327=>1000, 27329=>1000, 27330=>1000, 27331=>1000, 
+	27334=>1000, 27336=>1000, 27337=>1000, 27340=>1000, 27344=>1000, 27345=>1000, 27347=>1000, 27348=>1000, 27349=>1000, 27350=>1000, 27354=>1000, 27355=>1000, 27356=>1000, 27357=>1000, 27358=>1000, 27359=>1000, 
+	27362=>1000, 27364=>1000, 27367=>1000, 27368=>1000, 27370=>1000, 27372=>1000, 27376=>1000, 27377=>1000, 27378=>1000, 27386=>1000, 27387=>1000, 27388=>1000, 27389=>1000, 27394=>1000, 27395=>1000, 27396=>1000, 
+	27397=>1000, 27398=>1000, 27399=>1000, 27401=>1000, 27402=>1000, 27407=>1000, 27408=>1000, 27409=>1000, 27410=>1000, 27414=>1000, 27415=>1000, 27419=>1000, 27421=>1000, 27422=>1000, 27423=>1000, 27424=>1000, 
+	27425=>1000, 27427=>1000, 27428=>1000, 27431=>1000, 27432=>1000, 27435=>1000, 27436=>1000, 27439=>1000, 27442=>1000, 27445=>1000, 27446=>1000, 27447=>1000, 27448=>1000, 27449=>1000, 27450=>1000, 27451=>1000, 
+	27453=>1000, 27454=>1000, 27455=>1000, 27459=>1000, 27462=>1000, 27463=>1000, 27465=>1000, 27466=>1000, 27468=>1000, 27469=>1000, 27470=>1000, 27472=>1000, 27474=>1000, 27475=>1000, 27476=>1000, 27478=>1000, 
+	27480=>1000, 27481=>1000, 27483=>1000, 27485=>1000, 27487=>1000, 27488=>1000, 27489=>1000, 27490=>1000, 27491=>1000, 27492=>1000, 27494=>1000, 27495=>1000, 27497=>1000, 27498=>1000, 27499=>1000, 27502=>1000, 
+	27503=>1000, 27504=>1000, 27507=>1000, 27508=>1000, 27509=>1000, 27512=>1000, 27513=>1000, 27515=>1000, 27517=>1000, 27518=>1000, 27519=>1000, 27520=>1000, 27522=>1000, 27523=>1000, 27524=>1000, 27525=>1000, 
+	27526=>1000, 27529=>1000, 27530=>1000, 27531=>1000, 27533=>1000, 27541=>1000, 27542=>1000, 27543=>1000, 27544=>1000, 27547=>1000, 27550=>1000, 27551=>1000, 27552=>1000, 27554=>1000, 27555=>1000, 27556=>1000, 
+	27560=>1000, 27561=>1000, 27562=>1000, 27563=>1000, 27564=>1000, 27565=>1000, 27566=>1000, 27567=>1000, 27568=>1000, 27569=>1000, 27570=>1000, 27571=>1000, 27572=>1000, 27573=>1000, 27575=>1000, 27576=>1000, 
+	27577=>1000, 27578=>1000, 27579=>1000, 27580=>1000, 27581=>1000, 27582=>1000, 27583=>1000, 27584=>1000, 27587=>1000, 27588=>1000, 27589=>1000, 27590=>1000, 27593=>1000, 27595=>1000, 27596=>1000, 27597=>1000, 
+	27598=>1000, 27602=>1000, 27603=>1000, 27604=>1000, 27606=>1000, 27608=>1000, 27610=>1000, 27611=>1000, 27615=>1000, 27617=>1000, 27619=>1000, 27622=>1000, 27623=>1000, 27627=>1000, 27628=>1000, 27630=>1000, 
+	27631=>1000, 27633=>1000, 27635=>1000, 27639=>1000, 27641=>1000, 27647=>1000, 27650=>1000, 27652=>1000, 27653=>1000, 27656=>1000, 27657=>1000, 27661=>1000, 27662=>1000, 27663=>1000, 27664=>1000, 27665=>1000, 
+	27666=>1000, 27667=>1000, 27668=>1000, 27671=>1000, 27673=>1000, 27675=>1000, 27679=>1000, 27683=>1000, 27684=>1000, 27686=>1000, 27687=>1000, 27688=>1000, 27692=>1000, 27694=>1000, 27699=>1000, 27700=>1000, 
+	27701=>1000, 27702=>1000, 27703=>1000, 27704=>1000, 27706=>1000, 27707=>1000, 27710=>1000, 27711=>1000, 27712=>1000, 27713=>1000, 27714=>1000, 27722=>1000, 27723=>1000, 27725=>1000, 27726=>1000, 27727=>1000, 
+	27728=>1000, 27730=>1000, 27732=>1000, 27733=>1000, 27735=>1000, 27737=>1000, 27738=>1000, 27739=>1000, 27740=>1000, 27741=>1000, 27742=>1000, 27743=>1000, 27744=>1000, 27746=>1000, 27751=>1000, 27752=>1000, 
+	27754=>1000, 27755=>1000, 27757=>1000, 27759=>1000, 27760=>1000, 27762=>1000, 27763=>1000, 27764=>1000, 27766=>1000, 27768=>1000, 27769=>1000, 27770=>1000, 27771=>1000, 27773=>1000, 27774=>1000, 27777=>1000, 
+	27778=>1000, 27779=>1000, 27781=>1000, 27782=>1000, 27783=>1000, 27784=>1000, 27785=>1000, 27788=>1000, 27789=>1000, 27792=>1000, 27794=>1000, 27795=>1000, 27796=>1000, 27797=>1000, 27798=>1000, 27799=>1000, 
+	27800=>1000, 27801=>1000, 27802=>1000, 27803=>1000, 27804=>1000, 27807=>1000, 27809=>1000, 27810=>1000, 27819=>1000, 27822=>1000, 27824=>1000, 27825=>1000, 27826=>1000, 27827=>1000, 27828=>1000, 27832=>1000, 
+	27833=>1000, 27834=>1000, 27835=>1000, 27836=>1000, 27837=>1000, 27838=>1000, 27839=>1000, 27841=>1000, 27842=>1000, 27844=>1000, 27845=>1000, 27846=>1000, 27849=>1000, 27850=>1000, 27852=>1000, 27853=>1000, 
+	27855=>1000, 27856=>1000, 27857=>1000, 27858=>1000, 27859=>1000, 27860=>1000, 27861=>1000, 27862=>1000, 27863=>1000, 27865=>1000, 27866=>1000, 27867=>1000, 27868=>1000, 27869=>1000, 27872=>1000, 27873=>1000, 
+	27874=>1000, 27875=>1000, 27877=>1000, 27879=>1000, 27880=>1000, 27881=>1000, 27882=>1000, 27883=>1000, 27884=>1000, 27886=>1000, 27887=>1000, 27888=>1000, 27889=>1000, 27890=>1000, 27891=>1000, 27892=>1000, 
+	27908=>1000, 27911=>1000, 27914=>1000, 27915=>1000, 27916=>1000, 27918=>1000, 27919=>1000, 27921=>1000, 27922=>1000, 27923=>1000, 27927=>1000, 27929=>1000, 27930=>1000, 27931=>1000, 27934=>1000, 27935=>1000, 
+	27941=>1000, 27942=>1000, 27943=>1000, 27944=>1000, 27945=>1000, 27946=>1000, 27947=>1000, 27950=>1000, 27951=>1000, 27953=>1000, 27954=>1000, 27955=>1000, 27957=>1000, 27958=>1000, 27960=>1000, 27961=>1000, 
+	27963=>1000, 27964=>1000, 27965=>1000, 27966=>1000, 27967=>1000, 27969=>1000, 27972=>1000, 27973=>1000, 27991=>1000, 27993=>1000, 27994=>1000, 27996=>1000, 27998=>1000, 27999=>1000, 28001=>1000, 28003=>1000, 
+	28004=>1000, 28005=>1000, 28006=>1000, 28007=>1000, 28009=>1000, 28010=>1000, 28012=>1000, 28014=>1000, 28015=>1000, 28016=>1000, 28020=>1000, 28023=>1000, 28024=>1000, 28025=>1000, 28028=>1000, 28034=>1000, 
+	28037=>1000, 28039=>1000, 28040=>1000, 28044=>1000, 28046=>1000, 28049=>1000, 28050=>1000, 28051=>1000, 28052=>1000, 28053=>1000, 28054=>1000, 28055=>1000, 28056=>1000, 28057=>1000, 28059=>1000, 28060=>1000, 
+	28074=>1000, 28076=>1000, 28079=>1000, 28082=>1000, 28084=>1000, 28085=>1000, 28087=>1000, 28088=>1000, 28089=>1000, 28092=>1000, 28093=>1000, 28095=>1000, 28096=>1000, 28100=>1000, 28101=>1000, 28102=>1000, 
+	28103=>1000, 28104=>1000, 28106=>1000, 28107=>1000, 28108=>1000, 28110=>1000, 28111=>1000, 28113=>1000, 28114=>1000, 28117=>1000, 28118=>1000, 28120=>1000, 28121=>1000, 28123=>1000, 28125=>1000, 28126=>1000, 
+	28127=>1000, 28128=>1000, 28129=>1000, 28130=>1000, 28132=>1000, 28133=>1000, 28134=>1000, 28136=>1000, 28137=>1000, 28138=>1000, 28139=>1000, 28140=>1000, 28142=>1000, 28143=>1000, 28144=>1000, 28145=>1000, 
+	28146=>1000, 28147=>1000, 28148=>1000, 28149=>1000, 28150=>1000, 28151=>1000, 28152=>1000, 28153=>1000, 28154=>1000, 28155=>1000, 28156=>1000, 28160=>1000, 28164=>1000, 28165=>1000, 28167=>1000, 28168=>1000, 
+	28169=>1000, 28170=>1000, 28171=>1000, 28179=>1000, 28181=>1000, 28185=>1000, 28186=>1000, 28187=>1000, 28189=>1000, 28190=>1000, 28191=>1000, 28192=>1000, 28193=>1000, 28194=>1000, 28195=>1000, 28196=>1000, 
+	28197=>1000, 28198=>1000, 28199=>1000, 28201=>1000, 28203=>1000, 28204=>1000, 28205=>1000, 28206=>1000, 28207=>1000, 28210=>1000, 28214=>1000, 28216=>1000, 28217=>1000, 28218=>1000, 28219=>1000, 28220=>1000, 
+	28222=>1000, 28227=>1000, 28228=>1000, 28229=>1000, 28232=>1000, 28233=>1000, 28234=>1000, 28235=>1000, 28237=>1000, 28238=>1000, 28239=>1000, 28241=>1000, 28242=>1000, 28243=>1000, 28244=>1000, 28246=>1000, 
+	28247=>1000, 28248=>1000, 28251=>1000, 28252=>1000, 28253=>1000, 28254=>1000, 28255=>1000, 28258=>1000, 28259=>1000, 28263=>1000, 28264=>1000, 28267=>1000, 28270=>1000, 28271=>1000, 28274=>1000, 28275=>1000, 
+	28278=>1000, 28283=>1000, 28285=>1000, 28286=>1000, 28287=>1000, 28288=>1000, 28290=>1000, 28300=>1000, 28301=>1000, 28303=>1000, 28304=>1000, 28307=>1000, 28310=>1000, 28312=>1000, 28313=>1000, 28316=>1000, 
+	28317=>1000, 28319=>1000, 28320=>1000, 28322=>1000, 28325=>1000, 28327=>1000, 28330=>1000, 28333=>1000, 28334=>1000, 28335=>1000, 28337=>1000, 28338=>1000, 28339=>1000, 28342=>1000, 28343=>1000, 28346=>1000, 
+	28347=>1000, 28349=>1000, 28351=>1000, 28352=>1000, 28353=>1000, 28354=>1000, 28355=>1000, 28356=>1000, 28357=>1000, 28359=>1000, 28360=>1000, 28361=>1000, 28362=>1000, 28363=>1000, 28364=>1000, 28365=>1000, 
+	28366=>1000, 28367=>1000, 28369=>1000, 28371=>1000, 28372=>1000, 28373=>1000, 28381=>1000, 28382=>1000, 28395=>1000, 28396=>1000, 28397=>1000, 28398=>1000, 28399=>1000, 28402=>1000, 28404=>1000, 28407=>1000, 
+	28408=>1000, 28409=>1000, 28411=>1000, 28413=>1000, 28414=>1000, 28415=>1000, 28417=>1000, 28418=>1000, 28420=>1000, 28422=>1000, 28424=>1000, 28425=>1000, 28426=>1000, 28428=>1000, 28429=>1000, 28431=>1000, 
+	28433=>1000, 28435=>1000, 28436=>1000, 28437=>1000, 28438=>1000, 28440=>1000, 28442=>1000, 28443=>1000, 28448=>1000, 28450=>1000, 28451=>1000, 28454=>1000, 28457=>1000, 28458=>1000, 28459=>1000, 28460=>1000, 
+	28461=>1000, 28463=>1000, 28464=>1000, 28465=>1000, 28466=>1000, 28467=>1000, 28470=>1000, 28472=>1000, 28475=>1000, 28476=>1000, 28478=>1000, 28479=>1000, 28481=>1000, 28485=>1000, 28495=>1000, 28497=>1000, 
+	28498=>1000, 28499=>1000, 28500=>1000, 28503=>1000, 28504=>1000, 28505=>1000, 28506=>1000, 28507=>1000, 28508=>1000, 28509=>1000, 28510=>1000, 28511=>1000, 28513=>1000, 28514=>1000, 28516=>1000, 28518=>1000, 
+	28520=>1000, 28524=>1000, 28525=>1000, 28526=>1000, 28527=>1000, 28528=>1000, 28532=>1000, 28536=>1000, 28538=>1000, 28540=>1000, 28541=>1000, 28542=>1000, 28544=>1000, 28545=>1000, 28546=>1000, 28547=>1000, 
+	28548=>1000, 28550=>1000, 28551=>1000, 28552=>1000, 28555=>1000, 28556=>1000, 28557=>1000, 28558=>1000, 28560=>1000, 28561=>1000, 28562=>1000, 28563=>1000, 28564=>1000, 28566=>1000, 28567=>1000, 28570=>1000, 
+	28575=>1000, 28576=>1000, 28577=>1000, 28579=>1000, 28580=>1000, 28581=>1000, 28582=>1000, 28583=>1000, 28584=>1000, 28586=>1000, 28590=>1000, 28591=>1000, 28592=>1000, 28593=>1000, 28595=>1000, 28597=>1000, 
+	28598=>1000, 28601=>1000, 28604=>1000, 28608=>1000, 28609=>1000, 28610=>1000, 28611=>1000, 28613=>1000, 28614=>1000, 28615=>1000, 28616=>1000, 28618=>1000, 28628=>1000, 28629=>1000, 28632=>1000, 28634=>1000, 
+	28635=>1000, 28638=>1000, 28639=>1000, 28640=>1000, 28641=>1000, 28644=>1000, 28648=>1000, 28649=>1000, 28651=>1000, 28652=>1000, 28654=>1000, 28655=>1000, 28656=>1000, 28657=>1000, 28659=>1000, 28661=>1000, 
+	28662=>1000, 28665=>1000, 28666=>1000, 28668=>1000, 28669=>1000, 28670=>1000, 28672=>1000, 28673=>1000, 28677=>1000, 28678=>1000, 28679=>1000, 28681=>1000, 28683=>1000, 28685=>1000, 28687=>1000, 28689=>1000, 
+	28693=>1000, 28695=>1000, 28696=>1000, 28698=>1000, 28699=>1000, 28701=>1000, 28702=>1000, 28703=>1000, 28704=>1000, 28707=>1000, 28710=>1000, 28711=>1000, 28712=>1000, 28716=>1000, 28719=>1000, 28720=>1000, 
+	28722=>1000, 28724=>1000, 28727=>1000, 28729=>1000, 28732=>1000, 28734=>1000, 28739=>1000, 28740=>1000, 28744=>1000, 28745=>1000, 28746=>1000, 28747=>1000, 28748=>1000, 28750=>1000, 28753=>1000, 28756=>1000, 
+	28757=>1000, 28760=>1000, 28765=>1000, 28766=>1000, 28771=>1000, 28772=>1000, 28773=>1000, 28779=>1000, 28780=>1000, 28782=>1000, 28783=>1000, 28784=>1000, 28789=>1000, 28790=>1000, 28792=>1000, 28796=>1000, 
+	28797=>1000, 28798=>1000, 28801=>1000, 28805=>1000, 28806=>1000, 28809=>1000, 28810=>1000, 28814=>1000, 28818=>1000, 28820=>1000, 28821=>1000, 28822=>1000, 28823=>1000, 28824=>1000, 28825=>1000, 28827=>1000, 
+	28836=>1000, 28843=>1000, 28844=>1000, 28845=>1000, 28846=>1000, 28847=>1000, 28848=>1000, 28849=>1000, 28851=>1000, 28852=>1000, 28855=>1000, 28856=>1000, 28857=>1000, 28858=>1000, 28859=>1000, 28872=>1000, 
+	28874=>1000, 28875=>1000, 28879=>1000, 28881=>1000, 28883=>1000, 28884=>1000, 28885=>1000, 28886=>1000, 28888=>1000, 28889=>1000, 28892=>1000, 28893=>1000, 28895=>1000, 28900=>1000, 28913=>1000, 28921=>1000, 
+	28922=>1000, 28925=>1000, 28931=>1000, 28932=>1000, 28933=>1000, 28934=>1000, 28935=>1000, 28937=>1000, 28939=>1000, 28940=>1000, 28943=>1000, 28948=>1000, 28953=>1000, 28954=>1000, 28956=>1000, 28958=>1000, 
+	28960=>1000, 28961=>1000, 28966=>1000, 28971=>1000, 28973=>1000, 28975=>1000, 28976=>1000, 28977=>1000, 28982=>1000, 28984=>1000, 28988=>1000, 28993=>1000, 28997=>1000, 28998=>1000, 28999=>1000, 29001=>1000, 
+	29002=>1000, 29003=>1000, 29004=>1000, 29006=>1000, 29008=>1000, 29010=>1000, 29013=>1000, 29014=>1000, 29015=>1000, 29017=>1000, 29018=>1000, 29020=>1000, 29022=>1000, 29024=>1000, 29026=>1000, 29028=>1000, 
+	29029=>1000, 29030=>1000, 29031=>1000, 29032=>1000, 29033=>1000, 29036=>1000, 29038=>1000, 29049=>1000, 29053=>1000, 29056=>1000, 29060=>1000, 29061=>1000, 29063=>1000, 29064=>1000, 29066=>1000, 29068=>1000, 
+	29071=>1000, 29074=>1000, 29076=>1000, 29077=>1000, 29081=>1000, 29082=>1000, 29083=>1000, 29087=>1000, 29088=>1000, 29090=>1000, 29096=>1000, 29100=>1000, 29103=>1000, 29104=>1000, 29105=>1000, 29106=>1000, 
+	29107=>1000, 29113=>1000, 29114=>1000, 29118=>1000, 29119=>1000, 29120=>1000, 29121=>1000, 29123=>1000, 29124=>1000, 29128=>1000, 29129=>1000, 29131=>1000, 29132=>1000, 29134=>1000, 29136=>1000, 29138=>1000, 
+	29139=>1000, 29140=>1000, 29141=>1000, 29142=>1000, 29143=>1000, 29145=>1000, 29146=>1000, 29148=>1000, 29151=>1000, 29152=>1000, 29157=>1000, 29158=>1000, 29159=>1000, 29164=>1000, 29165=>1000, 29166=>1000, 
+	29173=>1000, 29176=>1000, 29177=>1000, 29179=>1000, 29180=>1000, 29182=>1000, 29183=>1000, 29184=>1000, 29190=>1000, 29191=>1000, 29192=>1000, 29193=>1000, 29197=>1000, 29200=>1000, 29203=>1000, 29207=>1000, 
+	29210=>1000, 29211=>1000, 29213=>1000, 29215=>1000, 29220=>1000, 29224=>1000, 29226=>1000, 29227=>1000, 29228=>1000, 29229=>1000, 29231=>1000, 29232=>1000, 29234=>1000, 29236=>1000, 29237=>1000, 29238=>1000, 
+	29240=>1000, 29241=>1000, 29242=>1000, 29243=>1000, 29244=>1000, 29245=>1000, 29246=>1000, 29247=>1000, 29248=>1000, 29249=>1000, 29250=>1000, 29251=>1000, 29253=>1000, 29254=>1000, 29255=>1000, 29256=>1000, 
+	29259=>1000, 29260=>1000, 29262=>1000, 29263=>1000, 29264=>1000, 29266=>1000, 29267=>1000, 29269=>1000, 29270=>1000, 29272=>1000, 29273=>1000, 29274=>1000, 29275=>1000, 29276=>1000, 29277=>1000, 29278=>1000, 
+	29279=>1000, 29280=>1000, 29281=>1000, 29282=>1000, 29283=>1000, 29287=>1000, 29288=>1000, 29289=>1000, 29291=>1000, 29294=>1000, 29295=>1000, 29297=>1000, 29298=>1000, 29300=>1000, 29303=>1000, 29304=>1000, 
+	29305=>1000, 29307=>1000, 29308=>1000, 29309=>1000, 29310=>1000, 29311=>1000, 29312=>1000, 29313=>1000, 29314=>1000, 29316=>1000, 29319=>1000, 29321=>1000, 29325=>1000, 29326=>1000, 29330=>1000, 29331=>1000, 
+	29334=>1000, 29339=>1000, 29344=>1000, 29346=>1000, 29351=>1000, 29352=>1000, 29356=>1000, 29357=>1000, 29358=>1000, 29359=>1000, 29361=>1000, 29362=>1000, 29364=>1000, 29366=>1000, 29369=>1000, 29374=>1000, 
+	29377=>1000, 29378=>1000, 29379=>1000, 29380=>1000, 29382=>1000, 29383=>1000, 29385=>1000, 29388=>1000, 29390=>1000, 29392=>1000, 29394=>1000, 29397=>1000, 29398=>1000, 29399=>1000, 29400=>1000, 29401=>1000, 
+	29403=>1000, 29407=>1000, 29408=>1000, 29409=>1000, 29410=>1000, 29413=>1000, 29417=>1000, 29420=>1000, 29421=>1000, 29427=>1000, 29428=>1000, 29431=>1000, 29432=>1000, 29433=>1000, 29434=>1000, 29435=>1000, 
+	29436=>1000, 29437=>1000, 29438=>1000, 29442=>1000, 29444=>1000, 29445=>1000, 29447=>1000, 29450=>1000, 29451=>1000, 29453=>1000, 29458=>1000, 29459=>1000, 29462=>1000, 29463=>1000, 29464=>1000, 29465=>1000, 
+	29467=>1000, 29468=>1000, 29469=>1000, 29470=>1000, 29471=>1000, 29474=>1000, 29476=>1000, 29477=>1000, 29479=>1000, 29480=>1000, 29481=>1000, 29482=>1000, 29483=>1000, 29484=>1000, 29486=>1000, 29487=>1000, 
+	29489=>1000, 29490=>1000, 29492=>1000, 29493=>1000, 29494=>1000, 29495=>1000, 29498=>1000, 29499=>1000, 29501=>1000, 29502=>1000, 29503=>1000, 29507=>1000, 29508=>1000, 29509=>1000, 29517=>1000, 29518=>1000, 
+	29519=>1000, 29520=>1000, 29522=>1000, 29526=>1000, 29527=>1000, 29528=>1000, 29533=>1000, 29534=>1000, 29535=>1000, 29536=>1000, 29539=>1000, 29542=>1000, 29543=>1000, 29544=>1000, 29545=>1000, 29546=>1000, 
+	29547=>1000, 29548=>1000, 29550=>1000, 29551=>1000, 29552=>1000, 29553=>1000, 29554=>1000, 29557=>1000, 29559=>1000, 29560=>1000, 29561=>1000, 29562=>1000, 29563=>1000, 29564=>1000, 29568=>1000, 29569=>1000, 
+	29571=>1000, 29572=>1000, 29573=>1000, 29574=>1000, 29575=>1000, 29577=>1000, 29579=>1000, 29582=>1000, 29584=>1000, 29587=>1000, 29589=>1000, 29590=>1000, 29591=>1000, 29592=>1000, 29596=>1000, 29598=>1000, 
+	29599=>1000, 29600=>1000, 29602=>1000, 29605=>1000, 29606=>1000, 29609=>1000, 29610=>1000, 29611=>1000, 29613=>1000, 29618=>1000, 29619=>1000, 29621=>1000, 29623=>1000, 29625=>1000, 29627=>1000, 29628=>1000, 
+	29629=>1000, 29631=>1000, 29632=>1000, 29634=>1000, 29637=>1000, 29638=>1000, 29640=>1000, 29641=>1000, 29642=>1000, 29643=>1000, 29644=>1000, 29645=>1000, 29646=>1000, 29647=>1000, 29650=>1000, 29651=>1000, 
+	29654=>1000, 29657=>1000, 29661=>1000, 29662=>1000, 29664=>1000, 29665=>1000, 29667=>1000, 29669=>1000, 29670=>1000, 29671=>1000, 29673=>1000, 29674=>1000, 29677=>1000, 29678=>1000, 29681=>1000, 29684=>1000, 
+	29685=>1000, 29687=>1000, 29688=>1000, 29689=>1000, 29690=>1000, 29691=>1000, 29693=>1000, 29694=>1000, 29695=>1000, 29696=>1000, 29697=>1000, 29699=>1000, 29700=>1000, 29701=>1000, 29702=>1000, 29703=>1000, 
+	29705=>1000, 29706=>1000, 29713=>1000, 29722=>1000, 29723=>1000, 29730=>1000, 29732=>1000, 29733=>1000, 29734=>1000, 29736=>1000, 29737=>1000, 29738=>1000, 29739=>1000, 29740=>1000, 29741=>1000, 29742=>1000, 
+	29743=>1000, 29744=>1000, 29745=>1000, 29746=>1000, 29747=>1000, 29748=>1000, 29749=>1000, 29750=>1000, 29753=>1000, 29754=>1000, 29759=>1000, 29760=>1000, 29761=>1000, 29763=>1000, 29764=>1000, 29766=>1000, 
+	29767=>1000, 29771=>1000, 29773=>1000, 29777=>1000, 29778=>1000, 29781=>1000, 29783=>1000, 29785=>1000, 29786=>1000, 29787=>1000, 29788=>1000, 29789=>1000, 29790=>1000, 29791=>1000, 29792=>1000, 29794=>1000, 
+	29795=>1000, 29796=>1000, 29798=>1000, 29799=>1000, 29800=>1000, 29801=>1000, 29802=>1000, 29803=>1000, 29805=>1000, 29806=>1000, 29807=>1000, 29808=>1000, 29809=>1000, 29810=>1000, 29811=>1000, 29814=>1000, 
+	29822=>1000, 29824=>1000, 29825=>1000, 29827=>1000, 29829=>1000, 29830=>1000, 29831=>1000, 29833=>1000, 29835=>1000, 29839=>1000, 29840=>1000, 29841=>1000, 29842=>1000, 29848=>1000, 29849=>1000, 29850=>1000, 
+	29852=>1000, 29854=>1000, 29855=>1000, 29856=>1000, 29857=>1000, 29858=>1000, 29859=>1000, 29862=>1000, 29863=>1000, 29864=>1000, 29865=>1000, 29866=>1000, 29867=>1000, 29870=>1000, 29871=>1000, 29872=>1000, 
+	29873=>1000, 29874=>1000, 29877=>1000, 29881=>1000, 29883=>1000, 29885=>1000, 29887=>1000, 29896=>1000, 29897=>1000, 29898=>1000, 29900=>1000, 29903=>1000, 29904=>1000, 29907=>1000, 29908=>1000, 29912=>1000, 
+	29914=>1000, 29915=>1000, 29916=>1000, 29918=>1000, 29919=>1000, 29920=>1000, 29922=>1000, 29923=>1000, 29924=>1000, 29926=>1000, 29927=>1000, 29928=>1000, 29929=>1000, 29930=>1000, 29931=>1000, 29934=>1000, 
+	29935=>1000, 29936=>1000, 29937=>1000, 29938=>1000, 29940=>1000, 29942=>1000, 29943=>1000, 29944=>1000, 29946=>1000, 29947=>1000, 29948=>1000, 29951=>1000, 29953=>1000, 29955=>1000, 29956=>1000, 29957=>1000, 
+	29958=>1000, 29964=>1000, 29965=>1000, 29966=>1000, 29969=>1000, 29970=>1000, 29971=>1000, 29973=>1000, 29974=>1000, 29975=>1000, 29976=>1000, 29978=>1000, 29980=>1000, 29982=>1000, 29983=>1000, 29984=>1000, 
+	29985=>1000, 29987=>1000, 29988=>1000, 29989=>1000, 29990=>1000, 29991=>1000, 29992=>1000, 29993=>1000, 29994=>1000, 29995=>1000, 29996=>1000, 29999=>1000, 30000=>1000, 30001=>1000, 30002=>1000, 30003=>1000, 
+	30006=>1000, 30007=>1000, 30008=>1000, 30009=>1000, 30010=>1000, 30011=>1000, 30012=>1000, 30013=>1000, 30014=>1000, 30015=>1000, 30016=>1000, 30019=>1000, 30020=>1000, 30022=>1000, 30023=>1000, 30024=>1000, 
+	30025=>1000, 30026=>1000, 30027=>1000, 30028=>1000, 30029=>1000, 30030=>1000, 30031=>1000, 30032=>1000, 30033=>1000, 30034=>1000, 30036=>1000, 30039=>1000, 30041=>1000, 30042=>1000, 30043=>1000, 30044=>1000, 
+	30045=>1000, 30046=>1000, 30047=>1000, 30048=>1000, 30049=>1000, 30050=>1000, 30052=>1000, 30053=>1000, 30054=>1000, 30055=>1000, 30057=>1000, 30058=>1000, 30059=>1000, 30061=>1000, 30063=>1000, 30064=>1000, 
+	30065=>1000, 30067=>1000, 30068=>1000, 30070=>1000, 30071=>1000, 30072=>1000, 30073=>1000, 30074=>1000, 30075=>1000, 30076=>1000, 30077=>1000, 30078=>1000, 30079=>1000, 30081=>1000, 30082=>1000, 30085=>1000, 
+	30086=>1000, 30087=>1000, 30089=>1000, 30090=>1000, 30091=>1000, 30094=>1000, 30095=>1000, 30096=>1000, 30097=>1000, 30098=>1000, 30099=>1000, 30100=>1000, 30101=>1000, 30105=>1000, 30106=>1000, 30108=>1000, 
+	30109=>1000, 30114=>1000, 30115=>1000, 30116=>1000, 30117=>1000, 30123=>1000, 30129=>1000, 30130=>1000, 30131=>1000, 30132=>1000, 30133=>1000, 30136=>1000, 30137=>1000, 30138=>1000, 30140=>1000, 30141=>1000, 
+	30142=>1000, 30143=>1000, 30144=>1000, 30145=>1000, 30146=>1000, 30147=>1000, 30148=>1000, 30149=>1000, 30150=>1000, 30151=>1000, 30154=>1000, 30156=>1000, 30157=>1000, 30158=>1000, 30159=>1000, 30162=>1000, 
+	30164=>1000, 30165=>1000, 30167=>1000, 30168=>1000, 30169=>1000, 30171=>1000, 30172=>1000, 30174=>1000, 30175=>1000, 30176=>1000, 30177=>1000, 30178=>1000, 30179=>1000, 30180=>1000, 30183=>1000, 30185=>1000, 
+	30188=>1000, 30190=>1000, 30191=>1000, 30192=>1000, 30193=>1000, 30194=>1000, 30195=>1000, 30196=>1000, 30201=>1000, 30202=>1000, 30204=>1000, 30206=>1000, 30207=>1000, 30208=>1000, 30209=>1000, 30210=>1000, 
+	30211=>1000, 30212=>1000, 30215=>1000, 30216=>1000, 30217=>1000, 30218=>1000, 30219=>1000, 30220=>1000, 30221=>1000, 30223=>1000, 30226=>1000, 30227=>1000, 30229=>1000, 30230=>1000, 30233=>1000, 30235=>1000, 
+	30236=>1000, 30237=>1000, 30238=>1000, 30239=>1000, 30240=>1000, 30241=>1000, 30242=>1000, 30243=>1000, 30244=>1000, 30245=>1000, 30246=>1000, 30247=>1000, 30249=>1000, 30253=>1000, 30256=>1000, 30258=>1000, 
+	30259=>1000, 30260=>1000, 30261=>1000, 30264=>1000, 30265=>1000, 30266=>1000, 30267=>1000, 30268=>1000, 30272=>1000, 30273=>1000, 30274=>1000, 30275=>1000, 30276=>1000, 30277=>1000, 30278=>1000, 30279=>1000, 
+	30280=>1000, 30281=>1000, 30282=>1000, 30283=>1000, 30284=>1000, 30290=>1000, 30293=>1000, 30294=>1000, 30296=>1000, 30297=>1000, 30300=>1000, 30303=>1000, 30305=>1000, 30306=>1000, 30308=>1000, 30309=>1000, 
+	30311=>1000, 30312=>1000, 30313=>1000, 30314=>1000, 30316=>1000, 30317=>1000, 30318=>1000, 30319=>1000, 30320=>1000, 30321=>1000, 30322=>1000, 30324=>1000, 30326=>1000, 30328=>1000, 30330=>1000, 30331=>1000, 
+	30332=>1000, 30333=>1000, 30334=>1000, 30336=>1000, 30337=>1000, 30338=>1000, 30339=>1000, 30340=>1000, 30341=>1000, 30342=>1000, 30343=>1000, 30344=>1000, 30347=>1000, 30348=>1000, 30349=>1000, 30350=>1000, 
+	30352=>1000, 30355=>1000, 30357=>1000, 30358=>1000, 30361=>1000, 30362=>1000, 30363=>1000, 30364=>1000, 30365=>1000, 30366=>1000, 30367=>1000, 30368=>1000, 30370=>1000, 30371=>1000, 30372=>1000, 30373=>1000, 
+	30374=>1000, 30375=>1000, 30376=>1000, 30378=>1000, 30381=>1000, 30382=>1000, 30384=>1000, 30388=>1000, 30391=>1000, 30392=>1000, 30393=>1000, 30394=>1000, 30397=>1000, 30399=>1000, 30401=>1000, 30402=>1000, 
+	30403=>1000, 30405=>1000, 30406=>1000, 30408=>1000, 30409=>1000, 30410=>1000, 30411=>1000, 30412=>1000, 30413=>1000, 30414=>1000, 30418=>1000, 30420=>1000, 30422=>1000, 30423=>1000, 30425=>1000, 30427=>1000, 
+	30428=>1000, 30430=>1000, 30431=>1000, 30432=>1000, 30433=>1000, 30435=>1000, 30436=>1000, 30437=>1000, 30438=>1000, 30439=>1000, 30440=>1000, 30442=>1000, 30444=>1000, 30446=>1000, 30448=>1000, 30449=>1000, 
+	30450=>1000, 30452=>1000, 30454=>1000, 30456=>1000, 30457=>1000, 30459=>1000, 30460=>1000, 30462=>1000, 30464=>1000, 30465=>1000, 30468=>1000, 30470=>1000, 30471=>1000, 30472=>1000, 30473=>1000, 30474=>1000, 
+	30475=>1000, 30476=>1000, 30478=>1000, 30482=>1000, 30484=>1000, 30485=>1000, 30487=>1000, 30489=>1000, 30490=>1000, 30491=>1000, 30492=>1000, 30494=>1000, 30495=>1000, 30496=>1000, 30498=>1000, 30500=>1000, 
+	30501=>1000, 30502=>1000, 30504=>1000, 30505=>1000, 30509=>1000, 30510=>1000, 30511=>1000, 30516=>1000, 30517=>1000, 30518=>1000, 30519=>1000, 30520=>1000, 30521=>1000, 30522=>1000, 30524=>1000, 30525=>1000, 
+	30526=>1000, 30528=>1000, 30530=>1000, 30533=>1000, 30534=>1000, 30535=>1000, 30538=>1000, 30541=>1000, 30542=>1000, 30543=>1000, 30546=>1000, 30550=>1000, 30551=>1000, 30554=>1000, 30555=>1000, 30556=>1000, 
+	30558=>1000, 30559=>1000, 30560=>1000, 30561=>1000, 30562=>1000, 30563=>1000, 30564=>1000, 30565=>1000, 30566=>1000, 30567=>1000, 30568=>1000, 30570=>1000, 30571=>1000, 30572=>1000, 30576=>1000, 30578=>1000, 
+	30579=>1000, 30580=>1000, 30585=>1000, 30586=>1000, 30589=>1000, 30590=>1000, 30591=>1000, 30592=>1000, 30596=>1000, 30603=>1000, 30604=>1000, 30605=>1000, 30606=>1000, 30609=>1000, 30612=>1000, 30613=>1000, 
+	30614=>1000, 30618=>1000, 30622=>1000, 30623=>1000, 30624=>1000, 30626=>1000, 30629=>1000, 30631=>1000, 30634=>1000, 30636=>1000, 30637=>1000, 30638=>1000, 30639=>1000, 30640=>1000, 30641=>1000, 30643=>1000, 
+	30645=>1000, 30646=>1000, 30649=>1000, 30651=>1000, 30652=>1000, 30653=>1000, 30654=>1000, 30655=>1000, 30659=>1000, 30663=>1000, 30665=>1000, 30669=>1000, 30673=>1000, 30674=>1000, 30677=>1000, 30679=>1000, 
+	30681=>1000, 30682=>1000, 30683=>1000, 30684=>1000, 30686=>1000, 30687=>1000, 30688=>1000, 30690=>1000, 30691=>1000, 30692=>1000, 30693=>1000, 30694=>1000, 30695=>1000, 30697=>1000, 30698=>1000, 30700=>1000, 
+	30701=>1000, 30702=>1000, 30703=>1000, 30704=>1000, 30705=>1000, 30707=>1000, 30708=>1000, 30712=>1000, 30715=>1000, 30716=>1000, 30722=>1000, 30725=>1000, 30726=>1000, 30729=>1000, 30732=>1000, 30733=>1000, 
+	30734=>1000, 30737=>1000, 30738=>1000, 30740=>1000, 30741=>1000, 30749=>1000, 30752=>1000, 30753=>1000, 30754=>1000, 30755=>1000, 30757=>1000, 30758=>1000, 30759=>1000, 30765=>1000, 30766=>1000, 30768=>1000, 
+	30770=>1000, 30772=>1000, 30773=>1000, 30775=>1000, 30778=>1000, 30783=>1000, 30787=>1000, 30788=>1000, 30789=>1000, 30791=>1000, 30792=>1000, 30796=>1000, 30798=>1000, 30802=>1000, 30812=>1000, 30813=>1000, 
+	30814=>1000, 30816=>1000, 30817=>1000, 30819=>1000, 30820=>1000, 30824=>1000, 30826=>1000, 30827=>1000, 30828=>1000, 30830=>1000, 30831=>1000, 30834=>1000, 30836=>1000, 30842=>1000, 30844=>1000, 30846=>1000, 
+	30849=>1000, 30854=>1000, 30855=>1000, 30858=>1000, 30860=>1000, 30861=>1000, 30862=>1000, 30863=>1000, 30865=>1000, 30867=>1000, 30868=>1000, 30869=>1000, 30871=>1000, 30872=>1000, 30874=>1000, 30877=>1000, 
+	30878=>1000, 30879=>1000, 30881=>1000, 30883=>1000, 30884=>1000, 30887=>1000, 30888=>1000, 30889=>1000, 30890=>1000, 30892=>1000, 30893=>1000, 30895=>1000, 30896=>1000, 30897=>1000, 30898=>1000, 30899=>1000, 
+	30901=>1000, 30906=>1000, 30907=>1000, 30908=>1000, 30909=>1000, 30910=>1000, 30911=>1000, 30913=>1000, 30917=>1000, 30918=>1000, 30919=>1000, 30920=>1000, 30921=>1000, 30922=>1000, 30923=>1000, 30924=>1000, 
+	30926=>1000, 30928=>1000, 30929=>1000, 30930=>1000, 30931=>1000, 30932=>1000, 30933=>1000, 30934=>1000, 30938=>1000, 30939=>1000, 30943=>1000, 30944=>1000, 30945=>1000, 30948=>1000, 30950=>1000, 30951=>1000, 
+	30952=>1000, 30954=>1000, 30956=>1000, 30959=>1000, 30962=>1000, 30963=>1000, 30964=>1000, 30966=>1000, 30967=>1000, 30970=>1000, 30971=>1000, 30973=>1000, 30975=>1000, 30976=>1000, 30977=>1000, 30982=>1000, 
+	30983=>1000, 30988=>1000, 30990=>1000, 30992=>1000, 30993=>1000, 30994=>1000, 31001=>1000, 31002=>1000, 31004=>1000, 31006=>1000, 31007=>1000, 31008=>1000, 31013=>1000, 31014=>1000, 31015=>1000, 31017=>1000, 
+	31018=>1000, 31019=>1000, 31020=>1000, 31021=>1000, 31024=>1000, 31025=>1000, 31028=>1000, 31029=>1000, 31034=>1000, 31035=>1000, 31036=>1000, 31037=>1000, 31038=>1000, 31039=>1000, 31040=>1000, 31041=>1000, 
+	31044=>1000, 31045=>1000, 31046=>1000, 31047=>1000, 31048=>1000, 31049=>1000, 31050=>1000, 31051=>1000, 31055=>1000, 31056=>1000, 31057=>1000, 31059=>1000, 31060=>1000, 31061=>1000, 31062=>1000, 31063=>1000, 
+	31064=>1000, 31066=>1000, 31067=>1000, 31068=>1000, 31069=>1000, 31070=>1000, 31071=>1000, 31072=>1000, 31074=>1000, 31077=>1000, 31079=>1000, 31080=>1000, 31081=>1000, 31083=>1000, 31085=>1000, 31090=>1000, 
+	31095=>1000, 31097=>1000, 31098=>1000, 31099=>1000, 31100=>1000, 31102=>1000, 31103=>1000, 31104=>1000, 31105=>1000, 31108=>1000, 31109=>1000, 31114=>1000, 31115=>1000, 31116=>1000, 31117=>1000, 31118=>1000, 
+	31119=>1000, 31121=>1000, 31123=>1000, 31124=>1000, 31125=>1000, 31126=>1000, 31128=>1000, 31131=>1000, 31132=>1000, 31133=>1000, 31137=>1000, 31142=>1000, 31143=>1000, 31144=>1000, 31145=>1000, 31146=>1000, 
+	31147=>1000, 31150=>1000, 31151=>1000, 31152=>1000, 31153=>1000, 31155=>1000, 31156=>1000, 31160=>1000, 31161=>1000, 31162=>1000, 31163=>1000, 31165=>1000, 31166=>1000, 31167=>1000, 31168=>1000, 31169=>1000, 
+	31170=>1000, 31172=>1000, 31175=>1000, 31176=>1000, 31177=>1000, 31178=>1000, 31179=>1000, 31183=>1000, 31185=>1000, 31186=>1000, 31188=>1000, 31189=>1000, 31190=>1000, 31192=>1000, 31194=>1000, 31197=>1000, 
+	31198=>1000, 31199=>1000, 31200=>1000, 31201=>1000, 31202=>1000, 31203=>1000, 31204=>1000, 31205=>1000, 31206=>1000, 31207=>1000, 31209=>1000, 31210=>1000, 31211=>1000, 31212=>1000, 31213=>1000, 31216=>1000, 
+	31217=>1000, 31224=>1000, 31227=>1000, 31228=>1000, 31232=>1000, 31234=>1000, 31235=>1000, 31239=>1000, 31240=>1000, 31241=>1000, 31242=>1000, 31243=>1000, 31244=>1000, 31245=>1000, 31246=>1000, 31249=>1000, 
+	31252=>1000, 31253=>1000, 31255=>1000, 31256=>1000, 31257=>1000, 31258=>1000, 31259=>1000, 31260=>1000, 31262=>1000, 31263=>1000, 31264=>1000, 31265=>1000, 31271=>1000, 31275=>1000, 31277=>1000, 31278=>1000, 
+	31279=>1000, 31280=>1000, 31281=>1000, 31282=>1000, 31284=>1000, 31285=>1000, 31287=>1000, 31288=>1000, 31289=>1000, 31290=>1000, 31291=>1000, 31292=>1000, 31293=>1000, 31294=>1000, 31295=>1000, 31296=>1000, 
+	31298=>1000, 31299=>1000, 31300=>1000, 31301=>1000, 31302=>1000, 31303=>1000, 31304=>1000, 31305=>1000, 31308=>1000, 31309=>1000, 31310=>1000, 31311=>1000, 31312=>1000, 31317=>1000, 31318=>1000, 31319=>1000, 
+	31321=>1000, 31324=>1000, 31325=>1000, 31327=>1000, 31328=>1000, 31329=>1000, 31330=>1000, 31331=>1000, 31333=>1000, 31335=>1000, 31337=>1000, 31338=>1000, 31339=>1000, 31341=>1000, 31344=>1000, 31348=>1000, 
+	31349=>1000, 31350=>1000, 31352=>1000, 31353=>1000, 31354=>1000, 31357=>1000, 31358=>1000, 31359=>1000, 31360=>1000, 31361=>1000, 31362=>1000, 31363=>1000, 31364=>1000, 31365=>1000, 31366=>1000, 31368=>1000, 
+	31370=>1000, 31371=>1000, 31376=>1000, 31377=>1000, 31378=>1000, 31379=>1000, 31380=>1000, 31381=>1000, 31382=>1000, 31383=>1000, 31384=>1000, 31390=>1000, 31391=>1000, 31392=>1000, 31395=>1000, 31401=>1000, 
+	31402=>1000, 31404=>1000, 31406=>1000, 31407=>1000, 31408=>1000, 31411=>1000, 31413=>1000, 31414=>1000, 31417=>1000, 31418=>1000, 31419=>1000, 31420=>1000, 31423=>1000, 31427=>1000, 31428=>1000, 31429=>1000, 
+	31430=>1000, 31431=>1000, 31432=>1000, 31433=>1000, 31434=>1000, 31435=>1000, 31436=>1000, 31437=>1000, 31438=>1000, 31439=>1000, 31441=>1000, 31442=>1000, 31443=>1000, 31445=>1000, 31449=>1000, 31450=>1000, 
+	31451=>1000, 31452=>1000, 31453=>1000, 31455=>1000, 31456=>1000, 31457=>1000, 31458=>1000, 31459=>1000, 31461=>1000, 31462=>1000, 31463=>1000, 31464=>1000, 31465=>1000, 31466=>1000, 31467=>1000, 31468=>1000, 
+	31469=>1000, 31471=>1000, 31472=>1000, 31473=>1000, 31476=>1000, 31478=>1000, 31480=>1000, 31481=>1000, 31482=>1000, 31483=>1000, 31485=>1000, 31486=>1000, 31487=>1000, 31490=>1000, 31492=>1000, 31494=>1000, 
+	31495=>1000, 31496=>1000, 31498=>1000, 31499=>1000, 31503=>1000, 31505=>1000, 31508=>1000, 31512=>1000, 31513=>1000, 31515=>1000, 31518=>1000, 31519=>1000, 31520=>1000, 31523=>1000, 31525=>1000, 31526=>1000, 
+	31527=>1000, 31528=>1000, 31529=>1000, 31530=>1000, 31531=>1000, 31532=>1000, 31533=>1000, 31534=>1000, 31535=>1000, 31536=>1000, 31537=>1000, 31539=>1000, 31540=>1000, 31541=>1000, 31542=>1000, 31545=>1000, 
+	31549=>1000, 31551=>1000, 31552=>1000, 31553=>1000, 31557=>1000, 31558=>1000, 31559=>1000, 31560=>1000, 31561=>1000, 31563=>1000, 31564=>1000, 31565=>1000, 31566=>1000, 31567=>1000, 31568=>1000, 31569=>1000, 
+	31570=>1000, 31572=>1000, 31573=>1000, 31574=>1000, 31581=>1000, 31584=>1000, 31588=>1000, 31589=>1000, 31590=>1000, 31591=>1000, 31593=>1000, 31594=>1000, 31596=>1000, 31597=>1000, 31598=>1000, 31599=>1000, 
+	31600=>1000, 31601=>1000, 31602=>1000, 31603=>1000, 31604=>1000, 31605=>1000, 31607=>1000, 31610=>1000, 31620=>1000, 31622=>1000, 31623=>1000, 31625=>1000, 31627=>1000, 31629=>1000, 31630=>1000, 31631=>1000, 
+	31632=>1000, 31633=>1000, 31634=>1000, 31636=>1000, 31637=>1000, 31638=>1000, 31639=>1000, 31640=>1000, 31641=>1000, 31642=>1000, 31643=>1000, 31644=>1000, 31645=>1000, 31646=>1000, 31647=>1000, 31648=>1000, 
+	31649=>1000, 31653=>1000, 31658=>1000, 31660=>1000, 31661=>1000, 31663=>1000, 31664=>1000, 31665=>1000, 31666=>1000, 31668=>1000, 31669=>1000, 31670=>1000, 31672=>1000, 31674=>1000, 31675=>1000, 31676=>1000, 
+	31677=>1000, 31680=>1000, 31681=>1000, 31682=>1000, 31684=>1000, 31685=>1000, 31686=>1000, 31687=>1000, 31688=>1000, 31689=>1000, 31690=>1000, 31691=>1000, 31692=>1000, 31695=>1000, 31700=>1000, 31702=>1000, 
+	31703=>1000, 31705=>1000, 31706=>1000, 31707=>1000, 31709=>1000, 31712=>1000, 31716=>1000, 31717=>1000, 31718=>1000, 31720=>1000, 31721=>1000, 31722=>1000, 31725=>1000, 31730=>1000, 31731=>1000, 31732=>1000, 
+	31733=>1000, 31734=>1000, 31735=>1000, 31736=>1000, 31737=>1000, 31738=>1000, 31740=>1000, 31742=>1000, 31744=>1000, 31745=>1000, 31746=>1000, 31747=>1000, 31748=>1000, 31750=>1000, 31751=>1000, 31753=>1000, 
+	31755=>1000, 31756=>1000, 31757=>1000, 31758=>1000, 31759=>1000, 31761=>1000, 31762=>1000, 31763=>1000, 31764=>1000, 31767=>1000, 31769=>1000, 31771=>1000, 31775=>1000, 31776=>1000, 31777=>1000, 31779=>1000, 
+	31781=>1000, 31782=>1000, 31783=>1000, 31784=>1000, 31786=>1000, 31787=>1000, 31788=>1000, 31793=>1000, 31795=>1000, 31796=>1000, 31798=>1000, 31799=>1000, 31800=>1000, 31801=>1000, 31802=>1000, 31805=>1000, 
+	31806=>1000, 31807=>1000, 31808=>1000, 31811=>1000, 31814=>1000, 31818=>1000, 31820=>1000, 31821=>1000, 31823=>1000, 31824=>1000, 31825=>1000, 31826=>1000, 31827=>1000, 31828=>1000, 31829=>1000, 31830=>1000, 
+	31832=>1000, 31833=>1000, 31834=>1000, 31835=>1000, 31836=>1000, 31837=>1000, 31838=>1000, 31839=>1000, 31840=>1000, 31841=>1000, 31843=>1000, 31844=>1000, 31845=>1000, 31847=>1000, 31849=>1000, 31852=>1000, 
+	31853=>1000, 31854=>1000, 31856=>1000, 31858=>1000, 31859=>1000, 31861=>1000, 31865=>1000, 31868=>1000, 31869=>1000, 31870=>1000, 31873=>1000, 31874=>1000, 31875=>1000, 31878=>1000, 31879=>1000, 31881=>1000, 
+	31883=>1000, 31885=>1000, 31887=>1000, 31888=>1000, 31890=>1000, 31892=>1000, 31893=>1000, 31895=>1000, 31896=>1000, 31899=>1000, 31902=>1000, 31903=>1000, 31904=>1000, 31905=>1000, 31906=>1000, 31908=>1000, 
+	31909=>1000, 31910=>1000, 31911=>1000, 31912=>1000, 31915=>1000, 31917=>1000, 31918=>1000, 31920=>1000, 31921=>1000, 31922=>1000, 31923=>1000, 31926=>1000, 31927=>1000, 31929=>1000, 31930=>1000, 31931=>1000, 
+	31932=>1000, 31933=>1000, 31934=>1000, 31935=>1000, 31936=>1000, 31938=>1000, 31940=>1000, 31941=>1000, 31943=>1000, 31944=>1000, 31945=>1000, 31946=>1000, 31949=>1000, 31950=>1000, 31951=>1000, 31954=>1000, 
+	31955=>1000, 31956=>1000, 31957=>1000, 31958=>1000, 31959=>1000, 31960=>1000, 31961=>1000, 31962=>1000, 31964=>1000, 31965=>1000, 31966=>1000, 31967=>1000, 31968=>1000, 31970=>1000, 31974=>1000, 31975=>1000, 
+	31977=>1000, 31979=>1000, 31983=>1000, 31986=>1000, 31988=>1000, 31989=>1000, 31990=>1000, 31992=>1000, 31994=>1000, 31995=>1000, 31998=>1000, 32000=>1000, 32002=>1000, 32003=>1000, 32004=>1000, 32005=>1000, 
+	32006=>1000, 32007=>1000, 32008=>1000, 32009=>1000, 32010=>1000, 32011=>1000, 32013=>1000, 32015=>1000, 32016=>1000, 32017=>1000, 32018=>1000, 32019=>1000, 32020=>1000, 32021=>1000, 32022=>1000, 32023=>1000, 
+	32024=>1000, 32025=>1000, 32026=>1000, 32027=>1000, 32028=>1000, 32029=>1000, 32030=>1000, 32032=>1000, 32033=>1000, 32034=>1000, 32035=>1000, 32038=>1000, 32042=>1000, 32043=>1000, 32044=>1000, 32045=>1000, 
+	32046=>1000, 32047=>1000, 32048=>1000, 32049=>1000, 32050=>1000, 32051=>1000, 32053=>1000, 32057=>1000, 32058=>1000, 32060=>1000, 32061=>1000, 32062=>1000, 32063=>1000, 32064=>1000, 32065=>1000, 32066=>1000, 
+	32067=>1000, 32068=>1000, 32069=>1000, 32070=>1000, 32071=>1000, 32072=>1000, 32075=>1000, 32076=>1000, 32077=>1000, 32078=>1000, 32079=>1000, 32080=>1000, 32081=>1000, 32083=>1000, 32086=>1000, 32087=>1000, 
+	32089=>1000, 32090=>1000, 32091=>1000, 32092=>1000, 32093=>1000, 32094=>1000, 32097=>1000, 32098=>1000, 32099=>1000, 32101=>1000, 32102=>1000, 32103=>1000, 32104=>1000, 32106=>1000, 32110=>1000, 32112=>1000, 
+	32113=>1000, 32114=>1000, 32115=>1000, 32117=>1000, 32118=>1000, 32120=>1000, 32121=>1000, 32122=>1000, 32123=>1000, 32125=>1000, 32127=>1000, 32129=>1000, 32130=>1000, 32131=>1000, 32133=>1000, 32134=>1000, 
+	32136=>1000, 32137=>1000, 32139=>1000, 32140=>1000, 32141=>1000, 32143=>1000, 32145=>1000, 32147=>1000, 32150=>1000, 32151=>1000, 32153=>1000, 32154=>1000, 32155=>1000, 32156=>1000, 32157=>1000, 32158=>1000, 
+	32159=>1000, 32160=>1000, 32162=>1000, 32163=>1000, 32166=>1000, 32167=>1000, 32170=>1000, 32171=>1000, 32172=>1000, 32173=>1000, 32174=>1000, 32175=>1000, 32176=>1000, 32177=>1000, 32178=>1000, 32179=>1000, 
+	32180=>1000, 32181=>1000, 32182=>1000, 32183=>1000, 32184=>1000, 32185=>1000, 32186=>1000, 32187=>1000, 32189=>1000, 32190=>1000, 32191=>1000, 32194=>1000, 32195=>1000, 32196=>1000, 32197=>1000, 32198=>1000, 
+	32199=>1000, 32202=>1000, 32203=>1000, 32204=>1000, 32205=>1000, 32206=>1000, 32207=>1000, 32209=>1000, 32210=>1000, 32213=>1000, 32214=>1000, 32215=>1000, 32216=>1000, 32217=>1000, 32218=>1000, 32220=>1000, 
+	32221=>1000, 32222=>1000, 32224=>1000, 32225=>1000, 32226=>1000, 32228=>1000, 32229=>1000, 32230=>1000, 32232=>1000, 32233=>1000, 32234=>1000, 32235=>1000, 32236=>1000, 32237=>1000, 32239=>1000, 32241=>1000, 
+	32242=>1000, 32244=>1000, 32245=>1000, 32246=>1000, 32249=>1000, 32250=>1000, 32251=>1000, 32256=>1000, 32257=>1000, 32260=>1000, 32261=>1000, 32264=>1000, 32265=>1000, 32266=>1000, 32267=>1000, 32272=>1000, 
+	32273=>1000, 32274=>1000, 32277=>1000, 32279=>1000, 32283=>1000, 32284=>1000, 32285=>1000, 32286=>1000, 32287=>1000, 32288=>1000, 32289=>1000, 32290=>1000, 32291=>1000, 32294=>1000, 32295=>1000, 32296=>1000, 
+	32299=>1000, 32300=>1000, 32301=>1000, 32302=>1000, 32303=>1000, 32305=>1000, 32306=>1000, 32307=>1000, 32309=>1000, 32310=>1000, 32311=>1000, 32313=>1000, 32314=>1000, 32315=>1000, 32317=>1000, 32318=>1000, 
+	32319=>1000, 32321=>1000, 32323=>1000, 32324=>1000, 32325=>1000, 32326=>1000, 32327=>1000, 32330=>1000, 32331=>1000, 32333=>1000, 32334=>1000, 32336=>1000, 32338=>1000, 32340=>1000, 32341=>1000, 32342=>1000, 
+	32344=>1000, 32345=>1000, 32346=>1000, 32349=>1000, 32350=>1000, 32351=>1000, 32353=>1000, 32354=>1000, 32357=>1000, 32358=>1000, 32359=>1000, 32361=>1000, 32362=>1000, 32363=>1000, 32365=>1000, 32366=>1000, 
+	32367=>1000, 32368=>1000, 32371=>1000, 32376=>1000, 32377=>1000, 32379=>1000, 32380=>1000, 32381=>1000, 32382=>1000, 32383=>1000, 32385=>1000, 32386=>1000, 32387=>1000, 32390=>1000, 32391=>1000, 32392=>1000, 
+	32393=>1000, 32394=>1000, 32396=>1000, 32397=>1000, 32398=>1000, 32399=>1000, 32400=>1000, 32401=>1000, 32402=>1000, 32403=>1000, 32404=>1000, 32405=>1000, 32406=>1000, 32408=>1000, 32410=>1000, 32411=>1000, 
+	32412=>1000, 32413=>1000, 32414=>1000, 32566=>1000, 32568=>1000, 32570=>1000, 32571=>1000, 32572=>1000, 32573=>1000, 32574=>1000, 32575=>1000, 32579=>1000, 32580=>1000, 32581=>1000, 32583=>1000, 32588=>1000, 
+	32589=>1000, 32590=>1000, 32591=>1000, 32592=>1000, 32593=>1000, 32594=>1000, 32595=>1000, 32596=>1000, 32597=>1000, 32600=>1000, 32603=>1000, 32604=>1000, 32605=>1000, 32607=>1000, 32608=>1000, 32609=>1000, 
+	32611=>1000, 32612=>1000, 32613=>1000, 32614=>1000, 32615=>1000, 32616=>1000, 32617=>1000, 32618=>1000, 32619=>1000, 32621=>1000, 32622=>1000, 32624=>1000, 32625=>1000, 32626=>1000, 32629=>1000, 32631=>1000, 
+	32632=>1000, 32633=>1000, 32637=>1000, 32638=>1000, 32639=>1000, 32640=>1000, 32642=>1000, 32643=>1000, 32645=>1000, 32646=>1000, 32647=>1000, 32648=>1000, 32650=>1000, 32651=>1000, 32652=>1000, 32653=>1000, 
+	32654=>1000, 32655=>1000, 32656=>1000, 32657=>1000, 32660=>1000, 32662=>1000, 32663=>1000, 32666=>1000, 32668=>1000, 32669=>1000, 32670=>1000, 32673=>1000, 32674=>1000, 32675=>1000, 32676=>1000, 32678=>1000, 
+	32680=>1000, 32681=>1000, 32682=>1000, 32685=>1000, 32686=>1000, 32687=>1000, 32690=>1000, 32692=>1000, 32694=>1000, 32696=>1000, 32697=>1000, 32700=>1000, 32701=>1000, 32703=>1000, 32704=>1000, 32705=>1000, 
+	32707=>1000, 32709=>1000, 32710=>1000, 32712=>1000, 32714=>1000, 32716=>1000, 32718=>1000, 32719=>1000, 32722=>1000, 32724=>1000, 32725=>1000, 32731=>1000, 32735=>1000, 32736=>1000, 32737=>1000, 32739=>1000, 
+	32741=>1000, 32742=>1000, 32744=>1000, 32745=>1000, 32747=>1000, 32748=>1000, 32750=>1000, 32751=>1000, 32752=>1000, 32754=>1000, 32755=>1000, 32761=>1000, 32762=>1000, 32763=>1000, 32764=>1000, 32765=>1000, 
+	32766=>1000, 32767=>1000, 32768=>1000, 32769=>1000, 32771=>1000, 32772=>1000, 32773=>1000, 32774=>1000, 32775=>1000, 32776=>1000, 32778=>1000, 32779=>1000, 32780=>1000, 32781=>1000, 32782=>1000, 32783=>1000, 
+	32784=>1000, 32785=>1000, 32786=>1000, 32787=>1000, 32788=>1000, 32789=>1000, 32790=>1000, 32791=>1000, 32792=>1000, 32793=>1000, 32796=>1000, 32797=>1000, 32798=>1000, 32799=>1000, 32800=>1000, 32801=>1000, 
+	32804=>1000, 32806=>1000, 32808=>1000, 32812=>1000, 32814=>1000, 32816=>1000, 32819=>1000, 32820=>1000, 32821=>1000, 32822=>1000, 32823=>1000, 32825=>1000, 32826=>1000, 32827=>1000, 32828=>1000, 32829=>1000, 
+	32830=>1000, 32831=>1000, 32832=>1000, 32836=>1000, 32838=>1000, 32842=>1000, 32850=>1000, 32854=>1000, 32856=>1000, 32858=>1000, 32862=>1000, 32863=>1000, 32864=>1000, 32865=>1000, 32866=>1000, 32868=>1000, 
+	32870=>1000, 32872=>1000, 32877=>1000, 32879=>1000, 32880=>1000, 32881=>1000, 32882=>1000, 32883=>1000, 32884=>1000, 32885=>1000, 32886=>1000, 32887=>1000, 32889=>1000, 32893=>1000, 32894=>1000, 32895=>1000, 
+	32897=>1000, 32900=>1000, 32901=>1000, 32902=>1000, 32903=>1000, 32904=>1000, 32905=>1000, 32907=>1000, 32908=>1000, 32910=>1000, 32915=>1000, 32918=>1000, 32920=>1000, 32922=>1000, 32923=>1000, 32924=>1000, 
+	32925=>1000, 32926=>1000, 32929=>1000, 32930=>1000, 32933=>1000, 32934=>1000, 32935=>1000, 32937=>1000, 32938=>1000, 32939=>1000, 32940=>1000, 32941=>1000, 32943=>1000, 32945=>1000, 32946=>1000, 32948=>1000, 
+	32952=>1000, 32953=>1000, 32954=>1000, 32963=>1000, 32964=>1000, 32966=>1000, 32968=>1000, 32972=>1000, 32973=>1000, 32974=>1000, 32975=>1000, 32978=>1000, 32980=>1000, 32981=>1000, 32982=>1000, 32983=>1000, 
+	32984=>1000, 32985=>1000, 32986=>1000, 32987=>1000, 32989=>1000, 32990=>1000, 32992=>1000, 32993=>1000, 32996=>1000, 32997=>1000, 33005=>1000, 33006=>1000, 33007=>1000, 33008=>1000, 33009=>1000, 33010=>1000, 
+	33011=>1000, 33012=>1000, 33014=>1000, 33016=>1000, 33017=>1000, 33018=>1000, 33020=>1000, 33021=>1000, 33022=>1000, 33026=>1000, 33027=>1000, 33029=>1000, 33030=>1000, 33031=>1000, 33032=>1000, 33033=>1000, 
+	33034=>1000, 33035=>1000, 33046=>1000, 33047=>1000, 33048=>1000, 33050=>1000, 33051=>1000, 33052=>1000, 33054=>1000, 33056=>1000, 33059=>1000, 33060=>1000, 33063=>1000, 33065=>1000, 33068=>1000, 33071=>1000, 
+	33072=>1000, 33073=>1000, 33075=>1000, 33077=>1000, 33081=>1000, 33082=>1000, 33084=>1000, 33086=>1000, 33093=>1000, 33094=>1000, 33095=>1000, 33098=>1000, 33099=>1000, 33100=>1000, 33102=>1000, 33104=>1000, 
+	33105=>1000, 33106=>1000, 33107=>1000, 33108=>1000, 33109=>1000, 33111=>1000, 33119=>1000, 33120=>1000, 33121=>1000, 33125=>1000, 33126=>1000, 33127=>1000, 33128=>1000, 33129=>1000, 33131=>1000, 33133=>1000, 
+	33134=>1000, 33135=>1000, 33136=>1000, 33137=>1000, 33140=>1000, 33143=>1000, 33144=>1000, 33145=>1000, 33146=>1000, 33151=>1000, 33152=>1000, 33153=>1000, 33154=>1000, 33155=>1000, 33156=>1000, 33157=>1000, 
+	33158=>1000, 33160=>1000, 33162=>1000, 33163=>1000, 33166=>1000, 33167=>1000, 33168=>1000, 33171=>1000, 33173=>1000, 33174=>1000, 33176=>1000, 33178=>1000, 33179=>1000, 33180=>1000, 33181=>1000, 33182=>1000, 
+	33184=>1000, 33186=>1000, 33187=>1000, 33188=>1000, 33192=>1000, 33193=>1000, 33198=>1000, 33200=>1000, 33202=>1000, 33203=>1000, 33204=>1000, 33205=>1000, 33208=>1000, 33210=>1000, 33211=>1000, 33213=>1000, 
+	33214=>1000, 33215=>1000, 33216=>1000, 33218=>1000, 33219=>1000, 33221=>1000, 33222=>1000, 33224=>1000, 33225=>1000, 33226=>1000, 33227=>1000, 33229=>1000, 33230=>1000, 33231=>1000, 33233=>1000, 33235=>1000, 
+	33237=>1000, 33239=>1000, 33240=>1000, 33241=>1000, 33242=>1000, 33243=>1000, 33245=>1000, 33246=>1000, 33247=>1000, 33248=>1000, 33249=>1000, 33251=>1000, 33252=>1000, 33253=>1000, 33255=>1000, 33256=>1000, 
+	33258=>1000, 33259=>1000, 33260=>1000, 33261=>1000, 33264=>1000, 33265=>1000, 33266=>1000, 33267=>1000, 33268=>1000, 33269=>1000, 33270=>1000, 33272=>1000, 33273=>1000, 33274=>1000, 33275=>1000, 33276=>1000, 
+	33277=>1000, 33278=>1000, 33279=>1000, 33280=>1000, 33281=>1000, 33282=>1000, 33283=>1000, 33285=>1000, 33287=>1000, 33288=>1000, 33289=>1000, 33290=>1000, 33292=>1000, 33293=>1000, 33294=>1000, 33295=>1000, 
+	33296=>1000, 33298=>1000, 33299=>1000, 33300=>1000, 33302=>1000, 33303=>1000, 33304=>1000, 33305=>1000, 33306=>1000, 33307=>1000, 33308=>1000, 33309=>1000, 33310=>1000, 33311=>1000, 33313=>1000, 33314=>1000, 
+	33320=>1000, 33321=>1000, 33322=>1000, 33323=>1000, 33324=>1000, 33326=>1000, 33330=>1000, 33331=>1000, 33332=>1000, 33333=>1000, 33334=>1000, 33335=>1000, 33336=>1000, 33337=>1000, 33338=>1000, 33344=>1000, 
+	33347=>1000, 33348=>1000, 33349=>1000, 33350=>1000, 33351=>1000, 33355=>1000, 33358=>1000, 33359=>1000, 33361=>1000, 33366=>1000, 33368=>1000, 33369=>1000, 33370=>1000, 33372=>1000, 33373=>1000, 33375=>1000, 
+	33376=>1000, 33378=>1000, 33379=>1000, 33380=>1000, 33382=>1000, 33383=>1000, 33384=>1000, 33386=>1000, 33387=>1000, 33389=>1000, 33390=>1000, 33391=>1000, 33393=>1000, 33394=>1000, 33396=>1000, 33398=>1000, 
+	33399=>1000, 33400=>1000, 33403=>1000, 33405=>1000, 33406=>1000, 33407=>1000, 33408=>1000, 33409=>1000, 33411=>1000, 33412=>1000, 33415=>1000, 33417=>1000, 33418=>1000, 33419=>1000, 33421=>1000, 33422=>1000, 
+	33425=>1000, 33426=>1000, 33428=>1000, 33430=>1000, 33432=>1000, 33433=>1000, 33434=>1000, 33435=>1000, 33437=>1000, 33439=>1000, 33440=>1000, 33441=>1000, 33443=>1000, 33444=>1000, 33445=>1000, 33446=>1000, 
+	33447=>1000, 33448=>1000, 33449=>1000, 33450=>1000, 33451=>1000, 33452=>1000, 33453=>1000, 33454=>1000, 33455=>1000, 33456=>1000, 33457=>1000, 33458=>1000, 33459=>1000, 33460=>1000, 33463=>1000, 33464=>1000, 
+	33465=>1000, 33466=>1000, 33467=>1000, 33468=>1000, 33469=>1000, 33470=>1000, 33471=>1000, 33477=>1000, 33478=>1000, 33488=>1000, 33489=>1000, 33490=>1000, 33491=>1000, 33492=>1000, 33493=>1000, 33495=>1000, 
+	33497=>1000, 33498=>1000, 33499=>1000, 33500=>1000, 33502=>1000, 33503=>1000, 33504=>1000, 33505=>1000, 33506=>1000, 33507=>1000, 33508=>1000, 33509=>1000, 33510=>1000, 33511=>1000, 33512=>1000, 33514=>1000, 
+	33515=>1000, 33517=>1000, 33519=>1000, 33521=>1000, 33523=>1000, 33524=>1000, 33526=>1000, 33527=>1000, 33529=>1000, 33530=>1000, 33531=>1000, 33533=>1000, 33534=>1000, 33536=>1000, 33537=>1000, 33538=>1000, 
+	33539=>1000, 33540=>1000, 33541=>1000, 33542=>1000, 33543=>1000, 33544=>1000, 33545=>1000, 33546=>1000, 33547=>1000, 33550=>1000, 33558=>1000, 33559=>1000, 33560=>1000, 33563=>1000, 33564=>1000, 33565=>1000, 
+	33566=>1000, 33567=>1000, 33569=>1000, 33570=>1000, 33571=>1000, 33576=>1000, 33579=>1000, 33580=>1000, 33581=>1000, 33582=>1000, 33583=>1000, 33584=>1000, 33585=>1000, 33586=>1000, 33587=>1000, 33588=>1000, 
+	33589=>1000, 33590=>1000, 33591=>1000, 33592=>1000, 33593=>1000, 33594=>1000, 33596=>1000, 33597=>1000, 33600=>1000, 33602=>1000, 33603=>1000, 33604=>1000, 33605=>1000, 33607=>1000, 33609=>1000, 33610=>1000, 
+	33613=>1000, 33614=>1000, 33615=>1000, 33616=>1000, 33617=>1000, 33618=>1000, 33619=>1000, 33620=>1000, 33621=>1000, 33622=>1000, 33623=>1000, 33624=>1000, 33634=>1000, 33648=>1000, 33651=>1000, 33653=>1000, 
+	33655=>1000, 33656=>1000, 33659=>1000, 33660=>1000, 33661=>1000, 33663=>1000, 33664=>1000, 33666=>1000, 33668=>1000, 33669=>1000, 33670=>1000, 33671=>1000, 33673=>1000, 33674=>1000, 33677=>1000, 33678=>1000, 
+	33682=>1000, 33683=>1000, 33684=>1000, 33685=>1000, 33686=>1000, 33688=>1000, 33689=>1000, 33690=>1000, 33691=>1000, 33692=>1000, 33693=>1000, 33694=>1000, 33695=>1000, 33696=>1000, 33698=>1000, 33702=>1000, 
+	33703=>1000, 33704=>1000, 33705=>1000, 33706=>1000, 33707=>1000, 33708=>1000, 33709=>1000, 33713=>1000, 33717=>1000, 33725=>1000, 33726=>1000, 33727=>1000, 33728=>1000, 33729=>1000, 33733=>1000, 33735=>1000, 
+	33737=>1000, 33738=>1000, 33740=>1000, 33742=>1000, 33743=>1000, 33744=>1000, 33745=>1000, 33747=>1000, 33748=>1000, 33750=>1000, 33752=>1000, 33756=>1000, 33757=>1000, 33759=>1000, 33760=>1000, 33768=>1000, 
+	33769=>1000, 33770=>1000, 33771=>1000, 33775=>1000, 33776=>1000, 33777=>1000, 33778=>1000, 33780=>1000, 33782=>1000, 33783=>1000, 33784=>1000, 33785=>1000, 33787=>1000, 33788=>1000, 33789=>1000, 33793=>1000, 
+	33795=>1000, 33796=>1000, 33798=>1000, 33799=>1000, 33802=>1000, 33803=>1000, 33804=>1000, 33805=>1000, 33806=>1000, 33807=>1000, 33809=>1000, 33811=>1000, 33813=>1000, 33817=>1000, 33824=>1000, 33826=>1000, 
+	33833=>1000, 33834=>1000, 33836=>1000, 33839=>1000, 33841=>1000, 33845=>1000, 33848=>1000, 33849=>1000, 33852=>1000, 33853=>1000, 33861=>1000, 33862=>1000, 33863=>1000, 33864=>1000, 33865=>1000, 33866=>1000, 
+	33869=>1000, 33870=>1000, 33871=>1000, 33873=>1000, 33874=>1000, 33878=>1000, 33879=>1000, 33880=>1000, 33881=>1000, 33882=>1000, 33883=>1000, 33884=>1000, 33888=>1000, 33889=>1000, 33890=>1000, 33891=>1000, 
+	33892=>1000, 33893=>1000, 33894=>1000, 33895=>1000, 33897=>1000, 33898=>1000, 33899=>1000, 33900=>1000, 33901=>1000, 33902=>1000, 33903=>1000, 33904=>1000, 33905=>1000, 33907=>1000, 33908=>1000, 33909=>1000, 
+	33910=>1000, 33911=>1000, 33912=>1000, 33913=>1000, 33914=>1000, 33916=>1000, 33917=>1000, 33921=>1000, 33922=>1000, 33924=>1000, 33925=>1000, 33931=>1000, 33936=>1000, 33938=>1000, 33939=>1000, 33940=>1000, 
+	33941=>1000, 33945=>1000, 33948=>1000, 33950=>1000, 33951=>1000, 33953=>1000, 33958=>1000, 33960=>1000, 33961=>1000, 33962=>1000, 33965=>1000, 33967=>1000, 33969=>1000, 33970=>1000, 33972=>1000, 33976=>1000, 
+	33977=>1000, 33978=>1000, 33979=>1000, 33980=>1000, 33981=>1000, 33982=>1000, 33983=>1000, 33984=>1000, 33985=>1000, 33986=>1000, 33988=>1000, 33990=>1000, 33991=>1000, 33992=>1000, 33993=>1000, 33994=>1000, 
+	33995=>1000, 33996=>1000, 33997=>1000, 33999=>1000, 34000=>1000, 34001=>1000, 34003=>1000, 34006=>1000, 34009=>1000, 34010=>1000, 34012=>1000, 34023=>1000, 34026=>1000, 34028=>1000, 34030=>1000, 34031=>1000, 
+	34032=>1000, 34033=>1000, 34034=>1000, 34036=>1000, 34039=>1000, 34042=>1000, 34043=>1000, 34044=>1000, 34045=>1000, 34047=>1000, 34048=>1000, 34050=>1000, 34051=>1000, 34054=>1000, 34055=>1000, 34060=>1000, 
+	34062=>1000, 34064=>1000, 34065=>1000, 34067=>1000, 34068=>1000, 34069=>1000, 34071=>1000, 34072=>1000, 34074=>1000, 34076=>1000, 34078=>1000, 34079=>1000, 34081=>1000, 34082=>1000, 34083=>1000, 34084=>1000, 
+	34085=>1000, 34086=>1000, 34087=>1000, 34090=>1000, 34091=>1000, 34092=>1000, 34093=>1000, 34095=>1000, 34098=>1000, 34099=>1000, 34100=>1000, 34101=>1000, 34102=>1000, 34109=>1000, 34111=>1000, 34112=>1000, 
+	34113=>1000, 34115=>1000, 34118=>1000, 34120=>1000, 34121=>1000, 34122=>1000, 34123=>1000, 34126=>1000, 34127=>1000, 34128=>1000, 34129=>1000, 34130=>1000, 34131=>1000, 34133=>1000, 34134=>1000, 34135=>1000, 
+	34136=>1000, 34137=>1000, 34138=>1000, 34140=>1000, 34141=>1000, 34142=>1000, 34143=>1000, 34144=>1000, 34145=>1000, 34146=>1000, 34147=>1000, 34148=>1000, 34152=>1000, 34153=>1000, 34154=>1000, 34155=>1000, 
+	34157=>1000, 34159=>1000, 34167=>1000, 34169=>1000, 34170=>1000, 34171=>1000, 34173=>1000, 34174=>1000, 34175=>1000, 34176=>1000, 34177=>1000, 34180=>1000, 34181=>1000, 34182=>1000, 34183=>1000, 34184=>1000, 
+	34185=>1000, 34186=>1000, 34187=>1000, 34188=>1000, 34191=>1000, 34192=>1000, 34193=>1000, 34195=>1000, 34196=>1000, 34199=>1000, 34200=>1000, 34201=>1000, 34203=>1000, 34204=>1000, 34205=>1000, 34207=>1000, 
+	34208=>1000, 34210=>1000, 34212=>1000, 34213=>1000, 34214=>1000, 34215=>1000, 34216=>1000, 34217=>1000, 34218=>1000, 34219=>1000, 34220=>1000, 34221=>1000, 34222=>1000, 34223=>1000, 34224=>1000, 34228=>1000, 
+	34230=>1000, 34231=>1000, 34232=>1000, 34233=>1000, 34234=>1000, 34236=>1000, 34237=>1000, 34238=>1000, 34239=>1000, 34241=>1000, 34242=>1000, 34247=>1000, 34249=>1000, 34250=>1000, 34251=>1000, 34253=>1000, 
+	34254=>1000, 34255=>1000, 34256=>1000, 34261=>1000, 34264=>1000, 34266=>1000, 34268=>1000, 34269=>1000, 34271=>1000, 34272=>1000, 34276=>1000, 34277=>1000, 34278=>1000, 34280=>1000, 34281=>1000, 34282=>1000, 
+	34285=>1000, 34291=>1000, 34294=>1000, 34295=>1000, 34297=>1000, 34298=>1000, 34299=>1000, 34300=>1000, 34302=>1000, 34303=>1000, 34304=>1000, 34306=>1000, 34308=>1000, 34309=>1000, 34310=>1000, 34311=>1000, 
+	34314=>1000, 34315=>1000, 34317=>1000, 34318=>1000, 34320=>1000, 34321=>1000, 34322=>1000, 34323=>1000, 34326=>1000, 34327=>1000, 34328=>1000, 34329=>1000, 34330=>1000, 34331=>1000, 34334=>1000, 34337=>1000, 
+	34338=>1000, 34343=>1000, 34345=>1000, 34349=>1000, 34351=>1000, 34352=>1000, 34358=>1000, 34360=>1000, 34362=>1000, 34364=>1000, 34365=>1000, 34367=>1000, 34368=>1000, 34369=>1000, 34370=>1000, 34374=>1000, 
+	34381=>1000, 34382=>1000, 34384=>1000, 34386=>1000, 34387=>1000, 34388=>1000, 34389=>1000, 34390=>1000, 34391=>1000, 34392=>1000, 34393=>1000, 34394=>1000, 34396=>1000, 34397=>1000, 34398=>1000, 34399=>1000, 
+	34400=>1000, 34401=>1000, 34402=>1000, 34403=>1000, 34404=>1000, 34407=>1000, 34409=>1000, 34411=>1000, 34412=>1000, 34415=>1000, 34417=>1000, 34421=>1000, 34422=>1000, 34423=>1000, 34425=>1000, 34426=>1000, 
+	34427=>1000, 34440=>1000, 34442=>1000, 34443=>1000, 34444=>1000, 34445=>1000, 34449=>1000, 34451=>1000, 34453=>1000, 34454=>1000, 34456=>1000, 34458=>1000, 34460=>1000, 34465=>1000, 34467=>1000, 34468=>1000, 
+	34470=>1000, 34471=>1000, 34472=>1000, 34473=>1000, 34474=>1000, 34475=>1000, 34477=>1000, 34479=>1000, 34480=>1000, 34481=>1000, 34483=>1000, 34484=>1000, 34485=>1000, 34486=>1000, 34487=>1000, 34488=>1000, 
+	34489=>1000, 34495=>1000, 34496=>1000, 34497=>1000, 34499=>1000, 34500=>1000, 34501=>1000, 34502=>1000, 34503=>1000, 34505=>1000, 34507=>1000, 34509=>1000, 34510=>1000, 34513=>1000, 34514=>1000, 34516=>1000, 
+	34517=>1000, 34519=>1000, 34521=>1000, 34522=>1000, 34523=>1000, 34524=>1000, 34526=>1000, 34527=>1000, 34528=>1000, 34531=>1000, 34532=>1000, 34533=>1000, 34535=>1000, 34537=>1000, 34540=>1000, 34541=>1000, 
+	34542=>1000, 34543=>1000, 34552=>1000, 34553=>1000, 34554=>1000, 34555=>1000, 34556=>1000, 34557=>1000, 34558=>1000, 34560=>1000, 34562=>1000, 34563=>1000, 34564=>1000, 34565=>1000, 34566=>1000, 34567=>1000, 
+	34568=>1000, 34569=>1000, 34570=>1000, 34571=>1000, 34573=>1000, 34574=>1000, 34575=>1000, 34576=>1000, 34577=>1000, 34578=>1000, 34579=>1000, 34580=>1000, 34584=>1000, 34585=>1000, 34586=>1000, 34588=>1000, 
+	34590=>1000, 34591=>1000, 34593=>1000, 34595=>1000, 34597=>1000, 34600=>1000, 34601=>1000, 34606=>1000, 34607=>1000, 34609=>1000, 34610=>1000, 34612=>1000, 34615=>1000, 34617=>1000, 34618=>1000, 34619=>1000, 
+	34620=>1000, 34621=>1000, 34622=>1000, 34623=>1000, 34624=>1000, 34627=>1000, 34629=>1000, 34633=>1000, 34635=>1000, 34636=>1000, 34637=>1000, 34638=>1000, 34643=>1000, 34645=>1000, 34647=>1000, 34648=>1000, 
+	34649=>1000, 34653=>1000, 34655=>1000, 34656=>1000, 34657=>1000, 34659=>1000, 34660=>1000, 34661=>1000, 34662=>1000, 34664=>1000, 34666=>1000, 34670=>1000, 34671=>1000, 34673=>1000, 34674=>1000, 34676=>1000, 
+	34678=>1000, 34680=>1000, 34683=>1000, 34687=>1000, 34690=>1000, 34691=>1000, 34692=>1000, 34693=>1000, 34694=>1000, 34695=>1000, 34696=>1000, 34697=>1000, 34699=>1000, 34700=>1000, 34701=>1000, 34704=>1000, 
+	34707=>1000, 34709=>1000, 34711=>1000, 34712=>1000, 34713=>1000, 34718=>1000, 34719=>1000, 34720=>1000, 34722=>1000, 34723=>1000, 34727=>1000, 34731=>1000, 34732=>1000, 34733=>1000, 34734=>1000, 34735=>1000, 
+	34737=>1000, 34739=>1000, 34741=>1000, 34746=>1000, 34747=>1000, 34749=>1000, 34750=>1000, 34751=>1000, 34752=>1000, 34753=>1000, 34756=>1000, 34758=>1000, 34759=>1000, 34760=>1000, 34761=>1000, 34762=>1000, 
+	34763=>1000, 34766=>1000, 34768=>1000, 34770=>1000, 34773=>1000, 34774=>1000, 34777=>1000, 34778=>1000, 34780=>1000, 34783=>1000, 34784=>1000, 34786=>1000, 34787=>1000, 34788=>1000, 34794=>1000, 34795=>1000, 
+	34797=>1000, 34799=>1000, 34801=>1000, 34802=>1000, 34803=>1000, 34806=>1000, 34807=>1000, 34808=>1000, 34809=>1000, 34810=>1000, 34811=>1000, 34814=>1000, 34815=>1000, 34817=>1000, 34819=>1000, 34821=>1000, 
+	34822=>1000, 34823=>1000, 34825=>1000, 34826=>1000, 34827=>1000, 34829=>1000, 34830=>1000, 34831=>1000, 34832=>1000, 34833=>1000, 34834=>1000, 34835=>1000, 34836=>1000, 34837=>1000, 34838=>1000, 34840=>1000, 
+	34841=>1000, 34842=>1000, 34843=>1000, 34844=>1000, 34846=>1000, 34847=>1000, 34849=>1000, 34850=>1000, 34851=>1000, 34855=>1000, 34856=>1000, 34861=>1000, 34862=>1000, 34864=>1000, 34865=>1000, 34866=>1000, 
+	34869=>1000, 34870=>1000, 34873=>1000, 34874=>1000, 34875=>1000, 34876=>1000, 34880=>1000, 34881=>1000, 34882=>1000, 34883=>1000, 34884=>1000, 34885=>1000, 34886=>1000, 34888=>1000, 34889=>1000, 34890=>1000, 
+	34891=>1000, 34892=>1000, 34893=>1000, 34894=>1000, 34897=>1000, 34898=>1000, 34899=>1000, 34901=>1000, 34902=>1000, 34903=>1000, 34904=>1000, 34905=>1000, 34906=>1000, 34907=>1000, 34908=>1000, 34909=>1000, 
+	34910=>1000, 34911=>1000, 34912=>1000, 34913=>1000, 34914=>1000, 34915=>1000, 34916=>1000, 34920=>1000, 34921=>1000, 34923=>1000, 34928=>1000, 34929=>1000, 34930=>1000, 34933=>1000, 34935=>1000, 34937=>1000, 
+	34939=>1000, 34941=>1000, 34942=>1000, 34943=>1000, 34944=>1000, 34945=>1000, 34946=>1000, 34952=>1000, 34955=>1000, 34957=>1000, 34962=>1000, 34966=>1000, 34967=>1000, 34968=>1000, 34969=>1000, 34970=>1000, 
+	34971=>1000, 34972=>1000, 34974=>1000, 34975=>1000, 34976=>1000, 34978=>1000, 34980=>1000, 34984=>1000, 34986=>1000, 34987=>1000, 34990=>1000, 34992=>1000, 34993=>1000, 34996=>1000, 34997=>1000, 34999=>1000, 
+	35002=>1000, 35005=>1000, 35006=>1000, 35007=>1000, 35008=>1000, 35009=>1000, 35010=>1000, 35011=>1000, 35012=>1000, 35013=>1000, 35018=>1000, 35019=>1000, 35020=>1000, 35021=>1000, 35022=>1000, 35023=>1000, 
+	35025=>1000, 35026=>1000, 35027=>1000, 35028=>1000, 35029=>1000, 35032=>1000, 35033=>1000, 35035=>1000, 35036=>1000, 35037=>1000, 35038=>1000, 35039=>1000, 35041=>1000, 35047=>1000, 35048=>1000, 35055=>1000, 
+	35056=>1000, 35057=>1000, 35058=>1000, 35059=>1000, 35060=>1000, 35061=>1000, 35063=>1000, 35064=>1000, 35065=>1000, 35068=>1000, 35069=>1000, 35070=>1000, 35073=>1000, 35074=>1000, 35076=>1000, 35078=>1000, 
+	35079=>1000, 35082=>1000, 35084=>1000, 35085=>1000, 35086=>1000, 35087=>1000, 35088=>1000, 35090=>1000, 35091=>1000, 35093=>1000, 35094=>1000, 35096=>1000, 35097=>1000, 35098=>1000, 35100=>1000, 35101=>1000, 
+	35102=>1000, 35104=>1000, 35109=>1000, 35110=>1000, 35111=>1000, 35112=>1000, 35114=>1000, 35115=>1000, 35120=>1000, 35121=>1000, 35122=>1000, 35125=>1000, 35126=>1000, 35128=>1000, 35129=>1000, 35130=>1000, 
+	35131=>1000, 35134=>1000, 35136=>1000, 35137=>1000, 35138=>1000, 35139=>1000, 35140=>1000, 35141=>1000, 35142=>1000, 35145=>1000, 35148=>1000, 35149=>1000, 35151=>1000, 35154=>1000, 35158=>1000, 35159=>1000, 
+	35162=>1000, 35163=>1000, 35164=>1000, 35166=>1000, 35167=>1000, 35168=>1000, 35169=>1000, 35170=>1000, 35171=>1000, 35172=>1000, 35174=>1000, 35178=>1000, 35179=>1000, 35181=>1000, 35182=>1000, 35183=>1000, 
+	35184=>1000, 35186=>1000, 35187=>1000, 35188=>1000, 35189=>1000, 35191=>1000, 35194=>1000, 35195=>1000, 35196=>1000, 35197=>1000, 35198=>1000, 35199=>1000, 35201=>1000, 35203=>1000, 35206=>1000, 35207=>1000, 
+	35208=>1000, 35209=>1000, 35210=>1000, 35211=>1000, 35213=>1000, 35215=>1000, 35216=>1000, 35219=>1000, 35220=>1000, 35221=>1000, 35222=>1000, 35223=>1000, 35224=>1000, 35226=>1000, 35227=>1000, 35228=>1000, 
+	35231=>1000, 35232=>1000, 35233=>1000, 35237=>1000, 35238=>1000, 35239=>1000, 35241=>1000, 35242=>1000, 35244=>1000, 35247=>1000, 35248=>1000, 35250=>1000, 35251=>1000, 35252=>1000, 35253=>1000, 35254=>1000, 
+	35255=>1000, 35258=>1000, 35260=>1000, 35261=>1000, 35263=>1000, 35264=>1000, 35282=>1000, 35284=>1000, 35285=>1000, 35286=>1000, 35287=>1000, 35288=>1000, 35290=>1000, 35292=>1000, 35293=>1000, 35299=>1000, 
+	35301=>1000, 35302=>1000, 35303=>1000, 35305=>1000, 35307=>1000, 35309=>1000, 35313=>1000, 35315=>1000, 35316=>1000, 35318=>1000, 35320=>1000, 35321=>1000, 35325=>1000, 35327=>1000, 35328=>1000, 35330=>1000, 
+	35331=>1000, 35332=>1000, 35333=>1000, 35335=>1000, 35336=>1000, 35338=>1000, 35340=>1000, 35342=>1000, 35343=>1000, 35344=>1000, 35345=>1000, 35346=>1000, 35347=>1000, 35348=>1000, 35349=>1000, 35350=>1000, 
+	35351=>1000, 35352=>1000, 35355=>1000, 35357=>1000, 35358=>1000, 35359=>1000, 35360=>1000, 35362=>1000, 35363=>1000, 35364=>1000, 35365=>1000, 35366=>1000, 35370=>1000, 35371=>1000, 35372=>1000, 35373=>1000, 
+	35375=>1000, 35377=>1000, 35379=>1000, 35380=>1000, 35381=>1000, 35382=>1000, 35383=>1000, 35386=>1000, 35387=>1000, 35388=>1000, 35389=>1000, 35390=>1000, 35392=>1000, 35393=>1000, 35395=>1000, 35397=>1000, 
+	35398=>1000, 35399=>1000, 35400=>1000, 35401=>1000, 35405=>1000, 35406=>1000, 35408=>1000, 35409=>1000, 35410=>1000, 35411=>1000, 35412=>1000, 35413=>1000, 35414=>1000, 35415=>1000, 35416=>1000, 35419=>1000, 
+	35420=>1000, 35421=>1000, 35422=>1000, 35424=>1000, 35425=>1000, 35426=>1000, 35427=>1000, 35429=>1000, 35430=>1000, 35431=>1000, 35433=>1000, 35435=>1000, 35436=>1000, 35437=>1000, 35438=>1000, 35440=>1000, 
+	35441=>1000, 35442=>1000, 35443=>1000, 35445=>1000, 35446=>1000, 35447=>1000, 35449=>1000, 35450=>1000, 35451=>1000, 35452=>1000, 35454=>1000, 35455=>1000, 35456=>1000, 35458=>1000, 35459=>1000, 35460=>1000, 
+	35461=>1000, 35462=>1000, 35463=>1000, 35465=>1000, 35467=>1000, 35468=>1000, 35469=>1000, 35471=>1000, 35472=>1000, 35473=>1000, 35474=>1000, 35475=>1000, 35477=>1000, 35478=>1000, 35479=>1000, 35480=>1000, 
+	35481=>1000, 35482=>1000, 35486=>1000, 35487=>1000, 35488=>1000, 35489=>1000, 35491=>1000, 35492=>1000, 35493=>1000, 35494=>1000, 35495=>1000, 35496=>1000, 35497=>1000, 35500=>1000, 35501=>1000, 35502=>1000, 
+	35503=>1000, 35504=>1000, 35506=>1000, 35507=>1000, 35510=>1000, 35511=>1000, 35513=>1000, 35515=>1000, 35516=>1000, 35518=>1000, 35519=>1000, 35522=>1000, 35523=>1000, 35524=>1000, 35526=>1000, 35527=>1000, 
+	35528=>1000, 35529=>1000, 35530=>1000, 35531=>1000, 35532=>1000, 35533=>1000, 35535=>1000, 35537=>1000, 35538=>1000, 35539=>1000, 35540=>1000, 35541=>1000, 35542=>1000, 35543=>1000, 35546=>1000, 35547=>1000, 
+	35548=>1000, 35549=>1000, 35550=>1000, 35551=>1000, 35552=>1000, 35553=>1000, 35554=>1000, 35556=>1000, 35558=>1000, 35559=>1000, 35563=>1000, 35564=>1000, 35565=>1000, 35566=>1000, 35568=>1000, 35569=>1000, 
+	35571=>1000, 35572=>1000, 35573=>1000, 35574=>1000, 35575=>1000, 35576=>1000, 35578=>1000, 35580=>1000, 35582=>1000, 35583=>1000, 35584=>1000, 35585=>1000, 35586=>1000, 35588=>1000, 35589=>1000, 35590=>1000, 
+	35591=>1000, 35594=>1000, 35595=>1000, 35596=>1000, 35598=>1000, 35600=>1000, 35601=>1000, 35604=>1000, 35606=>1000, 35607=>1000, 35609=>1000, 35610=>1000, 35611=>1000, 35612=>1000, 35613=>1000, 35614=>1000, 
+	35615=>1000, 35616=>1000, 35617=>1000, 35622=>1000, 35624=>1000, 35627=>1000, 35628=>1000, 35629=>1000, 35632=>1000, 35635=>1000, 35639=>1000, 35641=>1000, 35644=>1000, 35646=>1000, 35649=>1000, 35650=>1000, 
+	35651=>1000, 35652=>1000, 35653=>1000, 35654=>1000, 35656=>1000, 35657=>1000, 35660=>1000, 35661=>1000, 35662=>1000, 35663=>1000, 35666=>1000, 35667=>1000, 35668=>1000, 35670=>1000, 35672=>1000, 35673=>1000, 
+	35674=>1000, 35675=>1000, 35676=>1000, 35678=>1000, 35679=>1000, 35683=>1000, 35686=>1000, 35691=>1000, 35692=>1000, 35693=>1000, 35695=>1000, 35696=>1000, 35697=>1000, 35698=>1000, 35700=>1000, 35702=>1000, 
+	35703=>1000, 35704=>1000, 35705=>1000, 35708=>1000, 35709=>1000, 35710=>1000, 35711=>1000, 35712=>1000, 35713=>1000, 35715=>1000, 35716=>1000, 35717=>1000, 35722=>1000, 35723=>1000, 35724=>1000, 35725=>1000, 
+	35726=>1000, 35727=>1000, 35728=>1000, 35730=>1000, 35731=>1000, 35732=>1000, 35733=>1000, 35734=>1000, 35737=>1000, 35738=>1000, 35740=>1000, 35742=>1000, 35743=>1000, 35895=>1000, 35896=>1000, 35897=>1000, 
+	35898=>1000, 35901=>1000, 35902=>1000, 35903=>1000, 35905=>1000, 35909=>1000, 35910=>1000, 35911=>1000, 35912=>1000, 35913=>1000, 35914=>1000, 35915=>1000, 35916=>1000, 35918=>1000, 35919=>1000, 35920=>1000, 
+	35921=>1000, 35923=>1000, 35924=>1000, 35925=>1000, 35927=>1000, 35928=>1000, 35929=>1000, 35930=>1000, 35931=>1000, 35933=>1000, 35937=>1000, 35938=>1000, 35939=>1000, 35940=>1000, 35942=>1000, 35944=>1000, 
+	35945=>1000, 35946=>1000, 35947=>1000, 35948=>1000, 35949=>1000, 35955=>1000, 35957=>1000, 35958=>1000, 35960=>1000, 35961=>1000, 35962=>1000, 35963=>1000, 35964=>1000, 35966=>1000, 35970=>1000, 35973=>1000, 
+	35974=>1000, 35975=>1000, 35977=>1000, 35978=>1000, 35979=>1000, 35980=>1000, 35981=>1000, 35982=>1000, 35984=>1000, 35986=>1000, 35987=>1000, 35988=>1000, 35992=>1000, 35993=>1000, 35995=>1000, 35996=>1000, 
+	35997=>1000, 35998=>1000, 36000=>1000, 36001=>1000, 36002=>1000, 36004=>1000, 36007=>1000, 36008=>1000, 36009=>1000, 36010=>1000, 36011=>1000, 36012=>1000, 36013=>1000, 36014=>1000, 36015=>1000, 36016=>1000, 
+	36018=>1000, 36019=>1000, 36020=>1000, 36022=>1000, 36023=>1000, 36024=>1000, 36025=>1000, 36026=>1000, 36027=>1000, 36028=>1000, 36029=>1000, 36031=>1000, 36032=>1000, 36033=>1000, 36034=>1000, 36035=>1000, 
+	36036=>1000, 36037=>1000, 36038=>1000, 36039=>1000, 36040=>1000, 36041=>1000, 36042=>1000, 36043=>1000, 36045=>1000, 36046=>1000, 36047=>1000, 36049=>1000, 36051=>1000, 36053=>1000, 36054=>1000, 36057=>1000, 
+	36058=>1000, 36059=>1000, 36060=>1000, 36061=>1000, 36062=>1000, 36064=>1000, 36065=>1000, 36066=>1000, 36067=>1000, 36068=>1000, 36070=>1000, 36072=>1000, 36074=>1000, 36076=>1000, 36077=>1000, 36079=>1000, 
+	36080=>1000, 36082=>1000, 36084=>1000, 36085=>1000, 36087=>1000, 36088=>1000, 36090=>1000, 36091=>1000, 36092=>1000, 36093=>1000, 36094=>1000, 36095=>1000, 36097=>1000, 36099=>1000, 36100=>1000, 36101=>1000, 
+	36103=>1000, 36104=>1000, 36105=>1000, 36106=>1000, 36107=>1000, 36109=>1000, 36111=>1000, 36112=>1000, 36114=>1000, 36115=>1000, 36116=>1000, 36118=>1000, 36119=>1000, 36123=>1000, 36196=>1000, 36197=>1000, 
+	36198=>1000, 36199=>1000, 36201=>1000, 36203=>1000, 36204=>1000, 36205=>1000, 36206=>1000, 36208=>1000, 36209=>1000, 36211=>1000, 36212=>1000, 36214=>1000, 36215=>1000, 36223=>1000, 36225=>1000, 36226=>1000, 
+	36228=>1000, 36229=>1000, 36232=>1000, 36234=>1000, 36237=>1000, 36240=>1000, 36241=>1000, 36245=>1000, 36249=>1000, 36254=>1000, 36255=>1000, 36256=>1000, 36259=>1000, 36262=>1000, 36264=>1000, 36267=>1000, 
+	36268=>1000, 36271=>1000, 36274=>1000, 36275=>1000, 36277=>1000, 36279=>1000, 36281=>1000, 36282=>1000, 36283=>1000, 36284=>1000, 36286=>1000, 36288=>1000, 36290=>1000, 36293=>1000, 36294=>1000, 36295=>1000, 
+	36296=>1000, 36298=>1000, 36299=>1000, 36300=>1000, 36302=>1000, 36303=>1000, 36305=>1000, 36308=>1000, 36309=>1000, 36310=>1000, 36311=>1000, 36313=>1000, 36314=>1000, 36315=>1000, 36317=>1000, 36319=>1000, 
+	36321=>1000, 36323=>1000, 36324=>1000, 36325=>1000, 36327=>1000, 36328=>1000, 36330=>1000, 36331=>1000, 36332=>1000, 36335=>1000, 36336=>1000, 36337=>1000, 36338=>1000, 36339=>1000, 36340=>1000, 36341=>1000, 
+	36348=>1000, 36349=>1000, 36351=>1000, 36353=>1000, 36356=>1000, 36357=>1000, 36358=>1000, 36360=>1000, 36361=>1000, 36362=>1000, 36363=>1000, 36367=>1000, 36368=>1000, 36369=>1000, 36372=>1000, 36374=>1000, 
+	36381=>1000, 36382=>1000, 36383=>1000, 36384=>1000, 36385=>1000, 36386=>1000, 36387=>1000, 36390=>1000, 36391=>1000, 36394=>1000, 36400=>1000, 36401=>1000, 36403=>1000, 36404=>1000, 36405=>1000, 36406=>1000, 
+	36407=>1000, 36408=>1000, 36409=>1000, 36413=>1000, 36416=>1000, 36417=>1000, 36418=>1000, 36420=>1000, 36423=>1000, 36424=>1000, 36425=>1000, 36426=>1000, 36427=>1000, 36428=>1000, 36429=>1000, 36430=>1000, 
+	36431=>1000, 36432=>1000, 36436=>1000, 36437=>1000, 36441=>1000, 36443=>1000, 36444=>1000, 36445=>1000, 36446=>1000, 36447=>1000, 36448=>1000, 36449=>1000, 36450=>1000, 36451=>1000, 36452=>1000, 36457=>1000, 
+	36460=>1000, 36461=>1000, 36463=>1000, 36464=>1000, 36465=>1000, 36466=>1000, 36468=>1000, 36470=>1000, 36473=>1000, 36474=>1000, 36475=>1000, 36476=>1000, 36481=>1000, 36482=>1000, 36483=>1000, 36484=>1000, 
+	36485=>1000, 36487=>1000, 36489=>1000, 36490=>1000, 36491=>1000, 36493=>1000, 36496=>1000, 36497=>1000, 36498=>1000, 36499=>1000, 36500=>1000, 36501=>1000, 36505=>1000, 36506=>1000, 36507=>1000, 36509=>1000, 
+	36510=>1000, 36513=>1000, 36514=>1000, 36519=>1000, 36521=>1000, 36522=>1000, 36523=>1000, 36524=>1000, 36525=>1000, 36526=>1000, 36527=>1000, 36528=>1000, 36529=>1000, 36531=>1000, 36533=>1000, 36538=>1000, 
+	36539=>1000, 36542=>1000, 36544=>1000, 36545=>1000, 36547=>1000, 36548=>1000, 36549=>1000, 36550=>1000, 36551=>1000, 36552=>1000, 36554=>1000, 36555=>1000, 36556=>1000, 36557=>1000, 36559=>1000, 36561=>1000, 
+	36562=>1000, 36564=>1000, 36571=>1000, 36572=>1000, 36575=>1000, 36578=>1000, 36579=>1000, 36584=>1000, 36587=>1000, 36589=>1000, 36590=>1000, 36592=>1000, 36593=>1000, 36599=>1000, 36600=>1000, 36601=>1000, 
+	36602=>1000, 36603=>1000, 36604=>1000, 36605=>1000, 36606=>1000, 36608=>1000, 36610=>1000, 36611=>1000, 36613=>1000, 36615=>1000, 36616=>1000, 36617=>1000, 36618=>1000, 36620=>1000, 36623=>1000, 36624=>1000, 
+	36626=>1000, 36627=>1000, 36628=>1000, 36629=>1000, 36630=>1000, 36631=>1000, 36632=>1000, 36633=>1000, 36635=>1000, 36636=>1000, 36637=>1000, 36638=>1000, 36639=>1000, 36640=>1000, 36641=>1000, 36643=>1000, 
+	36645=>1000, 36646=>1000, 36647=>1000, 36648=>1000, 36649=>1000, 36650=>1000, 36652=>1000, 36653=>1000, 36654=>1000, 36655=>1000, 36659=>1000, 36660=>1000, 36661=>1000, 36662=>1000, 36663=>1000, 36664=>1000, 
+	36665=>1000, 36666=>1000, 36667=>1000, 36670=>1000, 36671=>1000, 36672=>1000, 36673=>1000, 36674=>1000, 36675=>1000, 36676=>1000, 36677=>1000, 36678=>1000, 36679=>1000, 36681=>1000, 36684=>1000, 36685=>1000, 
+	36686=>1000, 36687=>1000, 36689=>1000, 36690=>1000, 36691=>1000, 36692=>1000, 36693=>1000, 36695=>1000, 36696=>1000, 36700=>1000, 36701=>1000, 36702=>1000, 36703=>1000, 36705=>1000, 36706=>1000, 36707=>1000, 
+	36708=>1000, 36709=>1000, 36763=>1000, 36764=>1000, 36765=>1000, 36766=>1000, 36767=>1000, 36768=>1000, 36769=>1000, 36771=>1000, 36772=>1000, 36773=>1000, 36774=>1000, 36775=>1000, 36776=>1000, 36781=>1000, 
+	36782=>1000, 36783=>1000, 36784=>1000, 36785=>1000, 36786=>1000, 36789=>1000, 36790=>1000, 36791=>1000, 36792=>1000, 36794=>1000, 36795=>1000, 36796=>1000, 36798=>1000, 36799=>1000, 36800=>1000, 36801=>1000, 
+	36802=>1000, 36804=>1000, 36805=>1000, 36806=>1000, 36810=>1000, 36811=>1000, 36813=>1000, 36814=>1000, 36816=>1000, 36817=>1000, 36818=>1000, 36819=>1000, 36820=>1000, 36821=>1000, 36826=>1000, 36832=>1000, 
+	36834=>1000, 36835=>1000, 36836=>1000, 36837=>1000, 36838=>1000, 36840=>1000, 36841=>1000, 36842=>1000, 36843=>1000, 36845=>1000, 36846=>1000, 36847=>1000, 36848=>1000, 36849=>1000, 36852=>1000, 36853=>1000, 
+	36854=>1000, 36855=>1000, 36856=>1000, 36857=>1000, 36858=>1000, 36859=>1000, 36861=>1000, 36862=>1000, 36864=>1000, 36865=>1000, 36866=>1000, 36867=>1000, 36868=>1000, 36869=>1000, 36870=>1000, 36872=>1000, 
+	36875=>1000, 36876=>1000, 36877=>1000, 36878=>1000, 36879=>1000, 36880=>1000, 36881=>1000, 36883=>1000, 36884=>1000, 36885=>1000, 36886=>1000, 36887=>1000, 36888=>1000, 36889=>1000, 36890=>1000, 36891=>1000, 
+	36893=>1000, 36894=>1000, 36895=>1000, 36896=>1000, 36897=>1000, 36898=>1000, 36899=>1000, 36903=>1000, 36904=>1000, 36905=>1000, 36906=>1000, 36908=>1000, 36909=>1000, 36910=>1000, 36911=>1000, 36913=>1000, 
+	36914=>1000, 36915=>1000, 36916=>1000, 36917=>1000, 36918=>1000, 36919=>1000, 36920=>1000, 36921=>1000, 36924=>1000, 36926=>1000, 36927=>1000, 36929=>1000, 36930=>1000, 36931=>1000, 36932=>1000, 36933=>1000, 
+	36935=>1000, 36937=>1000, 36938=>1000, 36939=>1000, 36940=>1000, 36941=>1000, 36942=>1000, 36943=>1000, 36944=>1000, 36945=>1000, 36946=>1000, 36947=>1000, 36948=>1000, 36949=>1000, 36950=>1000, 36952=>1000, 
+	36953=>1000, 36955=>1000, 36956=>1000, 36957=>1000, 36958=>1000, 36960=>1000, 36961=>1000, 36962=>1000, 36963=>1000, 36965=>1000, 36966=>1000, 36967=>1000, 36968=>1000, 36969=>1000, 36972=>1000, 36973=>1000, 
+	36974=>1000, 36975=>1000, 36976=>1000, 36978=>1000, 36980=>1000, 36981=>1000, 36982=>1000, 36983=>1000, 36984=>1000, 36985=>1000, 36986=>1000, 36988=>1000, 36989=>1000, 36991=>1000, 36992=>1000, 36993=>1000, 
+	36994=>1000, 36995=>1000, 36996=>1000, 36997=>1000, 36999=>1000, 37000=>1000, 37001=>1000, 37002=>1000, 37003=>1000, 37004=>1000, 37006=>1000, 37007=>1000, 37008=>1000, 37009=>1000, 37013=>1000, 37015=>1000, 
+	37016=>1000, 37017=>1000, 37019=>1000, 37024=>1000, 37025=>1000, 37026=>1000, 37027=>1000, 37029=>1000, 37030=>1000, 37032=>1000, 37034=>1000, 37039=>1000, 37040=>1000, 37041=>1000, 37042=>1000, 37043=>1000, 
+	37044=>1000, 37045=>1000, 37046=>1000, 37048=>1000, 37053=>1000, 37054=>1000, 37057=>1000, 37059=>1000, 37060=>1000, 37061=>1000, 37063=>1000, 37064=>1000, 37066=>1000, 37068=>1000, 37070=>1000, 37074=>1000, 
+	37077=>1000, 37079=>1000, 37080=>1000, 37081=>1000, 37083=>1000, 37084=>1000, 37085=>1000, 37086=>1000, 37087=>1000, 37089=>1000, 37090=>1000, 37092=>1000, 37093=>1000, 37096=>1000, 37099=>1000, 37101=>1000, 
+	37103=>1000, 37104=>1000, 37108=>1000, 37109=>1000, 37110=>1000, 37111=>1000, 37117=>1000, 37118=>1000, 37119=>1000, 37120=>1000, 37122=>1000, 37124=>1000, 37125=>1000, 37126=>1000, 37128=>1000, 37133=>1000, 
+	37136=>1000, 37138=>1000, 37140=>1000, 37141=>1000, 37142=>1000, 37143=>1000, 37144=>1000, 37145=>1000, 37146=>1000, 37148=>1000, 37150=>1000, 37152=>1000, 37154=>1000, 37155=>1000, 37157=>1000, 37159=>1000, 
+	37161=>1000, 37165=>1000, 37166=>1000, 37167=>1000, 37168=>1000, 37169=>1000, 37170=>1000, 37172=>1000, 37174=>1000, 37175=>1000, 37177=>1000, 37178=>1000, 37180=>1000, 37181=>1000, 37187=>1000, 37191=>1000, 
+	37192=>1000, 37193=>1000, 37194=>1000, 37195=>1000, 37196=>1000, 37197=>1000, 37198=>1000, 37199=>1000, 37202=>1000, 37203=>1000, 37204=>1000, 37206=>1000, 37207=>1000, 37208=>1000, 37209=>1000, 37210=>1000, 
+	37211=>1000, 37217=>1000, 37218=>1000, 37219=>1000, 37220=>1000, 37221=>1000, 37223=>1000, 37225=>1000, 37226=>1000, 37228=>1000, 37229=>1000, 37234=>1000, 37235=>1000, 37236=>1000, 37237=>1000, 37239=>1000, 
+	37240=>1000, 37241=>1000, 37242=>1000, 37243=>1000, 37249=>1000, 37250=>1000, 37251=>1000, 37253=>1000, 37254=>1000, 37255=>1000, 37257=>1000, 37258=>1000, 37259=>1000, 37261=>1000, 37262=>1000, 37264=>1000, 
+	37265=>1000, 37266=>1000, 37267=>1000, 37268=>1000, 37269=>1000, 37271=>1000, 37272=>1000, 37276=>1000, 37278=>1000, 37281=>1000, 37282=>1000, 37284=>1000, 37286=>1000, 37288=>1000, 37290=>1000, 37291=>1000, 
+	37292=>1000, 37293=>1000, 37294=>1000, 37295=>1000, 37296=>1000, 37297=>1000, 37298=>1000, 37299=>1000, 37300=>1000, 37301=>1000, 37302=>1000, 37304=>1000, 37306=>1000, 37307=>1000, 37308=>1000, 37309=>1000, 
+	37311=>1000, 37312=>1000, 37313=>1000, 37314=>1000, 37315=>1000, 37317=>1000, 37318=>1000, 37319=>1000, 37320=>1000, 37321=>1000, 37323=>1000, 37324=>1000, 37325=>1000, 37326=>1000, 37327=>1000, 37328=>1000, 
+	37329=>1000, 37331=>1000, 37332=>1000, 37334=>1000, 37335=>1000, 37336=>1000, 37337=>1000, 37338=>1000, 37339=>1000, 37340=>1000, 37341=>1000, 37342=>1000, 37343=>1000, 37345=>1000, 37347=>1000, 37348=>1000, 
+	37349=>1000, 37350=>1000, 37351=>1000, 37353=>1000, 37354=>1000, 37356=>1000, 37357=>1000, 37358=>1000, 37359=>1000, 37360=>1000, 37361=>1000, 37365=>1000, 37366=>1000, 37367=>1000, 37369=>1000, 37371=>1000, 
+	37372=>1000, 37373=>1000, 37375=>1000, 37376=>1000, 37377=>1000, 37380=>1000, 37381=>1000, 37382=>1000, 37383=>1000, 37385=>1000, 37386=>1000, 37388=>1000, 37389=>1000, 37390=>1000, 37392=>1000, 37393=>1000, 
+	37394=>1000, 37395=>1000, 37396=>1000, 37397=>1000, 37398=>1000, 37400=>1000, 37404=>1000, 37405=>1000, 37406=>1000, 37411=>1000, 37412=>1000, 37413=>1000, 37414=>1000, 37416=>1000, 37417=>1000, 37420=>1000, 
+	37422=>1000, 37423=>1000, 37424=>1000, 37427=>1000, 37428=>1000, 37429=>1000, 37430=>1000, 37431=>1000, 37432=>1000, 37433=>1000, 37434=>1000, 37436=>1000, 37438=>1000, 37439=>1000, 37440=>1000, 37442=>1000, 
+	37443=>1000, 37444=>1000, 37445=>1000, 37446=>1000, 37447=>1000, 37448=>1000, 37449=>1000, 37450=>1000, 37451=>1000, 37453=>1000, 37454=>1000, 37455=>1000, 37456=>1000, 37457=>1000, 37463=>1000, 37464=>1000, 
+	37465=>1000, 37466=>1000, 37467=>1000, 37468=>1000, 37469=>1000, 37470=>1000, 37472=>1000, 37473=>1000, 37474=>1000, 37476=>1000, 37477=>1000, 37478=>1000, 37479=>1000, 37480=>1000, 37481=>1000, 37486=>1000, 
+	37487=>1000, 37488=>1000, 37489=>1000, 37493=>1000, 37494=>1000, 37495=>1000, 37496=>1000, 37497=>1000, 37499=>1000, 37500=>1000, 37501=>1000, 37502=>1000, 37503=>1000, 37504=>1000, 37507=>1000, 37509=>1000, 
+	37512=>1000, 37513=>1000, 37514=>1000, 37517=>1000, 37518=>1000, 37521=>1000, 37522=>1000, 37523=>1000, 37525=>1000, 37526=>1000, 37527=>1000, 37528=>1000, 37529=>1000, 37530=>1000, 37531=>1000, 37532=>1000, 
+	37535=>1000, 37536=>1000, 37540=>1000, 37541=>1000, 37543=>1000, 37544=>1000, 37547=>1000, 37549=>1000, 37551=>1000, 37554=>1000, 37558=>1000, 37559=>1000, 37560=>1000, 37561=>1000, 37562=>1000, 37563=>1000, 
+	37564=>1000, 37565=>1000, 37567=>1000, 37568=>1000, 37569=>1000, 37570=>1000, 37571=>1000, 37573=>1000, 37574=>1000, 37575=>1000, 37576=>1000, 37579=>1000, 37580=>1000, 37581=>1000, 37582=>1000, 37583=>1000, 
+	37584=>1000, 37586=>1000, 37587=>1000, 37589=>1000, 37591=>1000, 37592=>1000, 37593=>1000, 37596=>1000, 37597=>1000, 37599=>1000, 37600=>1000, 37601=>1000, 37603=>1000, 37604=>1000, 37605=>1000, 37607=>1000, 
+	37608=>1000, 37609=>1000, 37610=>1000, 37612=>1000, 37613=>1000, 37614=>1000, 37616=>1000, 37618=>1000, 37619=>1000, 37624=>1000, 37625=>1000, 37626=>1000, 37627=>1000, 37628=>1000, 37631=>1000, 37632=>1000, 
+	37634=>1000, 37638=>1000, 37640=>1000, 37645=>1000, 37647=>1000, 37648=>1000, 37649=>1000, 37652=>1000, 37653=>1000, 37656=>1000, 37657=>1000, 37658=>1000, 37660=>1000, 37661=>1000, 37662=>1000, 37663=>1000, 
+	37664=>1000, 37665=>1000, 37666=>1000, 37667=>1000, 37668=>1000, 37669=>1000, 37670=>1000, 37671=>1000, 37672=>1000, 37673=>1000, 37674=>1000, 37675=>1000, 37676=>1000, 37678=>1000, 37679=>1000, 37682=>1000, 
+	37683=>1000, 37684=>1000, 37685=>1000, 37686=>1000, 37687=>1000, 37690=>1000, 37691=>1000, 37700=>1000, 37703=>1000, 37704=>1000, 37705=>1000, 37707=>1000, 37709=>1000, 37712=>1000, 37713=>1000, 37714=>1000, 
+	37716=>1000, 37717=>1000, 37718=>1000, 37719=>1000, 37720=>1000, 37722=>1000, 37723=>1000, 37724=>1000, 37726=>1000, 37728=>1000, 37732=>1000, 37733=>1000, 37735=>1000, 37737=>1000, 37738=>1000, 37740=>1000, 
+	37741=>1000, 37742=>1000, 37743=>1000, 37744=>1000, 37745=>1000, 37747=>1000, 37748=>1000, 37749=>1000, 37750=>1000, 37754=>1000, 37756=>1000, 37757=>1000, 37758=>1000, 37759=>1000, 37760=>1000, 37761=>1000, 
+	37762=>1000, 37768=>1000, 37770=>1000, 37771=>1000, 37772=>1000, 37773=>1000, 37775=>1000, 37778=>1000, 37780=>1000, 37781=>1000, 37782=>1000, 37783=>1000, 37784=>1000, 37786=>1000, 37787=>1000, 37790=>1000, 
+	37793=>1000, 37795=>1000, 37796=>1000, 37798=>1000, 37799=>1000, 37800=>1000, 37801=>1000, 37803=>1000, 37804=>1000, 37805=>1000, 37806=>1000, 37808=>1000, 37812=>1000, 37813=>1000, 37814=>1000, 37817=>1000, 
+	37818=>1000, 37825=>1000, 37827=>1000, 37828=>1000, 37829=>1000, 37830=>1000, 37831=>1000, 37832=>1000, 37833=>1000, 37834=>1000, 37835=>1000, 37836=>1000, 37837=>1000, 37840=>1000, 37841=>1000, 37843=>1000, 
+	37846=>1000, 37847=>1000, 37848=>1000, 37849=>1000, 37852=>1000, 37853=>1000, 37854=>1000, 37855=>1000, 37857=>1000, 37858=>1000, 37860=>1000, 37861=>1000, 37862=>1000, 37863=>1000, 37864=>1000, 37879=>1000, 
+	37880=>1000, 37881=>1000, 37882=>1000, 37883=>1000, 37885=>1000, 37889=>1000, 37890=>1000, 37891=>1000, 37892=>1000, 37895=>1000, 37896=>1000, 37897=>1000, 37901=>1000, 37902=>1000, 37903=>1000, 37904=>1000, 
+	37907=>1000, 37908=>1000, 37909=>1000, 37910=>1000, 37911=>1000, 37912=>1000, 37913=>1000, 37914=>1000, 37919=>1000, 37921=>1000, 37931=>1000, 37934=>1000, 37935=>1000, 37937=>1000, 37938=>1000, 37939=>1000, 
+	37940=>1000, 37941=>1000, 37942=>1000, 37944=>1000, 37946=>1000, 37947=>1000, 37949=>1000, 37951=>1000, 37953=>1000, 37955=>1000, 37956=>1000, 37957=>1000, 37960=>1000, 37962=>1000, 37964=>1000, 37969=>1000, 
+	37970=>1000, 37971=>1000, 37973=>1000, 37977=>1000, 37978=>1000, 37979=>1000, 37980=>1000, 37982=>1000, 37983=>1000, 37984=>1000, 37985=>1000, 37986=>1000, 37987=>1000, 37992=>1000, 37994=>1000, 37995=>1000, 
+	37997=>1000, 37998=>1000, 37999=>1000, 38000=>1000, 38001=>1000, 38002=>1000, 38005=>1000, 38007=>1000, 38012=>1000, 38013=>1000, 38014=>1000, 38015=>1000, 38017=>1000, 38019=>1000, 38020=>1000, 38263=>1000, 
+	38264=>1000, 38265=>1000, 38270=>1000, 38272=>1000, 38274=>1000, 38275=>1000, 38276=>1000, 38279=>1000, 38280=>1000, 38281=>1000, 38282=>1000, 38283=>1000, 38284=>1000, 38285=>1000, 38286=>1000, 38287=>1000, 
+	38289=>1000, 38290=>1000, 38291=>1000, 38292=>1000, 38294=>1000, 38296=>1000, 38297=>1000, 38301=>1000, 38302=>1000, 38303=>1000, 38304=>1000, 38305=>1000, 38306=>1000, 38307=>1000, 38308=>1000, 38309=>1000, 
+	38310=>1000, 38311=>1000, 38312=>1000, 38313=>1000, 38315=>1000, 38316=>1000, 38317=>1000, 38322=>1000, 38324=>1000, 38326=>1000, 38329=>1000, 38330=>1000, 38331=>1000, 38332=>1000, 38333=>1000, 38334=>1000, 
+	38335=>1000, 38339=>1000, 38342=>1000, 38343=>1000, 38344=>1000, 38345=>1000, 38346=>1000, 38347=>1000, 38348=>1000, 38349=>1000, 38352=>1000, 38353=>1000, 38354=>1000, 38355=>1000, 38356=>1000, 38357=>1000, 
+	38358=>1000, 38360=>1000, 38361=>1000, 38362=>1000, 38364=>1000, 38365=>1000, 38366=>1000, 38367=>1000, 38368=>1000, 38369=>1000, 38370=>1000, 38372=>1000, 38373=>1000, 38374=>1000, 38428=>1000, 38429=>1000, 
+	38430=>1000, 38433=>1000, 38434=>1000, 38436=>1000, 38437=>1000, 38438=>1000, 38440=>1000, 38442=>1000, 38444=>1000, 38446=>1000, 38447=>1000, 38449=>1000, 38450=>1000, 38451=>1000, 38455=>1000, 38456=>1000, 
+	38457=>1000, 38458=>1000, 38459=>1000, 38460=>1000, 38461=>1000, 38463=>1000, 38464=>1000, 38465=>1000, 38466=>1000, 38468=>1000, 38475=>1000, 38476=>1000, 38477=>1000, 38479=>1000, 38480=>1000, 38482=>1000, 
+	38484=>1000, 38486=>1000, 38487=>1000, 38488=>1000, 38491=>1000, 38492=>1000, 38493=>1000, 38494=>1000, 38495=>1000, 38497=>1000, 38498=>1000, 38499=>1000, 38500=>1000, 38501=>1000, 38502=>1000, 38506=>1000, 
+	38508=>1000, 38510=>1000, 38512=>1000, 38514=>1000, 38515=>1000, 38516=>1000, 38517=>1000, 38518=>1000, 38519=>1000, 38520=>1000, 38522=>1000, 38523=>1000, 38524=>1000, 38525=>1000, 38526=>1000, 38527=>1000, 
+	38529=>1000, 38530=>1000, 38531=>1000, 38532=>1000, 38533=>1000, 38534=>1000, 38536=>1000, 38537=>1000, 38538=>1000, 38539=>1000, 38541=>1000, 38542=>1000, 38543=>1000, 38545=>1000, 38548=>1000, 38549=>1000, 
+	38550=>1000, 38551=>1000, 38552=>1000, 38553=>1000, 38554=>1000, 38555=>1000, 38556=>1000, 38557=>1000, 38559=>1000, 38560=>1000, 38563=>1000, 38564=>1000, 38565=>1000, 38566=>1000, 38567=>1000, 38568=>1000, 
+	38569=>1000, 38570=>1000, 38574=>1000, 38575=>1000, 38576=>1000, 38577=>1000, 38578=>1000, 38579=>1000, 38580=>1000, 38582=>1000, 38583=>1000, 38584=>1000, 38585=>1000, 38586=>1000, 38587=>1000, 38588=>1000, 
+	38592=>1000, 38593=>1000, 38596=>1000, 38597=>1000, 38598=>1000, 38599=>1000, 38601=>1000, 38602=>1000, 38603=>1000, 38604=>1000, 38605=>1000, 38606=>1000, 38609=>1000, 38610=>1000, 38613=>1000, 38614=>1000, 
+	38616=>1000, 38617=>1000, 38618=>1000, 38619=>1000, 38620=>1000, 38621=>1000, 38622=>1000, 38623=>1000, 38626=>1000, 38627=>1000, 38632=>1000, 38633=>1000, 38634=>1000, 38635=>1000, 38639=>1000, 38640=>1000, 
+	38641=>1000, 38642=>1000, 38646=>1000, 38647=>1000, 38649=>1000, 38650=>1000, 38651=>1000, 38656=>1000, 38658=>1000, 38659=>1000, 38660=>1000, 38661=>1000, 38662=>1000, 38663=>1000, 38664=>1000, 38665=>1000, 
+	38666=>1000, 38669=>1000, 38670=>1000, 38671=>1000, 38673=>1000, 38675=>1000, 38678=>1000, 38681=>1000, 38682=>1000, 38683=>1000, 38684=>1000, 38685=>1000, 38686=>1000, 38689=>1000, 38690=>1000, 38691=>1000, 
+	38692=>1000, 38695=>1000, 38696=>1000, 38698=>1000, 38704=>1000, 38705=>1000, 38706=>1000, 38707=>1000, 38712=>1000, 38713=>1000, 38715=>1000, 38717=>1000, 38718=>1000, 38721=>1000, 38722=>1000, 38723=>1000, 
+	38724=>1000, 38726=>1000, 38728=>1000, 38729=>1000, 38730=>1000, 38733=>1000, 38734=>1000, 38735=>1000, 38737=>1000, 38738=>1000, 38741=>1000, 38742=>1000, 38743=>1000, 38744=>1000, 38745=>1000, 38746=>1000, 
+	38747=>1000, 38748=>1000, 38750=>1000, 38752=>1000, 38753=>1000, 38754=>1000, 38755=>1000, 38756=>1000, 38758=>1000, 38759=>1000, 38760=>1000, 38761=>1000, 38762=>1000, 38763=>1000, 38765=>1000, 38766=>1000, 
+	38769=>1000, 38771=>1000, 38772=>1000, 38774=>1000, 38775=>1000, 38776=>1000, 38777=>1000, 38778=>1000, 38779=>1000, 38780=>1000, 38781=>1000, 38783=>1000, 38784=>1000, 38785=>1000, 38788=>1000, 38789=>1000, 
+	38790=>1000, 38793=>1000, 38795=>1000, 38797=>1000, 38799=>1000, 38800=>1000, 38805=>1000, 38806=>1000, 38807=>1000, 38808=>1000, 38809=>1000, 38810=>1000, 38812=>1000, 38814=>1000, 38815=>1000, 38816=>1000, 
+	38818=>1000, 38819=>1000, 38822=>1000, 38824=>1000, 38827=>1000, 38828=>1000, 38829=>1000, 38830=>1000, 38833=>1000, 38834=>1000, 38835=>1000, 38836=>1000, 38837=>1000, 38838=>1000, 38840=>1000, 38841=>1000, 
+	38842=>1000, 38844=>1000, 38846=>1000, 38847=>1000, 38849=>1000, 38851=>1000, 38852=>1000, 38853=>1000, 38854=>1000, 38855=>1000, 38856=>1000, 38857=>1000, 38858=>1000, 38859=>1000, 38860=>1000, 38861=>1000, 
+	38862=>1000, 38864=>1000, 38865=>1000, 38867=>1000, 38868=>1000, 38871=>1000, 38872=>1000, 38873=>1000, 38875=>1000, 38876=>1000, 38877=>1000, 38878=>1000, 38880=>1000, 38881=>1000, 38884=>1000, 38893=>1000, 
+	38894=>1000, 38895=>1000, 38897=>1000, 38898=>1000, 38899=>1000, 38900=>1000, 38901=>1000, 38902=>1000, 38903=>1000, 38904=>1000, 38906=>1000, 38907=>1000, 38911=>1000, 38913=>1000, 38914=>1000, 38915=>1000, 
+	38917=>1000, 38918=>1000, 38919=>1000, 38920=>1000, 38922=>1000, 38924=>1000, 38925=>1000, 38926=>1000, 38927=>1000, 38928=>1000, 38929=>1000, 38930=>1000, 38931=>1000, 38932=>1000, 38934=>1000, 38935=>1000, 
+	38936=>1000, 38937=>1000, 38938=>1000, 38940=>1000, 38942=>1000, 38944=>1000, 38945=>1000, 38947=>1000, 38948=>1000, 38949=>1000, 38950=>1000, 38955=>1000, 38956=>1000, 38957=>1000, 38958=>1000, 38959=>1000, 
+	38960=>1000, 38962=>1000, 38963=>1000, 38964=>1000, 38965=>1000, 38967=>1000, 38968=>1000, 38971=>1000, 38972=>1000, 38973=>1000, 38974=>1000, 38980=>1000, 38982=>1000, 38983=>1000, 38986=>1000, 38987=>1000, 
+	38988=>1000, 38989=>1000, 38990=>1000, 38991=>1000, 38993=>1000, 38994=>1000, 38995=>1000, 38996=>1000, 38997=>1000, 38998=>1000, 38999=>1000, 39000=>1000, 39001=>1000, 39002=>1000, 39003=>1000, 39006=>1000, 
+	39010=>1000, 39011=>1000, 39013=>1000, 39014=>1000, 39015=>1000, 39018=>1000, 39019=>1000, 39020=>1000, 39023=>1000, 39024=>1000, 39025=>1000, 39027=>1000, 39028=>1000, 39080=>1000, 39082=>1000, 39083=>1000, 
+	39085=>1000, 39086=>1000, 39087=>1000, 39088=>1000, 39089=>1000, 39092=>1000, 39094=>1000, 39095=>1000, 39096=>1000, 39098=>1000, 39099=>1000, 39103=>1000, 39106=>1000, 39107=>1000, 39108=>1000, 39109=>1000, 
+	39110=>1000, 39112=>1000, 39116=>1000, 39131=>1000, 39132=>1000, 39135=>1000, 39137=>1000, 39138=>1000, 39139=>1000, 39141=>1000, 39142=>1000, 39143=>1000, 39145=>1000, 39146=>1000, 39147=>1000, 39149=>1000, 
+	39150=>1000, 39151=>1000, 39154=>1000, 39155=>1000, 39156=>1000, 39158=>1000, 39164=>1000, 39165=>1000, 39166=>1000, 39170=>1000, 39171=>1000, 39173=>1000, 39175=>1000, 39176=>1000, 39177=>1000, 39178=>1000, 
+	39180=>1000, 39184=>1000, 39185=>1000, 39186=>1000, 39187=>1000, 39188=>1000, 39189=>1000, 39190=>1000, 39191=>1000, 39192=>1000, 39194=>1000, 39195=>1000, 39196=>1000, 39197=>1000, 39198=>1000, 39199=>1000, 
+	39200=>1000, 39201=>1000, 39202=>1000, 39204=>1000, 39206=>1000, 39207=>1000, 39208=>1000, 39211=>1000, 39212=>1000, 39214=>1000, 39217=>1000, 39218=>1000, 39219=>1000, 39220=>1000, 39221=>1000, 39225=>1000, 
+	39226=>1000, 39227=>1000, 39228=>1000, 39229=>1000, 39230=>1000, 39232=>1000, 39233=>1000, 39234=>1000, 39237=>1000, 39238=>1000, 39239=>1000, 39240=>1000, 39241=>1000, 39243=>1000, 39244=>1000, 39245=>1000, 
+	39246=>1000, 39248=>1000, 39249=>1000, 39250=>1000, 39252=>1000, 39253=>1000, 39255=>1000, 39256=>1000, 39257=>1000, 39259=>1000, 39260=>1000, 39262=>1000, 39263=>1000, 39264=>1000, 39318=>1000, 39319=>1000, 
+	39320=>1000, 39321=>1000, 39323=>1000, 39325=>1000, 39326=>1000, 39327=>1000, 39333=>1000, 39334=>1000, 39336=>1000, 39340=>1000, 39341=>1000, 39342=>1000, 39344=>1000, 39345=>1000, 39346=>1000, 39347=>1000, 
+	39348=>1000, 39349=>1000, 39353=>1000, 39354=>1000, 39356=>1000, 39357=>1000, 39359=>1000, 39361=>1000, 39363=>1000, 39364=>1000, 39365=>1000, 39366=>1000, 39368=>1000, 39369=>1000, 39376=>1000, 39377=>1000, 
+	39378=>1000, 39379=>1000, 39380=>1000, 39381=>1000, 39384=>1000, 39385=>1000, 39386=>1000, 39387=>1000, 39388=>1000, 39389=>1000, 39390=>1000, 39391=>1000, 39394=>1000, 39399=>1000, 39402=>1000, 39403=>1000, 
+	39404=>1000, 39405=>1000, 39406=>1000, 39408=>1000, 39409=>1000, 39410=>1000, 39412=>1000, 39413=>1000, 39416=>1000, 39417=>1000, 39419=>1000, 39421=>1000, 39422=>1000, 39423=>1000, 39425=>1000, 39426=>1000, 
+	39427=>1000, 39428=>1000, 39429=>1000, 39435=>1000, 39436=>1000, 39438=>1000, 39439=>1000, 39440=>1000, 39441=>1000, 39442=>1000, 39443=>1000, 39446=>1000, 39449=>1000, 39454=>1000, 39456=>1000, 39458=>1000, 
+	39459=>1000, 39460=>1000, 39463=>1000, 39464=>1000, 39467=>1000, 39469=>1000, 39470=>1000, 39472=>1000, 39475=>1000, 39477=>1000, 39478=>1000, 39479=>1000, 39480=>1000, 39486=>1000, 39488=>1000, 39489=>1000, 
+	39490=>1000, 39491=>1000, 39492=>1000, 39493=>1000, 39495=>1000, 39498=>1000, 39499=>1000, 39500=>1000, 39501=>1000, 39502=>1000, 39505=>1000, 39508=>1000, 39509=>1000, 39510=>1000, 39511=>1000, 39514=>1000, 
+	39515=>1000, 39517=>1000, 39519=>1000, 39522=>1000, 39524=>1000, 39525=>1000, 39529=>1000, 39530=>1000, 39531=>1000, 39592=>1000, 39594=>1000, 39596=>1000, 39597=>1000, 39598=>1000, 39599=>1000, 39600=>1000, 
+	39602=>1000, 39604=>1000, 39605=>1000, 39606=>1000, 39608=>1000, 39609=>1000, 39611=>1000, 39612=>1000, 39614=>1000, 39615=>1000, 39616=>1000, 39617=>1000, 39619=>1000, 39620=>1000, 39622=>1000, 39624=>1000, 
+	39630=>1000, 39631=>1000, 39632=>1000, 39633=>1000, 39634=>1000, 39635=>1000, 39636=>1000, 39637=>1000, 39638=>1000, 39639=>1000, 39640=>1000, 39641=>1000, 39643=>1000, 39644=>1000, 39646=>1000, 39647=>1000, 
+	39648=>1000, 39650=>1000, 39651=>1000, 39652=>1000, 39653=>1000, 39654=>1000, 39655=>1000, 39657=>1000, 39658=>1000, 39659=>1000, 39660=>1000, 39661=>1000, 39662=>1000, 39663=>1000, 39665=>1000, 39666=>1000, 
+	39667=>1000, 39668=>1000, 39669=>1000, 39671=>1000, 39673=>1000, 39674=>1000, 39675=>1000, 39677=>1000, 39679=>1000, 39680=>1000, 39681=>1000, 39682=>1000, 39683=>1000, 39684=>1000, 39685=>1000, 39686=>1000, 
+	39688=>1000, 39689=>1000, 39691=>1000, 39692=>1000, 39693=>1000, 39694=>1000, 39696=>1000, 39698=>1000, 39702=>1000, 39704=>1000, 39705=>1000, 39706=>1000, 39707=>1000, 39708=>1000, 39711=>1000, 39712=>1000, 
+	39714=>1000, 39715=>1000, 39717=>1000, 39718=>1000, 39719=>1000, 39720=>1000, 39721=>1000, 39722=>1000, 39723=>1000, 39725=>1000, 39726=>1000, 39727=>1000, 39729=>1000, 39730=>1000, 39731=>1000, 39732=>1000, 
+	39733=>1000, 39735=>1000, 39737=>1000, 39738=>1000, 39739=>1000, 39740=>1000, 39741=>1000, 39745=>1000, 39746=>1000, 39747=>1000, 39748=>1000, 39749=>1000, 39752=>1000, 39755=>1000, 39756=>1000, 39757=>1000, 
+	39758=>1000, 39759=>1000, 39761=>1000, 39764=>1000, 39765=>1000, 39766=>1000, 39767=>1000, 39768=>1000, 39770=>1000, 39771=>1000, 39774=>1000, 39777=>1000, 39779=>1000, 39781=>1000, 39782=>1000, 39784=>1000, 
+	39786=>1000, 39787=>1000, 39788=>1000, 39789=>1000, 39790=>1000, 39791=>1000, 39794=>1000, 39795=>1000, 39796=>1000, 39797=>1000, 39799=>1000, 39800=>1000, 39801=>1000, 39807=>1000, 39808=>1000, 39811=>1000, 
+	39812=>1000, 39813=>1000, 39814=>1000, 39815=>1000, 39817=>1000, 39818=>1000, 39819=>1000, 39821=>1000, 39822=>1000, 39823=>1000, 39824=>1000, 39825=>1000, 39826=>1000, 39827=>1000, 39828=>1000, 39830=>1000, 
+	39831=>1000, 39834=>1000, 39837=>1000, 39838=>1000, 39839=>1000, 39840=>1000, 39846=>1000, 39847=>1000, 39848=>1000, 39849=>1000, 39850=>1000, 39851=>1000, 39852=>1000, 39853=>1000, 39854=>1000, 39856=>1000, 
+	39857=>1000, 39858=>1000, 39860=>1000, 39863=>1000, 39864=>1000, 39865=>1000, 39867=>1000, 39868=>1000, 39870=>1000, 39871=>1000, 39872=>1000, 39873=>1000, 39878=>1000, 39879=>1000, 39880=>1000, 39881=>1000, 
+	39882=>1000, 39886=>1000, 39887=>1000, 39888=>1000, 39889=>1000, 39890=>1000, 39892=>1000, 39894=>1000, 39895=>1000, 39896=>1000, 39899=>1000, 39901=>1000, 39903=>1000, 39905=>1000, 39906=>1000, 39907=>1000, 
+	39908=>1000, 39909=>1000, 39911=>1000, 39912=>1000, 39914=>1000, 39915=>1000, 39919=>1000, 39920=>1000, 39921=>1000, 39922=>1000, 39923=>1000, 39925=>1000, 39927=>1000, 39928=>1000, 39929=>1000, 39930=>1000, 
+	39933=>1000, 39935=>1000, 39936=>1000, 39938=>1000, 39940=>1000, 39942=>1000, 39944=>1000, 39945=>1000, 39946=>1000, 39947=>1000, 39948=>1000, 39949=>1000, 39951=>1000, 39952=>1000, 39953=>1000, 39954=>1000, 
+	39955=>1000, 39956=>1000, 39957=>1000, 39958=>1000, 39960=>1000, 39961=>1000, 39962=>1000, 39963=>1000, 39964=>1000, 39966=>1000, 39969=>1000, 39970=>1000, 39971=>1000, 39972=>1000, 39973=>1000, 39974=>1000, 
+	39975=>1000, 39976=>1000, 39977=>1000, 39978=>1000, 39981=>1000, 39982=>1000, 39983=>1000, 39984=>1000, 39985=>1000, 39986=>1000, 39989=>1000, 39990=>1000, 39991=>1000, 39993=>1000, 39994=>1000, 39995=>1000, 
+	39997=>1000, 39998=>1000, 40001=>1000, 40003=>1000, 40004=>1000, 40005=>1000, 40006=>1000, 40007=>1000, 40008=>1000, 40009=>1000, 40010=>1000, 40014=>1000, 40015=>1000, 40016=>1000, 40018=>1000, 40019=>1000, 
+	40020=>1000, 40022=>1000, 40023=>1000, 40024=>1000, 40026=>1000, 40027=>1000, 40028=>1000, 40029=>1000, 40030=>1000, 40031=>1000, 40032=>1000, 40035=>1000, 40039=>1000, 40040=>1000, 40041=>1000, 40042=>1000, 
+	40043=>1000, 40046=>1000, 40048=>1000, 40050=>1000, 40053=>1000, 40054=>1000, 40055=>1000, 40056=>1000, 40059=>1000, 40165=>1000, 40166=>1000, 40167=>1000, 40169=>1000, 40171=>1000, 40172=>1000, 40176=>1000, 
+	40178=>1000, 40179=>1000, 40180=>1000, 40182=>1000, 40183=>1000, 40185=>1000, 40194=>1000, 40195=>1000, 40198=>1000, 40199=>1000, 40200=>1000, 40201=>1000, 40203=>1000, 40206=>1000, 40209=>1000, 40210=>1000, 
+	40213=>1000, 40215=>1000, 40216=>1000, 40219=>1000, 40220=>1000, 40221=>1000, 40222=>1000, 40223=>1000, 40227=>1000, 40230=>1000, 40232=>1000, 40234=>1000, 40235=>1000, 40236=>1000, 40239=>1000, 40240=>1000, 
+	40242=>1000, 40243=>1000, 40244=>1000, 40250=>1000, 40251=>1000, 40252=>1000, 40253=>1000, 40254=>1000, 40255=>1000, 40257=>1000, 40258=>1000, 40259=>1000, 40260=>1000, 40261=>1000, 40262=>1000, 40263=>1000, 
+	40264=>1000, 40266=>1000, 40272=>1000, 40273=>1000, 40275=>1000, 40276=>1000, 40281=>1000, 40284=>1000, 40285=>1000, 40286=>1000, 40287=>1000, 40288=>1000, 40289=>1000, 40290=>1000, 40291=>1000, 40292=>1000, 
+	40293=>1000, 40297=>1000, 40298=>1000, 40299=>1000, 40300=>1000, 40303=>1000, 40304=>1000, 40306=>1000, 40310=>1000, 40311=>1000, 40314=>1000, 40315=>1000, 40316=>1000, 40318=>1000, 40323=>1000, 40324=>1000, 
+	40326=>1000, 40327=>1000, 40329=>1000, 40330=>1000, 40333=>1000, 40334=>1000, 40335=>1000, 40338=>1000, 40339=>1000, 40341=>1000, 40342=>1000, 40343=>1000, 40344=>1000, 40346=>1000, 40353=>1000, 40356=>1000, 
+	40361=>1000, 40362=>1000, 40363=>1000, 40364=>1000, 40366=>1000, 40367=>1000, 40369=>1000, 40370=>1000, 40372=>1000, 40373=>1000, 40376=>1000, 40377=>1000, 40378=>1000, 40379=>1000, 40380=>1000, 40383=>1000, 
+	40385=>1000, 40386=>1000, 40387=>1000, 40388=>1000, 40390=>1000, 40391=>1000, 40393=>1000, 40394=>1000, 40399=>1000, 40403=>1000, 40404=>1000, 40405=>1000, 40406=>1000, 40407=>1000, 40409=>1000, 40410=>1000, 
+	40414=>1000, 40415=>1000, 40416=>1000, 40421=>1000, 40422=>1000, 40423=>1000, 40425=>1000, 40427=>1000, 40429=>1000, 40430=>1000, 40431=>1000, 40432=>1000, 40434=>1000, 40435=>1000, 40436=>1000, 40440=>1000, 
+	40441=>1000, 40442=>1000, 40445=>1000, 40446=>1000, 40450=>1000, 40455=>1000, 40458=>1000, 40462=>1000, 40464=>1000, 40465=>1000, 40466=>1000, 40469=>1000, 40470=>1000, 40473=>1000, 40474=>1000, 40475=>1000, 
+	40476=>1000, 40477=>1000, 40478=>1000, 40565=>1000, 40568=>1000, 40569=>1000, 40570=>1000, 40571=>1000, 40572=>1000, 40573=>1000, 40575=>1000, 40576=>1000, 40577=>1000, 40578=>1000, 40579=>1000, 40580=>1000, 
+	40581=>1000, 40583=>1000, 40584=>1000, 40587=>1000, 40588=>1000, 40590=>1000, 40591=>1000, 40593=>1000, 40594=>1000, 40595=>1000, 40597=>1000, 40598=>1000, 40599=>1000, 40600=>1000, 40603=>1000, 40605=>1000, 
+	40606=>1000, 40607=>1000, 40612=>1000, 40613=>1000, 40614=>1000, 40616=>1000, 40617=>1000, 40618=>1000, 40620=>1000, 40621=>1000, 40622=>1000, 40623=>1000, 40624=>1000, 40627=>1000, 40628=>1000, 40629=>1000, 
+	40632=>1000, 40633=>1000, 40634=>1000, 40635=>1000, 40636=>1000, 40638=>1000, 40639=>1000, 40644=>1000, 40646=>1000, 40648=>1000, 40651=>1000, 40652=>1000, 40653=>1000, 40654=>1000, 40655=>1000, 40656=>1000, 
+	40657=>1000, 40658=>1000, 40660=>1000, 40661=>1000, 40664=>1000, 40665=>1000, 40667=>1000, 40668=>1000, 40669=>1000, 40670=>1000, 40671=>1000, 40672=>1000, 40676=>1000, 40677=>1000, 40679=>1000, 40680=>1000, 
+	40684=>1000, 40685=>1000, 40686=>1000, 40687=>1000, 40688=>1000, 40689=>1000, 40690=>1000, 40692=>1000, 40693=>1000, 40694=>1000, 40695=>1000, 40696=>1000, 40697=>1000, 40699=>1000, 40700=>1000, 40701=>1000, 
+	40703=>1000, 40706=>1000, 40707=>1000, 40711=>1000, 40712=>1000, 40713=>1000, 40718=>1000, 40719=>1000, 40720=>1000, 40721=>1000, 40722=>1000, 40723=>1000, 40724=>1000, 40725=>1000, 40726=>1000, 40727=>1000, 
+	40729=>1000, 40730=>1000, 40731=>1000, 40735=>1000, 40736=>1000, 40737=>1000, 40738=>1000, 40742=>1000, 40746=>1000, 40747=>1000, 40748=>1000, 40751=>1000, 40753=>1000, 40754=>1000, 40756=>1000, 40759=>1000, 
+	40761=>1000, 40762=>1000, 40763=>1000, 40764=>1000, 40765=>1000, 40766=>1000, 40767=>1000, 40769=>1000, 40771=>1000, 40772=>1000, 40773=>1000, 40774=>1000, 40775=>1000, 40778=>1000, 40779=>1000, 40782=>1000, 
+	40783=>1000, 40786=>1000, 40787=>1000, 40788=>1000, 40789=>1000, 40790=>1000, 40791=>1000, 40792=>1000, 40794=>1000, 40797=>1000, 40798=>1000, 40799=>1000, 40800=>1000, 40801=>1000, 40802=>1000, 40803=>1000, 
+	40806=>1000, 40807=>1000, 40808=>1000, 40809=>1000, 40810=>1000, 40812=>1000, 40813=>1000, 40814=>1000, 40815=>1000, 40816=>1000, 40817=>1000, 40818=>1000, 40819=>1000, 40821=>1000, 40822=>1000, 40823=>1000, 
+	40826=>1000, 40829=>1000, 40845=>1000, 40847=>1000, 40848=>1000, 40849=>1000, 40850=>1000, 40852=>1000, 40853=>1000, 40854=>1000, 40855=>1000, 40860=>1000, 40861=>1000, 40862=>1000, 40864=>1000, 40865=>1000, 
+	40866=>1000, 40867=>1000, 40869=>1000, 63785=>1000, 63964=>1000, 64014=>1000, 64015=>1000, 64016=>1000, 64017=>1000, 64018=>1000, 64019=>1000, 64020=>1000, 64021=>1000, 64022=>1000, 64023=>1000, 64024=>1000, 
+	64025=>1000, 64026=>1000, 64027=>1000, 64028=>1000, 64029=>1000, 64030=>1000, 64031=>1000, 64032=>1000, 64033=>1000, 64034=>1000, 64035=>1000, 64036=>1000, 64037=>1000, 64038=>1000, 64039=>1000, 64040=>1000, 
+	64041=>1000, 64042=>1000, 64043=>1000, 64044=>1000, 64045=>1000, 65281=>1000, 65282=>1000, 65283=>1000, 65284=>1000, 65285=>1000, 65286=>1000, 65287=>1000, 65288=>1000, 65289=>1000, 65290=>1000, 65291=>1000, 
+	65292=>1000, 65293=>1000, 65294=>1000, 65295=>1000, 65296=>1000, 65297=>1000, 65298=>1000, 65299=>1000, 65300=>1000, 65301=>1000, 65302=>1000, 65303=>1000, 65304=>1000, 65305=>1000, 65306=>1000, 65307=>1000, 
+	65308=>1000, 65309=>1000, 65310=>1000, 65311=>1000, 65312=>1000, 65313=>1000, 65314=>1000, 65315=>1000, 65316=>1000, 65317=>1000, 65318=>1000, 65319=>1000, 65320=>1000, 65321=>1000, 65322=>1000, 65323=>1000, 
+	65324=>1000, 65325=>1000, 65326=>1000, 65327=>1000, 65328=>1000, 65329=>1000, 65330=>1000, 65331=>1000, 65332=>1000, 65333=>1000, 65334=>1000, 65335=>1000, 65336=>1000, 65337=>1000, 65338=>1000, 65339=>1000, 
+	65340=>1000, 65341=>1000, 65342=>1000, 65343=>1000, 65344=>1000, 65345=>1000, 65346=>1000, 65347=>1000, 65348=>1000, 65349=>1000, 65350=>1000, 65351=>1000, 65352=>1000, 65353=>1000, 65354=>1000, 65355=>1000, 
+	65356=>1000, 65357=>1000, 65358=>1000, 65359=>1000, 65360=>1000, 65361=>1000, 65362=>1000, 65363=>1000, 65364=>1000, 65365=>1000, 65366=>1000, 65367=>1000, 65368=>1000, 65369=>1000, 65370=>1000, 65371=>1000, 
+	65372=>1000, 65373=>1000, 65374=>1000, 65377=>500, 65378=>500, 65379=>500, 65380=>500, 65381=>500, 65382=>500, 65383=>500, 65384=>500, 65385=>500, 65386=>500, 65387=>500, 65388=>500, 65389=>500, 
+	65390=>500, 65391=>500, 65392=>500, 65393=>500, 65394=>500, 65395=>500, 65396=>500, 65397=>500, 65398=>500, 65399=>500, 65400=>500, 65401=>500, 65402=>500, 65403=>500, 65404=>500, 65405=>500, 
+	65406=>500, 65407=>500, 65408=>500, 65409=>500, 65410=>500, 65411=>500, 65412=>500, 65413=>500, 65414=>500, 65415=>500, 65416=>500, 65417=>500, 65418=>500, 65419=>500, 65420=>500, 65421=>500, 
+	65422=>500, 65423=>500, 65424=>500, 65425=>500, 65426=>500, 65427=>500, 65428=>500, 65429=>500, 65430=>500, 65431=>500, 65432=>500, 65433=>500, 65434=>500, 65435=>500, 65436=>500, 65437=>500, 
+	65438=>500, 65439=>500, 65504=>1000, 65505=>1000, 65506=>1000, 65507=>1000, 65509=>1000}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='';
+  font[:registry]={'ordering'=>'Japan1','supplement'=>2}
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/symbol.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,15 @@
+TCPDFFontDescriptor.define('symbol') do |font|
+  font[:cw]={
+	0.chr=>250,1.chr=>250,2.chr=>250,3.chr=>250,4.chr=>250,5.chr=>250,6.chr=>250,7.chr=>250,8.chr=>250,9.chr=>250,10.chr=>250,11.chr=>250,12.chr=>250,13.chr=>250,14.chr=>250,15.chr=>250,16.chr=>250,17.chr=>250,18.chr=>250,19.chr=>250,20.chr=>250,21.chr=>250,
+	22.chr=>250,23.chr=>250,24.chr=>250,25.chr=>250,26.chr=>250,27.chr=>250,28.chr=>250,29.chr=>250,30.chr=>250,31.chr=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549,
+	','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722,
+	'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768,
+	'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576,
+	'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,127.chr=>0,128.chr=>0,129.chr=>0,130.chr=>0,131.chr=>0,
+	132.chr=>0,133.chr=>0,134.chr=>0,135.chr=>0,136.chr=>0,137.chr=>0,138.chr=>0,139.chr=>0,140.chr=>0,141.chr=>0,142.chr=>0,143.chr=>0,144.chr=>0,145.chr=>0,146.chr=>0,147.chr=>0,148.chr=>0,149.chr=>0,150.chr=>0,151.chr=>0,152.chr=>0,153.chr=>0,
+	154.chr=>0,155.chr=>0,156.chr=>0,157.chr=>0,158.chr=>0,159.chr=>0,160.chr=>750,161.chr=>620,162.chr=>247,163.chr=>549,164.chr=>167,165.chr=>713,166.chr=>500,167.chr=>753,168.chr=>753,169.chr=>753,170.chr=>753,171.chr=>1042,172.chr=>987,173.chr=>603,174.chr=>987,175.chr=>603,
+	176.chr=>400,177.chr=>549,178.chr=>411,179.chr=>549,180.chr=>549,181.chr=>713,182.chr=>494,183.chr=>460,184.chr=>549,185.chr=>549,186.chr=>549,187.chr=>549,188.chr=>1000,189.chr=>603,190.chr=>1000,191.chr=>658,192.chr=>823,193.chr=>686,194.chr=>795,195.chr=>987,196.chr=>768,197.chr=>768,
+	198.chr=>823,199.chr=>768,200.chr=>768,201.chr=>713,202.chr=>713,203.chr=>713,204.chr=>713,205.chr=>713,206.chr=>713,207.chr=>713,208.chr=>768,209.chr=>713,210.chr=>790,211.chr=>790,212.chr=>890,213.chr=>823,214.chr=>549,215.chr=>250,216.chr=>713,217.chr=>603,218.chr=>603,219.chr=>1042,
+	220.chr=>987,221.chr=>603,222.chr=>987,223.chr=>603,224.chr=>494,225.chr=>329,226.chr=>790,227.chr=>790,228.chr=>786,229.chr=>713,230.chr=>384,231.chr=>384,232.chr=>384,233.chr=>384,234.chr=>384,235.chr=>384,236.chr=>494,237.chr=>494,238.chr=>494,239.chr=>494,240.chr=>0,241.chr=>329,
+	242.chr=>274,243.chr=>686,244.chr=>686,245.chr=>686,246.chr=>384,247.chr=>384,248.chr=>384,249.chr=>384,250.chr=>384,251.chr=>384,252.chr=>494,253.chr=>494,254.chr=>494,255.chr=>0);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/times.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,15 @@
+TCPDFFontDescriptor.define('times') do |font|
+  font[:cw]={
+	0.chr=>250,1.chr=>250,2.chr=>250,3.chr=>250,4.chr=>250,5.chr=>250,6.chr=>250,7.chr=>250,8.chr=>250,9.chr=>250,10.chr=>250,11.chr=>250,12.chr=>250,13.chr=>250,14.chr=>250,15.chr=>250,16.chr=>250,17.chr=>250,18.chr=>250,19.chr=>250,20.chr=>250,21.chr=>250,
+	22.chr=>250,23.chr=>250,24.chr=>250,25.chr=>250,26.chr=>250,27.chr=>250,28.chr=>250,29.chr=>250,30.chr=>250,31.chr=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
+	'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
+	'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
+	'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,127.chr=>350,128.chr=>500,129.chr=>350,130.chr=>333,131.chr=>500,
+	132.chr=>444,133.chr=>1000,134.chr=>500,135.chr=>500,136.chr=>333,137.chr=>1000,138.chr=>556,139.chr=>333,140.chr=>889,141.chr=>350,142.chr=>611,143.chr=>350,144.chr=>350,145.chr=>333,146.chr=>333,147.chr=>444,148.chr=>444,149.chr=>350,150.chr=>500,151.chr=>1000,152.chr=>333,153.chr=>980,
+	154.chr=>389,155.chr=>333,156.chr=>722,157.chr=>350,158.chr=>444,159.chr=>722,160.chr=>250,161.chr=>333,162.chr=>500,163.chr=>500,164.chr=>500,165.chr=>500,166.chr=>200,167.chr=>500,168.chr=>333,169.chr=>760,170.chr=>276,171.chr=>500,172.chr=>564,173.chr=>333,174.chr=>760,175.chr=>333,
+	176.chr=>400,177.chr=>564,178.chr=>300,179.chr=>300,180.chr=>333,181.chr=>500,182.chr=>453,183.chr=>250,184.chr=>333,185.chr=>300,186.chr=>310,187.chr=>500,188.chr=>750,189.chr=>750,190.chr=>750,191.chr=>444,192.chr=>722,193.chr=>722,194.chr=>722,195.chr=>722,196.chr=>722,197.chr=>722,
+	198.chr=>889,199.chr=>667,200.chr=>611,201.chr=>611,202.chr=>611,203.chr=>611,204.chr=>333,205.chr=>333,206.chr=>333,207.chr=>333,208.chr=>722,209.chr=>722,210.chr=>722,211.chr=>722,212.chr=>722,213.chr=>722,214.chr=>722,215.chr=>564,216.chr=>722,217.chr=>722,218.chr=>722,219.chr=>722,
+	220.chr=>722,221.chr=>722,222.chr=>556,223.chr=>500,224.chr=>444,225.chr=>444,226.chr=>444,227.chr=>444,228.chr=>444,229.chr=>444,230.chr=>667,231.chr=>444,232.chr=>444,233.chr=>444,234.chr=>444,235.chr=>444,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>500,241.chr=>500,
+	242.chr=>500,243.chr=>500,244.chr=>500,245.chr=>500,246.chr=>500,247.chr=>564,248.chr=>500,249.chr=>500,250.chr=>500,251.chr=>500,252.chr=>500,253.chr=>500,254.chr=>500,255.chr=>500);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/timesb.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,15 @@
+TCPDFFontDescriptor.define('timesb') do |font|
+  font[:cw]={
+	0.chr=>250,1.chr=>250,2.chr=>250,3.chr=>250,4.chr=>250,5.chr=>250,6.chr=>250,7.chr=>250,8.chr=>250,9.chr=>250,10.chr=>250,11.chr=>250,12.chr=>250,13.chr=>250,14.chr=>250,15.chr=>250,16.chr=>250,17.chr=>250,18.chr=>250,19.chr=>250,20.chr=>250,21.chr=>250,
+	22.chr=>250,23.chr=>250,24.chr=>250,25.chr=>250,26.chr=>250,27.chr=>250,28.chr=>250,29.chr=>250,30.chr=>250,31.chr=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722,
+	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000,
+	'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833,
+	'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,127.chr=>350,128.chr=>500,129.chr=>350,130.chr=>333,131.chr=>500,
+	132.chr=>500,133.chr=>1000,134.chr=>500,135.chr=>500,136.chr=>333,137.chr=>1000,138.chr=>556,139.chr=>333,140.chr=>1000,141.chr=>350,142.chr=>667,143.chr=>350,144.chr=>350,145.chr=>333,146.chr=>333,147.chr=>500,148.chr=>500,149.chr=>350,150.chr=>500,151.chr=>1000,152.chr=>333,153.chr=>1000,
+	154.chr=>389,155.chr=>333,156.chr=>722,157.chr=>350,158.chr=>444,159.chr=>722,160.chr=>250,161.chr=>333,162.chr=>500,163.chr=>500,164.chr=>500,165.chr=>500,166.chr=>220,167.chr=>500,168.chr=>333,169.chr=>747,170.chr=>300,171.chr=>500,172.chr=>570,173.chr=>333,174.chr=>747,175.chr=>333,
+	176.chr=>400,177.chr=>570,178.chr=>300,179.chr=>300,180.chr=>333,181.chr=>556,182.chr=>540,183.chr=>250,184.chr=>333,185.chr=>300,186.chr=>330,187.chr=>500,188.chr=>750,189.chr=>750,190.chr=>750,191.chr=>500,192.chr=>722,193.chr=>722,194.chr=>722,195.chr=>722,196.chr=>722,197.chr=>722,
+	198.chr=>1000,199.chr=>722,200.chr=>667,201.chr=>667,202.chr=>667,203.chr=>667,204.chr=>389,205.chr=>389,206.chr=>389,207.chr=>389,208.chr=>722,209.chr=>722,210.chr=>778,211.chr=>778,212.chr=>778,213.chr=>778,214.chr=>778,215.chr=>570,216.chr=>778,217.chr=>722,218.chr=>722,219.chr=>722,
+	220.chr=>722,221.chr=>722,222.chr=>611,223.chr=>556,224.chr=>500,225.chr=>500,226.chr=>500,227.chr=>500,228.chr=>500,229.chr=>500,230.chr=>722,231.chr=>444,232.chr=>444,233.chr=>444,234.chr=>444,235.chr=>444,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>500,241.chr=>556,
+	242.chr=>500,243.chr=>500,244.chr=>500,245.chr=>500,246.chr=>500,247.chr=>570,248.chr=>500,249.chr=>556,250.chr=>556,251.chr=>556,252.chr=>556,253.chr=>500,254.chr=>556,255.chr=>500);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/timesbi.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,15 @@
+TCPDFFontDescriptor.define('timesbi') do |font|
+  font[:cw]={
+	0.chr=>250,1.chr=>250,2.chr=>250,3.chr=>250,4.chr=>250,5.chr=>250,6.chr=>250,7.chr=>250,8.chr=>250,9.chr=>250,10.chr=>250,11.chr=>250,12.chr=>250,13.chr=>250,14.chr=>250,15.chr=>250,16.chr=>250,17.chr=>250,18.chr=>250,19.chr=>250,20.chr=>250,21.chr=>250,
+	22.chr=>250,23.chr=>250,24.chr=>250,25.chr=>250,26.chr=>250,27.chr=>250,28.chr=>250,29.chr=>250,30.chr=>250,31.chr=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667,
+	'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889,
+	'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
+	'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,127.chr=>350,128.chr=>500,129.chr=>350,130.chr=>333,131.chr=>500,
+	132.chr=>500,133.chr=>1000,134.chr=>500,135.chr=>500,136.chr=>333,137.chr=>1000,138.chr=>556,139.chr=>333,140.chr=>944,141.chr=>350,142.chr=>611,143.chr=>350,144.chr=>350,145.chr=>333,146.chr=>333,147.chr=>500,148.chr=>500,149.chr=>350,150.chr=>500,151.chr=>1000,152.chr=>333,153.chr=>1000,
+	154.chr=>389,155.chr=>333,156.chr=>722,157.chr=>350,158.chr=>389,159.chr=>611,160.chr=>250,161.chr=>389,162.chr=>500,163.chr=>500,164.chr=>500,165.chr=>500,166.chr=>220,167.chr=>500,168.chr=>333,169.chr=>747,170.chr=>266,171.chr=>500,172.chr=>606,173.chr=>333,174.chr=>747,175.chr=>333,
+	176.chr=>400,177.chr=>570,178.chr=>300,179.chr=>300,180.chr=>333,181.chr=>576,182.chr=>500,183.chr=>250,184.chr=>333,185.chr=>300,186.chr=>300,187.chr=>500,188.chr=>750,189.chr=>750,190.chr=>750,191.chr=>500,192.chr=>667,193.chr=>667,194.chr=>667,195.chr=>667,196.chr=>667,197.chr=>667,
+	198.chr=>944,199.chr=>667,200.chr=>667,201.chr=>667,202.chr=>667,203.chr=>667,204.chr=>389,205.chr=>389,206.chr=>389,207.chr=>389,208.chr=>722,209.chr=>722,210.chr=>722,211.chr=>722,212.chr=>722,213.chr=>722,214.chr=>722,215.chr=>570,216.chr=>722,217.chr=>722,218.chr=>722,219.chr=>722,
+	220.chr=>722,221.chr=>611,222.chr=>611,223.chr=>500,224.chr=>500,225.chr=>500,226.chr=>500,227.chr=>500,228.chr=>500,229.chr=>500,230.chr=>722,231.chr=>444,232.chr=>444,233.chr=>444,234.chr=>444,235.chr=>444,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>500,241.chr=>556,
+	242.chr=>500,243.chr=>500,244.chr=>500,245.chr=>500,246.chr=>500,247.chr=>570,248.chr=>500,249.chr=>556,250.chr=>556,251.chr=>556,252.chr=>556,253.chr=>444,254.chr=>500,255.chr=>444);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/timesi.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,15 @@
+TCPDFFontDescriptor.define('timesi') do |font|
+  font[:cw]={
+	0.chr=>250,1.chr=>250,2.chr=>250,3.chr=>250,4.chr=>250,5.chr=>250,6.chr=>250,7.chr=>250,8.chr=>250,9.chr=>250,10.chr=>250,11.chr=>250,12.chr=>250,13.chr=>250,14.chr=>250,15.chr=>250,16.chr=>250,17.chr=>250,18.chr=>250,19.chr=>250,20.chr=>250,21.chr=>250,
+	22.chr=>250,23.chr=>250,24.chr=>250,25.chr=>250,26.chr=>250,27.chr=>250,28.chr=>250,29.chr=>250,30.chr=>250,31.chr=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611,
+	'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833,
+	'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722,
+	'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,127.chr=>350,128.chr=>500,129.chr=>350,130.chr=>333,131.chr=>500,
+	132.chr=>556,133.chr=>889,134.chr=>500,135.chr=>500,136.chr=>333,137.chr=>1000,138.chr=>500,139.chr=>333,140.chr=>944,141.chr=>350,142.chr=>556,143.chr=>350,144.chr=>350,145.chr=>333,146.chr=>333,147.chr=>556,148.chr=>556,149.chr=>350,150.chr=>500,151.chr=>889,152.chr=>333,153.chr=>980,
+	154.chr=>389,155.chr=>333,156.chr=>667,157.chr=>350,158.chr=>389,159.chr=>556,160.chr=>250,161.chr=>389,162.chr=>500,163.chr=>500,164.chr=>500,165.chr=>500,166.chr=>275,167.chr=>500,168.chr=>333,169.chr=>760,170.chr=>276,171.chr=>500,172.chr=>675,173.chr=>333,174.chr=>760,175.chr=>333,
+	176.chr=>400,177.chr=>675,178.chr=>300,179.chr=>300,180.chr=>333,181.chr=>500,182.chr=>523,183.chr=>250,184.chr=>333,185.chr=>300,186.chr=>310,187.chr=>500,188.chr=>750,189.chr=>750,190.chr=>750,191.chr=>500,192.chr=>611,193.chr=>611,194.chr=>611,195.chr=>611,196.chr=>611,197.chr=>611,
+	198.chr=>889,199.chr=>667,200.chr=>611,201.chr=>611,202.chr=>611,203.chr=>611,204.chr=>333,205.chr=>333,206.chr=>333,207.chr=>333,208.chr=>722,209.chr=>667,210.chr=>722,211.chr=>722,212.chr=>722,213.chr=>722,214.chr=>722,215.chr=>675,216.chr=>722,217.chr=>722,218.chr=>722,219.chr=>722,
+	220.chr=>722,221.chr=>556,222.chr=>611,223.chr=>500,224.chr=>500,225.chr=>500,226.chr=>500,227.chr=>500,228.chr=>500,229.chr=>500,230.chr=>667,231.chr=>444,232.chr=>444,233.chr=>444,234.chr=>444,235.chr=>444,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>500,241.chr=>500,
+	242.chr=>500,243.chr=>500,244.chr=>500,245.chr=>500,246.chr=>500,247.chr=>675,248.chr=>500,249.chr=>500,250.chr=>500,251.chr=>500,252.chr=>500,253.chr=>444,254.chr=>500,255.chr=>444);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/ttf-bitstream-vera-1.10/COPYRIGHT.TXT	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,124 @@
+Bitstream Vera Fonts Copyright
+
+The fonts have a generous copyright, allowing derivative works (as
+long as "Bitstream" or "Vera" are not in the names), and full
+redistribution (so long as they are not#sold# by themselves). They
+can be be bundled, redistributed and sold with any software.
+
+The fonts are distributed under the following copyright:
+
+Copyright
+=========
+
+Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream
+Vera is a trademark of Bitstream, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the fonts accompanying this license ("Fonts") and associated
+documentation files (the "Font Software"), to reproduce and distribute
+the Font Software, including without limitation the rights to use,
+copy, merge, publish, distribute, and/or sell copies of the Font
+Software, and to permit persons to whom the Font Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright and trademark notices and this permission notice
+shall be included in all copies of one or more of the Font Software
+typefaces.
+
+The Font Software may be modified, altered, or added to, and in
+particular the designs of glyphs or characters in the Fonts may be
+modified and additional glyphs or characters may be added to the
+Fonts, only if the fonts are renamed to names not containing either
+the words "Bitstream" or the word "Vera".
+
+This License becomes null and void to the extent applicable to Fonts
+or Font Software that has been modified and is distributed under the
+"Bitstream Vera" names.
+
+The Font Software may be sold as part of a larger software package but
+no copy of one or more of the Font Software typefaces may be sold by
+itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
+BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL,
+OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT
+SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
+
+Except as contained in this notice, the names of Gnome, the Gnome
+Foundation, and Bitstream Inc., shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this Font
+Software without prior written authorization from the Gnome Foundation
+or Bitstream Inc., respectively. For further information, contact:
+fonts at gnome dot org.
+
+Copyright FAQ
+=============
+
+   1. I don't understand the resale restriction... What gives?
+
+      Bitstream is giving away these fonts, but wishes to ensure its
+      competitors can't just drop the fonts as is into a font sale system
+      and sell them as is. It seems fair that if Bitstream can't make money
+      from the Bitstream Vera fonts, their competitors should not be able to
+      do so either. You can sell the fonts as part of any software package,
+      however.
+
+   2. I want to package these fonts separately for distribution and
+      sale as part of a larger software package or system.  Can I do so?
+
+      Yes. A RPM or Debian package is a "larger software package" to begin 
+      with, and you aren't selling them independently by themselves. 
+      See 1. above.
+
+   3. Are derivative works allowed?
+      Yes!
+
+   4. Can I change or add to the font(s)?
+      Yes, but you must change the name(s) of the font(s).
+
+   5. Under what terms are derivative works allowed?
+
+      You must change the name(s) of the fonts. This is to ensure the
+      quality of the fonts, both to protect Bitstream and Gnome. We want to
+      ensure that if an application has opened a font specifically of these
+      names, it gets what it expects (though of course, using fontconfig,
+      substitutions could still could have occurred during font
+      opening). You must include the Bitstream copyright. Additional
+      copyrights can be added, as per copyright law. Happy Font Hacking!
+
+   6. If I have improvements for Bitstream Vera, is it possible they might get 
+       adopted in future versions?
+
+      Yes. The contract between the Gnome Foundation and Bitstream has
+      provisions for working with Bitstream to ensure quality additions to
+      the Bitstream Vera font family. Please contact us if you have such
+      additions. Note, that in general, we will want such additions for the
+      entire family, not just a single font, and that you'll have to keep
+      both Gnome and Jim Lyles, Vera's designer, happy! To make sense to add
+      glyphs to the font, they must be stylistically in keeping with Vera's
+      design. Vera cannot become a "ransom note" font. Jim Lyles will be
+      providing a document describing the design elements used in Vera, as a
+      guide and aid for people interested in contributing to Vera.
+
+   7. I want to sell a software package that uses these fonts: Can I do so?
+
+      Sure. Bundle the fonts with your software and sell your software
+      with the fonts. That is the intent of the copyright.
+
+   8. If applications have built the names "Bitstream Vera" into them, 
+      can I override this somehow to use fonts of my choosing?
+
+      This depends on exact details of the software. Most open source
+      systems and software (e.g., Gnome, KDE, etc.) are now converting to
+      use fontconfig (see www.fontconfig.org) to handle font configuration,
+      selection and substitution; it has provisions for overriding font
+      names and subsituting alternatives. An example is provided by the
+      supplied local.conf file, which chooses the family Bitstream Vera for
+      "sans", "serif" and "monospace".  Other software (e.g., the XFree86
+      core server) has other mechanisms for font substitution.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/ttf-bitstream-vera-1.10/README.TXT	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,11 @@
+Contained herin is the Bitstream Vera font family.
+
+The Copyright information is found in the COPYRIGHT.TXT file (along
+with being incoporated into the fonts themselves).
+
+The releases notes are found in the file "RELEASENOTES.TXT".
+
+We hope you enjoy Vera!
+
+                        Bitstream, Inc.
+			The Gnome Project
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/ttf-bitstream-vera-1.10/RELEASENOTES.TXT	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,162 @@
+Bitstream Vera Fonts - April 16, 2003
+=====================================
+
+The version number of these fonts is 1.10 to distinguish them from the
+beta test fonts.
+
+Note that the Vera copyright is incorporated in the fonts themselves.
+The License field in the fonts contains the copyright license as it
+appears below. The TrueType copyright field is not large enough to
+contain the full license, so the license is incorporated (as you might
+think if you thought about it) into the license field, which
+unfortunately can be obscure to find.  (In pfaedit, see: Element->Font
+Info->TTFNames->License).
+
+Our apologies for it taking longer to complete the fonts than planned.
+Beta testers requested a tighter line spacing (less leading) and Jim
+Lyles redesigned Vera's accents to bring its line spacing to more
+typical of other fonts.  This took additional time and effort.  Our
+thanks to Jim for this effort above and beyond the call of duty.
+
+There are four monospace and sans faces (normal, oblique, bold, bold
+oblique) and two serif faces (normal and bold). Fontconfig/Xft2 (see
+www.fontconfig.org) can artificially oblique the serif faces for you:
+this loses hinting and distorts the faces slightly, but is visibly
+different than normal and bold, and reasonably pleasing.
+
+On systems with fontconfig 2.0 or 2.1 installed, making your sans,
+serif and monospace fonts default to these fonts is very easy.  Just
+drop the file local.conf into your /etc/fonts directory.  This will
+make the Bitstream fonts your default fonts for all applications using
+fontconfig (if sans, serif, or monospace names are used, as they often
+are as default values in many desktops). The XML in local.conf may
+need modification to enable subpixel decimation, if appropriate,
+however, the commented out phrase does so for XFree86 4.3, in the case
+that the server does not have sufficient information to identify the
+use of a flat panel.  Fontconfig 2.2 adds Vera to the list of font
+families and will, by default use it as the default sans, serif and
+monospace fonts.
+
+During the testing of the final Vera fonts, we learned that screen
+fonts in general are only typically hinted to work correctly at
+integer pixel sizes.  Vera is coded internally for integer sizes only.
+We need to investigate further to see if there are commonly used fonts
+that are hinted to be rounded but are not rounded to integer sizes due
+to oversights in their coding.
+
+Most fonts work best at 8 pixels and below if anti-aliased only, as
+the amount of work required to hint well at smaller and smaller sizes
+becomes astronomical.  GASP tables are typically used to control
+whether hinting is used or not, but Freetype/Xft does not currently
+support GASP tables (which are present in Vera).
+
+To mitigate this problem, both for Vera and other fonts, there will be
+(very shortly) a new fontconfig 2.2 release that will, by default not
+apply hints if the size is below 8 pixels. if you should have a font
+that in fact has been hinted more agressively, you can use fontconfig
+to note this exception. We believe this should improve many hinted
+fonts in addition to Vera, though implemeting GASP support is likely
+the right long term solution.
+
+Font rendering in Gnome or KDE is the combination of algorithms in
+Xft2 and Freetype, along with hinting in the fonts themselves. It is
+vital to have sufficient information to disentangle problems that you
+may observe.
+
+Note that having your font rendering system set up correctly is vital
+to proper judgement of problems of the fonts:
+
+   # Freetype may or may not be configured to in ways that may
+      implement execution of possibly patented (in some parts of the world)
+      TrueType hinting algorithms, particularly at small sizes.  Best
+      results are obtained while using these algorithms.
+
+   # The freetype autohinter (used when the possibly patented
+      algorithms are not used) continues to improve with each release. If
+      you are using the autohinter, please ensure you are using an up to
+      date version of freetype before reporting problems.
+
+   # Please identify what version of freetype you are using in any
+      bug reports, and how your freetype is configured.
+
+   # Make sure you are not using the freetype version included in
+      XFree86 4.3, as it has bugs that significantly degrade most fonts,
+      including Vera. if you build XFree86 4.3 from source yourself, you may
+      have installed this broken version without intending it (as I
+      did). Vera was verified with the recently released Freetype 2.1.4. On
+      many systems, 'ldd" can be used to see which freetype shared library
+      is actually being used.
+
+   # Xft/X Render does not (yet) implement gamma correction.  This
+      causes significant problems rendering white text on a black background
+      (causing partial pixels to be insufficiently shaded) if the gamma of
+      your monitor has not been compensated for, and minor problems with
+      black text on a while background.  The program "xgamma" can be used to
+      set a gamma correction value in the X server's color pallette. Most
+      monitors have a gamma near 2.
+
+   # Note that the Vera family uses minimal delta hinting. Your
+      results on other systems when not used anti-aliased may not be
+      entirely satisfying. We are primarily interested in reports of
+      problems on open source systems implementing Xft2/fontconfig/freetype
+      (which implements antialiasing and hinting adjustements, and
+      sophisticated subpixel decimation on flatpanels).  Also, the
+      algorithms used by Xft2 adjust the hints to integer widths and the
+      results are crisper on open source systems than on Windows or
+      MacIntosh.
+
+   # Your fontconfig may (probably does) predate the release of
+      fontconfig 2.2, and you may see artifacts not present when the font is
+      used at very small sizes with hinting enabled. "vc-list -V" can be
+      used to see what version you have installed.
+
+We believe and hope that these fonts will resolve the problems
+reported during beta test.  The largest change is the reduction of
+leading (interline spacing), which had annoyed a number of people, and
+reduced Vera's utility for some applcations.  The Vera monospace font
+should also now make '0' and 'O' and '1' and 'l' more clearly
+distinguishable.
+
+The version of these fonts is version 1.10.  Fontconfig should be
+choosing the new version of the fonts if both the released fonts and
+beta test fonts are installed (though please discard them: they have
+names of form tt20[1-12]gn.ttf).  Note that older versions of
+fontconfig sometimes did not rebuild their cache correctly when new
+fonts are installed: please upgrade to fontconfig 2.2. "fc-cache -f"
+can be used to force rebuilding fontconfig's cache files.
+
+If you note problems, please send them to fonts at gnome dot org, with
+exactly which face and size and unicode point you observe the problem
+at. The xfd utility from XFree86 CVS may be useful for this (e.g. "xfd
+-fa sans").  A possibly more useful program to examine fonts at a
+variety of sizes is the "waterfall" program found in Keith Packard's
+CVS.
+
+        $ cvs -d :pserver:anoncvs@keithp.com:/local/src/CVS login
+        Logging in to :pserver:anoncvs@keithp.com:2401/local/src/CVS
+        CVS password: <hit return>
+        $ cvs -d :pserver:anoncvs@keithp.com:/local/src/CVS co waterfall
+        $ cd waterfall
+        $ xmkmf -a
+        $ make
+        # make install
+        # make install.man
+
+Again, please make sure you are running an up-to-date freetype, and
+that you are only examining integer sizes.
+
+Reporting Problems
+==================
+
+Please send problem reports to fonts at gnome org, with the following
+information:
+
+   1. Version of Freetype, Xft2 and fontconfig
+   2. Whether TT hinting is being used, or the autohinter
+   3. Application being used
+   4. Character/Unicode code point that has problems (if applicable)
+   5. Version of which operating system
+   6. Please include a screenshot, when possible.
+
+Please check the fonts list archives before reporting problems to cut
+down on duplication.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/ttf-bitstream-vera-1.10/local.conf	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,32 @@
+<?xml version="1.0"
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts.conf file to configure system font access -->
+<fontconfig>
+        <!--  Enable sub-pixel rendering
+        <match target="font">
+                <test qual="all" name="rgba">
+                        <const>unknown</const>
+                </test>
+                <edit name="rgba" mode="assign"><const>rgb</const></edit>
+        </match>
+         -->
+
+        <alias>
+                <family>serif</family>
+                <prefer>
+                        <family>Bitstream Vera Serif</family>
+                </prefer>
+        </alias>
+        <alias>
+                <family>sans-serif</family>
+                <prefer>
+                        <family>Bitstream Vera Sans</family>
+                </prefer>
+        </alias>
+        <alias>
+                <family>monospace</family>
+                <prefer>
+                        <family>Bitstream Vera Sans Mono</family>
+                </prefer>
+        </alias>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/ttf2ufm/README.TXT	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,30 @@
+To embed TrueType fonts (.TTF) files, you need to extract the font metrics and 
+build the required tables using the provided utility (/fonts/ttf2ufm). 
+
+TTF2UFM is a modified version of Mark Heath's TTF 2 PT1 converter 
+(http://ttf2pt1.sourceforge.net/) by Steven Wittens <steven@acko.net> 
+(http://www.acko.net/blog/ufpdf). ttf2ufm, is included in /ttf2ufm-src. 
+The /fonts/ttf2ufm folder contains a compiled Windows binary. 
+TTF 2 UFM is identical to TTF 2 PT1 except that it also generates a .ufm file 
+for usage with makefontuni.php or makefontuni.rb.
+
+
+Setting up a Truetype font for usage with UFPDF:
+  1) Generate the font's .ufm metrics file by processing it with the provided 
+      ttf2ufm program (modified ttf2pt1). For example:
+      $ ttf2ufm -a -F myfont.ttf
+  
+  2) Run makefontuni_ruby.php with the .ttf and .ufm filenames as argument:
+      $ php -q makefontuni_ruby.php myfont.ttf myfont.ufm
+  
+  3) Copy the resulting .rb, .z and .ctg.z file to the TCPDF font directory.
+  
+  4) Rename php font files variations for bold and italic using the following schema:
+    	[basic-font-name]b.rb for bold variation
+    	[basic-font-name]i.rb for oblique variation
+    	[basic-font-name]bi.rb for bold oblique variation
+  	
+  5) Rename the name of the font in the first line of each .rb file:
+      TCPDFFontDescriptor.define('dtlargotitalic') do |font|
+     becomes:
+      TCPDFFontDescriptor.define('dtlargoti') do |font|
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/ttf2ufm/makefontuni_ruby.php	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,313 @@
+<?php
+/*******************************************************************************
+* Utility to generate font definition files for Unicode Truetype fonts         *
+* Version: 1.12                                                                *
+* Date:    2003-12-30                                                          *
+*******************************************************************************/
+
+function ReadUFM($file, &$cidtogidmap)
+{
+  //Prepare empty CIDToGIDMap
+  $cidtogidmap = str_pad('', 256*256*2, "\x00");
+  
+  //Read a font metric file
+  $a=file($file);
+  if(empty($a))
+    die('File not found');
+  $widths=array();
+  $fm=array();
+  foreach($a as $l)
+  {
+    $e=explode(' ',chop($l));
+    if(count($e)<2)
+      continue;
+    $code=$e[0];
+    $param=$e[1];
+    if($code=='U')
+    {
+      // U 827 ; WX 0 ; N squaresubnosp ; G 675 ;
+      //Character metrics
+      $cc=(int)$e[1];
+      if ($cc != -1) {
+        $gn = $e[7];
+        $w = $e[4];
+        $glyph = $e[10];
+        $widths[$cc] = $w;
+        if($cc == ord('X'))
+          $fm['CapXHeight'] = $e[13];
+          
+        // Set GID
+        if ($cc >= 0 && $cc < 0xFFFF && $glyph) {
+          $cidtogidmap{$cc*2} = chr($glyph >> 8);
+          $cidtogidmap{$cc*2 + 1} = chr($glyph & 0xFF);
+        }        
+      }
+      if($gn=='.notdef' && !isset($fm['MissingWidth']))
+        $fm['MissingWidth']=$w;
+    }
+    elseif($code=='FontName')
+      $fm['FontName']=$param;
+    elseif($code=='Weight')
+      $fm['Weight']=$param;
+    elseif($code=='ItalicAngle')
+      $fm['ItalicAngle']=(double)$param;
+    elseif($code=='Ascender')
+      $fm['Ascender']=(int)$param;
+    elseif($code=='Descender')
+      $fm['Descender']=(int)$param;
+    elseif($code=='UnderlineThickness')
+      $fm['UnderlineThickness']=(int)$param;
+    elseif($code=='UnderlinePosition')
+      $fm['UnderlinePosition']=(int)$param;
+    elseif($code=='IsFixedPitch')
+      $fm['IsFixedPitch']=($param=='true');
+    elseif($code=='FontBBox')
+      $fm['FontBBox']=array($e[1],$e[2],$e[3],$e[4]);
+    elseif($code=='CapHeight')
+      $fm['CapHeight']=(int)$param;
+    elseif($code=='StdVW')
+      $fm['StdVW']=(int)$param;
+  }
+  if(!isset($fm['MissingWidth']))
+    $fm['MissingWidth']=600;
+
+  if(!isset($fm['FontName']))
+    die('FontName not found');
+
+  $fm['Widths']=$widths;
+  
+  return $fm;
+}
+
+function MakeFontDescriptor($fm)
+{
+  //Ascent
+  $asc=(isset($fm['Ascender']) ? $fm['Ascender'] : 1000);
+  $fd="{'Ascent'=>".$asc;
+  //Descent
+  $desc=(isset($fm['Descender']) ? $fm['Descender'] : -200);
+  $fd.=",'Descent'=>".$desc;
+  //CapHeight
+  if(isset($fm['CapHeight']))
+    $ch=$fm['CapHeight'];
+  elseif(isset($fm['CapXHeight']))
+    $ch=$fm['CapXHeight'];
+  else
+    $ch=$asc;
+  $fd.=",'CapHeight'=>".$ch;
+  //Flags
+  $flags=0;
+  if(isset($fm['IsFixedPitch']) and $fm['IsFixedPitch'])
+    $flags+=1<<0;
+  $flags+=1<<5;
+  if(isset($fm['ItalicAngle']) and $fm['ItalicAngle']!=0)
+    $flags+=1<<6;
+  $fd.=",'Flags'=>".$flags;
+  //FontBBox
+  if(isset($fm['FontBBox']))
+    $fbb=$fm['FontBBox'];
+  else
+    $fbb=array(0,$des-100,1000,$asc+100);
+  $fd.=",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'";
+  //ItalicAngle
+  $ia=(isset($fm['ItalicAngle']) ? $fm['ItalicAngle'] : 0);
+  $fd.=",'ItalicAngle'=>".$ia;
+  //StemV
+  if(isset($fm['StdVW']))
+    $stemv=$fm['StdVW'];
+  elseif(isset($fm['Weight']) and eregi('(bold|black)',$fm['Weight']))
+    $stemv=120;
+  else
+    $stemv=70;
+  $fd.=",'StemV'=>".$stemv;
+  //MissingWidth
+  if(isset($fm['MissingWidth']))
+    $fd.=",'MissingWidth'=>".$fm['MissingWidth'];
+  $fd.='}';
+  return $fd;
+}
+
+function MakeWidthArray($fm)
+{
+  //Make character width array
+  $s="{";
+  $cw=$fm['Widths'];
+  $els=array();
+  $c=0;
+  foreach ($cw as $i => $w)
+  {
+    $els[] = ((($c++)%16==0)?"\n\t":'').$i.'=>'.$w;
+  }
+  $s .= implode(', ', $els);
+  $s.='}';
+  return $s;
+}
+
+function SaveToFile($file,$s,$mode='t')
+{
+  $f=fopen($file,'w'.$mode);
+  if(!$f)
+    die('Can\'t write to file '.$file);
+  fwrite($f,$s,strlen($s));
+  fclose($f);
+}
+
+function ReadShort($f)
+{
+  $a=unpack('n1n',fread($f,2));
+  return $a['n'];
+}
+
+function ReadLong($f)
+{
+  $a=unpack('N1N',fread($f,4));
+  return $a['N'];
+}
+
+function CheckTTF($file)
+{
+  //Check if font license allows embedding
+  $f=fopen($file,'rb');
+  if(!$f)
+    die('<B>Error:</B> Can\'t open '.$file);
+  //Extract number of tables
+  fseek($f,4,SEEK_CUR);
+  $nb=ReadShort($f);
+  fseek($f,6,SEEK_CUR);
+  //Seek OS/2 table
+  $found=false;
+  for($i=0;$i<$nb;$i++)
+  {
+    if(fread($f,4)=='OS/2')
+    {
+      $found=true;
+      break;
+    }
+    fseek($f,12,SEEK_CUR);
+  }
+  if(!$found)
+  {
+    fclose($f);
+    return;
+  }
+  fseek($f,4,SEEK_CUR);
+  $offset=ReadLong($f);
+  fseek($f,$offset,SEEK_SET);
+  //Extract fsType flags
+  fseek($f,8,SEEK_CUR);
+  $fsType=ReadShort($f);
+  $rl=($fsType & 0x02)!=0;
+  $pp=($fsType & 0x04)!=0;
+  $e=($fsType & 0x08)!=0;
+  fclose($f);
+  if($rl and !$pp and !$e)
+    echo '<B>Warning:</B> font license does not allow embedding';
+}
+
+/*******************************************************************************
+* $fontfile: path to TTF file (or empty string if not to be embedded)          *
+* $ufmfile:  path to UFM file                                                  *
+*******************************************************************************/
+function MakeFont($fontfile,$ufmfile)
+{
+  //Generate a font definition file
+  set_magic_quotes_runtime(0);
+  if(!file_exists($ufmfile))
+    die('<B>Error:</B> UFM file not found: '.$ufmfile);
+  $cidtogidmap = '';
+  $fm=ReadUFM($ufmfile, $cidtogidmap);
+  $fd=MakeFontDescriptor($fm);
+  //Find font type
+  if($fontfile)
+  {
+    $ext=strtolower(substr($fontfile,-3));
+    if($ext=='ttf')
+      $type='TrueTypeUnicode';
+    else
+      die('<B>Error:</B> not a truetype font: '.$ext);
+  }
+  else
+  {
+    if($type!='TrueTypeUnicode')
+      die('<B>Error:</B> incorrect font type: '.$type);
+  }
+  //Start generation
+  $basename=strtolower(substr(basename($ufmfile),0,-4));
+  $s='TCPDFFontDescriptor.define(\''.$basename."') do |font|\n";
+  $s.="  font[:type]='".$type."'\n";
+  $s.="  font[:name]='".$fm['FontName']."'\n";
+  $s.="  font[:desc]=".$fd."\n";
+  if(!isset($fm['UnderlinePosition']))
+    $fm['UnderlinePosition']=-100;
+  if(!isset($fm['UnderlineThickness']))
+    $fm['UnderlineThickness']=50;
+  $s.="  font[:up]=".$fm['UnderlinePosition']."\n";
+  $s.="  font[:ut]=".$fm['UnderlineThickness']."\n";
+  $s.="  font[:cw]=".MakeWidthArray($fm)."\n";
+  $s.="  font[:enc]=''\n";
+  $s.="  font[:diff]=''\n";
+  if($fontfile)
+  {
+    //Embedded font
+    if(!file_exists($fontfile))
+      die('<B>Error:</B> font file not found: '.$fontfile);
+    CheckTTF($fontfile);
+    $f=fopen($fontfile,'rb');
+    if(!$f)
+      die('<B>Error:</B> Can\'t open '.$fontfile);
+    $file=fread($f,filesize($fontfile));
+    fclose($f);
+    if(function_exists('gzcompress'))
+    {
+      $cmp=$basename.'.z';
+      SaveToFile($cmp,gzcompress($file),'b');
+      $s.='  font[:file]=\''.$cmp."'\n";
+      echo 'Font file compressed ('.$cmp.')<BR>';
+
+      $cmp=$basename.'.ctg.z';
+      SaveToFile($cmp,gzcompress($cidtogidmap),'b');
+      echo 'CIDToGIDMap created and compressed ('.$cmp.')<BR>';     
+      $s.='  font[:ctg]=\''.$cmp."'\n";
+    }
+    else
+    {
+      $s.='$file=\''.basename($fontfile)."'\n";
+      echo '<B>Notice:</B> font file could not be compressed (gzcompress not available)<BR>';
+      
+      $cmp=$basename.'.ctg';
+      $f = fopen($cmp, 'wb');
+      fwrite($f, $cidtogidmap);
+      fclose($f);
+      echo 'CIDToGIDMap created ('.$cmp.')<BR>';
+      $s.='  font[:ctg]=\''.$cmp."'\n";
+    }
+    if($type=='Type1')
+    {
+      $s.='  font[:size1]='.$size1."\n";
+      $s.='  font[:size2]='.$size2."\n";
+    }
+    else
+      $s.='  font[:originalsize]='.filesize($fontfile)."\n";
+  }
+  else
+  {
+    //Not embedded font
+    $s.='  font[:file]='."''\n";
+  }
+  $s.="end\n";
+  SaveToFile($basename.'.rb',$s);
+  echo 'Font definition file generated ('.$basename.'.rb'.')<BR>';
+}
+
+$arg = $GLOBALS['argv'];
+if (count($arg) >= 3) {
+  ob_start();
+  array_shift($arg);
+  MakeFont($arg[0], $arg[1]);
+  $t = ob_get_clean();
+  print preg_replace('!<BR( /)?>!i', "\n", $t);
+}
+else {
+  print "Usage: makefontuni_ruby.php <ttf-file> <ufm-file>\n";
+}
+?>
\ No newline at end of file
Binary file vendor/plugins/rfpdf/lib/fonts/ttf2ufm/ttf2ufm has changed
Binary file vendor/plugins/rfpdf/lib/fonts/ttf2ufm/ttf2ufm.exe has changed
Binary file vendor/plugins/rfpdf/lib/fonts/vera.ctg.z has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/vera.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,30 @@
+TCPDFFontDescriptor.define('vera') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='BitstreamVeraSans-Roman';
+  font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>32,'FontBBox'=>'[-183 -236 1287 928]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600}
+  font[:up]=-104;
+  font[:ut]=70;
+  font[:cw]={
+	270=>600, 32=>318, 33=>401, 34=>460, 35=>838, 36=>636, 37=>950, 38=>780, 39=>275, 40=>390, 41=>390, 42=>500, 43=>838, 44=>318, 45=>361, 46=>318, 
+	47=>337, 48=>636, 49=>636, 50=>636, 51=>636, 52=>636, 53=>636, 54=>636, 55=>636, 56=>636, 57=>636, 58=>337, 59=>337, 60=>838, 61=>838, 62=>838, 
+	63=>531, 64=>1000, 65=>684, 66=>686, 67=>698, 68=>770, 69=>632, 70=>575, 71=>775, 72=>752, 73=>295, 74=>295, 75=>656, 76=>557, 77=>863, 78=>748, 
+	79=>787, 80=>603, 81=>787, 82=>695, 83=>635, 84=>611, 85=>732, 86=>684, 87=>989, 88=>685, 89=>611, 90=>685, 91=>390, 92=>337, 93=>390, 94=>838, 
+	95=>500, 96=>500, 97=>613, 98=>635, 99=>550, 100=>635, 101=>615, 102=>352, 103=>635, 104=>634, 105=>278, 106=>278, 107=>579, 108=>278, 109=>974, 110=>634, 
+	111=>612, 112=>635, 113=>635, 114=>411, 115=>521, 116=>392, 117=>634, 118=>592, 119=>818, 120=>592, 121=>592, 122=>525, 123=>636, 124=>337, 125=>636, 126=>838, 
+	8364=>636, 8218=>318, 402=>636, 8222=>518, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1342, 352=>635, 8249=>400, 338=>1070, 381=>685, 8216=>318, 8217=>318, 8220=>518, 
+	8221=>518, 8226=>590, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>521, 8250=>400, 339=>1023, 382=>525, 376=>611, 160=>636, 161=>401, 162=>636, 163=>636, 164=>636, 
+	165=>636, 166=>337, 167=>500, 168=>500, 169=>1000, 170=>471, 171=>612, 172=>838, 173=>361, 174=>1000, 175=>500, 176=>500, 177=>838, 178=>401, 179=>401, 180=>500, 
+	181=>636, 182=>636, 183=>318, 184=>500, 185=>401, 186=>471, 187=>612, 188=>969, 189=>969, 190=>969, 191=>531, 192=>684, 193=>684, 194=>684, 195=>684, 196=>684, 
+	197=>684, 198=>974, 199=>698, 200=>632, 201=>632, 202=>632, 203=>632, 204=>295, 205=>295, 206=>295, 207=>295, 208=>775, 209=>748, 210=>787, 211=>787, 212=>787, 
+	213=>787, 214=>787, 215=>838, 216=>787, 217=>732, 218=>732, 219=>732, 220=>732, 221=>611, 222=>605, 223=>630, 224=>613, 225=>613, 226=>613, 227=>613, 228=>613, 
+	229=>613, 230=>982, 231=>550, 232=>615, 233=>615, 234=>615, 235=>615, 236=>278, 237=>278, 238=>278, 239=>278, 240=>612, 241=>634, 242=>612, 243=>612, 244=>612, 
+	245=>612, 246=>612, 247=>838, 248=>612, 249=>634, 250=>634, 251=>634, 252=>634, 253=>592, 254=>635, 255=>592, 8800=>838, 8734=>833, 8804=>838, 8805=>838, 8706=>517, 
+	8721=>674, 8719=>757, 960=>589, 8747=>521, 937=>764, 8730=>637, 8776=>838, 8710=>669, 9674=>494, 8725=>167, 64257=>630, 64258=>630, 305=>278, 728=>500, 729=>500, 730=>500, 
+	733=>500, 731=>500, 711=>500, 321=>562, 322=>284, 8722=>838, 286=>775, 287=>635, 304=>295, 350=>635, 351=>521, 262=>698, 263=>550, 268=>698, 269=>550, 273=>635, 
+	8729=>318}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='vera.z';
+  font[:ctg]='vera.ctg.z';
+  font[:originalsize]=65932;
+end
\ No newline at end of file
Binary file vendor/plugins/rfpdf/lib/fonts/vera.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/verab.ctg.z has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/verab.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,30 @@
+TCPDFFontDescriptor.define('verab') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='BitstreamVeraSans-Bold';
+  font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>32,'FontBBox'=>'[-199 -236 1417 928]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600}
+  font[:up]=-111;
+  font[:ut]=126;
+  font[:cw]={
+	270=>600, 32=>348, 33=>456, 34=>521, 35=>838, 36=>696, 37=>1002, 38=>872, 39=>306, 40=>457, 41=>457, 42=>523, 43=>838, 44=>380, 45=>415, 46=>380, 
+	47=>365, 48=>696, 49=>696, 50=>696, 51=>696, 52=>696, 53=>696, 54=>696, 55=>696, 56=>696, 57=>696, 58=>400, 59=>400, 60=>838, 61=>838, 62=>838, 
+	63=>580, 64=>1000, 65=>774, 66=>762, 67=>734, 68=>830, 69=>683, 70=>683, 71=>821, 72=>837, 73=>372, 74=>372, 75=>775, 76=>637, 77=>995, 78=>837, 
+	79=>850, 80=>733, 81=>850, 82=>770, 83=>720, 84=>682, 85=>812, 86=>774, 87=>1103, 88=>771, 89=>724, 90=>725, 91=>457, 92=>365, 93=>457, 94=>838, 
+	95=>500, 96=>500, 97=>675, 98=>716, 99=>593, 100=>716, 101=>678, 102=>435, 103=>716, 104=>712, 105=>343, 106=>343, 107=>665, 108=>343, 109=>1042, 110=>712, 
+	111=>687, 112=>716, 113=>716, 114=>493, 115=>595, 116=>478, 117=>712, 118=>652, 119=>924, 120=>645, 121=>652, 122=>582, 123=>712, 124=>365, 125=>712, 126=>838, 
+	8364=>696, 8218=>380, 402=>696, 8222=>657, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1440, 352=>720, 8249=>412, 338=>1167, 381=>725, 8216=>380, 8217=>380, 8220=>657, 
+	8221=>657, 8226=>639, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>595, 8250=>412, 339=>1094, 382=>582, 376=>724, 160=>696, 161=>456, 162=>696, 163=>696, 164=>636, 
+	165=>696, 166=>365, 167=>500, 168=>500, 169=>1000, 170=>564, 171=>646, 172=>838, 173=>415, 174=>1000, 175=>500, 176=>500, 177=>838, 178=>438, 179=>438, 180=>500, 
+	181=>736, 182=>636, 183=>380, 184=>500, 185=>438, 186=>564, 187=>646, 188=>1035, 189=>1035, 190=>1035, 191=>580, 192=>774, 193=>774, 194=>774, 195=>774, 196=>774, 
+	197=>774, 198=>1085, 199=>734, 200=>683, 201=>683, 202=>683, 203=>683, 204=>372, 205=>372, 206=>372, 207=>372, 208=>838, 209=>837, 210=>850, 211=>850, 212=>850, 
+	213=>850, 214=>850, 215=>838, 216=>850, 217=>812, 218=>812, 219=>812, 220=>812, 221=>724, 222=>738, 223=>719, 224=>675, 225=>675, 226=>675, 227=>675, 228=>675, 
+	229=>675, 230=>1048, 231=>593, 232=>678, 233=>678, 234=>678, 235=>678, 236=>343, 237=>343, 238=>343, 239=>343, 240=>687, 241=>712, 242=>687, 243=>687, 244=>687, 
+	245=>687, 246=>687, 247=>838, 248=>687, 249=>712, 250=>712, 251=>712, 252=>712, 253=>652, 254=>716, 255=>652, 8800=>838, 8734=>833, 8804=>838, 8805=>838, 8706=>544, 
+	8721=>718, 8719=>787, 960=>644, 8747=>610, 937=>769, 8730=>667, 8776=>838, 8710=>697, 9674=>494, 8725=>167, 64257=>741, 64258=>741, 305=>343, 728=>500, 729=>500, 730=>500, 
+	733=>500, 731=>500, 711=>500, 321=>642, 322=>371, 8722=>838, 286=>821, 287=>716, 304=>372, 350=>720, 351=>595, 262=>734, 263=>593, 268=>734, 269=>593, 273=>716, 
+	8729=>380}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='verab.z';
+  font[:ctg]='verab.ctg.z';
+  font[:originalsize]=58716;
+end
\ No newline at end of file
Binary file vendor/plugins/rfpdf/lib/fonts/verab.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/verabi.ctg.z has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/verabi.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,30 @@
+TCPDFFontDescriptor.define('verabi') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='BitstreamVeraSans-BoldOblique';
+  font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>96,'FontBBox'=>'[-278 -236 1401 928]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>600}
+  font[:up]=-111;
+  font[:ut]=126;
+  font[:cw]={
+	270=>600, 32=>348, 33=>456, 34=>521, 35=>696, 36=>696, 37=>1002, 38=>872, 39=>306, 40=>457, 41=>457, 42=>523, 43=>838, 44=>380, 45=>415, 46=>380, 
+	47=>365, 48=>696, 49=>696, 50=>696, 51=>696, 52=>696, 53=>696, 54=>696, 55=>696, 56=>696, 57=>696, 58=>400, 59=>400, 60=>838, 61=>838, 62=>838, 
+	63=>580, 64=>1000, 65=>774, 66=>762, 67=>734, 68=>830, 69=>683, 70=>683, 71=>821, 72=>837, 73=>372, 74=>372, 75=>775, 76=>637, 77=>995, 78=>837, 
+	79=>850, 80=>733, 81=>850, 82=>770, 83=>720, 84=>682, 85=>812, 86=>774, 87=>1103, 88=>771, 89=>724, 90=>725, 91=>457, 92=>365, 93=>457, 94=>838, 
+	95=>500, 96=>500, 97=>675, 98=>716, 99=>593, 100=>716, 101=>678, 102=>435, 103=>716, 104=>712, 105=>343, 106=>343, 107=>665, 108=>343, 109=>1042, 110=>712, 
+	111=>687, 112=>716, 113=>716, 114=>493, 115=>595, 116=>478, 117=>712, 118=>652, 119=>924, 120=>645, 121=>652, 122=>582, 123=>712, 124=>365, 125=>712, 126=>838, 
+	8364=>696, 8218=>380, 402=>696, 8222=>644, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1454, 352=>720, 8249=>412, 338=>1167, 381=>725, 8216=>380, 8217=>380, 8220=>644, 
+	8221=>644, 8226=>639, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>595, 8250=>412, 339=>1094, 382=>582, 376=>724, 160=>696, 161=>456, 162=>696, 163=>696, 164=>636, 
+	165=>696, 166=>365, 167=>500, 168=>500, 169=>1000, 170=>564, 171=>650, 172=>838, 173=>415, 174=>1000, 175=>500, 176=>500, 177=>838, 178=>438, 179=>438, 180=>500, 
+	181=>736, 182=>636, 183=>380, 184=>500, 185=>438, 186=>564, 187=>650, 188=>1065, 189=>1065, 190=>1065, 191=>580, 192=>774, 193=>774, 194=>774, 195=>774, 196=>774, 
+	197=>774, 198=>1085, 199=>734, 200=>683, 201=>683, 202=>683, 203=>683, 204=>372, 205=>372, 206=>372, 207=>372, 208=>845, 209=>837, 210=>850, 211=>850, 212=>850, 
+	213=>850, 214=>850, 215=>838, 216=>850, 217=>812, 218=>812, 219=>812, 220=>812, 221=>724, 222=>742, 223=>719, 224=>675, 225=>675, 226=>675, 227=>675, 228=>675, 
+	229=>675, 230=>1048, 231=>593, 232=>678, 233=>678, 234=>678, 235=>678, 236=>343, 237=>343, 238=>343, 239=>343, 240=>687, 241=>712, 242=>687, 243=>687, 244=>687, 
+	245=>687, 246=>687, 247=>838, 248=>687, 249=>712, 250=>712, 251=>712, 252=>712, 253=>652, 254=>716, 255=>652, 8800=>838, 8734=>833, 8804=>838, 8805=>838, 8706=>544, 
+	8721=>718, 8719=>787, 960=>644, 8747=>610, 937=>769, 8730=>667, 8776=>838, 8710=>697, 9674=>494, 8725=>167, 64257=>787, 64258=>787, 305=>343, 728=>500, 729=>500, 730=>500, 
+	733=>500, 731=>500, 711=>500, 321=>660, 322=>375, 8722=>838, 286=>821, 287=>716, 304=>372, 350=>720, 351=>595, 262=>734, 263=>593, 268=>734, 269=>593, 273=>716, 
+	8729=>380}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='verabi.z';
+  font[:ctg]='verabi.ctg.z';
+  font[:originalsize]=63208;
+end
\ No newline at end of file
Binary file vendor/plugins/rfpdf/lib/fonts/verabi.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/verai.ctg.z has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/verai.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,30 @@
+TCPDFFontDescriptor.define('verai') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='BitstreamVeraSans-Oblique';
+  font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>96,'FontBBox'=>'[-262 -236 1259 928]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>600}
+  font[:up]=-104;
+  font[:ut]=70;
+  font[:cw]={
+	270=>600, 32=>318, 33=>401, 34=>460, 35=>838, 36=>636, 37=>950, 38=>780, 39=>275, 40=>390, 41=>390, 42=>500, 43=>838, 44=>318, 45=>361, 46=>318, 
+	47=>337, 48=>636, 49=>636, 50=>636, 51=>636, 52=>636, 53=>636, 54=>636, 55=>636, 56=>636, 57=>636, 58=>337, 59=>337, 60=>838, 61=>838, 62=>838, 
+	63=>531, 64=>1000, 65=>684, 66=>686, 67=>698, 68=>770, 69=>632, 70=>575, 71=>775, 72=>752, 73=>295, 74=>295, 75=>656, 76=>557, 77=>863, 78=>748, 
+	79=>787, 80=>603, 81=>787, 82=>695, 83=>635, 84=>611, 85=>732, 86=>684, 87=>989, 88=>685, 89=>611, 90=>685, 91=>390, 92=>337, 93=>390, 94=>838, 
+	95=>500, 96=>500, 97=>613, 98=>635, 99=>550, 100=>635, 101=>615, 102=>352, 103=>635, 104=>634, 105=>278, 106=>278, 107=>579, 108=>278, 109=>974, 110=>634, 
+	111=>612, 112=>635, 113=>635, 114=>411, 115=>521, 116=>392, 117=>634, 118=>592, 119=>818, 120=>592, 121=>592, 122=>525, 123=>636, 124=>337, 125=>636, 126=>838, 
+	8364=>636, 8218=>318, 402=>636, 8222=>518, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1350, 352=>635, 8249=>400, 338=>1070, 381=>685, 8216=>318, 8217=>318, 8220=>518, 
+	8221=>518, 8226=>590, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>521, 8250=>400, 339=>1028, 382=>525, 376=>611, 160=>636, 161=>401, 162=>636, 163=>636, 164=>636, 
+	165=>636, 166=>337, 167=>500, 168=>500, 169=>1000, 170=>471, 171=>617, 172=>838, 173=>361, 174=>1000, 175=>500, 176=>500, 177=>838, 178=>401, 179=>401, 180=>500, 
+	181=>636, 182=>636, 183=>318, 184=>500, 185=>401, 186=>471, 187=>617, 188=>969, 189=>969, 190=>969, 191=>531, 192=>684, 193=>684, 194=>684, 195=>684, 196=>684, 
+	197=>684, 198=>974, 199=>698, 200=>632, 201=>632, 202=>632, 203=>632, 204=>295, 205=>295, 206=>295, 207=>295, 208=>775, 209=>748, 210=>787, 211=>787, 212=>787, 
+	213=>787, 214=>787, 215=>838, 216=>787, 217=>732, 218=>732, 219=>732, 220=>732, 221=>611, 222=>608, 223=>630, 224=>613, 225=>613, 226=>613, 227=>613, 228=>613, 
+	229=>613, 230=>995, 231=>550, 232=>615, 233=>615, 234=>615, 235=>615, 236=>278, 237=>278, 238=>278, 239=>278, 240=>612, 241=>634, 242=>612, 243=>612, 244=>612, 
+	245=>612, 246=>612, 247=>838, 248=>612, 249=>634, 250=>634, 251=>634, 252=>634, 253=>592, 254=>635, 255=>592, 8800=>838, 8734=>833, 8804=>838, 8805=>838, 8706=>517, 
+	8721=>674, 8719=>757, 960=>589, 8747=>521, 937=>764, 8730=>637, 8776=>838, 8710=>669, 9674=>494, 8725=>167, 64257=>646, 64258=>646, 305=>278, 728=>500, 729=>500, 730=>500, 
+	733=>500, 731=>500, 711=>500, 321=>562, 322=>287, 8722=>838, 286=>775, 287=>635, 304=>295, 350=>635, 351=>521, 262=>698, 263=>550, 268=>698, 269=>550, 273=>635, 
+	8729=>318}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='verai.z';
+  font[:ctg]='verai.ctg.z';
+  font[:originalsize]=63684;
+end
\ No newline at end of file
Binary file vendor/plugins/rfpdf/lib/fonts/verai.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/veramo.ctg.z has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/veramo.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,30 @@
+TCPDFFontDescriptor.define('veramo') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='BitstreamVeraSansMono-Roman';
+  font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>33,'FontBBox'=>'[-5 -236 606   font[:928]]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>602}
+  font[:up]=-104;
+  font[:ut]=69;
+  font[:cw]={
+	270=>602, 32=>602, 33=>602, 34=>602, 35=>602, 36=>602, 37=>602, 38=>602, 39=>602, 40=>602, 41=>602, 42=>602, 43=>602, 44=>602, 45=>602, 46=>602, 
+	47=>602, 48=>602, 49=>602, 50=>602, 51=>602, 52=>602, 53=>602, 54=>602, 55=>602, 56=>602, 57=>602, 58=>602, 59=>602, 60=>602, 61=>602, 62=>602, 
+	63=>602, 64=>602, 65=>602, 66=>602, 67=>602, 68=>602, 69=>602, 70=>602, 71=>602, 72=>602, 73=>602, 74=>602, 75=>602, 76=>602, 77=>602, 78=>602, 
+	79=>602, 80=>602, 81=>602, 82=>602, 83=>602, 84=>602, 85=>602, 86=>602, 87=>602, 88=>602, 89=>602, 90=>602, 91=>602, 92=>602, 93=>602, 94=>602, 
+	95=>602, 96=>602, 97=>602, 98=>602, 99=>602, 100=>602, 101=>602, 102=>602, 103=>602, 104=>602, 105=>602, 106=>602, 107=>602, 108=>602, 109=>602, 110=>602, 
+	111=>602, 112=>602, 113=>602, 114=>602, 115=>602, 116=>602, 117=>602, 118=>602, 119=>602, 120=>602, 121=>602, 122=>602, 123=>602, 124=>602, 125=>602, 126=>602, 
+	8364=>602, 8218=>602, 402=>602, 8222=>602, 8230=>602, 8224=>602, 8225=>602, 710=>602, 8240=>602, 352=>602, 8249=>602, 338=>602, 381=>602, 8216=>602, 8217=>602, 8220=>602, 
+	8221=>602, 8226=>602, 8211=>602, 8212=>602, 732=>602, 8482=>602, 353=>602, 8250=>602, 339=>602, 382=>602, 376=>602, 160=>602, 161=>602, 162=>602, 163=>602, 164=>602, 
+	165=>602, 166=>602, 167=>602, 168=>602, 169=>602, 170=>602, 171=>602, 172=>602, 173=>602, 174=>602, 175=>602, 176=>602, 177=>602, 178=>602, 179=>602, 180=>602, 
+	181=>602, 182=>602, 183=>602, 184=>602, 185=>602, 186=>602, 187=>602, 188=>602, 189=>602, 190=>602, 191=>602, 192=>602, 193=>602, 194=>602, 195=>602, 196=>602, 
+	197=>602, 198=>602, 199=>602, 200=>602, 201=>602, 202=>602, 203=>602, 204=>602, 205=>602, 206=>602, 207=>602, 208=>602, 209=>602, 210=>602, 211=>602, 212=>602, 
+	213=>602, 214=>602, 215=>602, 216=>602, 217=>602, 218=>602, 219=>602, 220=>602, 221=>602, 222=>602, 223=>602, 224=>602, 225=>602, 226=>602, 227=>602, 228=>602, 
+	229=>602, 230=>602, 231=>602, 232=>602, 233=>602, 234=>602, 235=>602, 236=>602, 237=>602, 238=>602, 239=>602, 240=>602, 241=>602, 242=>602, 243=>602, 244=>602, 
+	245=>602, 246=>602, 247=>602, 248=>602, 249=>602, 250=>602, 251=>602, 252=>602, 253=>602, 254=>602, 255=>602, 8800=>602, 8734=>602, 8804=>602, 8805=>602, 8706=>602, 
+	8721=>602, 8719=>602, 960=>602, 8747=>602, 937=>602, 8730=>602, 8776=>602, 8710=>602, 9674=>602, 8725=>602, 64257=>602, 64258=>602, 305=>602, 728=>602, 729=>602, 730=>602, 
+	733=>602, 731=>602, 711=>602, 321=>602, 322=>602, 8722=>602, 286=>602, 287=>602, 304=>602, 350=>602, 351=>602, 262=>602, 263=>602, 268=>602, 269=>602, 273=>602, 
+	8729=>602}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='veramo.z';
+  font[:ctg]='veramo.ctg.z';
+  font[:originalsize]=49224;
+end
\ No newline at end of file
Binary file vendor/plugins/rfpdf/lib/fonts/veramo.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/veramob.ctg.z has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/veramob.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,30 @@
+TCPDFFontDescriptor.define('veramob') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='BitstreamVeraSansMono-Bold';
+  font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>33,'FontBBox'=>'[-19 -236 606 928]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>602}
+  font[:up]=-108;
+  font[:ut]=120;
+  font[:cw]={
+	270=>602, 32=>602, 33=>602, 34=>602, 35=>602, 36=>602, 37=>602, 38=>602, 39=>602, 40=>602, 41=>602, 42=>602, 43=>602, 44=>602, 45=>602, 46=>602, 
+	47=>602, 48=>602, 49=>602, 50=>602, 51=>602, 52=>602, 53=>602, 54=>602, 55=>602, 56=>602, 57=>602, 58=>602, 59=>602, 60=>602, 61=>602, 62=>602, 
+	63=>602, 64=>602, 65=>602, 66=>602, 67=>602, 68=>602, 69=>602, 70=>602, 71=>602, 72=>602, 73=>602, 74=>602, 75=>602, 76=>602, 77=>602, 78=>602, 
+	79=>602, 80=>602, 81=>602, 82=>602, 83=>602, 84=>602, 85=>602, 86=>602, 87=>602, 88=>602, 89=>602, 90=>602, 91=>602, 92=>602, 93=>602, 94=>602, 
+	95=>602, 96=>602, 97=>602, 98=>602, 99=>602, 100=>602, 101=>602, 102=>602, 103=>602, 104=>602, 105=>602, 106=>602, 107=>602, 108=>602, 109=>602, 110=>602, 
+	111=>602, 112=>602, 113=>602, 114=>602, 115=>602, 116=>602, 117=>602, 118=>602, 119=>602, 120=>602, 121=>602, 122=>602, 123=>602, 124=>602, 125=>602, 126=>602, 
+	8364=>602, 8218=>602, 402=>602, 8222=>602, 8230=>602, 8224=>602, 8225=>602, 710=>602, 8240=>602, 352=>602, 8249=>602, 338=>602, 381=>602, 8216=>602, 8217=>602, 8220=>602, 
+	8221=>602, 8226=>602, 8211=>602, 8212=>602, 732=>602, 8482=>602, 353=>602, 8250=>602, 339=>602, 382=>602, 376=>602, 160=>602, 161=>602, 162=>602, 163=>602, 164=>602, 
+	165=>602, 166=>602, 167=>602, 168=>602, 169=>602, 170=>602, 171=>602, 172=>602, 173=>602, 174=>602, 175=>602, 176=>602, 177=>602, 178=>602, 179=>602, 180=>602, 
+	181=>602, 182=>602, 183=>602, 184=>602, 185=>602, 186=>602, 187=>602, 188=>602, 189=>602, 190=>602, 191=>602, 192=>602, 193=>602, 194=>602, 195=>602, 196=>602, 
+	197=>602, 198=>602, 199=>602, 200=>602, 201=>602, 202=>602, 203=>602, 204=>602, 205=>602, 206=>602, 207=>602, 208=>602, 209=>602, 210=>602, 211=>602, 212=>602, 
+	213=>602, 214=>602, 215=>602, 216=>602, 217=>602, 218=>602, 219=>602, 220=>602, 221=>602, 222=>602, 223=>602, 224=>602, 225=>602, 226=>602, 227=>602, 228=>602, 
+	229=>602, 230=>602, 231=>602, 232=>602, 233=>602, 234=>602, 235=>602, 236=>602, 237=>602, 238=>602, 239=>602, 240=>602, 241=>602, 242=>602, 243=>602, 244=>602, 
+	245=>602, 246=>602, 247=>602, 248=>602, 249=>602, 250=>602, 251=>602, 252=>602, 253=>602, 254=>602, 255=>602, 8800=>602, 8734=>602, 8804=>602, 8805=>602, 8706=>602, 
+	8721=>602, 8719=>602, 960=>602, 8747=>602, 937=>602, 8730=>602, 8776=>602, 8710=>602, 9674=>602, 8725=>602, 64257=>602, 64258=>602, 305=>602, 728=>602, 729=>602, 730=>602, 
+	733=>602, 731=>602, 711=>602, 321=>602, 322=>602, 8722=>602, 286=>602, 287=>602, 304=>602, 350=>602, 351=>602, 262=>602, 263=>602, 268=>602, 269=>602, 273=>602, 
+	8729=>602}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='veramob.z';
+  font[:ctg]='veramob.ctg.z';
+  font[:originalsize]=49052;
+end
Binary file vendor/plugins/rfpdf/lib/fonts/veramob.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/veramobi.ctg.z has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/veramobi.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,30 @@
+TCPDFFontDescriptor.define('veramobi') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='BitstreamVeraSansMono-BoldOb';
+  font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>97,'FontBBox'=>'[-73 -236 681 928]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>602}
+  font[:up]=-108;
+  font[:ut]=120;
+  font[:cw]={
+	270=>602, 32=>602, 33=>602, 34=>602, 35=>602, 36=>602, 37=>602, 38=>602, 39=>602, 40=>602, 41=>602, 42=>602, 43=>602, 44=>602, 45=>602, 46=>602, 
+	47=>602, 48=>602, 49=>602, 50=>602, 51=>602, 52=>602, 53=>602, 54=>602, 55=>602, 56=>602, 57=>602, 58=>602, 59=>602, 60=>602, 61=>602, 62=>602, 
+	63=>602, 64=>602, 65=>602, 66=>602, 67=>602, 68=>602, 69=>602, 70=>602, 71=>602, 72=>602, 73=>602, 74=>602, 75=>602, 76=>602, 77=>602, 78=>602, 
+	79=>602, 80=>602, 81=>602, 82=>602, 83=>602, 84=>602, 85=>602, 86=>602, 87=>602, 88=>602, 89=>602, 90=>602, 91=>602, 92=>602, 93=>602, 94=>602, 
+	95=>602, 96=>602, 97=>602, 98=>602, 99=>602, 100=>602, 101=>602, 102=>602, 103=>602, 104=>602, 105=>602, 106=>602, 107=>602, 108=>602, 109=>602, 110=>602, 
+	111=>602, 112=>602, 113=>602, 114=>602, 115=>602, 116=>602, 117=>602, 118=>602, 119=>602, 120=>602, 121=>602, 122=>602, 123=>602, 124=>602, 125=>602, 126=>602, 
+	8364=>602, 8218=>602, 402=>602, 8222=>602, 8230=>602, 8224=>602, 8225=>602, 710=>602, 8240=>602, 352=>602, 8249=>602, 338=>602, 381=>602, 8216=>602, 8217=>602, 8220=>602, 
+	8221=>602, 8226=>602, 8211=>602, 8212=>602, 732=>602, 8482=>602, 353=>602, 8250=>602, 339=>602, 382=>602, 376=>602, 160=>602, 161=>602, 162=>602, 163=>602, 164=>602, 
+	165=>602, 166=>602, 167=>602, 168=>602, 169=>602, 170=>602, 171=>602, 172=>602, 173=>602, 174=>602, 175=>602, 176=>602, 177=>602, 178=>602, 179=>602, 180=>602, 
+	181=>602, 182=>602, 183=>602, 184=>602, 185=>602, 186=>602, 187=>602, 188=>602, 189=>602, 190=>602, 191=>602, 192=>602, 193=>602, 194=>602, 195=>602, 196=>602, 
+	197=>602, 198=>602, 199=>602, 200=>602, 201=>602, 202=>602, 203=>602, 204=>602, 205=>602, 206=>602, 207=>602, 208=>602, 209=>602, 210=>602, 211=>602, 212=>602, 
+	213=>602, 214=>602, 215=>602, 216=>602, 217=>602, 218=>602, 219=>602, 220=>602, 221=>602, 222=>602, 223=>602, 224=>602, 225=>602, 226=>602, 227=>602, 228=>602, 
+	229=>602, 230=>602, 231=>602, 232=>602, 233=>602, 234=>602, 235=>602, 236=>602, 237=>602, 238=>602, 239=>602, 240=>602, 241=>602, 242=>602, 243=>602, 244=>602, 
+	245=>602, 246=>602, 247=>602, 248=>602, 249=>602, 250=>602, 251=>602, 252=>602, 253=>602, 254=>602, 255=>602, 8800=>602, 8734=>602, 8804=>602, 8805=>602, 8706=>602, 
+	8721=>602, 8719=>602, 960=>602, 8747=>602, 937=>602, 8730=>602, 8776=>602, 8710=>602, 9674=>602, 8725=>602, 64257=>602, 64258=>602, 305=>602, 728=>602, 729=>602, 730=>602, 
+	733=>602, 731=>602, 711=>602, 321=>602, 322=>602, 8722=>602, 286=>602, 287=>602, 304=>602, 350=>602, 351=>602, 262=>602, 263=>602, 268=>602, 269=>602, 273=>602, 
+	8729=>602}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='veramobi.z';
+  font[:ctg]='veramobi.ctg.z';
+  font[:originalsize]=55032;
+end
Binary file vendor/plugins/rfpdf/lib/fonts/veramobi.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/veramoi.ctg.z has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/veramoi.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,30 @@
+TCPDFFontDescriptor.define('veramoi') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='BitstreamVeraSansMono-Oblique';
+  font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>97,'FontBBox'=>'[-71 -236 691 928]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>602}
+  font[:up]=-104;
+  font[:ut]=69;
+  font[:cw]={
+	270=>602, 32=>602, 33=>602, 34=>602, 35=>602, 36=>602, 37=>602, 38=>602, 39=>602, 40=>602, 41=>602, 42=>602, 43=>602, 44=>602, 45=>602, 46=>602, 
+	47=>602, 48=>602, 49=>602, 50=>602, 51=>602, 52=>602, 53=>602, 54=>602, 55=>602, 56=>602, 57=>602, 58=>602, 59=>602, 60=>602, 61=>602, 62=>602, 
+	63=>602, 64=>602, 65=>602, 66=>602, 67=>602, 68=>602, 69=>602, 70=>602, 71=>602, 72=>602, 73=>602, 74=>602, 75=>602, 76=>602, 77=>602, 78=>602, 
+	79=>602, 80=>602, 81=>602, 82=>602, 83=>602, 84=>602, 85=>602, 86=>602, 87=>602, 88=>602, 89=>602, 90=>602, 91=>602, 92=>602, 93=>602, 94=>602, 
+	95=>602, 96=>602, 97=>602, 98=>602, 99=>602, 100=>602, 101=>602, 102=>602, 103=>602, 104=>602, 105=>602, 106=>602, 107=>602, 108=>602, 109=>602, 110=>602, 
+	111=>602, 112=>602, 113=>602, 114=>602, 115=>602, 116=>602, 117=>602, 118=>602, 119=>602, 120=>602, 121=>602, 122=>602, 123=>602, 124=>602, 125=>602, 126=>602, 
+	8364=>602, 8218=>602, 402=>602, 8222=>602, 8230=>602, 8224=>602, 8225=>602, 710=>602, 8240=>602, 352=>602, 8249=>602, 338=>602, 381=>602, 8216=>602, 8217=>602, 8220=>602, 
+	8221=>602, 8226=>602, 8211=>602, 8212=>602, 732=>602, 8482=>602, 353=>602, 8250=>602, 339=>602, 382=>602, 376=>602, 160=>602, 161=>602, 162=>602, 163=>602, 164=>602, 
+	165=>602, 166=>602, 167=>602, 168=>602, 169=>602, 170=>602, 171=>602, 172=>602, 173=>602, 174=>602, 175=>602, 176=>602, 177=>602, 178=>602, 179=>602, 180=>602, 
+	181=>602, 182=>602, 183=>602, 184=>602, 185=>602, 186=>602, 187=>602, 188=>602, 189=>602, 190=>602, 191=>602, 192=>602, 193=>602, 194=>602, 195=>602, 196=>602, 
+	197=>602, 198=>602, 199=>602, 200=>602, 201=>602, 202=>602, 203=>602, 204=>602, 205=>602, 206=>602, 207=>602, 208=>602, 209=>602, 210=>602, 211=>602, 212=>602, 
+	213=>602, 214=>602, 215=>602, 216=>602, 217=>602, 218=>602, 219=>602, 220=>602, 221=>602, 222=>602, 223=>602, 224=>602, 225=>602, 226=>602, 227=>602, 228=>602, 
+	229=>602, 230=>602, 231=>602, 232=>602, 233=>602, 234=>602, 235=>602, 236=>602, 237=>602, 238=>602, 239=>602, 240=>602, 241=>602, 242=>602, 243=>602, 244=>602, 
+	245=>602, 246=>602, 247=>602, 248=>602, 249=>602, 250=>602, 251=>602, 252=>602, 253=>602, 254=>602, 255=>602, 8800=>602, 8734=>602, 8804=>602, 8805=>602, 8706=>602, 
+	8721=>602, 8719=>602, 960=>602, 8747=>602, 937=>602, 8730=>602, 8776=>602, 8710=>602, 9674=>602, 8725=>602, 64257=>602, 64258=>602, 305=>602, 728=>602, 729=>602, 730=>602, 
+	733=>602, 731=>602, 711=>602, 321=>602, 322=>602, 8722=>602, 286=>602, 287=>602, 304=>602, 350=>602, 351=>602, 262=>602, 263=>602, 268=>602, 269=>602, 273=>602, 
+	8729=>602}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='veramoi.z';
+  font[:ctg]='veramoi.ctg.z';
+  font[:originalsize]=54508;
+end
Binary file vendor/plugins/rfpdf/lib/fonts/veramoi.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/verase.ctg.z has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/verase.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,30 @@
+TCPDFFontDescriptor.define('verase') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='BitstreamVeraSerif-Roman';
+  font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>32,'FontBBox'=>'[-183 -236 1287 928]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600}
+  font[:up]=-104;
+  font[:ut]=65;
+  font[:cw]={
+	270=>600, 32=>318, 33=>402, 34=>460, 35=>838, 36=>636, 37=>950, 38=>890, 39=>275, 40=>390, 41=>390, 42=>500, 43=>838, 44=>318, 45=>338, 46=>318, 
+	47=>337, 48=>636, 49=>636, 50=>636, 51=>636, 52=>636, 53=>636, 54=>636, 55=>636, 56=>636, 57=>636, 58=>337, 59=>337, 60=>838, 61=>838, 62=>838, 
+	63=>536, 64=>1000, 65=>722, 66=>735, 67=>765, 68=>802, 69=>730, 70=>694, 71=>799, 72=>872, 73=>395, 74=>401, 75=>747, 76=>664, 77=>1024, 78=>875, 
+	79=>820, 80=>673, 81=>820, 82=>753, 83=>685, 84=>667, 85=>843, 86=>722, 87=>1028, 88=>712, 89=>660, 90=>695, 91=>390, 92=>337, 93=>390, 94=>838, 
+	95=>500, 96=>500, 97=>596, 98=>640, 99=>560, 100=>640, 101=>592, 102=>370, 103=>640, 104=>644, 105=>320, 106=>310, 107=>606, 108=>320, 109=>948, 110=>644, 
+	111=>602, 112=>640, 113=>640, 114=>478, 115=>513, 116=>402, 117=>644, 118=>565, 119=>856, 120=>564, 121=>565, 122=>527, 123=>636, 124=>337, 125=>636, 126=>838, 
+	8364=>636, 8218=>318, 402=>636, 8222=>518, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1342, 352=>685, 8249=>400, 338=>1137, 381=>695, 8216=>318, 8217=>318, 8220=>511, 
+	8221=>511, 8226=>590, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>513, 8250=>400, 339=>989, 382=>527, 376=>660, 160=>636, 161=>402, 162=>636, 163=>636, 164=>636, 
+	165=>636, 166=>337, 167=>500, 168=>500, 169=>1000, 170=>475, 171=>612, 172=>838, 173=>338, 174=>1000, 175=>500, 176=>500, 177=>838, 178=>401, 179=>401, 180=>500, 
+	181=>650, 182=>636, 183=>318, 184=>500, 185=>401, 186=>470, 187=>612, 188=>969, 189=>969, 190=>969, 191=>536, 192=>722, 193=>722, 194=>722, 195=>722, 196=>722, 
+	197=>722, 198=>1001, 199=>765, 200=>730, 201=>730, 202=>730, 203=>730, 204=>395, 205=>395, 206=>395, 207=>395, 208=>807, 209=>875, 210=>820, 211=>820, 212=>820, 
+	213=>820, 214=>820, 215=>838, 216=>820, 217=>843, 218=>843, 219=>843, 220=>843, 221=>660, 222=>676, 223=>668, 224=>596, 225=>596, 226=>596, 227=>596, 228=>596, 
+	229=>596, 230=>940, 231=>560, 232=>592, 233=>592, 234=>592, 235=>592, 236=>320, 237=>320, 238=>320, 239=>320, 240=>602, 241=>644, 242=>602, 243=>602, 244=>602, 
+	245=>602, 246=>602, 247=>838, 248=>602, 249=>644, 250=>644, 251=>644, 252=>644, 253=>565, 254=>640, 255=>565, 8800=>838, 8734=>833, 8804=>838, 8805=>838, 8706=>517, 
+	8721=>714, 8719=>796, 960=>657, 8747=>521, 937=>829, 8730=>637, 8776=>838, 8710=>698, 9674=>494, 8725=>167, 64257=>667, 64258=>667, 305=>320, 728=>500, 729=>500, 730=>500, 
+	733=>500, 731=>500, 711=>500, 321=>669, 322=>324, 8722=>838, 286=>799, 287=>640, 304=>395, 350=>685, 351=>513, 262=>765, 263=>560, 268=>765, 269=>560, 273=>640, 
+	8729=>318}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='verase.z';
+  font[:ctg]='verase.ctg.z';
+  font[:originalsize]=60280;
+end
Binary file vendor/plugins/rfpdf/lib/fonts/verase.z has changed
Binary file vendor/plugins/rfpdf/lib/fonts/veraseb.ctg.z has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/veraseb.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,30 @@
+TCPDFFontDescriptor.define('veraseb') do |font|
+  font[:type]='TrueTypeUnicode';
+  font[:name]='BitstreamVeraSerif-Bold';
+  font[:desc]={'Ascent'=>939,'Descent'=>-236,'CapHeight'=>939,'Flags'=>32,'FontBBox'=>'[-186 -236 1361 939]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600}
+  font[:up]=-106;
+  font[:ut]=117;
+  font[:cw]={
+	270=>600, 32=>348, 33=>439, 34=>521, 35=>838, 36=>696, 37=>950, 38=>903, 39=>306, 40=>473, 41=>473, 42=>523, 43=>838, 44=>348, 45=>415, 46=>348, 
+	47=>365, 48=>696, 49=>696, 50=>696, 51=>696, 52=>696, 53=>696, 54=>696, 55=>696, 56=>696, 57=>696, 58=>369, 59=>369, 60=>838, 61=>838, 62=>838, 
+	63=>586, 64=>1000, 65=>776, 66=>845, 67=>796, 68=>867, 69=>762, 70=>710, 71=>854, 72=>945, 73=>468, 74=>473, 75=>869, 76=>703, 77=>1107, 78=>914, 
+	79=>871, 80=>752, 81=>871, 82=>831, 83=>722, 84=>744, 85=>872, 86=>776, 87=>1123, 88=>776, 89=>714, 90=>730, 91=>473, 92=>365, 93=>473, 94=>838, 
+	95=>500, 96=>500, 97=>648, 98=>699, 99=>609, 100=>699, 101=>636, 102=>430, 103=>699, 104=>727, 105=>380, 106=>362, 107=>693, 108=>380, 109=>1058, 110=>727, 
+	111=>667, 112=>699, 113=>699, 114=>527, 115=>563, 116=>462, 117=>727, 118=>581, 119=>861, 120=>596, 121=>581, 122=>568, 123=>643, 124=>364, 125=>643, 126=>838, 
+	8364=>696, 8218=>348, 402=>696, 8222=>575, 8230=>1000, 8224=>523, 8225=>523, 710=>500, 8240=>1385, 352=>722, 8249=>400, 338=>1180, 381=>730, 8216=>348, 8217=>348, 8220=>575, 
+	8221=>575, 8226=>639, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>563, 8250=>400, 339=>1028, 382=>568, 376=>714, 160=>696, 161=>439, 162=>696, 163=>696, 164=>636, 
+	165=>696, 166=>364, 167=>523, 168=>500, 169=>1000, 170=>487, 171=>625, 172=>838, 173=>415, 174=>1000, 175=>500, 176=>500, 177=>838, 178=>438, 179=>438, 180=>500, 
+	181=>732, 182=>636, 183=>348, 184=>500, 185=>438, 186=>500, 187=>625, 188=>1043, 189=>1043, 190=>1043, 191=>586, 192=>776, 193=>776, 194=>776, 195=>776, 196=>776, 
+	197=>776, 198=>1034, 199=>796, 200=>762, 201=>762, 202=>762, 203=>762, 204=>468, 205=>468, 206=>468, 207=>468, 208=>874, 209=>914, 210=>871, 211=>871, 212=>871, 
+	213=>871, 214=>871, 215=>838, 216=>871, 217=>872, 218=>872, 219=>872, 220=>872, 221=>714, 222=>757, 223=>760, 224=>648, 225=>648, 226=>648, 227=>648, 228=>648, 
+	229=>648, 230=>975, 231=>609, 232=>636, 233=>636, 234=>636, 235=>636, 236=>380, 237=>380, 238=>380, 239=>380, 240=>667, 241=>727, 242=>667, 243=>667, 244=>667, 
+	245=>667, 246=>667, 247=>838, 248=>667, 249=>727, 250=>727, 251=>727, 252=>727, 253=>581, 254=>699, 255=>581, 8800=>838, 8734=>833, 8804=>838, 8805=>838, 8706=>534, 
+	8721=>753, 8719=>842, 960=>732, 8747=>579, 937=>890, 8730=>657, 8776=>838, 8710=>753, 9674=>494, 8725=>167, 64257=>727, 64258=>727, 305=>380, 728=>500, 729=>500, 730=>500, 
+	733=>500, 731=>500, 711=>500, 321=>710, 322=>385, 8722=>838, 286=>854, 287=>699, 304=>468, 350=>722, 351=>563, 262=>796, 263=>609, 268=>796, 269=>609, 273=>699, 
+	8729=>348}
+  font[:enc]='';
+  font[:diff]='';
+  font[:file]='veraseb.z';
+  font[:ctg]='veraseb.ctg.z';
+  font[:originalsize]=58736;
+end
Binary file vendor/plugins/rfpdf/lib/fonts/veraseb.z has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fonts/zapfdingbats.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,15 @@
+TCPDFFontDescriptor.define('zapfdingbats') do |font|
+  font[:cw]={
+	0.chr=>0,1.chr=>0,2.chr=>0,3.chr=>0,4.chr=>0,5.chr=>0,6.chr=>0,7.chr=>0,8.chr=>0,9.chr=>0,10.chr=>0,11.chr=>0,12.chr=>0,13.chr=>0,14.chr=>0,15.chr=>0,16.chr=>0,17.chr=>0,18.chr=>0,19.chr=>0,20.chr=>0,21.chr=>0,
+	22.chr=>0,23.chr=>0,24.chr=>0,25.chr=>0,26.chr=>0,27.chr=>0,28.chr=>0,29.chr=>0,30.chr=>0,31.chr=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939,
+	','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692,
+	'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776,
+	'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873,
+	'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,127.chr=>0,128.chr=>390,129.chr=>390,130.chr=>317,131.chr=>317,
+	132.chr=>276,133.chr=>276,134.chr=>509,135.chr=>509,136.chr=>410,137.chr=>410,138.chr=>234,139.chr=>234,140.chr=>334,141.chr=>334,142.chr=>0,143.chr=>0,144.chr=>0,145.chr=>0,146.chr=>0,147.chr=>0,148.chr=>0,149.chr=>0,150.chr=>0,151.chr=>0,152.chr=>0,153.chr=>0,
+	154.chr=>0,155.chr=>0,156.chr=>0,157.chr=>0,158.chr=>0,159.chr=>0,160.chr=>0,161.chr=>732,162.chr=>544,163.chr=>544,164.chr=>910,165.chr=>667,166.chr=>760,167.chr=>760,168.chr=>776,169.chr=>595,170.chr=>694,171.chr=>626,172.chr=>788,173.chr=>788,174.chr=>788,175.chr=>788,
+	176.chr=>788,177.chr=>788,178.chr=>788,179.chr=>788,180.chr=>788,181.chr=>788,182.chr=>788,183.chr=>788,184.chr=>788,185.chr=>788,186.chr=>788,187.chr=>788,188.chr=>788,189.chr=>788,190.chr=>788,191.chr=>788,192.chr=>788,193.chr=>788,194.chr=>788,195.chr=>788,196.chr=>788,197.chr=>788,
+	198.chr=>788,199.chr=>788,200.chr=>788,201.chr=>788,202.chr=>788,203.chr=>788,204.chr=>788,205.chr=>788,206.chr=>788,207.chr=>788,208.chr=>788,209.chr=>788,210.chr=>788,211.chr=>788,212.chr=>894,213.chr=>838,214.chr=>1016,215.chr=>458,216.chr=>748,217.chr=>924,218.chr=>748,219.chr=>918,
+	220.chr=>927,221.chr=>928,222.chr=>928,223.chr=>834,224.chr=>873,225.chr=>828,226.chr=>924,227.chr=>924,228.chr=>917,229.chr=>930,230.chr=>931,231.chr=>463,232.chr=>883,233.chr=>836,234.chr=>836,235.chr=>867,236.chr=>867,237.chr=>696,238.chr=>696,239.chr=>874,240.chr=>0,241.chr=>874,
+	242.chr=>760,243.chr=>946,244.chr=>771,245.chr=>865,246.chr=>771,247.chr=>888,248.chr=>967,249.chr=>888,250.chr=>831,251.chr=>873,252.chr=>927,253.chr=>970,254.chr=>918,255.chr=>0);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fpdf/bookmark.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,99 @@
+# Translation of the bookmark class from the PHP FPDF script from Olivier Plathey
+# Translated by Sylvain Lafleur and ?? with the help of Brian Ollenberger
+#
+# First added in 1.53b
+#
+# Usage is as follows:
+#
+# require 'fpdf'
+# require 'bookmark'
+# pdf = FPDF.new
+# pdf.extend(PDF_Bookmark)
+#
+# This allows it to be combined with other extensions, such as the Chinese
+# module.
+
+module PDF_Bookmark
+    def PDF_Bookmark.extend_object(o)
+        o.instance_eval('@outlines,@OutlineRoot=[],0')
+        super(o)
+    end
+
+    def Bookmark(txt,level=0,y=0)
+        y=self.GetY() if y==-1
+        @outlines.push({'t'=>txt,'l'=>level,'y'=>y,'p'=>self.PageNo()})
+    end
+
+    def putbookmarks
+        @nb=@outlines.size
+        return if @nb==0
+        lru=[]
+        level=0
+        @outlines.each_index do |i|
+            o=@outlines[i]
+            if o['l']>0
+                parent=lru[o['l']-1]
+                # Set parent and last pointers
+                @outlines[i]['parent']=parent
+                @outlines[parent]['last']=i
+                if o['l']>level
+                    # Level increasing: set first pointer
+                    @outlines[parent]['first']=i
+                end
+            else
+                @outlines[i]['parent']=@nb
+            end
+            if o['l']<=level and i>0
+                # Set prev and next pointers
+                prev=lru[o['l']]
+                @outlines[prev]['next']=i
+                @outlines[i]['prev']=prev
+            end
+            lru[o['l']]=i
+            level=o['l']
+        end
+        # Outline items
+        n=@n+1
+        @outlines.each_index do |i|
+            o=@outlines[i]
+            newobj
+            out('<</Title '+(textstring(o['t'])))
+            out('/Parent '+(n+o['parent']).to_s+' 0 R')
+            if o['prev']
+                out('/Prev '+(n+o['prev']).to_s+' 0 R')
+            end
+            if o['next']
+                out('/Next '+(n+o['next']).to_s+' 0 R')
+            end
+            if o['first']
+                out('/First '+(n+o['first']).to_s+' 0 R')
+            end
+            if o['last']
+                out('/Last '+(n+o['last']).to_s+' 0 R')
+            end
+            out(sprintf('/Dest [%d 0 R /XYZ 0 %.2f
+null]',1+2*o['p'],(@h-o['y'])*@k))
+            out('/Count 0>>')
+            out('endobj')
+        end
+        # Outline root
+        newobj
+        @OutlineRoot=@n
+        out('<</Type /Outlines /First '+n.to_s+' 0 R')
+           out('/Last '+(n+lru[0]).to_s+' 0 R>>')
+           out('endobj')
+    end
+
+    def putresources
+        super
+        putbookmarks
+    end
+
+    def putcatalog
+        super
+        if not @outlines.empty?
+            out('/Outlines '+@OutlineRoot.to_s+' 0 R')
+            out('/PageMode /UseOutlines')
+        end
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fpdf/chinese.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,469 @@
+# Copyright (c) 2006 4ssoM LLC <www.4ssoM.com>
+# 1.12 contributed by Ed Moss.
+#
+# The MIT License
+#
+# 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.
+#
+# This is direct port of chinese.php
+#
+# Chinese PDF support.
+#
+# Usage is as follows:
+#
+# require 'fpdf'
+# require 'chinese'
+# pdf = FPDF.new
+# pdf.extend(PDF_Chinese)
+#
+# This allows it to be combined with other extensions, such as the bookmark
+# module.
+
+module PDF_Chinese
+
+  Big5_widths={' '=>250,'!'=>250,'"'=>408,'#'=>668,'$'=>490,'%'=>875,'&'=>698,'\''=>250,
+  	'('=>240,')'=>240,'*'=>417,'+'=>667,','=>250,'-'=>313,'.'=>250,'/'=>520,'0'=>500,'1'=>500,
+  	'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>250,';'=>250,
+  	'<'=>667,'='=>667,'>'=>667,'?'=>396,'@'=>921,'A'=>677,'B'=>615,'C'=>719,'D'=>760,'E'=>625,
+  	'F'=>552,'G'=>771,'H'=>802,'I'=>354,'J'=>354,'K'=>781,'L'=>604,'M'=>927,'N'=>750,'O'=>823,
+  	'P'=>563,'Q'=>823,'R'=>729,'S'=>542,'T'=>698,'U'=>771,'V'=>729,'W'=>948,'X'=>771,'Y'=>677,
+  	'Z'=>635,'['=>344,'\\'=>520,']'=>344,'^'=>469,'_'=>500,'`'=>250,'a'=>469,'b'=>521,'c'=>427,
+  	'd'=>521,'e'=>438,'f'=>271,'g'=>469,'h'=>531,'i'=>250,'j'=>250,'k'=>458,'l'=>240,'m'=>802,
+  	'n'=>531,'o'=>500,'p'=>521,'q'=>521,'r'=>365,'s'=>333,'t'=>292,'u'=>521,'v'=>458,'w'=>677,
+  	'x'=>479,'y'=>458,'z'=>427,'{'=>480,'|'=>496,'}'=>480,'~'=>667}
+
+  GB_widths={' '=>207,'!'=>270,'"'=>342,'#'=>467,'$'=>462,'%'=>797,'&'=>710,'\''=>239,
+  	'('=>374,')'=>374,'*'=>423,'+'=>605,','=>238,'-'=>375,'.'=>238,'/'=>334,'0'=>462,'1'=>462,
+  	'2'=>462,'3'=>462,'4'=>462,'5'=>462,'6'=>462,'7'=>462,'8'=>462,'9'=>462,':'=>238,';'=>238,
+  	'<'=>605,'='=>605,'>'=>605,'?'=>344,'@'=>748,'A'=>684,'B'=>560,'C'=>695,'D'=>739,'E'=>563,
+  	'F'=>511,'G'=>729,'H'=>793,'I'=>318,'J'=>312,'K'=>666,'L'=>526,'M'=>896,'N'=>758,'O'=>772,
+  	'P'=>544,'Q'=>772,'R'=>628,'S'=>465,'T'=>607,'U'=>753,'V'=>711,'W'=>972,'X'=>647,'Y'=>620,
+  	'Z'=>607,'['=>374,'\\'=>333,']'=>374,'^'=>606,'_'=>500,'`'=>239,'a'=>417,'b'=>503,'c'=>427,
+  	'd'=>529,'e'=>415,'f'=>264,'g'=>444,'h'=>518,'i'=>241,'j'=>230,'k'=>495,'l'=>228,'m'=>793,
+  	'n'=>527,'o'=>524,'p'=>524,'q'=>504,'r'=>338,'s'=>336,'t'=>277,'u'=>517,'v'=>450,'w'=>652,
+  	'x'=>466,'y'=>452,'z'=>407,'{'=>370,'|'=>258,'}'=>370,'~'=>605}
+
+  def AddCIDFont(family,style,name,cw,cMap,registry)
+#ActionController::Base::logger.debug registry.to_a.join(":").to_s
+  	fontkey=family.downcase+style.upcase
+  	unless @fonts[fontkey].nil?
+  		Error("Font already added: family style")
+		end
+  	i=@fonts.length+1
+  	name=name.gsub(' ','')
+    @fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-130,'ut'=>40,'cw'=>cw, 'CMap'=>cMap,'registry'=>registry}
+  end
+
+  def AddCIDFonts(family,name,cw,cMap,registry)
+  	AddCIDFont(family,'',name,cw,cMap,registry)
+  	AddCIDFont(family,'B',name+',Bold',cw,cMap,registry)
+  	AddCIDFont(family,'I',name+',Italic',cw,cMap,registry)
+  	AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry)
+  end
+
+  def AddBig5Font(family='Big5',name='MSungStd-Light-Acro')
+  	#Add Big5 font with proportional Latin
+  	cw=Big5_widths
+  	cMap='ETenms-B5-H'
+  	registry={'ordering'=>'CNS1','supplement'=>0}
+#ActionController::Base::logger.debug registry.to_a.join(":").to_s
+  	AddCIDFonts(family,name,cw,cMap,registry)
+  end
+
+  def AddBig5hwFont(family='Big5-hw',name='MSungStd-Light-Acro')
+  	#Add Big5 font with half-witdh Latin
+    cw = {}
+    32.upto(126) do |i|
+  		cw[i.chr]=500
+		end
+  	cMap='ETen-B5-H'
+  	registry={'ordering'=>'CNS1','supplement'=>0}
+  	AddCIDFonts(family,name,cw,cMap,registry)
+  end
+
+  def AddGBFont(family='GB',name='STSongStd-Light-Acro')
+  	#Add GB font with proportional Latin
+  	cw=GB_widths
+  	cMap='GBKp-EUC-H'
+  	registry={'ordering'=>'GB1','supplement'=>2}
+  	AddCIDFonts(family,name,cw,cMap,registry)
+  end
+
+  def AddGBhwFont(family='GB-hw',name='STSongStd-Light-Acro')
+  	#Add GB font with half-width Latin
+    32.upto(126) do |i|
+  		cw[i.chr]=500
+		end
+  	cMap='GBK-EUC-H'
+  	registry={'ordering'=>'GB1','supplement'=>2}
+  	AddCIDFonts(family,name,cw,cMap,registry)
+  end
+
+  def GetStringWidth(s)
+  	if(@current_font['type']=='Type0')
+  		return GetMBStringWidth(s)
+  	else
+  		return super(s)
+		end
+  end
+
+  def GetMBStringWidth(s)
+  	#Multi-byte version of GetStringWidth()
+  	l=0
+  	cw=@current_font['cw']
+  	nb=s.length
+  	i=0
+  	while(i<nb)
+  		c = s[i].is_a?(String) ? s[i].ord : s[i]
+  		if(c<128)
+  			l+=cw[c.chr] if cw[c.chr]
+  			i+=1
+  		else
+  			l+=1000
+  			i+=2
+  		end
+  	end
+  	return l*@font_size/1000
+  end
+
+  def MultiCell(w,h,txt,border=0,align='L',fill=0)
+  	if(@current_font['type']=='Type0')
+  		MBMultiCell(w,h,txt,border,align,fill)
+  	else
+  		super(w,h,txt,border,align,fill)
+		end
+  end
+
+  def MBMultiCell(w,h,txt,border=0,align='L',fill=0)
+  	#Multi-byte version of MultiCell()
+  	cw=@current_font['cw']
+  	if(w==0)
+  		w=@w-@r_margin-@x
+		end
+  	wmax=(w-2*@c_margin)*1000/@font_size
+  	s=txt.gsub("\r",'')
+  	nb=s.length
+  	if(nb>0 and s[nb-1]=="\n")
+  		nb-=1
+		end
+  	b=0
+  	if(border)
+  		if(border==1)
+  			border='LTRB'
+  			b='LRT'
+  			b2='LR'
+  		else
+  			b2=''
+			b2='L' unless border.to_s.index('L').nil?
+			b2=b2+'R' unless border.to_s.index('R').nil?
+  			b=(border.to_s.index('T')) ? (b2+'T') : b2
+  		end
+  	end
+  	sep=-1
+  	i=0
+  	j=0
+  	l=0
+  	nl=1
+  	while(i<nb)
+  		#Get next character
+  		c = s[i].is_a?(String) ? s[i].ord : s[i]
+  		#Check if ASCII or MB
+  		ascii=(c<128)
+  		if(c.chr=="\n")
+  			#Explicit line break
+  			Cell(w,h,s[j,i-j],b,2,align,fill)
+  			i+=1
+  			sep=-1
+  			j=i
+  			l=0
+  			nl+=1
+  			if(border and nl==2)
+  				b=b2
+				end
+  			next
+  		end
+  		if(!ascii)
+  			sep=i
+  			ls=l
+  		elsif(c.chr==' ')
+  			sep=i
+  			ls=l
+  		end
+  		l+=(ascii ? cw[c.chr] : 1000) || 0
+  		if(l>wmax)
+  			#Automatic line break
+  			if(sep==-1 or i==j)
+  				if(i==j)
+  					i+=ascii ? 1 : 2
+					end
+  				Cell(w,h,s[j,i-j],b,2,align,fill)
+  			else
+  				Cell(w,h,s[j,sep-j],b,2,align,fill)
+  				i=(s[sep].chr==' ') ? sep+1 : sep
+  			end
+  			sep=-1
+  			j=i
+  			l=0
+  			nl+=1
+  			if(border and nl==2)
+  				b=b2
+  			end
+  		else
+  			i+=ascii ? 1 : 2
+  		end
+  	end
+  	#Last chunk
+  	if(border and not border.to_s.index('B').nil?)
+  		b+='B'
+		end
+  	Cell(w,h,s[j,i-j],b,2,align,fill)
+  	@x=@l_margin
+  end
+
+  def Write(h,txt,link='')
+  	if(@current_font['type']=='Type0')
+  		MBWrite(h,txt,link)
+  	else
+  		super(h,txt,link)
+		end
+  end
+
+  def MBWrite(h,txt,link)
+  	#Multi-byte version of Write()
+  	cw=@current_font['cw']
+  	w=@w-@r_margin-@x
+  	wmax=(w-2*@c_margin)*1000/@font_size
+  	s=txt.gsub("\r",'')
+  	nb=s.length
+  	sep=-1
+  	i=0
+  	j=0
+  	l=0
+  	nl=1
+  	while(i<nb)
+  		#Get next character
+  		c = s[i].is_a?(String) ? s[i].ord : s[i]
+  		#Check if ASCII or MB
+  		ascii=(c<128)
+  		if(c.chr=="\n")
+  			#Explicit line break
+  			Cell(w,h,s[j,i-j],0,2,'',0,link)
+  			i+=1
+  			sep=-1
+  			j=i
+  			l=0
+  			if(nl==1)
+  				@x=@l_margin
+  				w=@w-@r_margin-@x
+  				wmax=(w-2*@c_margin)*1000/@font_size
+  			end
+  			nl+=1
+  			next
+  		end
+  		if(!ascii or c.chr==' ')
+  			sep=i
+			end
+  		l+=(ascii ? cw[c.chr] : 1000) || 0
+  		if(l>wmax)
+  			#Automatic line break
+  			if(sep==-1 or i==j)
+  				if(@x>@l_margin)
+  					#Move to next line
+  					@x=@l_margin
+  					@y+=h
+  					w=@w-@r_margin-@x
+  					wmax=(w-2*@c_margin)*1000/@font_size
+  					i+=1
+  					nl+=1
+  					next
+  				end
+  				if(i==j)
+  					i+=ascii ? 1 : 2
+					end
+  				Cell(w,h,s[j,i-j],0,2,'',0,link)
+  			else
+  				Cell(w,h,s[j,sep-j],0,2,'',0,link)
+  				i=(s[sep].chr==' ') ? sep+1 : sep
+  			end
+  			sep=-1
+  			j=i
+  			l=0
+  			if(nl==1)
+  				@x=@l_margin
+  				w=@w-@r_margin-@x
+  				wmax=(w-2*@c_margin)*1000/@font_size
+  			end
+  			nl+=1
+  		else
+  			i+=ascii ? 1 : 2
+			end
+  	end
+  	#Last chunk
+  	if(i!=j)
+  		Cell(l/1000*@font_size,h,s[j,i-j],0,0,'',0,link)
+		end
+  end
+
+private
+
+  def putfonts()
+  	nf=@n
+    @diffs.each do |diff|
+  		#Encodings
+  		newobj()
+  		out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['+diff+']>>')
+  		out('endobj')
+  	end
+  	# mqr=get_magic_quotes_runtime()
+  	# set_magic_quotes_runtime(0)
+    @font_files.each_pair do |file, info|
+  		#Font file embedding
+  		newobj()
+  		@font_files[file]['n']=@n
+  		if(defined('FPDF_FONTPATH'))
+  			file=FPDF_FONTPATH+file
+			end
+  		size=filesize(file)
+  		if(!size)
+  			Error('Font file not found')
+			end
+  		out('<</Length '+size)
+  		if(file[-2]=='.z')
+  			out('/Filter /FlateDecode')
+			end
+  		out('/Length1 '+info['length1'])
+  		unless info['length2'].nil?
+  			out('/Length2 '+info['length2']+' /Length3 0')
+			end
+  		out('>>')
+  		f=fopen(file,'rb')
+  		putstream(fread(f,size))
+  		fclose(f)
+  		out('endobj')
+  	end
+#
+  	# set_magic_quotes_runtime(mqr)
+#
+    @fonts.each_pair do |k, font|
+  		#Font objects
+  		newobj()
+  		@fonts[k]['n']=@n
+  		out('<</Type /Font')
+  		if(font['type']=='Type0')
+  			putType0(font)
+  		else
+  			name=font['name']
+  			out('/BaseFont /'+name)
+  			if(font['type']=='core')
+  				#Standard font
+  				out('/Subtype /Type1')
+  				if(name!='Symbol' and name!='ZapfDingbats')
+  					out('/Encoding /WinAnsiEncoding')
+  			end
+  			else
+  				#Additional font
+  				out('/Subtype /'+font['type'])
+  				out('/FirstChar 32')
+  				out('/LastChar 255')
+  				out('/Widths '+(@n+1)+' 0 R')
+  				out('/FontDescriptor '+(@n+2)+' 0 R')
+  				if(font['enc'])
+  					if !font['diff'].nil?
+  						out('/Encoding '+(nf+font['diff'])+' 0 R')
+  					else
+  						out('/Encoding /WinAnsiEncoding')
+  					end
+  				end
+  			end
+  			out('>>')
+  			out('endobj')
+  			if(font['type']!='core')
+  				#Widths
+  				newobj()
+  				cw=font['cw']
+  				s='['
+          32.upto(255) do |i|
+  					s+=cw[i.chr]+' '
+  				end
+  				out(s+']')
+  				out('endobj')
+  				#Descriptor
+  				newobj()
+  				s='<</Type /FontDescriptor /FontName /'+name
+  				font['desc'].each_pair do |k, v|
+  					s+=' /'+k+' '+v
+  				end
+  				file=font['file']
+  				if(file)
+  					s+=' /FontFile'+(font['type']=='Type1' ? '' : '2')+' '+@font_files[file]['n']+' 0 R'
+  				end
+  				out(s+'>>')
+  				out('endobj')
+  			end
+  		end
+  	end
+  end
+
+  def putType0(font)
+  	#Type0
+  	out('/Subtype /Type0')
+  	out('/BaseFont /'+font['name']+'-'+font['CMap'])
+  	out('/Encoding /'+font['CMap'])
+  	out('/DescendantFonts ['+(@n+1).to_s+' 0 R]')
+  	out('>>')
+  	out('endobj')
+  	#CIDFont
+  	newobj()
+  	out('<</Type /Font')
+  	out('/Subtype /CIDFontType0')
+  	out('/BaseFont /'+font['name'])
+  	out('/CIDSystemInfo <</Registry '+textstring('Adobe')+' /Ordering '+textstring(font['registry']['ordering'])+' /Supplement '+font['registry']['supplement'].to_s+'>>')
+  	out('/FontDescriptor '+(@n+1).to_s+' 0 R')
+  	if(font['CMap']=='ETen-B5-H')
+  		w='13648 13742 500'
+  	elsif(font['CMap']=='GBK-EUC-H')
+  		w='814 907 500 7716 [500]'
+  	else
+      # ActionController::Base::logger.debug font['cw'].keys.sort.join(' ').to_s
+      # ActionController::Base::logger.debug font['cw'].values.join(' ').to_s
+  		w='1 ['
+  		font['cw'].keys.sort.each {|key|
+  		  w+=font['cw'][key].to_s + " "
+# ActionController::Base::logger.debug key.to_s
+# ActionController::Base::logger.debug font['cw'][key].to_s
+  		}
+  		w +=']'
+  	end
+  	out('/W ['+w+']>>')
+  	out('endobj')
+  	#Font descriptor
+  	newobj()
+  	out('<</Type /FontDescriptor')
+  	out('/FontName /'+font['name'])
+  	out('/Flags 6')
+  	out('/FontBBox [0 -200 1000 900]')
+  	out('/ItalicAngle 0')
+  	out('/Ascent 800')
+  	out('/Descent -200')
+  	out('/CapHeight 800')
+  	out('/StemV 50')
+  	out('>>')
+  	out('endobj')
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fpdf/fpdf_eps.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,139 @@
+# Information
+# 
+# PDF_EPS class from Valentin Schmidt ported to ruby by Thiago Jackiw (tjackiw@gmail.com) 
+# working for Mingle LLC (www.mingle.com)
+# Release Date: July 13th, 2006
+# 
+# Description
+# 
+# This script allows to embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files. 
+# Only vector drawing is supported, not text or bitmap. Although the script was successfully 
+# tested with various AI format versions, best results are probably achieved with files that 
+# were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2).
+# 
+# ImageEps(string file, float x, float y [, float w [, float h [, string link [, boolean useBoundingBox]]]])
+# 
+# Same parameters as for regular FPDF::Image() method, with an additional one:
+# 
+# useBoundingBox: specifies whether to position the bounding box (true) or the complete canvas (false) 
+# at location (x,y). Default value is true.
+#
+# First added to the Ruby FPDF distribution in 1.53c
+#
+# Usage is as follows:
+#
+# require 'fpdf'
+# require 'fpdf_eps'
+# pdf = FPDF.new
+# pdf.extend(PDF_EPS)
+# pdf.ImageEps(...)
+#
+# This allows it to be combined with other extensions, such as the bookmark
+# module.
+
+module PDF_EPS
+    def ImageEps(file, x, y, w=0, h=0, link='', use_bounding_box=true)
+        data = nil
+        if File.exists?(file)
+            File.open(file, 'rb') do |f|
+                data = f.read()
+            end
+        else
+            Error('EPS file not found: '+file)
+        end
+        
+        # Find BoundingBox param
+        regs = data.scan(/%%BoundingBox: [^\r\n]*/m)
+        regs << regs[0].gsub(/%%BoundingBox: /, '')
+        if regs.size > 1
+            tmp = regs[1].to_s.split(' ')
+            @x1 = tmp[0].to_i
+            @y1 = tmp[1].to_i
+            @x2 = tmp[2].to_i
+            @y2 = tmp[3].to_i
+        else
+            Error('No BoundingBox found in EPS file: '+file)
+        end
+        f_start = data.index('%%EndSetup')
+        f_start = data.index('%%EndProlog') if f_start === false
+        f_start = data.index('%%BoundingBox') if f_start === false
+        
+        data = data.slice(f_start, data.length)
+        
+        f_end = data.index('%%PageTrailer')
+        f_end = data.index('showpage') if f_end === false
+        data = data.slice(0, f_end) if f_end
+        
+        # save the current graphic state
+        out('q')
+        
+        k = @k
+        
+        # Translate
+        if use_bounding_box
+            dx = x*k-@x1
+            dy = @hPt-@y2-y*k
+        else
+            dx = x*k
+            dy = -y*k
+        end
+        tm = [1,0,0,1,dx,dy]
+        out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm',
+            tm[0], tm[1], tm[2], tm[3], tm[4], tm[5]))
+        
+        if w > 0
+            scale_x = w/((@x2-@x1)/k)
+            if h > 0
+                scale_y = h/((@y2-@y1)/k)
+            else
+                scale_y = scale_x
+                h = (@y2-@y1)/k * scale_y
+            end
+        else
+            if h > 0
+                scale_y = $h/((@y2-@y1)/$k)
+                scale_x = scale_y
+                w = (@x2-@x1)/k * scale_x
+            else
+                w = (@x2-@x1)/k
+                h = (@y2-@y1)/k
+            end
+        end
+        
+        if !scale_x.nil?
+            # Scale
+            tm = [scale_x,0,0,scale_y,0,@hPt*(1-scale_y)]
+            out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm',
+                tm[0], tm[1], tm[2], tm[3], tm[4], tm[5]))
+        end
+        
+        data.split(/\r\n|[\r\n]/).each do |line|
+            next if line == '' || line[0,1] == '%'
+            len = line.length
+            # next if (len > 2 && line[len-2,len] != ' ')
+            cmd = line[len-2,len].strip
+            case cmd
+                when 'm', 'l', 'v', 'y', 'c', 'k', 'K', 'g', 'G', 's', 'S', 'J', 'j', 'w', 'M', 'd':
+                    out(line)
+                
+                when 'L':
+                    line[len-1,len]='l'
+                    out(line)
+                
+                when 'C':
+                    line[len-1,len]='c'
+                    out(line)
+                
+                when 'f', 'F':
+                    out('f*')
+                
+                when 'b', 'B':
+                    out(cmd + '*')
+            end
+        end
+        
+        # restore previous graphic state
+        out('Q')
+        Link(x,y,w,h,link) if link
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fpdf/japanese.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,464 @@
+# Copyright (c) 2006 4ssoM LLC <www.4ssoM.com>
+# 1.12 contributed by Ed Moss.
+#
+# The MIT License
+#
+# 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.
+#
+# This is direct port of japanese.php
+#
+# Japanese PDF support.
+#
+# Usage is as follows:
+#
+# require 'fpdf'
+# require 'chinese'
+# pdf = FPDF.new
+# pdf.extend(PDF_Japanese)
+#
+# This allows it to be combined with other extensions, such as the bookmark
+# module.
+
+module PDF_Japanese
+
+  SJIS_widths={' ' => 278, '!' => 299, '"' => 353, '#' => 614, '$' => 614, '%' => 721, '&' => 735, '\'' => 216, 
+  	'(' => 323, ')' => 323, '*' => 449, '+' => 529, ',' => 219, '-' => 306, '.' => 219, '/' => 453, '0' => 614, '1' => 614, 
+  	'2' => 614, '3' => 614, '4' => 614, '5' => 614, '6' => 614, '7' => 614, '8' => 614, '9' => 614, ':' => 219, ';' => 219, 
+  	'<' => 529, '=' => 529, '>' => 529, '?' => 486, '@' => 744, 'A' => 646, 'B' => 604, 'C' => 617, 'D' => 681, 'E' => 567, 
+  	'F' => 537, 'G' => 647, 'H' => 738, 'I' => 320, 'J' => 433, 'K' => 637, 'L' => 566, 'M' => 904, 'N' => 710, 'O' => 716, 
+  	'P' => 605, 'Q' => 716, 'R' => 623, 'S' => 517, 'T' => 601, 'U' => 690, 'V' => 668, 'W' => 990, 'X' => 681, 'Y' => 634, 
+  	'Z' => 578, '[' => 316, '\\' => 614, ']' => 316, '^' => 529, '_' => 500, '`' => 387, 'a' => 509, 'b' => 566, 'c' => 478, 
+  	'd' => 565, 'e' => 503, 'f' => 337, 'g' => 549, 'h' => 580, 'i' => 275, 'j' => 266, 'k' => 544, 'l' => 276, 'm' => 854, 
+  	'n' => 579, 'o' => 550, 'p' => 578, 'q' => 566, 'r' => 410, 's' => 444, 't' => 340, 'u' => 575, 'v' => 512, 'w' => 760, 
+  	'x' => 503, 'y' => 529, 'z' => 453, '{' => 326, '|' => 380, '}' => 326, '~' => 387}
+
+  def AddCIDFont(family,style,name,cw,cMap,registry)  	
+    fontkey=family.downcase+style.upcase
+  	unless @fonts[fontkey].nil?
+  		Error("CID font already added: family style")
+  	end  
+  	i=@fonts.length+1
+  	@fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-120,'ut'=>40,'cw'=>cw,
+  	  'CMap'=>cMap,'registry'=>registry}
+  end
+
+  def AddCIDFonts(family,name,cw,cMap,registry)
+  	AddCIDFont(family,'',name,cw,cMap,registry)
+  	AddCIDFont(family,'B',name+',Bold',cw,cMap,registry)
+  	AddCIDFont(family,'I',name+',Italic',cw,cMap,registry)
+  	AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry)
+  end
+
+  def AddSJISFont(family='SJIS')
+  	#Add SJIS font with proportional Latin
+  	name='KozMinPro-Regular-Acro'
+  	cw=SJIS_widths
+  	cMap='90msp-RKSJ-H'
+  	registry={'ordering'=>'Japan1','supplement'=>2}
+  	AddCIDFonts(family,name,cw,cMap,registry)
+  end
+
+  def AddSJIShwFont(family='SJIS-hw')
+  	#Add SJIS font with half-width Latin
+  	name='KozMinPro-Regular-Acro'
+    32.upto(126) do |i|
+  		cw[i.chr]=500
+  	end  
+  	cMap='90ms-RKSJ-H'
+  	registry={'ordering'=>'Japan1','supplement'=>2}
+  	AddCIDFonts(family,name,cw,cMap,registry)
+  end
+
+  def GetStringWidth(s)
+  	if(@current_font['type']=='Type0')
+  		return GetSJISStringWidth(s)
+  	else
+  		return super(s)
+  	end  
+  end
+
+  def GetSJISStringWidth(s)
+  	#SJIS version of GetStringWidth()
+  	l=0
+  	cw=@current_font['cw']
+  	nb=s.length
+  	i=0
+  	while(i<nb)
+  		o = s[i].is_a?(String) ? s[i].ord : s[i]
+  		if(o<128)
+  			#ASCII
+  			l+=cw[o.chr] if cw[o.chr]
+  			i+=1
+  		elsif(o>=161 and o<=223)
+  			#Half-width katakana
+  			l+=500
+  			i+=1
+  		else
+  			#Full-width character
+  			l+=1000
+  			i+=2
+  		end
+  	end
+  	return l*@font_size/1000
+  end
+
+  def MultiCell(w,h,txt,border=0,align='L',fill=0)
+  	if(@current_font['type']=='Type0')
+  		SJISMultiCell(w,h,txt,border,align,fill)
+  	else
+  		super(w,h,txt,border,align,fill)
+  	end  
+  end
+
+  def SJISMultiCell(w,h,txt,border=0,align='L',fill=0)
+  	#Output text with automatic or explicit line breaks
+  	cw=@current_font['cw']
+  	if(w==0)
+  		w=@w-@r_margin-@x
+  	end  
+  	wmax=(w-2*@c_margin)*1000/@font_size
+  	s=txt.gsub("\r",'')
+  	nb=s.length
+  	if(nb>0 and s[nb-1]=="\n")
+  		nb-=1
+  	end  
+  	b=0
+  	if(border)
+  		if(border==1)
+  			border='LTRB'
+  			b='LRT'
+  			b2='LR'
+  		else
+  			b2=''
+  			b2='L' unless border.to_s.index('L').nil?
+  			b2=b2+'R' unless border.to_s.index('R').nil?
+  			b=(border.to_s.index('T')) ? (b2+'T') : b2
+  		end
+  	end
+  	sep=-1
+  	i=0
+  	j=0
+  	l=0
+  	nl=1
+  	while(i<nb)
+  		#Get next character
+  		c = s[i].is_a?(String) ? s[i].ord : s[i]
+  		o=c #o=ord(c)
+  		if(o==10)
+  			#Explicit line break
+  			Cell(w,h,s[j,i-j],b,2,align,fill)
+  			i+=1
+  			sep=-1
+  			j=i
+  			l=0
+  			nl+=1
+  			if(border and nl==2)
+  				b=b2
+      	end  
+  			next
+  		end
+  		if(o<128)
+  			#ASCII
+  			l+=cw[c.chr] || 0
+  			n=1
+  			if(o==32)
+  				sep=i
+      	end  
+  		elsif(o>=161 and o<=223)
+  			#Half-width katakana
+  			l+=500
+  			n=1
+  			sep=i
+  		else
+  			#Full-width character
+  			l+=1000
+  			n=2
+  			sep=i
+  		end
+  		if(l>wmax)
+  			#Automatic line break
+  			if(sep==-1 or i==j)
+  				if(i==j)
+  					i+=n
+        	end  
+  				Cell(w,h,s[j,i-j],b,2,align,fill)
+  			else
+  				Cell(w,h,s[j,sep-j],b,2,align,fill)
+  				i=(s[sep].chr==' ') ? sep+1 : sep
+  			end
+  			sep=-1
+  			j=i
+  			l=0
+  			nl+=1
+  			if(border and nl==2)
+  				b=b2
+      	end  
+  		else
+  			i+=n
+  			if(o>=128)
+  				sep=i
+  			end
+  		end
+  	end
+  	#Last chunk
+  	if(border and not border.to_s.index('B').nil?)
+  		b+='B'
+  	end  
+  	Cell(w,h,s[j,i-j],b,2,align,fill)
+  	@x=@l_margin
+  end
+
+  def Write(h,txt,link='')
+  	if(@current_font['type']=='Type0')
+ 		SJISWrite(h,txt,link)
+ 	else
+ 		super(h,txt,link)
+  	end  
+  end
+
+  def SJISWrite(h,txt,link)
+  	#SJIS version of Write()
+  	cw=@current_font['cw']
+  	w=@w-@r_margin-@x
+  	wmax=(w-2*@c_margin)*1000/@font_size
+  	s=txt.gsub("\r",'')
+  	nb=s.length
+  	sep=-1
+  	i=0
+  	j=0
+  	l=0
+  	nl=1
+  	while(i<nb)
+  		#Get next character
+  		c = s[i].is_a?(String) ? s[i].ord : s[i]
+  		o=c
+  		if(o==10)
+  			#Explicit line break
+  			Cell(w,h,s[j,i-j],0,2,'',0,link)
+  			i+=1
+  			sep=-1
+  			j=i
+  			l=0
+  			if(nl==1)
+  				#Go to left margin
+  				@x=@l_margin
+  				w=@w-@r_margin-@x
+  				wmax=(w-2*@c_margin)*1000/@font_size
+  			end
+  			nl+=1
+  			next
+  		end
+  		if(o<128)
+  			#ASCII
+  			l+=cw[c.chr] || 0
+  			n=1
+  			if(o==32)
+  				sep=i
+      	end  
+  		elsif(o>=161 and o<=223)
+  			#Half-width katakana
+  			l+=500
+  			n=1
+  			sep=i
+  		else
+  			#Full-width character
+  			l+=1000
+  			n=2
+  			sep=i
+  		end
+  		if(l>wmax)
+  			#Automatic line break
+  			if(sep==-1 or i==j)
+  				if(@x>@l_margin)
+  					#Move to next line
+  					@x=@l_margin
+  					@y+=h
+  					w=@w-@r_margin-@x
+  					wmax=(w-2*@c_margin)*1000/@font_size
+  					i+=n
+  					nl+=1
+  					next
+  				end
+  				if(i==j)
+  					i+=n
+        	end  
+  				Cell(w,h,s[j,i-j],0,2,'',0,link)
+  			else
+  				Cell(w,h,s[j,sep-j],0,2,'',0,link)
+  				i=(s[sep].chr==' ') ? sep+1 : sep
+  			end
+  			sep=-1
+  			j=i
+  			l=0
+  			if(nl==1)
+  				@x=@l_margin
+  				w=@w-@r_margin-@x
+  				wmax=(w-2*@c_margin)*1000/@font_size
+  			end
+  			nl+=1
+  		else
+  			i+=n
+  			if(o>=128)
+  				sep=i
+      	end  
+  		end
+  	end
+  	#Last chunk
+  	if(i!=j)
+  		Cell(l/1000*@font_size,h,s[j,i-j],0,0,'',0,link)
+  	end  
+  end
+  
+private
+
+  def putfonts()
+  	nf=@n
+    @diffs.each do |diff|
+  		#Encodings
+  		newobj()
+  		out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['+diff+']>>')
+  		out('endobj')
+  	end
+  	# mqr=get_magic_quotes_runtime()
+  	# set_magic_quotes_runtime(0)
+    @font_files.each_pair do |file, info|
+  		#Font file embedding
+  		newobj()
+  		@font_files[file]['n']=@n
+  		if(defined('FPDF_FONTPATH'))
+  			file=FPDF_FONTPATH+file
+    	end  
+  		size=filesize(file)
+  		if(!size)
+  			Error('Font file not found')
+    	end  
+  		out('<</Length '+size)
+  		if(file[-2]=='.z')
+  			out('/Filter /FlateDecode')
+    	end  
+  		out('/Length1 '+info['length1'])
+  		unless info['length2'].nil?
+  			out('/Length2 '+info['length2']+' /Length3 0')
+    	end  
+  		out('>>')
+  		f=fopen(file,'rb')
+  		putstream(fread(f,size))
+  		fclose(f)
+  		out('endobj')
+  	end
+  	# set_magic_quotes_runtime(mqr)
+    @fonts.each_pair do |k, font|
+  		#Font objects
+  		newobj()
+  		@fonts[k]['n']=@n
+  		out('<</Type /Font')
+  		if(font['type']=='Type0')
+  			putType0(font)
+  		else
+  			name=font['name']
+  			out('/BaseFont /'+name)
+  			if(font['type']=='core')
+  				#Standard font
+  				out('/Subtype /Type1')
+  				if(name!='Symbol' and name!='ZapfDingbats')
+  					out('/Encoding /WinAnsiEncoding')
+  				end
+  			else
+  				#Additional font
+  				out('/Subtype /'+font['type'])
+  				out('/FirstChar 32')
+  				out('/LastChar 255')
+  				out('/Widths '+(@n+1)+' 0 R')
+  				out('/FontDescriptor '+(@n+2)+' 0 R')
+  				if(font['enc'])
+  					if !font['diff'].nil?
+  						out('/Encoding '+(nf+font['diff'])+' 0 R')
+  					else
+  						out('/Encoding /WinAnsiEncoding')
+          	end  
+  				end
+  			end
+  			out('>>')
+  			out('endobj')
+  			if(font['type']!='core')
+  				#Widths
+  				newobj()
+  				cw=font['cw']
+  				s='['
+          32.upto(255) do |i|
+  					s+=cw[i.chr]+' '
+        	end  
+  				out(s+']')
+  				out('endobj')
+  				#Descriptor
+  				newobj()
+  				s='<</Type /FontDescriptor /FontName /'+name
+  				font['desc'].each_pair do |k, v|
+  					s+=' /'+k+' '+v
+        	end  
+  				file=font['file']
+  				if(file)
+  					s+=' /FontFile'+(font['type']=='Type1' ? '' : '2')+' '+@font_files[file]['n']+' 0 R'
+        	end  
+  				out(s+'>>')
+  				out('endobj')
+  			end
+  		end
+  	end
+  end
+
+  def putType0(font)
+  	#Type0
+  	out('/Subtype /Type0')
+  	out('/BaseFont /'+font['name']+'-'+font['CMap'])
+  	out('/Encoding /'+font['CMap'])
+  	out('/DescendantFonts ['+(@n+1).to_s+' 0 R]')
+  	out('>>')
+  	out('endobj')
+  	#CIDFont
+  	newobj()
+  	out('<</Type /Font')
+  	out('/Subtype /CIDFontType0')
+  	out('/BaseFont /'+font['name'])
+  	out('/CIDSystemInfo <</Registry (Adobe) /Ordering ('+font['registry']['ordering']+') /Supplement '+font['registry']['supplement'].to_s+'>>')
+  	out('/FontDescriptor '+(@n+1).to_s+' 0 R')
+  	w='/W [1 ['
+		font['cw'].keys.sort.each {|key|
+		  w+=font['cw'][key].to_s + " "
+# ActionController::Base::logger.debug key.to_s
+# ActionController::Base::logger.debug font['cw'][key].to_s
+		}
+  	out(w+'] 231 325 500 631 [500] 326 389 500]')
+  	out('>>')
+  	out('endobj')
+  	#Font descriptor
+  	newobj()
+  	out('<</Type /FontDescriptor')
+  	out('/FontName /'+font['name'])
+  	out('/Flags 6')
+  	out('/FontBBox [0 -200 1000 900]')
+  	out('/ItalicAngle 0')
+  	out('/Ascent 800')
+  	out('/Descent -200')
+  	out('/CapHeight 800')
+  	out('/StemV 60')
+  	out('>>')
+  	out('endobj')
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fpdf/korean.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,432 @@
+# Copyright (c) 2006 4ssoM LLC <www.4ssoM.com>
+# 1.12 contributed by Ed Moss.
+#
+# The MIT License
+#
+# 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.
+#
+# This is direct port of korean.php
+#
+# Korean PDF support.
+#
+# Usage is as follows:
+#
+# require 'fpdf'
+# require 'chinese'
+# pdf = FPDF.new
+# pdf.extend(PDF_Korean)
+#
+# This allows it to be combined with other extensions, such as the bookmark
+# module.
+
+module PDF_Korean
+
+UHC_widths={' ' => 333, '!' => 416, '"' => 416, '#' => 833, '$' => 625, '%' => 916, '&' => 833, '\'' => 250, 
+	'(' => 500, ')' => 500, '*' => 500, '+' => 833, ',' => 291, '-' => 833, '.' => 291, '/' => 375, '0' => 625, '1' => 625, 
+	'2' => 625, '3' => 625, '4' => 625, '5' => 625, '6' => 625, '7' => 625, '8' => 625, '9' => 625, ':' => 333, ';' => 333, 
+	'<' => 833, '=' => 833, '>' => 916, '?' => 500, '@' => 1000, 'A' => 791, 'B' => 708, 'C' => 708, 'D' => 750, 'E' => 708, 
+	'F' => 666, 'G' => 750, 'H' => 791, 'I' => 375, 'J' => 500, 'K' => 791, 'L' => 666, 'M' => 916, 'N' => 791, 'O' => 750, 
+	'P' => 666, 'Q' => 750, 'R' => 708, 'S' => 666, 'T' => 791, 'U' => 791, 'V' => 750, 'W' => 1000, 'X' => 708, 'Y' => 708, 
+	'Z' => 666, '[' => 500, '\\' => 375, ']' => 500, '^' => 500, '_' => 500, '`' => 333, 'a' => 541, 'b' => 583, 'c' => 541, 
+	'd' => 583, 'e' => 583, 'f' => 375, 'g' => 583, 'h' => 583, 'i' => 291, 'j' => 333, 'k' => 583, 'l' => 291, 'm' => 875, 
+	'n' => 583, 'o' => 583, 'p' => 583, 'q' => 583, 'r' => 458, 's' => 541, 't' => 375, 'u' => 583, 'v' => 583, 'w' => 833, 
+	'x' => 625, 'y' => 625, 'z' => 500, '{' => 583, '|' => 583, '}' => 583, '~' => 750}
+
+  def AddCIDFont(family,style,name,cw,cMap,registry)
+    fontkey=family.downcase+style.upcase
+    unless @fonts[fontkey].nil?
+  		Error("Font already added: family style")
+    end
+  	i=@fonts.length+1
+  	name=name.gsub(' ','')
+  	@fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-130,'ut'=>40,'cw'=>cw,
+  	  'CMap'=>cMap,'registry'=>registry}
+  end
+
+  def AddCIDFonts(family,name,cw,cMap,registry)
+  	AddCIDFont(family,'',name,cw,cMap,registry)
+  	AddCIDFont(family,'B',name+',Bold',cw,cMap,registry)
+  	AddCIDFont(family,'I',name+',Italic',cw,cMap,registry)
+  	AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry)
+  end
+
+  def AddUHCFont(family='UHC',name='HYSMyeongJoStd-Medium-Acro')
+  	#Add UHC font with proportional Latin
+  	cw=UHC_widths
+  	cMap='KSCms-UHC-H'
+  	registry={'ordering'=>'Korea1','supplement'=>1}
+  	AddCIDFonts(family,name,cw,cMap,registry)
+  end
+
+  def AddUHChwFont(family='UHC-hw',name='HYSMyeongJoStd-Medium-Acro')
+  	#Add UHC font with half-witdh Latin
+    32.upto(126) do |i|
+  		cw[i.chr]=500
+    end
+  	cMap='KSCms-UHC-HW-H'
+  	registry={'ordering'=>'Korea1','supplement'=>1}
+  	AddCIDFonts(family,name,cw,cMap,registry)
+  end
+
+  def GetStringWidth(s)
+  	if(@current_font['type']=='Type0')
+  		return GetMBStringWidth(s)
+  	else
+  		return super(s)
+    end
+  end
+
+  def GetMBStringWidth(s)
+  	#Multi-byte version of GetStringWidth()
+  	l=0
+  	cw=@current_font['cw']
+  	nb=s.length
+  	i=0
+  	while(i<nb)
+  		c = s[i].is_a?(String) ? s[i].ord : s[i]
+  		if(c<128)
+  			l+=cw[c.chr] if cw[c.chr]
+  			i+=1
+  		else
+  			l+=1000
+  			i+=2
+  		end
+  	end
+  	return l*@font_size/1000
+  end
+
+  def MultiCell(w,h,txt,border=0,align='L',fill=0)
+  	if(@current_font['type']=='Type0')
+  		MBMultiCell(w,h,txt,border,align,fill)
+  	else
+  		super(w,h,txt,border,align,fill)
+    end
+  end
+
+  def MBMultiCell(w,h,txt,border=0,align='L',fill=0)
+  	#Multi-byte version of MultiCell()
+  	cw=@current_font['cw']
+  	if(w==0)
+  		w=@w-@r_margin-@x
+    end
+  	wmax=(w-2*@c_margin)*1000/@font_size
+  	s=txt.gsub("\r",'')
+  	nb=s.length
+  	if(nb>0 and s[nb-1]=="\n")
+  		nb-=1
+    end
+  	b=0
+  	if(border)
+  		if(border==1)
+  			border='LTRB'
+  			b='LRT'
+  			b2='LR'
+  		else
+  			b2=''
+  			b2='L' unless border.to_s.index('L').nil?
+  			b2=b2+'R' unless border.to_s.index('R').nil?
+  			b=(border.to_s.index('T')) ? (b2+'T') : b2
+  		end
+  	end
+  	sep=-1
+  	i=0
+  	j=0
+  	l=0
+  	nl=1
+  	while(i<nb)
+  		#Get next character
+  		c = s[i].is_a?(String) ? s[i].ord : s[i]
+  		#Check if ASCII or MB
+  		ascii=(c<128)
+  		if(c.chr=="\n")
+  			#Explicit line break
+  			Cell(w,h,s[j,i-j],b,2,align,fill)
+  			i+=1
+  			sep=-1
+  			j=i
+  			l=0
+  			nl+=1
+  			if(border and nl==2)
+  				b=b2
+        end
+  			next
+  		end
+  		if(!ascii)
+  			sep=i
+  			ls=l
+  		elsif(c.chr==' ')
+  			sep=i
+  			ls=l
+  		end
+  		l+=(ascii ? cw[c.chr] : 1000) || 0
+  		if(l>wmax)
+  			#Automatic line break
+  			if(sep==-1 or i==j)
+  				if(i==j)
+  					i+=ascii ? 1 : 2
+          end
+  				Cell(w,h,s[j,i-j],b,2,align,fill)
+  			else
+  				Cell(w,h,s[j,sep-j],b,2,align,fill)
+  				i=(s[sep].chr==' ') ? sep+1 : sep
+  			end
+  			sep=-1
+  			j=i
+  			l=0
+  			nl+=1
+  			if(border and nl==2)
+  				b=b2
+        end
+  		else
+  			i+=ascii ? 1 : 2
+      end
+  	end
+  	#Last chunk
+  	if(border and not border.to_s.index('B').nil?)
+  		b+='B'
+    end
+  	Cell(w,h,s[j,i-j],b,2,align,fill)
+  	@x=@l_margin
+  end
+
+  def Write(h,txt,link='')
+  	if(@current_font['type']=='Type0')
+  		MBWrite(h,txt,link)
+  	else
+  		super(h,txt,link)
+    end
+  end
+
+  def MBWrite(h,txt,link)
+  	#Multi-byte version of Write()
+  	cw=@current_font['cw']
+  	w=@w-@r_margin-@x
+  	wmax=(w-2*@c_margin)*1000/@font_size
+  	s=txt.gsub("\r",'')
+  	nb=s.length
+  	sep=-1
+  	i=0
+  	j=0
+  	l=0
+  	nl=1
+  	while(i<nb)
+  		#Get next character
+  		c = s[i].is_a?(String) ? s[i].ord : s[i]
+  		#Check if ASCII or MB
+  		ascii=(c<128)
+  		if(c.chr=="\n")
+  			#Explicit line break
+  			Cell(w,h,s[j,i-j],0,2,'',0,link)
+  			i+=1
+  			sep=-1
+  			j=i
+  			l=0
+  			if(nl==1)
+  				@x=@l_margin
+  				w=@w-@r_margin-@x
+  				wmax=(w-2*@c_margin)*1000/@font_size
+  			end
+  			nl+=1
+  			next
+  		end
+  		if(!ascii or c.chr==' ')
+  			sep=i
+      end
+  		l+=(ascii ? cw[c.chr] : 1000) || 0
+  		if(l>wmax)
+  			#Automatic line break
+  			if(sep==-1 or i==j)
+  				if(@x>@l_margin)
+  					#Move to next line
+  					@x=@l_margin
+  					@y+=h
+  					w=@w-@r_margin-@x
+  					wmax=(w-2*@c_margin)*1000/@font_size
+  					i+=1
+  					nl+=1
+  					next
+  				end
+  				if(i==j)
+  					i+=ascii ? 1 : 2
+          end
+  				Cell(w,h,s[j,i-j],0,2,'',0,link)
+  			else
+  				Cell(w,h,s[j,sep-j],0,2,'',0,link)
+  				i=(s[sep].chr==' ') ? sep+1 : sep
+  			end
+  			sep=-1
+  			j=i
+  			l=0
+  			if(nl==1)
+  				@x=@l_margin
+  				w=@w-@r_margin-@x
+  				wmax=(w-2*@c_margin)*1000/@font_size
+  			end
+  			nl+=1
+  		else
+  			i+=ascii ? 1 : 2
+      end
+  	end
+  	#Last chunk
+  	if(i!=j)
+  		Cell(l/1000*@font_size,h,s[j,i-j],0,0,'',0,link)
+    end
+  end
+
+private
+
+  def putfonts()
+  	nf=@n
+    @diffs.each do |diff|
+  		#Encodings
+  		newobj()
+  		out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['+diff+']>>')
+  		out('endobj')
+  	end
+  	# mqr=get_magic_quotes_runtime()
+  	# set_magic_quotes_runtime(0)
+    @font_files.each_pair do |file, info|
+  		#Font file embedding
+  		newobj()
+  		@font_files[file]['n']=@n
+  		if(defined('FPDF_FONTPATH'))
+  			file=FPDF_FONTPATH+file
+      end
+  		size=filesize(file)
+  		if(!size)
+  			Error('Font file not found')
+      end
+  		out('<</Length '+size)
+  		if(file[-2]=='.z')
+  			out('/Filter /FlateDecode')
+      end
+  		out('/Length1 '+info['length1'])
+  		if(not info['length2'].nil?)
+  			out('/Length2 '+info['length2']+' /Length3 0')
+      end
+  		out('>>')
+  		f=fopen(file,'rb')
+  		putstream(fread(f,size))
+  		fclose(f)
+  		out('endobj')
+  	end
+  	# set_magic_quotes_runtime(mqr)
+    @fonts.each_pair do |k, font|
+  		#Font objects
+  		newobj()
+  		@fonts[k]['n']=@n
+  		out('<</Type /Font')
+  		if(font['type']=='Type0')
+  			putType0(font)
+  		else
+  			name=font['name']
+  			out('/BaseFont /'+name)
+  			if(font['type']=='core')
+  				#Standard font
+  				out('/Subtype /Type1')
+  				if(name!='Symbol' and name!='ZapfDingbats')
+  					out('/Encoding /WinAnsiEncoding')
+  				end
+  			else
+  				#Additional font
+  				out('/Subtype /'+font['type'])
+  				out('/FirstChar 32')
+  				out('/LastChar 255')
+  				out('/Widths '+(@n+1)+' 0 R')
+  				out('/FontDescriptor '+(@n+2)+' 0 R')
+  				if(font['enc'])
+  					if(not font['diff'].nil?)
+  						out('/Encoding '+(nf+font['diff'])+' 0 R')
+  					else
+  						out('/Encoding /WinAnsiEncoding')
+            end
+  				end
+  			end
+  			out('>>')
+  			out('endobj')
+  			if(font['type']!='core')
+  				#Widths
+  				newobj()
+  				cw=font['cw']
+  				s='['
+          32.upto(255) do |i|
+  					s+=cw[i.chr]+' '
+          end
+  				out(s+']')
+  				out('endobj')
+  				#Descriptor
+  				newobj()
+  				s='<</Type /FontDescriptor /FontName /'+name
+  				font['desc'].each_pair do |k, v|  				
+  					s+=' /'+k+' '+v
+          end
+  				file=font['file']
+  				if(file)
+  					s+=' /FontFile'+(font['type']=='Type1' ? '' : '2')+' '+@font_files[file]['n']+' 0 R'
+          end
+  				out(s+'>>')
+  				out('endobj')
+  			end
+  		end
+  	end
+  end
+  
+  def putType0(font)
+  	#Type0
+  	out('/Subtype /Type0')
+  	out('/BaseFont /'+font['name']+'-'+font['CMap'])
+  	out('/Encoding /'+font['CMap'])
+  	out('/DescendantFonts ['+(@n+1).to_s+' 0 R]')
+  	out('>>')
+  	out('endobj')
+  	#CIDFont
+  	newobj()
+  	out('<</Type /Font')
+  	out('/Subtype /CIDFontType0')
+  	out('/BaseFont /'+font['name'])
+  	out('/CIDSystemInfo <</Registry (Adobe) /Ordering ('+font['registry']['ordering']+') /Supplement '+font['registry']['supplement'].to_s+'>>')
+  	out('/FontDescriptor '+(@n+1).to_s+' 0 R')
+  	if(font['CMap']=='KSCms-UHC-HW-H')
+  		w='8094 8190 500'
+  	else
+  		w='1 ['
+  		font['cw'].keys.sort.each {|key|
+  		  w+=font['cw'][key].to_s + " "
+  # ActionController::Base::logger.debug key.to_s
+  # ActionController::Base::logger.debug font['cw'][key].to_s
+  		}
+  		w +=']'
+    end
+  	out('/W ['+w+']>>')
+  	out('endobj')
+  	#Font descriptor
+  	newobj()
+  	out('<</Type /FontDescriptor')
+  	out('/FontName /'+font['name'])
+  	out('/Flags 6')
+  	out('/FontBBox [0 -200 1000 900]')
+  	out('/ItalicAngle 0')
+  	out('/Ascent 800')
+  	out('/Descent -200')
+  	out('/CapHeight 800')
+  	out('/StemV 50')
+  	out('>>')
+  	out('endobj')
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/fpdf/makefont.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,1787 @@
+#!/usr/bin/env ruby
+#
+# Utility to generate font definition files
+# Version: 1.1
+# Date:    2006-07-19
+#
+# Changelog:
+#  Version 1.1 - Brian Ollenberger
+#   - Fixed a very small bug in MakeFont for generating FontDef.diff.
+
+Charencodings = {
+# Central Europe
+    'cp1250' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        'Euro',           '.notdef',        'quotesinglbase', '.notdef',
+        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
+        '.notdef',        'perthousand',    'Scaron',         'guilsinglleft',
+        'Sacute',         'Tcaron',         'Zcaron',         'Zacute',
+        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
+        'quotedblright',  'bullet',         'endash',         'emdash',
+        '.notdef',        'trademark',      'scaron',         'guilsinglright',
+        'sacute',         'tcaron',         'zcaron',         'zacute',
+        'space',          'caron',          'breve',          'Lslash',
+        'currency',       'Aogonek',        'brokenbar',      'section',
+        'dieresis',       'copyright',      'Scedilla',       'guillemotleft',
+        'logicalnot',     'hyphen',         'registered',     'Zdotaccent',
+        'degree',         'plusminus',      'ogonek',         'lslash',
+        'acute',          'mu',             'paragraph',      'periodcentered',
+        'cedilla',        'aogonek',        'scedilla',       'guillemotright',
+        'Lcaron',         'hungarumlaut',   'lcaron',         'zdotaccent',
+        'Racute',         'Aacute',         'Acircumflex',    'Abreve',
+        'Adieresis',      'Lacute',         'Cacute',         'Ccedilla',
+        'Ccaron',         'Eacute',         'Eogonek',        'Edieresis',
+        'Ecaron',         'Iacute',         'Icircumflex',    'Dcaron',
+        'Dcroat',         'Nacute',         'Ncaron',         'Oacute',
+        'Ocircumflex',    'Ohungarumlaut',  'Odieresis',      'multiply',
+        'Rcaron',         'Uring',          'Uacute',         'Uhungarumlaut',
+        'Udieresis',      'Yacute',         'Tcommaaccent',   'germandbls',
+        'racute',         'aacute',         'acircumflex',    'abreve',
+        'adieresis',      'lacute',         'cacute',         'ccedilla',
+        'ccaron',         'eacute',         'eogonek',        'edieresis',
+        'ecaron',         'iacute',         'icircumflex',    'dcaron',
+        'dcroat',         'nacute',         'ncaron',         'oacute',
+        'ocircumflex',    'ohungarumlaut',  'odieresis',      'divide',
+        'rcaron',         'uring',          'uacute',         'uhungarumlaut',
+        'udieresis',      'yacute',         'tcommaaccent',   'dotaccent'
+    ],
+# Cyrillic
+    'cp1251' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        'afii10051',      'afii10052',      'quotesinglbase', 'afii10100',
+        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
+        'Euro',           'perthousand',    'afii10058',      'guilsinglleft',
+        'afii10059',      'afii10061',      'afii10060',      'afii10145',
+        'afii10099',      'quoteleft',      'quoteright',     'quotedblleft',
+        'quotedblright',  'bullet',         'endash',         'emdash',
+        '.notdef',        'trademark',      'afii10106',      'guilsinglright',
+        'afii10107',      'afii10109',      'afii10108',      'afii10193',
+        'space',          'afii10062',      'afii10110',      'afii10057',
+        'currency',       'afii10050',      'brokenbar',      'section',
+        'afii10023',      'copyright',      'afii10053',      'guillemotleft',
+        'logicalnot',     'hyphen',         'registered',     'afii10056',
+        'degree',         'plusminus',      'afii10055',      'afii10103',
+        'afii10098',      'mu',             'paragraph',      'periodcentered',
+        'afii10071',      'afii61352',      'afii10101',      'guillemotright',
+        'afii10105',      'afii10054',      'afii10102',      'afii10104',
+        'afii10017',      'afii10018',      'afii10019',      'afii10020',
+        'afii10021',      'afii10022',      'afii10024',      'afii10025',
+        'afii10026',      'afii10027',      'afii10028',      'afii10029',
+        'afii10030',      'afii10031',      'afii10032',      'afii10033',
+        'afii10034',      'afii10035',      'afii10036',      'afii10037',
+        'afii10038',      'afii10039',      'afii10040',      'afii10041',
+        'afii10042',      'afii10043',      'afii10044',      'afii10045',
+        'afii10046',      'afii10047',      'afii10048',      'afii10049',
+        'afii10065',      'afii10066',      'afii10067',      'afii10068',
+        'afii10069',      'afii10070',      'afii10072',      'afii10073',
+        'afii10074',      'afii10075',      'afii10076',      'afii10077',
+        'afii10078',      'afii10079',      'afii10080',      'afii10081',
+        'afii10082',      'afii10083',      'afii10084',      'afii10085',
+        'afii10086',      'afii10087',      'afii10088',      'afii10089',
+        'afii10090',      'afii10091',      'afii10092',      'afii10093',
+        'afii10094',      'afii10095',      'afii10096',      'afii10097'
+    ],
+# Western Europe
+    'cp1252' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        'Euro',           '.notdef',        'quotesinglbase', 'florin',
+        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
+        'circumflex',     'perthousand',    'Scaron',         'guilsinglleft',
+        'OE',             '.notdef',        'Zcaron',         '.notdef',
+        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
+        'quotedblright',  'bullet',         'endash',         'emdash',
+        'tilde',          'trademark',      'scaron',         'guilsinglright',
+        'oe',             '.notdef',        'zcaron',         'Ydieresis',
+        'space',          'exclamdown',     'cent',           'sterling',
+        'currency',       'yen',            'brokenbar',      'section',
+        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
+        'logicalnot',     'hyphen',         'registered',     'macron',
+        'degree',         'plusminus',      'twosuperior',    'threesuperior',
+        'acute',          'mu',             'paragraph',      'periodcentered',
+        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
+        'onequarter',     'onehalf',        'threequarters',  'questiondown',
+        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
+        'Adieresis',      'Aring',          'AE',             'Ccedilla',
+        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
+        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
+        'Eth',            'Ntilde',         'Ograve',         'Oacute',
+        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
+        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
+        'Udieresis',      'Yacute',         'Thorn',          'germandbls',
+        'agrave',         'aacute',         'acircumflex',    'atilde',
+        'adieresis',      'aring',          'ae',             'ccedilla',
+        'egrave',         'eacute',         'ecircumflex',    'edieresis',
+        'igrave',         'iacute',         'icircumflex',    'idieresis',
+        'eth',            'ntilde',         'ograve',         'oacute',
+        'ocircumflex',    'otilde',         'odieresis',      'divide',
+        'oslash',         'ugrave',         'uacute',         'ucircumflex',
+        'udieresis',      'yacute',         'thorn',          'ydieresis'
+    ],
+# Greek
+    'cp1253' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        'Euro',           '.notdef',        'quotesinglbase', 'florin',
+        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
+        '.notdef',        'perthousand',    '.notdef',        'guilsinglleft',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
+        'quotedblright',  'bullet',         'endash',         'emdash',
+        '.notdef',        'trademark',      '.notdef',        'guilsinglright',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'dieresistonos',  'Alphatonos',     'sterling',
+        'currency',       'yen',            'brokenbar',      'section',
+        'dieresis',       'copyright',      '.notdef',        'guillemotleft',
+        'logicalnot',     'hyphen',         'registered',     'afii00208',
+        'degree',         'plusminus',      'twosuperior',    'threesuperior',
+        'tonos',          'mu',             'paragraph',      'periodcentered',
+        'Epsilontonos',   'Etatonos',       'Iotatonos',      'guillemotright',
+        'Omicrontonos',   'onehalf',        'Upsilontonos',   'Omegatonos',
+        'iotadieresistonos','Alpha',          'Beta',           'Gamma',
+        'Delta',          'Epsilon',        'Zeta',           'Eta',
+        'Theta',          'Iota',           'Kappa',          'Lambda',
+        'Mu',             'Nu',             'Xi',             'Omicron',
+        'Pi',             'Rho',            '.notdef',        'Sigma',
+        'Tau',            'Upsilon',        'Phi',            'Chi',
+        'Psi',            'Omega',          'Iotadieresis',   'Upsilondieresis',
+        'alphatonos',     'epsilontonos',   'etatonos',       'iotatonos',
+        'upsilondieresistonos','alpha',          'beta',           'gamma',
+        'delta',          'epsilon',        'zeta',           'eta',
+        'theta',          'iota',           'kappa',          'lambda',
+        'mu',             'nu',             'xi',             'omicron',
+        'pi',             'rho',            'sigma1',         'sigma',
+        'tau',            'upsilon',        'phi',            'chi',
+        'psi',            'omega',          'iotadieresis',   'upsilondieresis',
+        'omicrontonos',   'upsilontonos',   'omegatonos',     '.notdef'
+    ],
+# Turkish
+    'cp1254' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        'Euro',           '.notdef',        'quotesinglbase', 'florin',
+        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
+        'circumflex',     'perthousand',    'Scaron',         'guilsinglleft',
+        'OE',             '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
+        'quotedblright',  'bullet',         'endash',         'emdash',
+        'tilde',          'trademark',      'scaron',         'guilsinglright',
+        'oe',             '.notdef',        '.notdef',        'Ydieresis',
+        'space',          'exclamdown',     'cent',           'sterling',
+        'currency',       'yen',            'brokenbar',      'section',
+        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
+        'logicalnot',     'hyphen',         'registered',     'macron',
+        'degree',         'plusminus',      'twosuperior',    'threesuperior',
+        'acute',          'mu',             'paragraph',      'periodcentered',
+        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
+        'onequarter',     'onehalf',        'threequarters',  'questiondown',
+        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
+        'Adieresis',      'Aring',          'AE',             'Ccedilla',
+        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
+        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
+        'Gbreve',         'Ntilde',         'Ograve',         'Oacute',
+        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
+        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
+        'Udieresis',      'Idotaccent',     'Scedilla',       'germandbls',
+        'agrave',         'aacute',         'acircumflex',    'atilde',
+        'adieresis',      'aring',          'ae',             'ccedilla',
+        'egrave',         'eacute',         'ecircumflex',    'edieresis',
+        'igrave',         'iacute',         'icircumflex',    'idieresis',
+        'gbreve',         'ntilde',         'ograve',         'oacute',
+        'ocircumflex',    'otilde',         'odieresis',      'divide',
+        'oslash',         'ugrave',         'uacute',         'ucircumflex',
+        'udieresis',      'dotlessi',       'scedilla',       'ydieresis'
+    ],
+# Hebrew
+    'cp1255' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        'Euro',           '.notdef',        'quotesinglbase', 'florin',
+        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
+        'circumflex',     'perthousand',    '.notdef',        'guilsinglleft',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
+        'quotedblright',  'bullet',         'endash',         'emdash',
+        'tilde',          'trademark',      '.notdef',        'guilsinglright',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclamdown',     'cent',           'sterling',
+        'afii57636',      'yen',            'brokenbar',      'section',
+        'dieresis',       'copyright',      'multiply',       'guillemotleft',
+        'logicalnot',     'sfthyphen',      'registered',     'macron',
+        'degree',         'plusminus',      'twosuperior',    'threesuperior',
+        'acute',          'mu',             'paragraph',      'middot',
+        'cedilla',        'onesuperior',    'divide',         'guillemotright',
+        'onequarter',     'onehalf',        'threequarters',  'questiondown',
+        'afii57799',      'afii57801',      'afii57800',      'afii57802',
+        'afii57793',      'afii57794',      'afii57795',      'afii57798',
+        'afii57797',      'afii57806',      '.notdef',        'afii57796',
+        'afii57807',      'afii57839',      'afii57645',      'afii57841',
+        'afii57842',      'afii57804',      'afii57803',      'afii57658',
+        'afii57716',      'afii57717',      'afii57718',      'gereshhebrew',
+        'gershayimhebrew','.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'afii57664',      'afii57665',      'afii57666',      'afii57667',
+        'afii57668',      'afii57669',      'afii57670',      'afii57671',
+        'afii57672',      'afii57673',      'afii57674',      'afii57675',
+        'afii57676',      'afii57677',      'afii57678',      'afii57679',
+        'afii57680',      'afii57681',      'afii57682',      'afii57683',
+        'afii57684',      'afii57685',      'afii57686',      'afii57687',
+        'afii57688',      'afii57689',      'afii57690',      '.notdef',
+        '.notdef',        'afii299',        'afii300',        '.notdef'
+    ],
+# Baltic
+    'cp1257' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        'Euro',           '.notdef',        'quotesinglbase', '.notdef',
+        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
+        '.notdef',        'perthousand',    '.notdef',        'guilsinglleft',
+        '.notdef',        'dieresis',       'caron',          'cedilla',
+        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
+        'quotedblright',  'bullet',         'endash',         'emdash',
+        '.notdef',        'trademark',      '.notdef',        'guilsinglright',
+        '.notdef',        'macron',         'ogonek',         '.notdef',
+        'space',          '.notdef',        'cent',           'sterling',
+        'currency',       '.notdef',        'brokenbar',      'section',
+        'Oslash',         'copyright',      'Rcommaaccent',   'guillemotleft',
+        'logicalnot',     'hyphen',         'registered',     'AE',
+        'degree',         'plusminus',      'twosuperior',    'threesuperior',
+        'acute',          'mu',             'paragraph',      'periodcentered',
+        'oslash',         'onesuperior',    'rcommaaccent',   'guillemotright',
+        'onequarter',     'onehalf',        'threequarters',  'ae',
+        'Aogonek',        'Iogonek',        'Amacron',        'Cacute',
+        'Adieresis',      'Aring',          'Eogonek',        'Emacron',
+        'Ccaron',         'Eacute',         'Zacute',         'Edotaccent',
+        'Gcommaaccent',   'Kcommaaccent',   'Imacron',        'Lcommaaccent',
+        'Scaron',         'Nacute',         'Ncommaaccent',   'Oacute',
+        'Omacron',        'Otilde',         'Odieresis',      'multiply',
+        'Uogonek',        'Lslash',         'Sacute',         'Umacron',
+        'Udieresis',      'Zdotaccent',     'Zcaron',         'germandbls',
+        'aogonek',        'iogonek',        'amacron',        'cacute',
+        'adieresis',      'aring',          'eogonek',        'emacron',
+        'ccaron',         'eacute',         'zacute',         'edotaccent',
+        'gcommaaccent',   'kcommaaccent',   'imacron',        'lcommaaccent',
+        'scaron',         'nacute',         'ncommaaccent',   'oacute',
+        'omacron',        'otilde',         'odieresis',      'divide',
+        'uogonek',        'lslash',         'sacute',         'umacron',
+        'udieresis',      'zdotaccent',     'zcaron',         'dotaccent'
+    ],
+# Vietnamese
+    'cp1258' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        'Euro',           '.notdef',        'quotesinglbase', 'florin',
+        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
+        'circumflex',     'perthousand',    '.notdef',        'guilsinglleft',
+        'OE',             '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
+        'quotedblright',  'bullet',         'endash',         'emdash',
+        'tilde',          'trademark',      '.notdef',        'guilsinglright',
+        'oe',             '.notdef',        '.notdef',        'Ydieresis',
+        'space',          'exclamdown',     'cent',           'sterling',
+        'currency',       'yen',            'brokenbar',      'section',
+        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
+        'logicalnot',     'hyphen',         'registered',     'macron',
+        'degree',         'plusminus',      'twosuperior',    'threesuperior',
+        'acute',          'mu',             'paragraph',      'periodcentered',
+        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
+        'onequarter',     'onehalf',        'threequarters',  'questiondown',
+        'Agrave',         'Aacute',         'Acircumflex',    'Abreve',
+        'Adieresis',      'Aring',          'AE',             'Ccedilla',
+        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
+        'gravecomb',      'Iacute',         'Icircumflex',    'Idieresis',
+        'Dcroat',         'Ntilde',         'hookabovecomb',  'Oacute',
+        'Ocircumflex',    'Ohorn',          'Odieresis',      'multiply',
+        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
+        'Udieresis',      'Uhorn',          'tildecomb',      'germandbls',
+        'agrave',         'aacute',         'acircumflex',    'abreve',
+        'adieresis',      'aring',          'ae',             'ccedilla',
+        'egrave',         'eacute',         'ecircumflex',    'edieresis',
+        'acutecomb',      'iacute',         'icircumflex',    'idieresis',
+        'dcroat',         'ntilde',         'dotbelowcomb',   'oacute',
+        'ocircumflex',    'ohorn',          'odieresis',      'divide',
+        'oslash',         'ugrave',         'uacute',         'ucircumflex',
+        'udieresis',      'uhorn',          'dong',           'ydieresis'
+    ],
+# Thai
+    'cp874' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        'Euro',           '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        'ellipsis',       '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
+        'quotedblright',  'bullet',         'endash',         'emdash',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'kokaithai',      'khokhaithai',    'khokhuatthai',
+        'khokhwaithai',   'khokhonthai',    'khorakhangthai', 'ngonguthai',
+        'chochanthai',    'chochingthai',   'chochangthai',   'sosothai',
+        'chochoethai',    'yoyingthai',     'dochadathai',    'topatakthai',
+        'thothanthai',    'thonangmonthothai', 'thophuthaothai', 'nonenthai',
+        'dodekthai',      'totaothai',      'thothungthai',   'thothahanthai',
+        'thothongthai',   'nonuthai',       'bobaimaithai',   'poplathai',
+        'phophungthai',   'fofathai',       'phophanthai',    'fofanthai',
+        'phosamphaothai', 'momathai',       'yoyakthai',      'roruathai',
+        'ruthai',         'lolingthai',     'luthai',         'wowaenthai',
+        'sosalathai',     'sorusithai',     'sosuathai',      'hohipthai',
+        'lochulathai',    'oangthai',       'honokhukthai',   'paiyannoithai',
+        'saraathai',      'maihanakatthai', 'saraaathai',     'saraamthai',
+        'saraithai',      'saraiithai',     'sarauethai',     'saraueethai',
+        'sarauthai',      'sarauuthai',     'phinthuthai',    '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        'bahtthai',
+        'saraethai',      'saraaethai',     'saraothai',      'saraaimaimuanthai',
+        'saraaimaimalaithai', 'lakkhangyaothai', 'maiyamokthai', 'maitaikhuthai',
+        'maiekthai',      'maithothai',     'maitrithai',     'maichattawathai',
+        'thanthakhatthai', 'nikhahitthai',  'yamakkanthai',   'fongmanthai',
+        'zerothai',       'onethai',        'twothai',        'threethai',
+        'fourthai',       'fivethai',       'sixthai',        'seventhai',
+        'eightthai',      'ninethai',       'angkhankhuthai', 'khomutthai',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef'
+    ],
+# Western Europe
+    'ISO-8859-1' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclamdown',     'cent',           'sterling',
+        'currency',       'yen',            'brokenbar',      'section',
+        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
+        'logicalnot',     'hyphen',         'registered',     'macron',
+        'degree',         'plusminus',      'twosuperior',    'threesuperior',
+        'acute',          'mu',             'paragraph',      'periodcentered',
+        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
+        'onequarter',     'onehalf',        'threequarters',  'questiondown',
+        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
+        'Adieresis',      'Aring',          'AE',             'Ccedilla',
+        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
+        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
+        'Eth',            'Ntilde',         'Ograve',         'Oacute',
+        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
+        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
+        'Udieresis',      'Yacute',         'Thorn',          'germandbls',
+        'agrave',         'aacute',         'acircumflex',    'atilde',
+        'adieresis',      'aring',          'ae',             'ccedilla',
+        'egrave',         'eacute',         'ecircumflex',    'edieresis',
+        'igrave',         'iacute',         'icircumflex',    'idieresis',
+        'eth',            'ntilde',         'ograve',         'oacute',
+        'ocircumflex',    'otilde',         'odieresis',      'divide',
+        'oslash',         'ugrave',         'uacute',         'ucircumflex',
+        'udieresis',      'yacute',         'thorn',          'ydieresis'
+    ],
+# Central Europe
+    'ISO-8859-2' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'Aogonek',        'breve',          'Lslash',
+        'currency',       'Lcaron',         'Sacute',         'section',
+        'dieresis',       'Scaron',         'Scedilla',       'Tcaron',
+        'Zacute',         'hyphen',         'Zcaron',         'Zdotaccent',
+        'degree',         'aogonek',        'ogonek',         'lslash',
+        'acute',          'lcaron',         'sacute',         'caron',
+        'cedilla',        'scaron',         'scedilla',       'tcaron',
+        'zacute',         'hungarumlaut',   'zcaron',         'zdotaccent',
+        'Racute',         'Aacute',         'Acircumflex',    'Abreve',
+        'Adieresis',      'Lacute',         'Cacute',         'Ccedilla',
+        'Ccaron',         'Eacute',         'Eogonek',        'Edieresis',
+        'Ecaron',         'Iacute',         'Icircumflex',    'Dcaron',
+        'Dcroat',         'Nacute',         'Ncaron',         'Oacute',
+        'Ocircumflex',    'Ohungarumlaut',  'Odieresis',      'multiply',
+        'Rcaron',         'Uring',          'Uacute',         'Uhungarumlaut',
+        'Udieresis',      'Yacute',         'Tcommaaccent',   'germandbls',
+        'racute',         'aacute',         'acircumflex',    'abreve',
+        'adieresis',      'lacute',         'cacute',         'ccedilla',
+        'ccaron',         'eacute',         'eogonek',        'edieresis',
+        'ecaron',         'iacute',         'icircumflex',    'dcaron',
+        'dcroat',         'nacute',         'ncaron',         'oacute',
+        'ocircumflex',    'ohungarumlaut',  'odieresis',      'divide',
+        'rcaron',         'uring',          'uacute',         'uhungarumlaut',
+        'udieresis',      'yacute',         'tcommaaccent',   'dotaccent'
+    ],
+# Baltic
+    'ISO-8859-4' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'Aogonek',        'kgreenlandic',   'Rcommaaccent',
+        'currency',       'Itilde',         'Lcommaaccent',   'section',
+        'dieresis',       'Scaron',         'Emacron',        'Gcommaaccent',
+        'Tbar',           'hyphen',         'Zcaron',         'macron',
+        'degree',         'aogonek',        'ogonek',         'rcommaaccent',
+        'acute',          'itilde',         'lcommaaccent',   'caron',
+        'cedilla',        'scaron',         'emacron',        'gcommaaccent',
+        'tbar',           'Eng',            'zcaron',         'eng',
+        'Amacron',        'Aacute',         'Acircumflex',    'Atilde',
+        'Adieresis',      'Aring',          'AE',             'Iogonek',
+        'Ccaron',         'Eacute',         'Eogonek',        'Edieresis',
+        'Edotaccent',     'Iacute',         'Icircumflex',    'Imacron',
+        'Dcroat',         'Ncommaaccent',   'Omacron',        'Kcommaaccent',
+        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
+        'Oslash',         'Uogonek',        'Uacute',         'Ucircumflex',
+        'Udieresis',      'Utilde',         'Umacron',        'germandbls',
+        'amacron',        'aacute',         'acircumflex',    'atilde',
+        'adieresis',      'aring',          'ae',             'iogonek',
+        'ccaron',         'eacute',         'eogonek',        'edieresis',
+        'edotaccent',     'iacute',         'icircumflex',    'imacron',
+        'dcroat',         'ncommaaccent',   'omacron',        'kcommaaccent',
+        'ocircumflex',    'otilde',         'odieresis',      'divide',
+        'oslash',         'uogonek',        'uacute',         'ucircumflex',
+        'udieresis',      'utilde',         'umacron',        'dotaccent'
+    ],
+# Cyrillic
+    'ISO-8859-5' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'afii10023',      'afii10051',      'afii10052',
+        'afii10053',      'afii10054',      'afii10055',      'afii10056',
+        'afii10057',      'afii10058',      'afii10059',      'afii10060',
+        'afii10061',      'hyphen',         'afii10062',      'afii10145',
+        'afii10017',      'afii10018',      'afii10019',      'afii10020',
+        'afii10021',      'afii10022',      'afii10024',      'afii10025',
+        'afii10026',      'afii10027',      'afii10028',      'afii10029',
+        'afii10030',      'afii10031',      'afii10032',      'afii10033',
+        'afii10034',      'afii10035',      'afii10036',      'afii10037',
+        'afii10038',      'afii10039',      'afii10040',      'afii10041',
+        'afii10042',      'afii10043',      'afii10044',      'afii10045',
+        'afii10046',      'afii10047',      'afii10048',      'afii10049',
+        'afii10065',      'afii10066',      'afii10067',      'afii10068',
+        'afii10069',      'afii10070',      'afii10072',      'afii10073',
+        'afii10074',      'afii10075',      'afii10076',      'afii10077',
+        'afii10078',      'afii10079',      'afii10080',      'afii10081',
+        'afii10082',      'afii10083',      'afii10084',      'afii10085',
+        'afii10086',      'afii10087',      'afii10088',      'afii10089',
+        'afii10090',      'afii10091',      'afii10092',      'afii10093',
+        'afii10094',      'afii10095',      'afii10096',      'afii10097',
+        'afii61352',      'afii10071',      'afii10099',      'afii10100',
+        'afii10101',      'afii10102',      'afii10103',      'afii10104',
+        'afii10105',      'afii10106',      'afii10107',      'afii10108',
+        'afii10109',      'section',        'afii10110',      'afii10193'
+    ],
+# Greek
+    'ISO-8859-7' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'quoteleft',      'quoteright',     'sterling',
+        '.notdef',        '.notdef',        'brokenbar',      'section',
+        'dieresis',       'copyright',      '.notdef',        'guillemotleft',
+        'logicalnot',     'hyphen',         '.notdef',        'afii00208',
+        'degree',         'plusminus',      'twosuperior',    'threesuperior',
+        'tonos',          'dieresistonos',  'Alphatonos',     'periodcentered',
+        'Epsilontonos',   'Etatonos',       'Iotatonos',      'guillemotright',
+        'Omicrontonos',   'onehalf',        'Upsilontonos',   'Omegatonos',
+        'iotadieresistonos','Alpha',          'Beta',           'Gamma',
+        'Delta',          'Epsilon',        'Zeta',           'Eta',
+        'Theta',          'Iota',           'Kappa',          'Lambda',
+        'Mu',             'Nu',             'Xi',             'Omicron',
+        'Pi',             'Rho',            '.notdef',        'Sigma',
+        'Tau',            'Upsilon',        'Phi',            'Chi',
+        'Psi',            'Omega',          'Iotadieresis',   'Upsilondieresis',
+        'alphatonos',     'epsilontonos',   'etatonos',       'iotatonos',
+        'upsilondieresistonos','alpha',          'beta',           'gamma',
+        'delta',          'epsilon',        'zeta',           'eta',
+        'theta',          'iota',           'kappa',          'lambda',
+        'mu',             'nu',             'xi',             'omicron',
+        'pi',             'rho',            'sigma1',         'sigma',
+        'tau',            'upsilon',        'phi',            'chi',
+        'psi',            'omega',          'iotadieresis',   'upsilondieresis',
+        'omicrontonos',   'upsilontonos',   'omegatonos',     '.notdef'
+    ],
+# Turkish
+    'ISO-8859-9' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclamdown',     'cent',           'sterling',
+        'currency',       'yen',            'brokenbar',      'section',
+        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
+        'logicalnot',     'hyphen',         'registered',     'macron',
+        'degree',         'plusminus',      'twosuperior',    'threesuperior',
+        'acute',          'mu',             'paragraph',      'periodcentered',
+        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
+        'onequarter',     'onehalf',        'threequarters',  'questiondown',
+        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
+        'Adieresis',      'Aring',          'AE',             'Ccedilla',
+        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
+        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
+        'Gbreve',         'Ntilde',         'Ograve',         'Oacute',
+        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
+        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
+        'Udieresis',      'Idotaccent',     'Scedilla',       'germandbls',
+        'agrave',         'aacute',         'acircumflex',    'atilde',
+        'adieresis',      'aring',          'ae',             'ccedilla',
+        'egrave',         'eacute',         'ecircumflex',    'edieresis',
+        'igrave',         'iacute',         'icircumflex',    'idieresis',
+        'gbreve',         'ntilde',         'ograve',         'oacute',
+        'ocircumflex',    'otilde',         'odieresis',      'divide',
+        'oslash',         'ugrave',         'uacute',         'ucircumflex',
+        'udieresis',      'dotlessi',       'scedilla',       'ydieresis'
+    ],
+# Thai
+    'ISO-8859-11' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'kokaithai',      'khokhaithai',    'khokhuatthai',
+        'khokhwaithai',   'khokhonthai',    'khorakhangthai', 'ngonguthai',
+        'chochanthai',    'chochingthai',   'chochangthai',   'sosothai',
+        'chochoethai',    'yoyingthai',     'dochadathai',    'topatakthai',
+        'thothanthai',    'thonangmonthothai','thophuthaothai', 'nonenthai',
+        'dodekthai',      'totaothai',      'thothungthai',   'thothahanthai',
+        'thothongthai',   'nonuthai',       'bobaimaithai',   'poplathai',
+        'phophungthai',   'fofathai',       'phophanthai',    'fofanthai',
+        'phosamphaothai', 'momathai',       'yoyakthai',      'roruathai',
+        'ruthai',         'lolingthai',     'luthai',         'wowaenthai',
+        'sosalathai',     'sorusithai',     'sosuathai',      'hohipthai',
+        'lochulathai',    'oangthai',       'honokhukthai',   'paiyannoithai',
+        'saraathai',      'maihanakatthai', 'saraaathai',     'saraamthai',
+        'saraithai',      'saraiithai',     'sarauethai',     'saraueethai',
+        'sarauthai',      'sarauuthai',     'phinthuthai',    '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        'bahtthai',
+        'saraethai',      'saraaethai',     'saraothai',      'saraaimaimuanthai',
+        'saraaimaimalaithai','lakkhangyaothai','maiyamokthai',   'maitaikhuthai',
+        'maiekthai',      'maithothai',     'maitrithai',     'maichattawathai',
+        'thanthakhatthai','nikhahitthai',   'yamakkanthai',   'fongmanthai',
+        'zerothai',       'onethai',        'twothai',        'threethai',
+        'fourthai',       'fivethai',       'sixthai',        'seventhai',
+        'eightthai',      'ninethai',       'angkhankhuthai', 'khomutthai',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef'
+    ],
+# Western Europe
+    'ISO-8859-15' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclamdown',     'cent',           'sterling',
+        'Euro',           'yen',            'Scaron',         'section',
+        'scaron',         'copyright',      'ordfeminine',    'guillemotleft',
+        'logicalnot',     'hyphen',         'registered',     'macron',
+        'degree',         'plusminus',      'twosuperior',    'threesuperior',
+        'Zcaron',         'mu',             'paragraph',      'periodcentered',
+        'zcaron',         'onesuperior',    'ordmasculine',   'guillemotright',
+        'OE',             'oe',             'Ydieresis',      'questiondown',
+        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
+        'Adieresis',      'Aring',          'AE',             'Ccedilla',
+        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
+        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
+        'Eth',            'Ntilde',         'Ograve',         'Oacute',
+        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
+        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
+        'Udieresis',      'Yacute',         'Thorn',          'germandbls',
+        'agrave',         'aacute',         'acircumflex',    'atilde',
+        'adieresis',      'aring',          'ae',             'ccedilla',
+        'egrave',         'eacute',         'ecircumflex',    'edieresis',
+        'igrave',         'iacute',         'icircumflex',    'idieresis',
+        'eth',            'ntilde',         'ograve',         'oacute',
+        'ocircumflex',    'otilde',         'odieresis',      'divide',
+        'oslash',         'ugrave',         'uacute',         'ucircumflex',
+        'udieresis',      'yacute',         'thorn',          'ydieresis'
+    ],
+# Central Europe
+    'ISO-8859-16' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'Aogonek',        'aogonek',        'Lslash',
+        'Euro',           'quotedblbase',   'Scaron',         'section',
+        'scaron',         'copyright',      'Scommaaccent',   'guillemotleft',
+        'Zacute',         'hyphen',         'zacute',         'Zdotaccent',
+        'degree',         'plusminus',      'Ccaron',         'lslash',
+        'Zcaron',         'quotedblright',  'paragraph',      'periodcentered',
+        'zcaron',         'ccaron',         'scommaaccent',   'guillemotright',
+        'OE',             'oe',             'Ydieresis',      'zdotaccent',
+        'Agrave',         'Aacute',         'Acircumflex',    'Abreve',
+        'Adieresis',      'Cacute',         'AE',             'Ccedilla',
+        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
+        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
+        'Dcroat',         'Nacute',         'Ograve',         'Oacute',
+        'Ocircumflex',    'Ohungarumlaut',  'Odieresis',      'Sacute',
+        'Uhungarumlaut',  'Ugrave',         'Uacute',         'Ucircumflex',
+        'Udieresis',      'Eogonek',        'Tcommaaccent',   'germandbls',
+        'agrave',         'aacute',         'acircumflex',    'abreve',
+        'adieresis',      'cacute',         'ae',             'ccedilla',
+        'egrave',         'eacute',         'ecircumflex',    'edieresis',
+        'igrave',         'iacute',         'icircumflex',    'idieresis',
+        'dcroat',         'nacute',         'ograve',         'oacute',
+        'ocircumflex',    'ohungarumlaut',  'odieresis',      'sacute',
+        'uhungarumlaut',  'ugrave',         'uacute',         'ucircumflex',
+        'udieresis',      'eogonek',        'tcommaaccent',   'ydieresis'
+    ],
+# Russian
+    'KOI8-R' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        'SF100000',       'SF110000',       'SF010000',       'SF030000',
+        'SF020000',       'SF040000',       'SF080000',       'SF090000',
+        'SF060000',       'SF070000',       'SF050000',       'upblock',
+        'dnblock',        'block',          'lfblock',        'rtblock',
+        'ltshade',        'shade',          'dkshade',        'integraltp',
+        'filledbox',      'periodcentered', 'radical',        'approxequal',
+        'lessequal',      'greaterequal',   'space',          'integralbt',
+        'degree',         'twosuperior',    'periodcentered', 'divide',
+        'SF430000',       'SF240000',       'SF510000',       'afii10071',
+        'SF520000',       'SF390000',       'SF220000',       'SF210000',
+        'SF250000',       'SF500000',       'SF490000',       'SF380000',
+        'SF280000',       'SF270000',       'SF260000',       'SF360000',
+        'SF370000',       'SF420000',       'SF190000',       'afii10023',
+        'SF200000',       'SF230000',       'SF470000',       'SF480000',
+        'SF410000',       'SF450000',       'SF460000',       'SF400000',
+        'SF540000',       'SF530000',       'SF440000',       'copyright',
+        'afii10096',      'afii10065',      'afii10066',      'afii10088',
+        'afii10069',      'afii10070',      'afii10086',      'afii10068',
+        'afii10087',      'afii10074',      'afii10075',      'afii10076',
+        'afii10077',      'afii10078',      'afii10079',      'afii10080',
+        'afii10081',      'afii10097',      'afii10082',      'afii10083',
+        'afii10084',      'afii10085',      'afii10072',      'afii10067',
+        'afii10094',      'afii10093',      'afii10073',      'afii10090',
+        'afii10095',      'afii10091',      'afii10089',      'afii10092',
+        'afii10048',      'afii10017',      'afii10018',      'afii10040',
+        'afii10021',      'afii10022',      'afii10038',      'afii10020',
+        'afii10039',      'afii10026',      'afii10027',      'afii10028',
+        'afii10029',      'afii10030',      'afii10031',      'afii10032',
+        'afii10033',      'afii10049',      'afii10034',      'afii10035',
+        'afii10036',      'afii10037',      'afii10024',      'afii10019',
+        'afii10046',      'afii10045',      'afii10025',      'afii10042',
+        'afii10047',      'afii10043',      'afii10041',      'afii10044'
+    ],
+# Ukrainian
+    'KOI8-U' => [
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        '.notdef',        '.notdef',        '.notdef',        '.notdef',
+        'space',          'exclam',         'quotedbl',       'numbersign',
+        'dollar',         'percent',        'ampersand',      'quotesingle',
+        'parenleft',      'parenright',     'asterisk',       'plus',
+        'comma',          'hyphen',         'period',         'slash',
+        'zero',           'one',            'two',            'three',
+        'four',           'five',           'six',            'seven',
+        'eight',          'nine',           'colon',          'semicolon',
+        'less',           'equal',          'greater',        'question',
+        'at',             'A',              'B',              'C',
+        'D',              'E',              'F',              'G',
+        'H',              'I',              'J',              'K',
+        'L',              'M',              'N',              'O',
+        'P',              'Q',              'R',              'S',
+        'T',              'U',              'V',              'W',
+        'X',              'Y',              'Z',              'bracketleft',
+        'backslash',      'bracketright',   'asciicircum',    'underscore',
+        'grave',          'a',              'b',              'c',
+        'd',              'e',              'f',              'g',
+        'h',              'i',              'j',              'k',
+        'l',              'm',              'n',              'o',
+        'p',              'q',              'r',              's',
+        't',              'u',              'v',              'w',
+        'x',              'y',              'z',              'braceleft',
+        'bar',            'braceright',     'asciitilde',     '.notdef',
+        'SF100000',       'SF110000',       'SF010000',       'SF030000',
+        'SF020000',       'SF040000',       'SF080000',       'SF090000',
+        'SF060000',       'SF070000',       'SF050000',       'upblock',
+        'dnblock',        'block',          'lfblock',        'rtblock',
+        'ltshade',        'shade',          'dkshade',        'integraltp',
+        'filledbox',      'bullet',         'radical',        'approxequal',
+        'lessequal',      'greaterequal',   'space',          'integralbt',
+        'degree',         'twosuperior',    'periodcentered', 'divide',
+        'SF430000',       'SF240000',       'SF510000',       'afii10071',
+        'afii10101',      'SF390000',       'afii10103',      'afii10104',
+        'SF250000',       'SF500000',       'SF490000',       'SF380000',
+        'SF280000',       'afii10098',      'SF260000',       'SF360000',
+        'SF370000',       'SF420000',       'SF190000',       'afii10023',
+        'afii10053',      'SF230000',       'afii10055',      'afii10056',
+        'SF410000',       'SF450000',       'SF460000',       'SF400000',
+        'SF540000',       'afii10050',      'SF440000',       'copyright',
+        'afii10096',      'afii10065',      'afii10066',      'afii10088',
+        'afii10069',      'afii10070',      'afii10086',      'afii10068',
+        'afii10087',      'afii10074',      'afii10075',      'afii10076',
+        'afii10077',      'afii10078',      'afii10079',      'afii10080',
+        'afii10081',      'afii10097',      'afii10082',      'afii10083',
+        'afii10084',      'afii10085',      'afii10072',      'afii10067',
+        'afii10094',      'afii10093',      'afii10073',      'afii10090',
+        'afii10095',      'afii10091',      'afii10089',      'afii10092',
+        'afii10048',      'afii10017',      'afii10018',      'afii10040',
+        'afii10021',      'afii10022',      'afii10038',      'afii10020',
+        'afii10039',      'afii10026',      'afii10027',      'afii10028',
+        'afii10029',      'afii10030',      'afii10031',      'afii10032',
+        'afii10033',      'afii10049',      'afii10034',      'afii10035',
+        'afii10036',      'afii10037',      'afii10024',      'afii10019',
+        'afii10046',      'afii10045',      'afii10025',      'afii10042',
+        'afii10047',      'afii10043',      'afii10041',      'afii10044'
+    ]
+}
+
+def ReadAFM(file, map)
+
+    # Read a font metric file
+    a = IO.readlines(file)
+
+    raise "File no found: #{file}" if a.size == 0
+
+    widths = {}
+    fm = {}
+    fix = { 'Edot' => 'Edotaccent', 'edot' => 'edotaccent',
+            'Idot' => 'Idotaccent',
+            'Zdot' => 'Zdotaccent', 'zdot' => 'zdotaccent',
+            'Odblacute' => 'Ohungarumlaut', 'odblacute' => 'ohungarumlaut',
+            'Udblacute' => 'Uhungarumlaut', 'udblacute' => 'uhungarumlaut',
+            'Gcedilla' => 'Gcommaaccent', 'gcedilla' => 'gcommaaccent',
+            'Kcedilla' => 'Kcommaaccent', 'kcedilla' => 'kcommaaccent',
+            'Lcedilla' => 'Lcommaaccent', 'lcedilla' => 'lcommaaccent',
+            'Ncedilla' => 'Ncommaaccent', 'ncedilla' => 'ncommaaccent',
+            'Rcedilla' => 'Rcommaaccent', 'rcedilla' => 'rcommaaccent',
+            'Scedilla' => 'Scommaaccent',' scedilla' => 'scommaaccent',
+            'Tcedilla' => 'Tcommaaccent',' tcedilla' => 'tcommaaccent',
+            'Dslash' => 'Dcroat', 'dslash' => 'dcroat',
+            'Dmacron' => 'Dcroat', 'dmacron' => 'dcroat',
+            'combininggraveaccent' => 'gravecomb',
+            'combininghookabove' => 'hookabovecomb',
+            'combiningtildeaccent' => 'tildecomb',
+            'combiningacuteaccent' => 'acutecomb',
+            'combiningdotbelow' => 'dotbelowcomb',
+            'dongsign' => 'dong'
+        }
+
+    a.each do |line|
+
+        e = line.rstrip.split(' ')
+	next if e.size < 2
+
+	code  = e[0]
+	param = e[1]
+
+	if code == 'C' then
+
+	    # Character metrics
+	    cc = e[1].to_i
+	    w  = e[4]
+	    gn = e[7]
+
+	    gn = 'Euro' if gn[-4, 4] == '20AC'
+
+	    if fix[gn] then
+
+		# Fix incorrect glyph name
+		0.upto(map.size - 1) do |i|
+		    if map[i] == fix[gn] then
+			map[i] = gn
+		    end
+		end
+	    end
+
+	    if map.size == 0 then
+		# Symbolic font: use built-in encoding
+		widths[cc] = w
+	    else
+		widths[gn] = w
+		fm['CapXHeight'] = e[13].to_i if gn == 'X'
+	    end
+
+	    fm['MissingWidth'] = w if gn == '.notdef'
+
+	elsif code == 'FontName' then
+	    fm['FontName'] = param
+	elsif code == 'Weight' then
+	    fm['Weight'] = param
+	elsif code == 'ItalicAngle' then
+	    fm['ItalicAngle'] = param.to_f
+	elsif code == 'Ascender' then
+	    fm['Ascender'] = param.to_i
+	elsif code == 'Descender' then
+	    fm['Descender'] = param.to_i
+	elsif code == 'UnderlineThickness' then
+	    fm['UnderlineThickness'] = param.to_i
+	elsif code == 'UnderlinePosition' then
+	    fm['UnderlinePosition'] = param.to_i
+	elsif code == 'IsFixedPitch' then
+	    fm['IsFixedPitch'] = (param == 'true')
+	elsif code == 'FontBBox' then
+	    fm['FontBBox'] = "[#{e[1]},#{e[2]},#{e[3]},#{e[4]}]"
+	elsif code == 'CapHeight' then
+	    fm['CapHeight'] = param.to_i
+	elsif code == 'StdVW' then
+	    fm['StdVW'] = param.to_i
+	end
+    end
+
+    raise 'FontName not found' unless fm['FontName']
+
+    if map.size > 0 then
+	widths['.notdef'] = 600 unless widths['.notdef']
+
+	if (widths['Delta'] == nil) && widths['increment'] then
+	    widths['Delta'] = widths['increment']
+	end
+
+	# Order widths according to map
+	0.upto(255) do |i|
+	    if widths[map[i]] == nil
+		puts "Warning: character #{map[i]} is missing"
+		widths[i] = widths['.notdef']
+	    else
+		widths[i] = widths[map[i]]
+	    end
+	end
+    end
+
+    fm['Widths'] = widths
+
+    return fm
+end
+
+def MakeFontDescriptor(fm, symbolic)
+
+    # Ascent
+    asc = fm['Ascender'] ? fm['Ascender'] : 1000
+    fd = "{\n        'Ascent' => '#{asc}'"
+
+    # Descent
+    desc = fm['Descender'] ? fm['Descender'] : -200
+    fd += ", 'Descent' => '#{desc}'"
+
+    # CapHeight
+    if fm['CapHeight'] then
+        ch = fm['CapHeight']
+    elsif fm['CapXHeight']
+        ch = fm['CapXHeight']
+    else
+        ch = asc
+    end
+    fd += ", 'CapHeight' => '#{ch}'"
+
+    # Flags
+    flags = 0
+
+    if fm['IsFixedPitch'] then
+        flags += 1 << 0
+    end
+
+    if symbolic then
+        flags += 1 << 2
+    else
+        flags += 1 << 5
+    end
+
+    if fm['ItalicAngle'] && (fm['ItalicAngle'] != 0) then
+        flags += 1 << 6
+    end
+
+    fd += ",\n        'Flags' => '#{flags}'"
+
+    # FontBBox
+    if fm['FontBBox'] then
+        fbb = fm['FontBBox'].gsub(/,/, ' ')
+    else
+        fbb = "[0 #{desc - 100} 1000 #{asc + 100}]"
+    end
+
+    fd += ", 'FontBBox' => '#{fbb}'"
+
+    # ItalicAngle
+    ia = fm['ItalicAngle'] ? fm['ItalicAngle'] : 0
+    fd += ",\n        'ItalicAngle' => '#{ia}'"
+
+    # StemV
+    if fm['StdVW'] then
+        stemv = fm['StdVW']
+    elsif fm['Weight'] && (/bold|black/i =~ fm['Weight'])
+        stemv = 120
+    else
+        stemv = 70
+    end
+
+    fd += ", 'StemV' => '#{stemv}'"
+
+    # MissingWidth
+    if fm['MissingWidth'] then
+        fd += ", 'MissingWidth' => '#{fm['MissingWidth']}'"
+    end
+
+    fd += "\n        }"
+    return fd
+end
+
+def MakeWidthArray(fm)
+
+    # Make character width array
+    s = "        [\n        "
+
+    cw = fm['Widths']
+
+    0.upto(255) do |i|
+        s += "%5d" % cw[i]
+        s += "," if i != 255
+        s += "\n        " if (i % 8) == 7
+    end
+
+    s += ']'
+
+    return s
+end
+
+def MakeFontEncoding(map)
+
+    # Build differences from reference encoding
+    ref = Charencodings['cp1252']
+    s = ''
+    last = 0
+    32.upto(255) do |i|
+	if map[i] != ref[i] then
+	    if i != last + 1 then
+		s += i.to_s + ' '
+            end
+	    last = i
+	    s += '/' + map[i] + ' '
+	end
+    end
+    return s.rstrip
+end
+
+def ReadShort(f)
+    a = f.read(2).unpack('n')
+    return a[0]
+end
+
+def ReadLong(f)
+    a = f.read(4).unpack('N')
+    return a[0]
+end
+
+def CheckTTF(file)
+
+    rl = false
+    pp = false
+    e  = false
+
+    # Check if font license allows embedding
+    File.open(file, 'rb') do |f|
+
+        # Extract number of tables
+        f.seek(4, IO::SEEK_CUR)
+	nb = ReadShort(f)
+        f.seek(6, IO::SEEK_CUR)
+
+        # Seek OS/2 table
+	found = false
+        0.upto(nb - 1) do |i|
+            if f.read(4) == 'OS/2' then
+                found = true
+                break
+            end
+
+           f.seek(12, IO::SEEK_CUR)
+        end
+
+	if ! found then
+            return
+        end
+
+        f.seek(4, IO::SEEK_CUR)
+        offset = ReadLong(f)
+        f.seek(offset, IO::SEEK_SET)
+
+        # Extract fsType flags
+        f.seek(8, IO::SEEK_CUR)
+	fsType = ReadShort(f)
+
+	rl = (fsType & 0x02) != 0
+	pp = (fsType & 0x04) != 0
+	e  = (fsType & 0x08) != 0
+    end
+
+    if rl && ( ! pp) && ( ! e) then
+        puts 'Warning: font license does not allow embedding'
+    end
+end
+
+#
+# fontfile: path to TTF file (or empty string if not to be embedded)
+# afmfile:  path to AFM file
+# enc:      font encoding (or empty string for symbolic fonts)
+# patch:    optional patch for encoding
+# type :    font type if $fontfile is empty
+#
+def MakeFont(fontfile, afmfile, enc = 'cp1252', patch = {}, type = 'TrueType')
+    # Generate a font definition file
+    if (enc != nil) && (enc != '') then
+	map = Charencodings[enc]
+	patch.each { |cc, gn| map[cc] = gn }
+    else
+	map = []
+    end
+
+    raise "Error: AFM file not found: #{afmfile}" unless File.exists?(afmfile)
+
+    fm = ReadAFM(afmfile, map)
+
+    if (enc != nil) && (enc != '') then
+	diff = MakeFontEncoding(map)
+    else
+	diff = ''
+    end
+
+    fd = MakeFontDescriptor(fm, (map.size == 0))
+
+    # Find font type
+    if fontfile then
+        ext = File.extname(fontfile).downcase.sub(/^\./, '')
+
+        if ext == 'ttf' then
+            type = 'TrueType'
+        elsif ext == 'pfb'
+            type = 'Type1'
+        else
+            raise "Error: unrecognized font file extension: #{ext}"
+        end
+    else
+	    raise "Error: incorrect font type: #{type}" if (type != 'TrueType') && (type != 'Type1')
+    end
+    printf "type = #{type}\n"
+    # Start generation
+    s  = "# #{fm['FontName']} font definition\n\n"
+    s += "module FontDef\n"
+    s += "    def FontDef.type\n        '#{type}'\n    end\n"
+    s += "    def FontDef.name\n        '#{fm['FontName']}'\n    end\n"
+    s += "    def FontDef.desc\n        #{fd}\n    end\n"
+
+    if fm['UnderlinePosition'] == nil then
+        fm['UnderlinePosition'] = -100
+    end
+
+    if fm['UnderlineThickness'] == nil then
+        fm['UnderlineThickness'] = 50
+    end
+
+    s += "    def FontDef.up\n        #{fm['UnderlinePosition']}\n    end\n"
+    s += "    def FontDef.ut\n        #{fm['UnderlineThickness']}\n    end\n"
+
+    w = MakeWidthArray(fm)
+    s += "    def FontDef.cw\n#{w}\n    end\n"
+
+    s += "    def FontDef.enc\n        '#{enc}'\n    end\n"
+    s += "    def FontDef.diff\n        #{(diff == nil) || (diff == '') ? 'nil' : '\'' + diff '\''}\n    end\n"
+
+    basename = File.basename(afmfile, '.*')
+
+    if fontfile then
+        # Embedded font
+        if ! File.exist?(fontfile) then
+            raise "Error: font file not found: #{fontfile}"
+        end
+
+        if type == 'TrueType' then
+            CheckTTF(fontfile)
+        end
+
+	file = ''
+        File.open(fontfile, 'rb') do |f|
+            file = f.read()
+        end
+
+        if type == 'Type1' then
+            # Find first two sections and discard third one
+            header = file[0] == 128
+            file = file[6, file.length - 6] if header
+
+            pos = file.index('eexec')
+            raise 'Error: font file does not seem to be valid Type1' if pos == nil
+
+            size1 = pos + 6
+
+            file = file[0, size1] + file[size1 + 6, file.length - (size1 + 6)] if header && file[size1] == 128
+
+            pos = file.index('00000000')
+            raise 'Error: font file does not seem to be valid Type1' if pos == nil
+
+            size2 = pos - size1
+            file = file[0, size1 + size2]
+        end
+
+        if require 'zlib' then
+            File.open(basename + '.z', 'wb') { |f| f.write(Zlib::Deflate.deflate(file)) }
+            s += "    def FontDef.file\n        '#{basename}.z'\n    end\n"
+            puts "Font file compressed ('#{basename}.z')"
+        else
+            s += "    def FontDef.file\n        '#{File.basename(fontfile)}'\n    end\n"
+            puts 'Notice: font file could not be compressed (zlib not available)'
+        end
+
+        if type == 'Type1' then
+            s += "    def FontDef.size1\n        '#{size1}'\n    end\n"
+            s += "    def FontDef.size2\n        '#{size2}'\n    end\n"
+        else
+            s += "    def FontDef.originalsize\n        '#{File.size(fontfile)}'\n    end\n"
+        end
+
+    else
+        # Not embedded font
+        s += "    def FontDef.file\n        ''\n    end\n"
+    end
+
+    s += "end\n"
+    File.open(basename + '.rb', 'w') { |file| file.write(s)}
+    puts "Font definition file generated (#{basename}.rb)"
+end
+
+
+if $0 == __FILE__ then
+    if ARGV.length >= 3 then
+        enc = ARGV[2]
+    else
+        enc = 'cp1252'
+    end
+
+    if ARGV.length >= 4 then
+        patch = ARGV[3]
+    else
+        patch = {}
+    end
+
+    if ARGV.length >= 5 then
+        type = ARGV[4]
+    else
+        type = 'TrueType'
+    end
+
+    MakeFont(ARGV[0], ARGV[1], enc, patch, type)
+end
--- a/vendor/plugins/rfpdf/lib/rfpdf.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/lib/rfpdf.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -20,12 +20,21 @@
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 # THE SOFTWARE.
 
-$LOAD_PATH.unshift(File.dirname(__FILE__))
+require 'action_controller'
+require 'action_view'
 
-require 'rfpdf/errors'
-require 'rfpdf/view'
-require 'rfpdf/fpdf'
-require 'rfpdf/rfpdf'
-require 'rfpdf/chinese'
-require 'rfpdf/japanese'
-require 'rfpdf/korean'
+require 'rfpdf/action_controller'
+require 'rfpdf/action_view'
+
+require 'rfpdf/template_handler/compile_support'
+
+require 'rfpdf/template_handlers/base'
+
+
+class ActionController::Base
+  include RFPDF::ActionController
+end
+
+class ActionView::Base
+  include RFPDF::ActionView
+end
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/all-wcprops	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/lib/rfpdf/.svn/all-wcprops	Mon Jun 06 14:41:04 2011 +0100
@@ -1,65 +1,35 @@
 K 25
 svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4602/trunk/vendor/plugins/rfpdf/lib/rfpdf
-END
-chinese.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/1497/trunk/vendor/plugins/rfpdf/lib/rfpdf/chinese.rb
+V 69
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf
 END
 fpdf.rb
 K 25
 svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4602/trunk/vendor/plugins/rfpdf/lib/rfpdf/fpdf.rb
+V 77
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf/fpdf.rb
 END
-korean.rb
+action_controller.rb
 K 25
 svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/3389/trunk/vendor/plugins/rfpdf/lib/rfpdf/korean.rb
+V 90
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf/action_controller.rb
 END
-rfpdf.rb
+action_view.rb
 K 25
 svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/lib/rfpdf/rfpdf.rb
+V 84
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf/action_view.rb
 END
-makefont.rb
+math.rb
 K 25
 svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/248/trunk/vendor/plugins/rfpdf/lib/rfpdf/makefont.rb
-END
-bookmark.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/lib/rfpdf/bookmark.rb
-END
-fpdf_eps.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/lib/rfpdf/fpdf_eps.rb
-END
-japanese.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/287/trunk/vendor/plugins/rfpdf/lib/rfpdf/japanese.rb
-END
-view.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/1623/trunk/vendor/plugins/rfpdf/lib/rfpdf/view.rb
+V 77
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf/math.rb
 END
 errors.rb
 K 25
 svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/lib/rfpdf/errors.rb
+V 79
+/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf/errors.rb
 END
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/lib/rfpdf/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,15 +1,15 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/lib/rfpdf
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-01T11:45:12.617336Z
-4602
-jplang
+2011-04-29T05:35:26.392715Z
+5565
+tmaruyama
 
 
 
@@ -26,51 +26,17 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
-chinese.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-ddaf6868455af432aac221e53aadc10a
-2008-06-07T08:39:06.277997Z
-1497
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-12854
-
 fpdf.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
-a2f702c9c8177f01521aa9eb5d6f9313
-2011-01-01T11:45:12.617336Z
-4602
-jplang
+2011-06-06T13:20:51.000000Z
+7544c2319f2234d41bfd3a3c5890a365
+2011-04-29T05:35:26.392715Z
+5565
+tmaruyama
 
 
 
@@ -92,19 +58,19 @@
 
 
 
-59677
+62355
 
-korean.rb
+action_controller.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
-61d6e8e3bc2a549b1adf12c8e5148019
-2010-02-07T12:30:44.486359Z
-3389
-jplang
+2011-06-06T13:20:51.000000Z
+6f2929ce34df39ce61169beb62a82880
+2011-03-30T03:23:54.585875Z
+5247
+tmaruyama
 
 
 
@@ -126,19 +92,22 @@
 
 
 
-11383
+856
 
-rfpdf.rb
+template_handler
+dir
+
+action_view.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
-f504607d615e4d100eb506daf3dfe038
-2006-11-21T18:34:04.275680Z
-49
-jplang
+2011-06-06T13:20:51.000000Z
+a943c8232b59f2fc8d62ad61547e69c3
+2011-03-30T03:23:54.585875Z
+5247
+tmaruyama
 
 
 
@@ -160,19 +129,22 @@
 
 
 
-12035
+238
 
-makefont.rb
+template_handlers
+dir
+
+math.rb
 file
 
 
 
 
-2011-03-03T11:05:12.000000Z
-267f469d753d389beda7bb8d39ef5e79
-2007-02-18T10:33:22.252239Z
-248
-jplang
+2011-06-06T13:20:51.000000Z
+486d11ccf745b8acc2fed390c864156c
+2011-03-30T03:23:54.585875Z
+5247
+tmaruyama
 
 
 
@@ -194,143 +166,7 @@
 
 
 
-105223
-
-bookmark.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-8b971319c65229a7075520cf5ce0fb84
-2006-11-21T18:34:04.275680Z
-49
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2765
-
-fpdf_eps.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-c11f99560b9b2e12cf9c679f8ef11c37
-2006-11-21T18:34:04.275680Z
-49
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4369
-
-japanese.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-48cd43d67257151aebb2e0aeee6f4cbf
-2007-03-01T19:49:04.518842Z
-287
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-11330
-
-view.rb
-file
-
-
-
-
-2011-03-03T11:05:12.000000Z
-9bdec08cb98e4413cfb9c39877f3734d
-2008-07-04T17:58:14.743502Z
-1623
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3153
+2461
 
 errors.rb
 file
@@ -338,11 +174,11 @@
 
 
 
-2011-03-03T11:05:12.000000Z
-e759935ac5ac9027073e9a2f3543b231
-2006-11-21T18:34:04.275680Z
-49
-jplang
+2011-06-06T13:20:51.000000Z
+dcdfd96eee7cdf09d81118ab447b70ff
+2011-03-30T03:23:54.585875Z
+5247
+tmaruyama
 
 
 
@@ -364,5 +200,5 @@
 
 
 
-71
+97
 
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/bookmark.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-# Translation of the bookmark class from the PHP FPDF script from Olivier Plathey
-# Translated by Sylvain Lafleur and ?? with the help of Brian Ollenberger
-#
-# First added in 1.53b
-#
-# Usage is as follows:
-#
-# require 'fpdf'
-# require 'bookmark'
-# pdf = FPDF.new
-# pdf.extend(PDF_Bookmark)
-#
-# This allows it to be combined with other extensions, such as the Chinese
-# module.
-
-module PDF_Bookmark
-    def PDF_Bookmark.extend_object(o)
-        o.instance_eval('@outlines,@OutlineRoot=[],0')
-        super(o)
-    end
-
-    def Bookmark(txt,level=0,y=0)
-        y=self.GetY() if y==-1
-        @outlines.push({'t'=>txt,'l'=>level,'y'=>y,'p'=>self.PageNo()})
-    end
-
-    def putbookmarks
-        @nb=@outlines.size
-        return if @nb==0
-        lru=[]
-        level=0
-        @outlines.each_index do |i|
-            o=@outlines[i]
-            if o['l']>0
-                parent=lru[o['l']-1]
-                # Set parent and last pointers
-                @outlines[i]['parent']=parent
-                @outlines[parent]['last']=i
-                if o['l']>level
-                    # Level increasing: set first pointer
-                    @outlines[parent]['first']=i
-                end
-            else
-                @outlines[i]['parent']=@nb
-            end
-            if o['l']<=level and i>0
-                # Set prev and next pointers
-                prev=lru[o['l']]
-                @outlines[prev]['next']=i
-                @outlines[i]['prev']=prev
-            end
-            lru[o['l']]=i
-            level=o['l']
-        end
-        # Outline items
-        n=@n+1
-        @outlines.each_index do |i|
-            o=@outlines[i]
-            newobj
-            out('<</Title '+(textstring(o['t'])))
-            out('/Parent '+(n+o['parent']).to_s+' 0 R')
-            if o['prev']
-                out('/Prev '+(n+o['prev']).to_s+' 0 R')
-            end
-            if o['next']
-                out('/Next '+(n+o['next']).to_s+' 0 R')
-            end
-            if o['first']
-                out('/First '+(n+o['first']).to_s+' 0 R')
-            end
-            if o['last']
-                out('/Last '+(n+o['last']).to_s+' 0 R')
-            end
-            out(sprintf('/Dest [%d 0 R /XYZ 0 %.2f
-null]',1+2*o['p'],(@h-o['y'])*@k))
-            out('/Count 0>>')
-            out('endobj')
-        end
-        # Outline root
-        newobj
-        @OutlineRoot=@n
-        out('<</Type /Outlines /First '+n.to_s+' 0 R')
-           out('/Last '+(n+lru[0]).to_s+' 0 R>>')
-           out('endobj')
-    end
-
-    def putresources
-        super
-        putbookmarks
-    end
-
-    def putcatalog
-        super
-        if not @outlines.empty?
-            out('/Outlines '+@OutlineRoot.to_s+' 0 R')
-            out('/PageMode /UseOutlines')
-        end
-    end
-end
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/chinese.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,473 +0,0 @@
-# Copyright (c) 2006 4ssoM LLC <www.4ssoM.com>
-# 1.12 contributed by Ed Moss.
-#
-# The MIT License
-#
-# 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.
-#
-# This is direct port of chinese.php
-#
-# Chinese PDF support.
-#
-# Usage is as follows:
-#
-# require 'fpdf'
-# require 'chinese'
-# pdf = FPDF.new
-# pdf.extend(PDF_Chinese)
-#
-# This allows it to be combined with other extensions, such as the bookmark
-# module.
-
-module PDF_Chinese
-
-  Big5_widths={' '=>250,'!'=>250,'"'=>408,'#'=>668,''=>490,'%'=>875,'&'=>698,'\''=>250,
-  	'('=>240,')'=>240,'*'=>417,'+'=>667,','=>250,'-'=>313,'.'=>250,'/'=>520,'0'=>500,'1'=>500,
-  	'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>250,''=>250,
-  	'<'=>667,'='=>667,'>'=>667,'?'=>396,'@'=>921,'A'=>677,'B'=>615,'C'=>719,'D'=>760,'E'=>625,
-  	'F'=>552,'G'=>771,'H'=>802,'I'=>354,'J'=>354,'K'=>781,'L'=>604,'M'=>927,'N'=>750,'O'=>823,
-  	'P'=>563,'Q'=>823,'R'=>729,'S'=>542,'T'=>698,'U'=>771,'V'=>729,'W'=>948,'X'=>771,'Y'=>677,
-  	'Z'=>635,'['=>344,'\\'=>520,']'=>344,'^'=>469,'_'=>500,'`'=>250,'a'=>469,'b'=>521,'c'=>427,
-  	'd'=>521,'e'=>438,'f'=>271,'g'=>469,'h'=>531,'i'=>250,'j'=>250,'k'=>458,'l'=>240,'m'=>802,
-  	'n'=>531,'o'=>500,'p'=>521,'q'=>521,'r'=>365,'s'=>333,'t'=>292,'u'=>521,'v'=>458,'w'=>677,
-  	'x'=>479,'y'=>458,'z'=>427,'{'=>480,'|'=>496,'end'=>480,'~'=>667}
-
-  GB_widths={' '=>207,'!'=>270,'"'=>342,'#'=>467,''=>462,'%'=>797,'&'=>710,'\''=>239,
-  	'('=>374,')'=>374,'*'=>423,'+'=>605,','=>238,'-'=>375,'.'=>238,'/'=>334,'0'=>462,'1'=>462,
-  	'2'=>462,'3'=>462,'4'=>462,'5'=>462,'6'=>462,'7'=>462,'8'=>462,'9'=>462,':'=>238,''=>238,
-  	'<'=>605,'='=>605,'>'=>605,'?'=>344,'@'=>748,'A'=>684,'B'=>560,'C'=>695,'D'=>739,'E'=>563,
-  	'F'=>511,'G'=>729,'H'=>793,'I'=>318,'J'=>312,'K'=>666,'L'=>526,'M'=>896,'N'=>758,'O'=>772,
-  	'P'=>544,'Q'=>772,'R'=>628,'S'=>465,'T'=>607,'U'=>753,'V'=>711,'W'=>972,'X'=>647,'Y'=>620,
-  	'Z'=>607,'['=>374,'\\'=>333,']'=>374,'^'=>606,'_'=>500,'`'=>239,'a'=>417,'b'=>503,'c'=>427,
-  	'd'=>529,'e'=>415,'f'=>264,'g'=>444,'h'=>518,'i'=>241,'j'=>230,'k'=>495,'l'=>228,'m'=>793,
-  	'n'=>527,'o'=>524,'p'=>524,'q'=>504,'r'=>338,'s'=>336,'t'=>277,'u'=>517,'v'=>450,'w'=>652,
-  	'x'=>466,'y'=>452,'z'=>407,'{'=>370,'|'=>258,'end'=>370,'~'=>605}
-
-  def AddCIDFont(family,style,name,cw,cMap,registry)
-#ActionController::Base::logger.debug registry.to_a.join(":").to_s
-  	fontkey=family.downcase+style.upcase
-  	unless @fonts[fontkey].nil?
-  		Error("Font already added: family style")
-		end
-  	i=@fonts.length+1
-  	name=name.gsub(' ','')
-    @fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-130,'ut'=>40,'cw'=>cw, 'CMap'=>cMap,'registry'=>registry}
-  end
-
-  def AddCIDFonts(family,name,cw,cMap,registry)
-  	AddCIDFont(family,'',name,cw,cMap,registry)
-  	AddCIDFont(family,'B',name+',Bold',cw,cMap,registry)
-  	AddCIDFont(family,'I',name+',Italic',cw,cMap,registry)
-  	AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry)
-  end
-
-  def AddBig5Font(family='Big5',name='MSungStd-Light-Acro')
-  	#Add Big5 font with proportional Latin
-  	cw=Big5_widths
-  	cMap='ETenms-B5-H'
-  	registry={'ordering'=>'CNS1','supplement'=>0}
-#ActionController::Base::logger.debug registry.to_a.join(":").to_s
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def AddBig5hwFont(family='Big5-hw',name='MSungStd-Light-Acro')
-  	#Add Big5 font with half-witdh Latin
-    cw = {}
-    32.upto(126) do |i|
-  		cw[i.chr]=500
-		end
-  	cMap='ETen-B5-H'
-  	registry={'ordering'=>'CNS1','supplement'=>0}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def AddGBFont(family='GB',name='STSongStd-Light-Acro')
-  	#Add GB font with proportional Latin
-  	cw=GB_widths
-  	cMap='GBKp-EUC-H'
-  	registry={'ordering'=>'GB1','supplement'=>2}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def AddGBhwFont(family='GB-hw',name='STSongStd-Light-Acro')
-  	#Add GB font with half-width Latin
-    32.upto(126) do |i|
-  		cw[i.chr]=500
-		end
-  	cMap='GBK-EUC-H'
-  	registry={'ordering'=>'GB1','supplement'=>2}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def GetStringWidth(s)
-  	if(@CurrentFont['type']=='Type0')
-  		return GetMBStringWidth(s)
-  	else
-  		return super(s)
-		end
-  end
-
-  def GetMBStringWidth(s)
-  	#Multi-byte version of GetStringWidth()
-  	l=0
-  	cw=@CurrentFont['cw']
-  	nb=s.length
-  	i=0
-  	while(i<nb)
-  		c=s[i]
-  		if(c<128)
-  			l+=cw[c.chr] if cw[c.chr]
-  			i+=1
-  		else
-  			l+=1000
-  			i+=2
-  		end
-  	end
-  	return l*@FontSize/1000
-  end
-
-  def MultiCell(w,h,txt,border=0,align='L',fill=0)
-  	if(@CurrentFont['type']=='Type0')
-  		MBMultiCell(w,h,txt,border,align,fill)
-  	else
-  		super(w,h,txt,border,align,fill)
-		end
-  end
-
-  def MBMultiCell(w,h,txt,border=0,align='L',fill=0)
-  	#Multi-byte version of MultiCell()
-  	cw=@CurrentFont['cw']
-  	if(w==0)
-  		w=@w-@rMargin-@x
-		end
-  	wmax=(w-2*@cMargin)*1000/@FontSize
-  	s=txt.gsub("\r",'')
-  	nb=s.length
-  	if(nb>0 and s[nb-1]=="\n")
-  		nb-=1
-		end
-  	b=0
-  	if(border)
-  		if(border==1)
-  			border='LTRB'
-  			b='LRT'
-  			b2='LR'
-  		else
-  			b2=''
-  			if(border.to_s.index('L'))
-  				b2+='L'
-				end
-  			if(border.to_s.index('R'))
-  				b2+='R'
-				end
-  			b=border.to_s.index('T') ? b2+'T' : b2
-  		end
-  	end
-  	sep=-1
-  	i=0
-  	j=0
-  	l=0
-  	nl=1
-  	while(i<nb)
-  		#Get next character
-  		c=s[i]
-  		#Check if ASCII or MB
-  		ascii=(c<128)
-  		if(c.chr=="\n")
-  			#Explicit line break
-  			Cell(w,h,s[j,i-j],b,2,align,fill)
-  			i+=1
-  			sep=-1
-  			j=i
-  			l=0
-  			nl+=1
-  			if(border and nl==2)
-  				b=b2
-				end
-  			next
-  		end
-  		if(!ascii)
-  			sep=i
-  			ls=l
-  		elsif(c==' ')
-  			sep=i
-  			ls=l
-  		end
-  		l+=ascii ? (cw[c.chr] || 0) : 1100
-  		if(l>wmax)
-  			#Automatic line break
-  			if(sep==-1 or i==j)
-  				if(i==j)
-  					i+=ascii ? 1 : 3
-					end
-  				Cell(w,h,s[j,i-j],b,2,align,fill)
-  			else
-  				Cell(w,h,s[j,sep-j],b,2,align,fill)
-  				i=(s[sep]==' ') ? sep+1 : sep
-  			end
-  			sep=-1
-  			j=i
-  			l=0
-#  			nl+=1
-  			if(border and nl==2)
-  				b=b2
-  			end
-  		else
-  			i+=ascii ? 1 : 3
-  		end
-  	end
-  	#Last chunk
-  	if(border and not border.to_s.index('B').nil?)
-  		b+='B'
-		end
-  	Cell(w,h,s[j,i-j],b,2,align,fill)
-  	@x=@lMargin
-  end
-
-  def Write(h,txt,link='')
-  	if(@CurrentFont['type']=='Type0')
-  		MBWrite(h,txt,link)
-  	else
-  		super(h,txt,link)
-		end
-  end
-
-  def MBWrite(h,txt,link)
-  	#Multi-byte version of Write()
-  	cw=@CurrentFont['cw']
-  	w=@w-@rMargin-@x
-  	wmax=(w-2*@cMargin)*1000/@FontSize
-  	s=txt.gsub("\r",'')
-  	nb=s.length
-  	sep=-1
-  	i=0
-  	j=0
-  	l=0
-  	nl=1
-  	while(i<nb)
-  		#Get next character
-  		c=s[i]
-  		#Check if ASCII or MB
-  		ascii=(c<128)
-  		if(c.chr=="\n")
-  			#Explicit line break
-  			Cell(w,h,s[j,i-j],0,2,'',0,link)
-  			i+=1
-  			sep=-1
-  			j=i
-  			l=0
-  			if(nl==1)
-  				@x=@lMargin
-  				w=@w-@rMargin-@x
-  				wmax=(w-2*@cMargin)*1000/@FontSize
-  			end
-  			nl+=1
-  			next
-  		end
-  		if(!ascii or c==' ')
-  			sep=i
-			end
-  		l+=ascii ? cw[c.chr] : 1100
-  		if(l>wmax)
-  			#Automatic line break
-  			if(sep==-1 or i==j)
-  				if(@x>@lMargin)
-  					#Move to next line
-  					@x=@lMargin
-  					@y+=h
-  					w=@w-@rMargin-@x
-  					wmax=(w-2*@cMargin)*1000/@FontSize
-  					i+=1
-  					nl+=1
-  					next
-  				end
-  				if(i==j)
-  					i+=ascii ? 1 : 3
-					end
-  				Cell(w,h,s[j,i-j],0,2,'',0,link)
-  			else
-  				Cell(w,h,s[j,sep-j],0,2,'',0,link)
-  				i=(s[sep]==' ') ? sep+1 : sep
-  			end
-  			sep=-1
-  			j=i
-  			l=0
-  			if(nl==1)
-  				@x=@lMargin
-  				w=@w-@rMargin-@x
-  				wmax=(w-2*@cMargin)*1000/@FontSize
-  			end
-  			nl+=1
-  		else
-  			i+=ascii ? 1 : 3
-			end
-  	end
-  	#Last chunk
-  	if(i!=j)
-  		Cell(l/1000*@FontSize,h,s[j,i-j],0,0,'',0,link)
-		end
-  end
-
-private
-
-  def putfonts()
-  	nf=@n
-    @diffs.each do |diff|
-  		#Encodings
-  		newobj()
-  		out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['+diff+']>>')
-  		out('endobj')
-  	end
-  	# mqr=get_magic_quotes_runtime()
-  	# set_magic_quotes_runtime(0)
-    @FontFiles.each_pair do |file, info|
-  		#Font file embedding
-  		newobj()
-  		@FontFiles[file]['n']=@n
-  		if(defined('FPDF_FONTPATH'))
-  			file=FPDF_FONTPATH+file
-			end
-  		size=filesize(file)
-  		if(!size)
-  			Error('Font file not found')
-			end
-  		out('<</Length '+size)
-  		if(file[-2]=='.z')
-  			out('/Filter /FlateDecode')
-			end
-  		out('/Length1 '+info['length1'])
-  		unless info['length2'].nil?
-  			out('/Length2 '+info['length2']+' /Length3 0')
-			end
-  		out('>>')
-  		f=fopen(file,'rb')
-  		putstream(fread(f,size))
-  		fclose(f)
-  		out('endobj')
-  	end
-#
-  	# set_magic_quotes_runtime(mqr)
-#
-    @fonts.each_pair do |k, font|
-  		#Font objects
-  		newobj()
-  		@fonts[k]['n']=@n
-  		out('<</Type /Font')
-  		if(font['type']=='Type0')
-  			putType0(font)
-  		else
-  			name=font['name']
-  			out('/BaseFont /'+name)
-  			if(font['type']=='core')
-  				#Standard font
-  				out('/Subtype /Type1')
-  				if(name!='Symbol' and name!='ZapfDingbats')
-  					out('/Encoding /WinAnsiEncoding')
-  			end
-  			else
-  				#Additional font
-  				out('/Subtype /'+font['type'])
-  				out('/FirstChar 32')
-  				out('/LastChar 255')
-  				out('/Widths '+(@n+1)+' 0 R')
-  				out('/FontDescriptor '+(@n+2)+' 0 R')
-  				if(font['enc'])
-  					if !font['diff'].nil?
-  						out('/Encoding '+(nf+font['diff'])+' 0 R')
-  					else
-  						out('/Encoding /WinAnsiEncoding')
-  					end
-  				end
-  			end
-  			out('>>')
-  			out('endobj')
-  			if(font['type']!='core')
-  				#Widths
-  				newobj()
-  				cw=font['cw']
-  				s='['
-          32.upto(255) do |i|
-  					s+=cw[i.chr]+' '
-  				end
-  				out(s+']')
-  				out('endobj')
-  				#Descriptor
-  				newobj()
-  				s='<</Type /FontDescriptor /FontName /'+name
-  				font['desc'].each_pair do |k, v|
-  					s+=' /'+k+' '+v
-  				end
-  				file=font['file']
-  				if(file)
-  					s+=' /FontFile'+(font['type']=='Type1' ? '' : '2')+' '+@FontFiles[file]['n']+' 0 R'
-  				end
-  				out(s+'>>')
-  				out('endobj')
-  			end
-  		end
-  	end
-  end
-
-  def putType0(font)
-  	#Type0
-  	out('/Subtype /Type0')
-  	out('/BaseFont /'+font['name']+'-'+font['CMap'])
-  	out('/Encoding /'+font['CMap'])
-  	out('/DescendantFonts ['+(@n+1).to_s+' 0 R]')
-  	out('>>')
-  	out('endobj')
-  	#CIDFont
-  	newobj()
-  	out('<</Type /Font')
-  	out('/Subtype /CIDFontType0')
-  	out('/BaseFont /'+font['name'])
-  	out('/CIDSystemInfo <</Registry '+textstring('Adobe')+' /Ordering '+textstring(font['registry']['ordering'])+' /Supplement '+font['registry']['supplement'].to_s+'>>')
-  	out('/FontDescriptor '+(@n+1).to_s+' 0 R')
-  	if(font['CMap']=='ETen-B5-H')
-  		w='13648 13742 500'
-  	elsif(font['CMap']=='GBK-EUC-H')
-  		w='814 907 500 7716 [500]'
-  	else
-      # ActionController::Base::logger.debug font['cw'].keys.sort.join(' ').to_s
-      # ActionController::Base::logger.debug font['cw'].values.join(' ').to_s
-  		w='1 ['
-  		font['cw'].keys.sort.each {|key|
-  		  w+=font['cw'][key].to_s + " "
-# ActionController::Base::logger.debug key.to_s
-# ActionController::Base::logger.debug font['cw'][key].to_s
-  		}
-  		w +=']'
-  	end
-  	out('/W ['+w+']>>')
-  	out('endobj')
-  	#Font descriptor
-  	newobj()
-  	out('<</Type /FontDescriptor')
-  	out('/FontName /'+font['name'])
-  	out('/Flags 6')
-  	out('/FontBBox [0 -200 1000 900]')
-  	out('/ItalicAngle 0')
-  	out('/Ascent 800')
-  	out('/Descent -200')
-  	out('/CapHeight 800')
-  	out('/StemV 50')
-  	out('>>')
-  	out('endobj')
-  end
-end
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/errors.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/errors.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -1,4 +1,6 @@
 module RFPDF
-  class GenerationError < StandardError #:nodoc:
+  module Errors
+    class GenerationError < StandardError #:nodoc:
+    end
   end
 end
\ No newline at end of file
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/fpdf.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/fpdf.rb.svn-base	Mon Jun 06 14:41:04 2011 +0100
@@ -16,13 +16,18 @@
 # Bookmarks contributed by Sylvain Lafleur.
 #
 # 1.53 contributed by Ed Moss
-#   Handle '\n' at the beginning of a string
+#   Make sure all \n references are inside double quotes - Fix some multicell bugs
+#   Handle "\n" at the beginning of a string
 # Bookmarks contributed by Sylvain Lafleur.
 
 require 'date'
 require 'zlib'
 
 class FPDF
+  include RFPDF
+  
+  attr_accessor :default_font
+	
     FPDF_VERSION = '1.53d'
 
     Charwidths =  {
@@ -63,6 +68,7 @@
         @pages=[]
         @OrientationChanges=[]
         @state=0
+        @default_font = "arial"
         @fonts={}
         @FontFiles={}
         @diffs=[]
@@ -169,6 +175,10 @@
         @PDFVersion='1.3'
     end
 
+    def GetMargins()
+        return @lMargin, @tMargin, @rMargin
+    end
+
     def SetMargins(left, top, right=-1)
         # Set left, top and right margins
         @lMargin=left
@@ -334,6 +344,7 @@
         @TextColor=tc
         @ColorFlag=cf
     end
+	  alias_method :add_page, :AddPage
 
     def Header
         # To be implemented in your inherited class
@@ -403,6 +414,70 @@
         out(sprintf('%.2f w',width*@k)) if @page>0
     end
 
+    def Circle(mid_x, mid_y, radius, style='')
+      mid_y = (@h-mid_y)*@k
+      out(sprintf("q\n")) # postscript content in pdf
+      # init line type etc. with /GSD gs G g (grey) RG rg (RGB) w=line witdh etc. 
+      out(sprintf("1 j\n")) # line join
+      # translate ("move") circle to mid_y, mid_y
+      out(sprintf("1 0 0 1 %f %f cm", mid_x, mid_y))
+      kappa = 0.5522847498307933984022516322796
+      # Quadrant 1 
+      x_s = 0.0 # 12 o'clock 
+      y_s = 0.0 + radius
+      x_e = 0.0 + radius # 3 o'clock 
+      y_e = 0.0
+      out(sprintf("%f %f m\n", x_s, y_s)) # move to 12 o'clock 
+      # cubic bezier control point 1, start height and kappa * radius to the right 
+      bx_e1 = x_s + (radius * kappa)
+      by_e1 = y_s
+      # cubic bezier control point 2, end and kappa * radius above 
+      bx_e2 = x_e
+      by_e2 = y_e + (radius * kappa)
+      # draw cubic bezier from current point to x_e/y_e with bx_e1/by_e1 and bx_e2/by_e2 as bezier control points
+      out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e))
+      # Quadrant 2 
+      x_s = x_e 
+      y_s = y_e # 3 o'clock 
+      x_e = 0.0 
+      y_e = 0.0 - radius # 6 o'clock 
+      bx_e1 = x_s # cubic bezier point 1 
+      by_e1 = y_s - (radius * kappa)
+      bx_e2 = x_e + (radius * kappa) # cubic bezier point 2 
+      by_e2 = y_e
+      out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e))
+      # Quadrant 3 
+      x_s = x_e 
+      y_s = y_e # 6 o'clock 
+      x_e = 0.0 - radius
+      y_e = 0.0 # 9 o'clock 
+      bx_e1 = x_s - (radius * kappa) # cubic bezier point 1 
+      by_e1 = y_s
+      bx_e2 = x_e # cubic bezier point 2 
+      by_e2 = y_e - (radius * kappa)
+      out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e))
+      # Quadrant 4 
+      x_s = x_e 
+      y_s = y_e # 9 o'clock 
+      x_e = 0.0 
+      y_e = 0.0 + radius # 12 o'clock 
+      bx_e1 = x_s # cubic bezier point 1 
+      by_e1 = y_s + (radius * kappa)
+      bx_e2 = x_e - (radius * kappa) # cubic bezier point 2 
+      by_e2 = y_e
+      out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e))
+      if style=='F'
+          op='f'
+      elsif style=='FD' or style=='DF'
+          op='b'
+      else
+          op='s'
+      end
+      out(sprintf("#{op}\n")) # stroke circle, do not fill and close path 
+      # for filling etc. b, b*, f, f*
+      out(sprintf("Q\n")) # finish postscript in PDF
+    end
+    
     def Line(x1, y1, x2, y2)
         # Draw a line
         out(sprintf('%.2f %.2f m %.2f %.2f l S',
@@ -418,6 +493,7 @@
         else
             op='S'
         end
+        # x y width height re
         out(sprintf('%.2f %.2f %.2f %.2f re %s', x*@k,(@h-y)*@k,w*@k,-h*@k,op))
     end
 
@@ -566,10 +642,7 @@
 
     def Text(x, y, txt)
         # Output a string
-        txt.gsub!(')', '\\)')
-        txt.gsub!('(', '\\(')
-        txt.gsub!('\\', '\\\\')
-        s=sprintf('BT %.2f %.2f Td (%s) Tj ET',x*@k,(@h-y)*@k,txt);
+        s=sprintf('BT %.2f %.2f Td (%s) Tj ET',x*@k,(@h-y)*@k, escape(txt));
         s=s+' '+dounderline(x,y,txt) if @underline and txt!=''
         s='q '+@TextColor+' '+s+' Q' if @ColorFlag
         out(s)
@@ -580,9 +653,17 @@
         @AutoPageBreak
     end
 
+    def BreakThePage?(h)
+      if (@y + h) > @PageBreakTrigger and !@InFooter and self.AcceptPageBreak
+        true
+      else
+        false
+      end
+    end
+    
     def Cell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='')
         # Output a cell
-        if @y+h>@PageBreakTrigger and !@InFooter and self.AcceptPageBreak
+        if self.BreakThePage?(h)
             # Automatic page break
             x=@x
             ws=@ws
@@ -635,14 +716,11 @@
             else
                 dx=@cMargin
             end
-            txt = txt.gsub(')', '\\)')
-            txt.gsub!('(', '\\(')
-            txt.gsub!('\\', '\\\\')
             if @ColorFlag
                 s=s+'q '+@TextColor+' '
             end
             s=s+sprintf('BT %.2f %.2f Td (%s) Tj ET',
-                (@x+dx)*@k,(@h-(@y+0.5*h+0.3*@FontSize))*@k,txt)
+                (@x+dx)*@k,(@h-(@y+0.5*h+0.3*@FontSize))*@k,escape(txt))
             s=s+' '+dounderline(@x+dx,@y+0.5*h+0.3*@FontSize,txt) if @underline
             s=s+' Q' if @ColorFlag
             if link and link != ''
@@ -665,9 +743,9 @@
         cw=@CurrentFont['cw']
         w=@w-@rMargin-@x if w==0
         wmax=(w-2*@cMargin)*1000/@FontSize
-        s=txt.gsub('\r','')
+        s=txt.gsub("\r",'')
         nb=s.length
-        nb=nb-1 if nb>0 and s[nb-1].chr=='\n'
+        nb=nb-1 if nb>0 and s[nb-1].chr=="\n"
         b=0
         if border!=0
             if border==1
@@ -682,70 +760,66 @@
             end
         end
         sep=-1
-        i=0
-        j=0
+        to_index=0
+        from_j=0
         l=0
         ns=0
         nl=1
-        while i<nb
+        while to_index<nb
             # Get next character
-            c=s[i].chr
-            if c=="\n"
+            char=s[to_index]
+            if char=="\n"[0]
                 # Explicit line break
                 if @ws>0
                     @ws=0
                     out('0 Tw')
                 end
 #Ed Moss               
-# Don't let i go negative
-                end_i = i == 0 ? 0 : i - 1
-                # Changed from s[j..i] to fix bug reported by Hans Allis.
-                self.Cell(w,h,s[j..end_i],b,2,align,fill) 
+                end_i = to_index == 0 ? 0 : to_index - 1
+                # Changed from s[from_j..to_index] to fix bug reported by Hans Allis.
+                self.Cell(w,h,s[from_j..end_i],b,2,align,fill) 
 #                
-                i=i+1
+                to_index=to_index+1
                 sep=-1
-                j=i
+                from_j=to_index
                 l=0
                 ns=0
                 nl=nl+1
                 b=b2 if border and nl==2
             else
-                if c==' '
-                    sep=i
+                if char==' '[0]
+                    sep=to_index
                     ls=l
                     ns=ns+1
                 end
-                l=l+GetCharWidth(cw, c[0])
+                l=l+GetCharWidth(cw, char)
                 if l>wmax
                     # Automatic line break
                     if sep==-1
-                        i=i+1 if i==j
+                        to_index=to_index+1 if to_index==from_j
                         if @ws>0
                             @ws=0
                             out('0 Tw')
                         end
-                        self.Cell(w,h,s[j..i],b,2,align,fill)
 #Ed Moss
-# Added so that it wouldn't print the last character of the string if it got close
-#FIXME 2006-07-18 Level=0 - but it still puts out an extra new line
-                        i += 1
+                        self.Cell(w,h,s[from_j..to_index-1],b,2,align,fill)
 #
                     else
                         if align=='J'
                             @ws=(ns>1) ? (wmax-ls)/1000.0*@FontSize/(ns-1) : 0
                             out(sprintf('%.3f Tw',@ws*@k))
                         end
-                        self.Cell(w,h,s[j..sep],b,2,align,fill)
-                        i=sep+1
+                        self.Cell(w,h,s[from_j..sep],b,2,align,fill)
+                        to_index=sep+1
                     end
                     sep=-1
-                    j=i
+                    from_j=to_index
                     l=0
                     ns=0
                     nl=nl+1
                     b=b2 if border and nl==2
                 else
-                    i=i+1
+                    to_index=to_index+1
                 end
             end
         end
@@ -756,7 +830,7 @@
             out('0 Tw')
         end
         b=b+'B' if border!=0 and not border.index('B').nil?
-        self.Cell(w,h,s[j..i],b,2,align,fill)
+        self.Cell(w,h,s[from_j..to_index],b,2,align,fill)
         @x=@lMargin
     end
     
@@ -1273,7 +1347,7 @@
         out('startxref')
         out(o)
         out('%%EOF')
-        state=3
+        @state=3
     end
 
     def beginpage(orientation)
@@ -1458,7 +1532,7 @@
 
     def escape(s)
         # Add \ before \, ( and )
-        s.gsub('\\','\\\\').gsub('(','\\(').gsub(')','\\)')
+        s.gsub('\\','\\\\\\').gsub('(','\\(').gsub(')','\\)')
     end
 
     def putstream(s)
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/fpdf_eps.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,139 +0,0 @@
-# Information
-# 
-# PDF_EPS class from Valentin Schmidt ported to ruby by Thiago Jackiw (tjackiw@gmail.com) 
-# working for Mingle LLC (www.mingle.com)
-# Release Date: July 13th, 2006
-# 
-# Description
-# 
-# This script allows to embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files. 
-# Only vector drawing is supported, not text or bitmap. Although the script was successfully 
-# tested with various AI format versions, best results are probably achieved with files that 
-# were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2).
-# 
-# ImageEps(string file, float x, float y [, float w [, float h [, string link [, boolean useBoundingBox]]]])
-# 
-# Same parameters as for regular FPDF::Image() method, with an additional one:
-# 
-# useBoundingBox: specifies whether to position the bounding box (true) or the complete canvas (false) 
-# at location (x,y). Default value is true.
-#
-# First added to the Ruby FPDF distribution in 1.53c
-#
-# Usage is as follows:
-#
-# require 'fpdf'
-# require 'fpdf_eps'
-# pdf = FPDF.new
-# pdf.extend(PDF_EPS)
-# pdf.ImageEps(...)
-#
-# This allows it to be combined with other extensions, such as the bookmark
-# module.
-
-module PDF_EPS
-    def ImageEps(file, x, y, w=0, h=0, link='', use_bounding_box=true)
-        data = nil
-        if File.exists?(file)
-            File.open(file, 'rb') do |f|
-                data = f.read()
-            end
-        else
-            Error('EPS file not found: '+file)
-        end
-        
-        # Find BoundingBox param
-        regs = data.scan(/%%BoundingBox: [^\r\n]*/m)
-        regs << regs[0].gsub(/%%BoundingBox: /, '')
-        if regs.size > 1
-            tmp = regs[1].to_s.split(' ')
-            @x1 = tmp[0].to_i
-            @y1 = tmp[1].to_i
-            @x2 = tmp[2].to_i
-            @y2 = tmp[3].to_i
-        else
-            Error('No BoundingBox found in EPS file: '+file)
-        end
-        f_start = data.index('%%EndSetup')
-        f_start = data.index('%%EndProlog') if f_start === false
-        f_start = data.index('%%BoundingBox') if f_start === false
-        
-        data = data.slice(f_start, data.length)
-        
-        f_end = data.index('%%PageTrailer')
-        f_end = data.index('showpage') if f_end === false
-        data = data.slice(0, f_end) if f_end
-        
-        # save the current graphic state
-        out('q')
-        
-        k = @k
-        
-        # Translate
-        if use_bounding_box
-            dx = x*k-@x1
-            dy = @hPt-@y2-y*k
-        else
-            dx = x*k
-            dy = -y*k
-        end
-        tm = [1,0,0,1,dx,dy]
-        out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm',
-            tm[0], tm[1], tm[2], tm[3], tm[4], tm[5]))
-        
-        if w > 0
-            scale_x = w/((@x2-@x1)/k)
-            if h > 0
-                scale_y = h/((@y2-@y1)/k)
-            else
-                scale_y = scale_x
-                h = (@y2-@y1)/k * scale_y
-            end
-        else
-            if h > 0
-                scale_y = $h/((@y2-@y1)/$k)
-                scale_x = scale_y
-                w = (@x2-@x1)/k * scale_x
-            else
-                w = (@x2-@x1)/k
-                h = (@y2-@y1)/k
-            end
-        end
-        
-        if !scale_x.nil?
-            # Scale
-            tm = [scale_x,0,0,scale_y,0,@hPt*(1-scale_y)]
-            out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm',
-                tm[0], tm[1], tm[2], tm[3], tm[4], tm[5]))
-        end
-        
-        data.split(/\r\n|[\r\n]/).each do |line|
-            next if line == '' || line[0,1] == '%'
-            len = line.length
-            # next if (len > 2 && line[len-2,len] != ' ')
-            cmd = line[len-2,len].strip
-            case cmd
-                when 'm', 'l', 'v', 'y', 'c', 'k', 'K', 'g', 'G', 's', 'S', 'J', 'j', 'w', 'M', 'd':
-                    out(line)
-                
-                when 'L':
-                    line[len-1,len]='l'
-                    out(line)
-                
-                when 'C':
-                    line[len-1,len]='c'
-                    out(line)
-                
-                when 'f', 'F':
-                    out('f*')
-                
-                when 'b', 'B':
-                    out(cmd + '*')
-            end
-        end
-        
-        # restore previous graphic state
-        out('Q')
-        Link(x,y,w,h,link) if link
-    end
-end
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/japanese.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,468 +0,0 @@
-# Copyright (c) 2006 4ssoM LLC <www.4ssoM.com>
-# 1.12 contributed by Ed Moss.
-#
-# The MIT License
-#
-# 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.
-#
-# This is direct port of japanese.php
-#
-# Japanese PDF support.
-#
-# Usage is as follows:
-#
-# require 'fpdf'
-# require 'chinese'
-# pdf = FPDF.new
-# pdf.extend(PDF_Japanese)
-#
-# This allows it to be combined with other extensions, such as the bookmark
-# module.
-
-module PDF_Japanese
-
-  SJIS_widths={' ' => 278, '!' => 299, '"' => 353, '#' => 614, '$' => 614, '%' => 721, '&' => 735, '\'' => 216, 
-  	'(' => 323, ')' => 323, '*' => 449, '+' => 529, ',' => 219, '-' => 306, '.' => 219, '/' => 453, '0' => 614, '1' => 614, 
-  	'2' => 614, '3' => 614, '4' => 614, '5' => 614, '6' => 614, '7' => 614, '8' => 614, '9' => 614, ':' => 219, ';' => 219, 
-  	'<' => 529, '=' => 529, '>' => 529, '?' => 486, '@' => 744, 'A' => 646, 'B' => 604, 'C' => 617, 'D' => 681, 'E' => 567, 
-  	'F' => 537, 'G' => 647, 'H' => 738, 'I' => 320, 'J' => 433, 'K' => 637, 'L' => 566, 'M' => 904, 'N' => 710, 'O' => 716, 
-  	'P' => 605, 'Q' => 716, 'R' => 623, 'S' => 517, 'T' => 601, 'U' => 690, 'V' => 668, 'W' => 990, 'X' => 681, 'Y' => 634, 
-  	'Z' => 578, '[' => 316, '\\' => 614, ']' => 316, '^' => 529, '_' => 500, '`' => 387, 'a' => 509, 'b' => 566, 'c' => 478, 
-  	'd' => 565, 'e' => 503, 'f' => 337, 'g' => 549, 'h' => 580, 'i' => 275, 'j' => 266, 'k' => 544, 'l' => 276, 'm' => 854, 
-  	'n' => 579, 'o' => 550, 'p' => 578, 'q' => 566, 'r' => 410, 's' => 444, 't' => 340, 'u' => 575, 'v' => 512, 'w' => 760, 
-  	'x' => 503, 'y' => 529, 'z' => 453, '{' => 326, '|' => 380, '}' => 326, '~' => 387}
-
-  def AddCIDFont(family,style,name,cw,cMap,registry)  	
-    fontkey=family.downcase+style.upcase
-  	unless @fonts[fontkey].nil?
-  		Error("CID font already added: family style")
-  	end  
-  	i=@fonts.length+1
-  	@fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-120,'ut'=>40,'cw'=>cw,
-  	  'CMap'=>cMap,'registry'=>registry}
-  end
-
-  def AddCIDFonts(family,name,cw,cMap,registry)
-  	AddCIDFont(family,'',name,cw,cMap,registry)
-  	AddCIDFont(family,'B',name+',Bold',cw,cMap,registry)
-  	AddCIDFont(family,'I',name+',Italic',cw,cMap,registry)
-  	AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry)
-  end
-
-  def AddSJISFont(family='SJIS')
-  	#Add SJIS font with proportional Latin
-  	name='KozMinPro-Regular-Acro'
-  	cw=SJIS_widths
-  	cMap='90msp-RKSJ-H'
-  	registry={'ordering'=>'Japan1','supplement'=>2}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def AddSJIShwFont(family='SJIS-hw')
-  	#Add SJIS font with half-width Latin
-  	name='KozMinPro-Regular-Acro'
-    32.upto(126) do |i|
-  		cw[i.chr]=500
-  	end  
-  	cMap='90ms-RKSJ-H'
-  	registry={'ordering'=>'Japan1','supplement'=>2}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def GetStringWidth(s)
-  	if(@CurrentFont['type']=='Type0')
-  		return GetSJISStringWidth(s)
-  	else
-  		return super(s)
-  	end  
-  end
-
-  def GetSJISStringWidth(s)
-  	#SJIS version of GetStringWidth()
-  	l=0
-  	cw=@CurrentFont['cw']
-  	nb=s.length
-  	i=0
-  	while(i<nb)
-  		o=s[i]
-  		if(o<128)
-  			#ASCII
-  			l+=cw[o.chr]
-  			i+=1
-  		elsif(o>=161 and o<=223)
-  			#Half-width katakana
-  			l+=500
-  			i+=1
-  		else
-  			#Full-width character
-  			l+=1000
-  			i+=2
-  		end
-  	end
-  	return l*@FontSize/1000
-  end
-
-  def MultiCell(w,h,txt,border=0,align='L',fill=0)
-  	if(@CurrentFont['type']=='Type0')
-  		SJISMultiCell(w,h,txt,border,align,fill)
-  	else
-  		super(w,h,txt,border,align,fill)
-  	end  
-  end
-
-  def SJISMultiCell(w,h,txt,border=0,align='L',fill=0)
-  	#Output text with automatic or explicit line breaks
-  	cw=@CurrentFont['cw']
-  	if(w==0)
-  		w=@w-@rMargin-@x
-  	end  
-  	wmax=(w-2*@cMargin)*1000/@FontSize
-  	s=txt.gsub("\r",'')
-  	nb=s.length
-  	if(nb>0 and s[nb-1]=="\n")
-  		nb-=1
-  	end  
-  	b=0
-  	if(border)
-  		if(border==1)
-  			border='LTRB'
-  			b='LRT'
-  			b2='LR'
-  		else
-  			b2=''
-  			if(border.to_s.index('L'))
-  				b2+='L'
-      	end  
-  			if(border.to_s.index('R'))
-  				b2+='R'
-      	end  
-  			b=border.to_s.index('T') ? b2+'T' : b2
-  		end
-  	end
-  	sep=-1
-  	i=0
-  	j=0
-  	l=0
-  	nl=1
-  	while(i<nb)
-  		#Get next character
-  		c=s[i]
-  		o=c #o=ord(c)
-  		if(o==10)
-  			#Explicit line break
-  			Cell(w,h,s[j,i-j],b,2,align,fill)
-  			i+=1
-  			sep=-1
-  			j=i
-  			l=0
-  			nl+=1
-  			if(border and nl==2)
-  				b=b2
-      	end  
-  			next
-  		end
-  		if(o<128)
-  			#ASCII
-  			l+=cw[c.chr]
-  			n=1
-  			if(o==32)
-  				sep=i
-      	end  
-  		elsif(o>=161 and o<=223)
-  			#Half-width katakana
-  			l+=500
-  			n=1
-  			sep=i
-  		else
-  			#Full-width character
-  			l+=1000
-  			n=2
-  			sep=i
-  		end
-  		if(l>wmax)
-  			#Automatic line break
-  			if(sep==-1 or i==j)
-  				if(i==j)
-  					i+=n
-        	end  
-  				Cell(w,h,s[j,i-j],b,2,align,fill)
-  			else
-  				Cell(w,h,s[j,sep-j],b,2,align,fill)
-  				i=(s[sep]==' ') ? sep+1 : sep
-  			end
-  			sep=-1
-  			j=i
-  			l=0
-  			nl+=1
-  			if(border and nl==2)
-  				b=b2
-      	end  
-  		else
-  			i+=n
-  			if(o>=128)
-  				sep=i
-  			end
-  		end
-  	end
-  	#Last chunk
-  	if(border and not border.to_s.index('B').nil?)
-  		b+='B'
-  	end  
-  	Cell(w,h,s[j,i-j],b,2,align,fill)
-  	@x=@lMargin
-  end
-
-  def Write(h,txt,link='')
-  	if(@CurrentFont['type']=='Type0')
-  		SJISWrite(h,txt,link)
-  	else
-  		super(h,txt,link)
-  	end  
-  end
-
-  def SJISWrite(h,txt,link)
-  	#SJIS version of Write()
-  	cw=@CurrentFont['cw']
-  	w=@w-@rMargin-@x
-  	wmax=(w-2*@cMargin)*1000/@FontSize
-  	s=txt.gsub("\r",'')
-  	nb=s.length
-  	sep=-1
-  	i=0
-  	j=0
-  	l=0
-  	nl=1
-  	while(i<nb)
-  		#Get next character
-  		c=s[i]
-  		o=c
-  		if(o==10)
-  			#Explicit line break
-  			Cell(w,h,s[j,i-j],0,2,'',0,link)
-  			i+=1
-  			sep=-1
-  			j=i
-  			l=0
-  			if(nl==1)
-  				#Go to left margin
-  				@x=@lMargin
-  				w=@w-@rMargin-@x
-  				wmax=(w-2*@cMargin)*1000/@FontSize
-  			end
-  			nl+=1
-  			next
-  		end
-  		if(o<128)
-  			#ASCII
-  			l+=cw[c.chr]
-  			n=1
-  			if(o==32)
-  				sep=i
-      	end  
-  		elsif(o>=161 and o<=223)
-  			#Half-width katakana
-  			l+=500
-  			n=1
-  			sep=i
-  		else
-  			#Full-width character
-  			l+=1000
-  			n=2
-  			sep=i
-  		end
-  		if(l>wmax)
-  			#Automatic line break
-  			if(sep==-1 or i==j)
-  				if(@x>@lMargin)
-  					#Move to next line
-  					@x=@lMargin
-  					@y+=h
-  					w=@w-@rMargin-@x
-  					wmax=(w-2*@cMargin)*1000/@FontSize
-  					i+=n
-  					nl+=1
-  					next
-  				end
-  				if(i==j)
-  					i+=n
-        	end  
-  				Cell(w,h,s[j,i-j],0,2,'',0,link)
-  			else
-  				Cell(w,h,s[j,sep-j],0,2,'',0,link)
-  				i=(s[sep]==' ') ? sep+1 : sep
-  			end
-  			sep=-1
-  			j=i
-  			l=0
-  			if(nl==1)
-  				@x=@lMargin
-  				w=@w-@rMargin-@x
-  				wmax=(w-2*@cMargin)*1000/@FontSize
-  			end
-  			nl+=1
-  		else
-  			i+=n
-  			if(o>=128)
-  				sep=i
-      	end  
-  		end
-  	end
-  	#Last chunk
-  	if(i!=j)
-  		Cell(l/1000*@FontSize,h,s[j,i-j],0,0,'',0,link)
-  	end  
-  end
-  
-private
-
-  def putfonts()
-  	nf=@n
-    @diffs.each do |diff|
-  		#Encodings
-  		newobj()
-  		out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['+diff+']>>')
-  		out('endobj')
-  	end
-  	# mqr=get_magic_quotes_runtime()
-  	# set_magic_quotes_runtime(0)
-    @FontFiles.each_pair do |file, info|
-  		#Font file embedding
-  		newobj()
-  		@FontFiles[file]['n']=@n
-  		if(defined('FPDF_FONTPATH'))
-  			file=FPDF_FONTPATH+file
-    	end  
-  		size=filesize(file)
-  		if(!size)
-  			Error('Font file not found')
-    	end  
-  		out('<</Length '+size)
-  		if(file[-2]=='.z')
-  			out('/Filter /FlateDecode')
-    	end  
-  		out('/Length1 '+info['length1'])
-  		unless info['length2'].nil?
-  			out('/Length2 '+info['length2']+' /Length3 0')
-    	end  
-  		out('>>')
-  		f=fopen(file,'rb')
-  		putstream(fread(f,size))
-  		fclose(f)
-  		out('endobj')
-  	end
-  	# set_magic_quotes_runtime(mqr)
-    @fonts.each_pair do |k, font|
-  		#Font objects
-  		newobj()
-  		@fonts[k]['n']=@n
-  		out('<</Type /Font')
-  		if(font['type']=='Type0')
-  			putType0(font)
-  		else
-  			name=font['name']
-  			out('/BaseFont /'+name)
-  			if(font['type']=='core')
-  				#Standard font
-  				out('/Subtype /Type1')
-  				if(name!='Symbol' and name!='ZapfDingbats')
-  					out('/Encoding /WinAnsiEncoding')
-  				end
-  			else
-  				#Additional font
-  				out('/Subtype /'+font['type'])
-  				out('/FirstChar 32')
-  				out('/LastChar 255')
-  				out('/Widths '+(@n+1)+' 0 R')
-  				out('/FontDescriptor '+(@n+2)+' 0 R')
-  				if(font['enc'])
-  					if !font['diff'].nil?
-  						out('/Encoding '+(nf+font['diff'])+' 0 R')
-  					else
-  						out('/Encoding /WinAnsiEncoding')
-          	end  
-  				end
-  			end
-  			out('>>')
-  			out('endobj')
-  			if(font['type']!='core')
-  				#Widths
-  				newobj()
-  				cw=font['cw']
-  				s='['
-          32.upto(255) do |i|
-  					s+=cw[i.chr]+' '
-        	end  
-  				out(s+']')
-  				out('endobj')
-  				#Descriptor
-  				newobj()
-  				s='<</Type /FontDescriptor /FontName /'+name
-  				font['desc'].each_pair do |k, v|
-  					s+=' /'+k+' '+v
-        	end  
-  				file=font['file']
-  				if(file)
-  					s+=' /FontFile'+(font['type']=='Type1' ? '' : '2')+' '+@FontFiles[file]['n']+' 0 R'
-        	end  
-  				out(s+'>>')
-  				out('endobj')
-  			end
-  		end
-  	end
-  end
-
-  def putType0(font)
-  	#Type0
-  	out('/Subtype /Type0')
-  	out('/BaseFont /'+font['name']+'-'+font['CMap'])
-  	out('/Encoding /'+font['CMap'])
-  	out('/DescendantFonts ['+(@n+1).to_s+' 0 R]')
-  	out('>>')
-  	out('endobj')
-  	#CIDFont
-  	newobj()
-  	out('<</Type /Font')
-  	out('/Subtype /CIDFontType0')
-  	out('/BaseFont /'+font['name'])
-  	out('/CIDSystemInfo <</Registry (Adobe) /Ordering ('+font['registry']['ordering']+') /Supplement '+font['registry']['supplement'].to_s+'>>')
-  	out('/FontDescriptor '+(@n+1).to_s+' 0 R')
-  	w='/W [1 ['
-		font['cw'].keys.sort.each {|key|
-		  w+=font['cw'][key].to_s + " "
-# ActionController::Base::logger.debug key.to_s
-# ActionController::Base::logger.debug font['cw'][key].to_s
-		}
-  	out(w+'] 231 325 500 631 [500] 326 389 500]')
-  	out('>>')
-  	out('endobj')
-  	#Font descriptor
-  	newobj()
-  	out('<</Type /FontDescriptor')
-  	out('/FontName /'+font['name'])
-  	out('/Flags 6')
-  	out('/FontBBox [0 -200 1000 900]')
-  	out('/ItalicAngle 0')
-  	out('/Ascent 800')
-  	out('/Descent -200')
-  	out('/CapHeight 800')
-  	out('/StemV 60')
-  	out('>>')
-  	out('endobj')
-  end
-end
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/korean.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,436 +0,0 @@
-# Copyright (c) 2006 4ssoM LLC <www.4ssoM.com>
-# 1.12 contributed by Ed Moss.
-#
-# The MIT License
-#
-# 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.
-#
-# This is direct port of korean.php
-#
-# Korean PDF support.
-#
-# Usage is as follows:
-#
-# require 'fpdf'
-# require 'chinese'
-# pdf = FPDF.new
-# pdf.extend(PDF_Korean)
-#
-# This allows it to be combined with other extensions, such as the bookmark
-# module.
-
-module PDF_Korean
-
-UHC_widths={' ' => 333, '!' => 416, '"' => 416, '#' => 833, '$' => 625, '%' => 916, '&' => 833, '\'' => 250, 
-	'(' => 500, ')' => 500, '*' => 500, '+' => 833, ',' => 291, '-' => 833, '.' => 291, '/' => 375, '0' => 625, '1' => 625, 
-	'2' => 625, '3' => 625, '4' => 625, '5' => 625, '6' => 625, '7' => 625, '8' => 625, '9' => 625, ':' => 333, ';' => 333, 
-	'<' => 833, '=' => 833, '>' => 916, '?' => 500, '@' => 1000, 'A' => 791, 'B' => 708, 'C' => 708, 'D' => 750, 'E' => 708, 
-	'F' => 666, 'G' => 750, 'H' => 791, 'I' => 375, 'J' => 500, 'K' => 791, 'L' => 666, 'M' => 916, 'N' => 791, 'O' => 750, 
-	'P' => 666, 'Q' => 750, 'R' => 708, 'S' => 666, 'T' => 791, 'U' => 791, 'V' => 750, 'W' => 1000, 'X' => 708, 'Y' => 708, 
-	'Z' => 666, '[' => 500, '\\' => 375, ']' => 500, '^' => 500, '_' => 500, '`' => 333, 'a' => 541, 'b' => 583, 'c' => 541, 
-	'd' => 583, 'e' => 583, 'f' => 375, 'g' => 583, 'h' => 583, 'i' => 291, 'j' => 333, 'k' => 583, 'l' => 291, 'm' => 875, 
-	'n' => 583, 'o' => 583, 'p' => 583, 'q' => 583, 'r' => 458, 's' => 541, 't' => 375, 'u' => 583, 'v' => 583, 'w' => 833, 
-	'x' => 625, 'y' => 625, 'z' => 500, '{' => 583, '|' => 583, '}' => 583, '~' => 750}
-
-  def AddCIDFont(family,style,name,cw,cMap,registry)
-    fontkey=family.downcase+style.upcase
-    unless @fonts[fontkey].nil?
-  		Error("Font already added: family style")
-    end
-  	i=@fonts.length+1
-  	name=name.gsub(' ','')
-  	@fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-130,'ut'=>40,'cw'=>cw,
-  	  'CMap'=>cMap,'registry'=>registry}
-  end
-
-  def AddCIDFonts(family,name,cw,cMap,registry)
-  	AddCIDFont(family,'',name,cw,cMap,registry)
-  	AddCIDFont(family,'B',name+',Bold',cw,cMap,registry)
-  	AddCIDFont(family,'I',name+',Italic',cw,cMap,registry)
-  	AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry)
-  end
-
-  def AddUHCFont(family='UHC',name='HYSMyeongJoStd-Medium-Acro')
-  	#Add UHC font with proportional Latin
-  	cw=UHC_widths
-  	cMap='KSCms-UHC-H'
-  	registry={'ordering'=>'Korea1','supplement'=>1}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def AddUHChwFont(family='UHC-hw',name='HYSMyeongJoStd-Medium-Acro')
-  	#Add UHC font with half-witdh Latin
-    32.upto(126) do |i|
-  		cw[i.chr]=500
-    end
-  	cMap='KSCms-UHC-HW-H'
-  	registry={'ordering'=>'Korea1','supplement'=>1}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def GetStringWidth(s)
-  	if(@CurrentFont['type']=='Type0')
-  		return GetMBStringWidth(s)
-  	else
-  		return super(s)
-    end
-  end
-
-  def GetMBStringWidth(s)
-  	#Multi-byte version of GetStringWidth()
-  	l=0
-  	cw=@CurrentFont['cw']
-  	nb=s.length
-  	i=0
-  	while(i<nb)
-  		c=s[i]
-  		if(c<128)
-  			l+=cw[c.chr]
-  			i+=1
-  		else
-  			l+=1000
-  			i+=2
-  		end
-  	end
-  	return l*@FontSize/1000
-  end
-
-  def MultiCell(w,h,txt,border=0,align='L',fill=0)
-  	if(@CurrentFont['type']=='Type0')
-  		MBMultiCell(w,h,txt,border,align,fill)
-  	else
-  		super(w,h,txt,border,align,fill)
-    end
-  end
-
-  def MBMultiCell(w,h,txt,border=0,align='L',fill=0)
-  	#Multi-byte version of MultiCell()
-  	cw=@CurrentFont['cw']
-  	if(w==0)
-  		w=@w-@rMargin-@x
-    end
-  	wmax=(w-2*@cMargin)*1000/@FontSize
-  	s=txt.gsub("\r",'')
-  	nb=s.length
-  	if(nb>0 and s[nb-1]=="\n")
-  		nb-=1
-    end
-  	b=0
-  	if(border)
-  		if(border==1)
-  			border='LTRB'
-  			b='LRT'
-  			b2='LR'
-  		else
-  			b2=''
-  			if(border.to_s.index('L').nil?)
-  				b2+='L'
-        end
-  			if(border.to_s.index('R').nil?)
-  				b2+='R'
-        end
-  			b=border.to_s.index('T').nil? ? b2+'T' : b2
-  		end
-  	end
-  	sep=-1
-  	i=0
-  	j=0
-  	l=0
-  	nl=1
-  	while(i<nb)
-  		#Get next character
-  		c=s[i]
-  		#Check if ASCII or MB
-  		ascii=(c<128)
-  		if(c=="\n")
-  			#Explicit line break
-  			Cell(w,h,s[j,i-j],b,2,align,fill)
-  			i+=1
-  			sep=-1
-  			j=i
-  			l=0
-  			nl+=1
-  			if(border and nl==2)
-  				b=b2
-        end
-  			next
-  		end
-  		if(!ascii)
-  			sep=i
-  			ls=l
-  		elsif(c==' ')
-  			sep=i
-  			ls=l
-  		end
-  		l+=(ascii ? cw[c.chr] : 1000) || 0
-  		if(l>wmax)
-  			#Automatic line break
-  			if(sep==-1 or i==j)
-  				if(i==j)
-  					i+=ascii ? 1 : 2
-          end
-  				Cell(w,h,s[j,i-j],b,2,align,fill)
-  			else
-  				Cell(w,h,s[j,sep-j],b,2,align,fill)
-  				i=(s[sep]==' ') ? sep+1 : sep
-  			end
-  			sep=-1
-  			j=i
-  			l=0
-  			nl+=1
-  			if(border and nl==2)
-  				b=b2
-        end
-  		else
-  			i+=ascii ? 1 : 2
-      end
-  	end
-  	#Last chunk
-  	if(border and not border.to_s.index('B').nil?)
-  		b+='B'
-    end
-  	Cell(w,h,s[j,i-j],b,2,align,fill)
-  	@x=@lMargin
-  end
-
-  def Write(h,txt,link='')
-  	if(@CurrentFont['type']=='Type0')
-  		MBWrite(h,txt,link)
-  	else
-  		super(h,txt,link)
-    end
-  end
-
-  def MBWrite(h,txt,link)
-  	#Multi-byte version of Write()
-  	cw=@CurrentFont['cw']
-  	w=@w-@rMargin-@x
-  	wmax=(w-2*@cMargin)*1000/@FontSize
-  	s=txt.gsub("\r",'')
-  	nb=s.length
-  	sep=-1
-  	i=0
-  	j=0
-  	l=0
-  	nl=1
-  	while(i<nb)
-  		#Get next character
-  		c=s[i]
-  		#Check if ASCII or MB
-  		ascii=(c<128)
-  		if(c=="\n")
-  			#Explicit line break
-  			Cell(w,h,s[j,i-j],0,2,'',0,link)
-  			i+=1
-  			sep=-1
-  			j=i
-  			l=0
-  			if(nl==1)
-  				@x=@lMargin
-  				w=@w-@rMargin-@x
-  				wmax=(w-2*@cMargin)*1000/@FontSize
-  			end
-  			nl+=1
-  			next
-  		end
-  		if(!ascii or c==' ')
-  			sep=i
-      end
-  		l+=ascii ? cw[c.chr] : 1000
-  		if(l>wmax)
-  			#Automatic line break
-  			if(sep==-1 or i==j)
-  				if(@x>@lMargin)
-  					#Move to next line
-  					@x=@lMargin
-  					@y+=h
-  					w=@w-@rMargin-@x
-  					wmax=(w-2*@cMargin)*1000/@FontSize
-  					i+=1
-  					nl+=1
-  					next
-  				end
-  				if(i==j)
-  					i+=ascii ? 1 : 2
-          end
-  				Cell(w,h,s[j,i-j],0,2,'',0,link)
-  			else
-  				Cell(w,h,s[j,sep-j],0,2,'',0,link)
-  				i=(s[sep]==' ') ? sep+1 : sep
-  			end
-  			sep=-1
-  			j=i
-  			l=0
-  			if(nl==1)
-  				@x=@lMargin
-  				w=@w-@rMargin-@x
-  				wmax=(w-2*@cMargin)*1000/@FontSize
-  			end
-  			nl+=1
-  		else
-  			i+=ascii ? 1 : 2
-      end
-  	end
-  	#Last chunk
-  	if(i!=j)
-  		Cell(l/1000*@FontSize,h,s[j,i-j],0,0,'',0,link)
-    end
-  end
-
-private
-
-  def putfonts()
-  	nf=@n
-    @diffs.each do |diff|
-  		#Encodings
-  		newobj()
-  		out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['+diff+']>>')
-  		out('endobj')
-  	end
-  	# mqr=get_magic_quotes_runtime()
-  	# set_magic_quotes_runtime(0)
-    @FontFiles.each_pair do |file, info|
-  		#Font file embedding
-  		newobj()
-  		@FontFiles[file]['n']=@n
-  		if(defined('FPDF_FONTPATH'))
-  			file=FPDF_FONTPATH+file
-      end
-  		size=filesize(file)
-  		if(!size)
-  			Error('Font file not found')
-      end
-  		out('<</Length '+size)
-  		if(file[-2]=='.z')
-  			out('/Filter /FlateDecode')
-      end
-  		out('/Length1 '+info['length1'])
-  		if(not info['length2'].nil?)
-  			out('/Length2 '+info['length2']+' /Length3 0')
-      end
-  		out('>>')
-  		f=fopen(file,'rb')
-  		putstream(fread(f,size))
-  		fclose(f)
-  		out('endobj')
-  	end
-  	# set_magic_quotes_runtime(mqr)
-    @fonts.each_pair do |k, font|
-  		#Font objects
-  		newobj()
-  		@fonts[k]['n']=@n
-  		out('<</Type /Font')
-  		if(font['type']=='Type0')
-  			putType0(font)
-  		else
-  			name=font['name']
-  			out('/BaseFont /'+name)
-  			if(font['type']=='core')
-  				#Standard font
-  				out('/Subtype /Type1')
-  				if(name!='Symbol' and name!='ZapfDingbats')
-  					out('/Encoding /WinAnsiEncoding')
-  				end
-  			else
-  				#Additional font
-  				out('/Subtype /'+font['type'])
-  				out('/FirstChar 32')
-  				out('/LastChar 255')
-  				out('/Widths '+(@n+1)+' 0 R')
-  				out('/FontDescriptor '+(@n+2)+' 0 R')
-  				if(font['enc'])
-  					if(not font['diff'].nil?)
-  						out('/Encoding '+(nf+font['diff'])+' 0 R')
-  					else
-  						out('/Encoding /WinAnsiEncoding')
-            end
-  				end
-  			end
-  			out('>>')
-  			out('endobj')
-  			if(font['type']!='core')
-  				#Widths
-  				newobj()
-  				cw=font['cw']
-  				s='['
-          32.upto(255) do |i|
-  					s+=cw[i.chr]+' '
-          end
-  				out(s+']')
-  				out('endobj')
-  				#Descriptor
-  				newobj()
-  				s='<</Type /FontDescriptor /FontName /'+name
-  				font['desc'].each_pair do |k, v|  				
-  					s+=' /'+k+' '+v
-          end
-  				file=font['file']
-  				if(file)
-  					s+=' /FontFile'+(font['type']=='Type1' ? '' : '2')+' '+@FontFiles[file]['n']+' 0 R'
-          end
-  				out(s+'>>')
-  				out('endobj')
-  			end
-  		end
-  	end
-  end
-  
-  def putType0(font)
-  	#Type0
-  	out('/Subtype /Type0')
-  	out('/BaseFont /'+font['name']+'-'+font['CMap'])
-  	out('/Encoding /'+font['CMap'])
-  	out('/DescendantFonts ['+(@n+1).to_s+' 0 R]')
-  	out('>>')
-  	out('endobj')
-  	#CIDFont
-  	newobj()
-  	out('<</Type /Font')
-  	out('/Subtype /CIDFontType0')
-  	out('/BaseFont /'+font['name'])
-  	out('/CIDSystemInfo <</Registry (Adobe) /Ordering ('+font['registry']['ordering']+') /Supplement '+font['registry']['supplement'].to_s+'>>')
-  	out('/FontDescriptor '+(@n+1).to_s+' 0 R')
-  	if(font['CMap']=='KSCms-UHC-HW-H')
-  		w='8094 8190 500'
-  	else
-  		w='1 ['
-  		font['cw'].keys.sort.each {|key|
-  		  w+=font['cw'][key].to_s + " "
-  # ActionController::Base::logger.debug key.to_s
-  # ActionController::Base::logger.debug font['cw'][key].to_s
-  		}
-  		w +=']'
-    end
-  	out('/W ['+w+']>>')
-  	out('endobj')
-  	#Font descriptor
-  	newobj()
-  	out('<</Type /FontDescriptor')
-  	out('/FontName /'+font['name'])
-  	out('/Flags 6')
-  	out('/FontBBox [0 -200 1000 900]')
-  	out('/ItalicAngle 0')
-  	out('/Ascent 800')
-  	out('/Descent -200')
-  	out('/CapHeight 800')
-  	out('/StemV 50')
-  	out('>>')
-  	out('endobj')
-  end
-end
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/makefont.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1787 +0,0 @@
-#!/usr/bin/env ruby
-#
-# Utility to generate font definition files
-# Version: 1.1
-# Date:    2006-07-19
-#
-# Changelog:
-#  Version 1.1 - Brian Ollenberger
-#   - Fixed a very small bug in MakeFont for generating FontDef.diff.
-
-Charencodings = {
-# Central Europe
-    'cp1250' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', '.notdef',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        '.notdef',        'perthousand',    'Scaron',         'guilsinglleft',
-        'Sacute',         'Tcaron',         'Zcaron',         'Zacute',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        '.notdef',        'trademark',      'scaron',         'guilsinglright',
-        'sacute',         'tcaron',         'zcaron',         'zacute',
-        'space',          'caron',          'breve',          'Lslash',
-        'currency',       'Aogonek',        'brokenbar',      'section',
-        'dieresis',       'copyright',      'Scedilla',       'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'Zdotaccent',
-        'degree',         'plusminus',      'ogonek',         'lslash',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'cedilla',        'aogonek',        'scedilla',       'guillemotright',
-        'Lcaron',         'hungarumlaut',   'lcaron',         'zdotaccent',
-        'Racute',         'Aacute',         'Acircumflex',    'Abreve',
-        'Adieresis',      'Lacute',         'Cacute',         'Ccedilla',
-        'Ccaron',         'Eacute',         'Eogonek',        'Edieresis',
-        'Ecaron',         'Iacute',         'Icircumflex',    'Dcaron',
-        'Dcroat',         'Nacute',         'Ncaron',         'Oacute',
-        'Ocircumflex',    'Ohungarumlaut',  'Odieresis',      'multiply',
-        'Rcaron',         'Uring',          'Uacute',         'Uhungarumlaut',
-        'Udieresis',      'Yacute',         'Tcommaaccent',   'germandbls',
-        'racute',         'aacute',         'acircumflex',    'abreve',
-        'adieresis',      'lacute',         'cacute',         'ccedilla',
-        'ccaron',         'eacute',         'eogonek',        'edieresis',
-        'ecaron',         'iacute',         'icircumflex',    'dcaron',
-        'dcroat',         'nacute',         'ncaron',         'oacute',
-        'ocircumflex',    'ohungarumlaut',  'odieresis',      'divide',
-        'rcaron',         'uring',          'uacute',         'uhungarumlaut',
-        'udieresis',      'yacute',         'tcommaaccent',   'dotaccent'
-    ],
-# Cyrillic
-    'cp1251' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'afii10051',      'afii10052',      'quotesinglbase', 'afii10100',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        'Euro',           'perthousand',    'afii10058',      'guilsinglleft',
-        'afii10059',      'afii10061',      'afii10060',      'afii10145',
-        'afii10099',      'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        '.notdef',        'trademark',      'afii10106',      'guilsinglright',
-        'afii10107',      'afii10109',      'afii10108',      'afii10193',
-        'space',          'afii10062',      'afii10110',      'afii10057',
-        'currency',       'afii10050',      'brokenbar',      'section',
-        'afii10023',      'copyright',      'afii10053',      'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'afii10056',
-        'degree',         'plusminus',      'afii10055',      'afii10103',
-        'afii10098',      'mu',             'paragraph',      'periodcentered',
-        'afii10071',      'afii61352',      'afii10101',      'guillemotright',
-        'afii10105',      'afii10054',      'afii10102',      'afii10104',
-        'afii10017',      'afii10018',      'afii10019',      'afii10020',
-        'afii10021',      'afii10022',      'afii10024',      'afii10025',
-        'afii10026',      'afii10027',      'afii10028',      'afii10029',
-        'afii10030',      'afii10031',      'afii10032',      'afii10033',
-        'afii10034',      'afii10035',      'afii10036',      'afii10037',
-        'afii10038',      'afii10039',      'afii10040',      'afii10041',
-        'afii10042',      'afii10043',      'afii10044',      'afii10045',
-        'afii10046',      'afii10047',      'afii10048',      'afii10049',
-        'afii10065',      'afii10066',      'afii10067',      'afii10068',
-        'afii10069',      'afii10070',      'afii10072',      'afii10073',
-        'afii10074',      'afii10075',      'afii10076',      'afii10077',
-        'afii10078',      'afii10079',      'afii10080',      'afii10081',
-        'afii10082',      'afii10083',      'afii10084',      'afii10085',
-        'afii10086',      'afii10087',      'afii10088',      'afii10089',
-        'afii10090',      'afii10091',      'afii10092',      'afii10093',
-        'afii10094',      'afii10095',      'afii10096',      'afii10097'
-    ],
-# Western Europe
-    'cp1252' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', 'florin',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        'circumflex',     'perthousand',    'Scaron',         'guilsinglleft',
-        'OE',             '.notdef',        'Zcaron',         '.notdef',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        'tilde',          'trademark',      'scaron',         'guilsinglright',
-        'oe',             '.notdef',        'zcaron',         'Ydieresis',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'currency',       'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'questiondown',
-        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
-        'Adieresis',      'Aring',          'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
-        'Eth',            'Ntilde',         'Ograve',         'Oacute',
-        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
-        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Yacute',         'Thorn',          'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'atilde',
-        'adieresis',      'aring',          'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'igrave',         'iacute',         'icircumflex',    'idieresis',
-        'eth',            'ntilde',         'ograve',         'oacute',
-        'ocircumflex',    'otilde',         'odieresis',      'divide',
-        'oslash',         'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'yacute',         'thorn',          'ydieresis'
-    ],
-# Greek
-    'cp1253' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', 'florin',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        '.notdef',        'perthousand',    '.notdef',        'guilsinglleft',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        '.notdef',        'trademark',      '.notdef',        'guilsinglright',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'dieresistonos',  'Alphatonos',     'sterling',
-        'currency',       'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      '.notdef',        'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'afii00208',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'tonos',          'mu',             'paragraph',      'periodcentered',
-        'Epsilontonos',   'Etatonos',       'Iotatonos',      'guillemotright',
-        'Omicrontonos',   'onehalf',        'Upsilontonos',   'Omegatonos',
-        'iotadieresistonos','Alpha',          'Beta',           'Gamma',
-        'Delta',          'Epsilon',        'Zeta',           'Eta',
-        'Theta',          'Iota',           'Kappa',          'Lambda',
-        'Mu',             'Nu',             'Xi',             'Omicron',
-        'Pi',             'Rho',            '.notdef',        'Sigma',
-        'Tau',            'Upsilon',        'Phi',            'Chi',
-        'Psi',            'Omega',          'Iotadieresis',   'Upsilondieresis',
-        'alphatonos',     'epsilontonos',   'etatonos',       'iotatonos',
-        'upsilondieresistonos','alpha',          'beta',           'gamma',
-        'delta',          'epsilon',        'zeta',           'eta',
-        'theta',          'iota',           'kappa',          'lambda',
-        'mu',             'nu',             'xi',             'omicron',
-        'pi',             'rho',            'sigma1',         'sigma',
-        'tau',            'upsilon',        'phi',            'chi',
-        'psi',            'omega',          'iotadieresis',   'upsilondieresis',
-        'omicrontonos',   'upsilontonos',   'omegatonos',     '.notdef'
-    ],
-# Turkish
-    'cp1254' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', 'florin',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        'circumflex',     'perthousand',    'Scaron',         'guilsinglleft',
-        'OE',             '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        'tilde',          'trademark',      'scaron',         'guilsinglright',
-        'oe',             '.notdef',        '.notdef',        'Ydieresis',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'currency',       'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'questiondown',
-        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
-        'Adieresis',      'Aring',          'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
-        'Gbreve',         'Ntilde',         'Ograve',         'Oacute',
-        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
-        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Idotaccent',     'Scedilla',       'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'atilde',
-        'adieresis',      'aring',          'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'igrave',         'iacute',         'icircumflex',    'idieresis',
-        'gbreve',         'ntilde',         'ograve',         'oacute',
-        'ocircumflex',    'otilde',         'odieresis',      'divide',
-        'oslash',         'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'dotlessi',       'scedilla',       'ydieresis'
-    ],
-# Hebrew
-    'cp1255' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', 'florin',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        'circumflex',     'perthousand',    '.notdef',        'guilsinglleft',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        'tilde',          'trademark',      '.notdef',        'guilsinglright',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'afii57636',      'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      'multiply',       'guillemotleft',
-        'logicalnot',     'sfthyphen',      'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'middot',
-        'cedilla',        'onesuperior',    'divide',         'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'questiondown',
-        'afii57799',      'afii57801',      'afii57800',      'afii57802',
-        'afii57793',      'afii57794',      'afii57795',      'afii57798',
-        'afii57797',      'afii57806',      '.notdef',        'afii57796',
-        'afii57807',      'afii57839',      'afii57645',      'afii57841',
-        'afii57842',      'afii57804',      'afii57803',      'afii57658',
-        'afii57716',      'afii57717',      'afii57718',      'gereshhebrew',
-        'gershayimhebrew','.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'afii57664',      'afii57665',      'afii57666',      'afii57667',
-        'afii57668',      'afii57669',      'afii57670',      'afii57671',
-        'afii57672',      'afii57673',      'afii57674',      'afii57675',
-        'afii57676',      'afii57677',      'afii57678',      'afii57679',
-        'afii57680',      'afii57681',      'afii57682',      'afii57683',
-        'afii57684',      'afii57685',      'afii57686',      'afii57687',
-        'afii57688',      'afii57689',      'afii57690',      '.notdef',
-        '.notdef',        'afii299',        'afii300',        '.notdef'
-    ],
-# Baltic
-    'cp1257' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', '.notdef',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        '.notdef',        'perthousand',    '.notdef',        'guilsinglleft',
-        '.notdef',        'dieresis',       'caron',          'cedilla',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        '.notdef',        'trademark',      '.notdef',        'guilsinglright',
-        '.notdef',        'macron',         'ogonek',         '.notdef',
-        'space',          '.notdef',        'cent',           'sterling',
-        'currency',       '.notdef',        'brokenbar',      'section',
-        'Oslash',         'copyright',      'Rcommaaccent',   'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'AE',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'oslash',         'onesuperior',    'rcommaaccent',   'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'ae',
-        'Aogonek',        'Iogonek',        'Amacron',        'Cacute',
-        'Adieresis',      'Aring',          'Eogonek',        'Emacron',
-        'Ccaron',         'Eacute',         'Zacute',         'Edotaccent',
-        'Gcommaaccent',   'Kcommaaccent',   'Imacron',        'Lcommaaccent',
-        'Scaron',         'Nacute',         'Ncommaaccent',   'Oacute',
-        'Omacron',        'Otilde',         'Odieresis',      'multiply',
-        'Uogonek',        'Lslash',         'Sacute',         'Umacron',
-        'Udieresis',      'Zdotaccent',     'Zcaron',         'germandbls',
-        'aogonek',        'iogonek',        'amacron',        'cacute',
-        'adieresis',      'aring',          'eogonek',        'emacron',
-        'ccaron',         'eacute',         'zacute',         'edotaccent',
-        'gcommaaccent',   'kcommaaccent',   'imacron',        'lcommaaccent',
-        'scaron',         'nacute',         'ncommaaccent',   'oacute',
-        'omacron',        'otilde',         'odieresis',      'divide',
-        'uogonek',        'lslash',         'sacute',         'umacron',
-        'udieresis',      'zdotaccent',     'zcaron',         'dotaccent'
-    ],
-# Vietnamese
-    'cp1258' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', 'florin',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        'circumflex',     'perthousand',    '.notdef',        'guilsinglleft',
-        'OE',             '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        'tilde',          'trademark',      '.notdef',        'guilsinglright',
-        'oe',             '.notdef',        '.notdef',        'Ydieresis',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'currency',       'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'questiondown',
-        'Agrave',         'Aacute',         'Acircumflex',    'Abreve',
-        'Adieresis',      'Aring',          'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'gravecomb',      'Iacute',         'Icircumflex',    'Idieresis',
-        'Dcroat',         'Ntilde',         'hookabovecomb',  'Oacute',
-        'Ocircumflex',    'Ohorn',          'Odieresis',      'multiply',
-        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Uhorn',          'tildecomb',      'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'abreve',
-        'adieresis',      'aring',          'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'acutecomb',      'iacute',         'icircumflex',    'idieresis',
-        'dcroat',         'ntilde',         'dotbelowcomb',   'oacute',
-        'ocircumflex',    'ohorn',          'odieresis',      'divide',
-        'oslash',         'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'uhorn',          'dong',           'ydieresis'
-    ],
-# Thai
-    'cp874' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        'ellipsis',       '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'kokaithai',      'khokhaithai',    'khokhuatthai',
-        'khokhwaithai',   'khokhonthai',    'khorakhangthai', 'ngonguthai',
-        'chochanthai',    'chochingthai',   'chochangthai',   'sosothai',
-        'chochoethai',    'yoyingthai',     'dochadathai',    'topatakthai',
-        'thothanthai',    'thonangmonthothai', 'thophuthaothai', 'nonenthai',
-        'dodekthai',      'totaothai',      'thothungthai',   'thothahanthai',
-        'thothongthai',   'nonuthai',       'bobaimaithai',   'poplathai',
-        'phophungthai',   'fofathai',       'phophanthai',    'fofanthai',
-        'phosamphaothai', 'momathai',       'yoyakthai',      'roruathai',
-        'ruthai',         'lolingthai',     'luthai',         'wowaenthai',
-        'sosalathai',     'sorusithai',     'sosuathai',      'hohipthai',
-        'lochulathai',    'oangthai',       'honokhukthai',   'paiyannoithai',
-        'saraathai',      'maihanakatthai', 'saraaathai',     'saraamthai',
-        'saraithai',      'saraiithai',     'sarauethai',     'saraueethai',
-        'sarauthai',      'sarauuthai',     'phinthuthai',    '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        'bahtthai',
-        'saraethai',      'saraaethai',     'saraothai',      'saraaimaimuanthai',
-        'saraaimaimalaithai', 'lakkhangyaothai', 'maiyamokthai', 'maitaikhuthai',
-        'maiekthai',      'maithothai',     'maitrithai',     'maichattawathai',
-        'thanthakhatthai', 'nikhahitthai',  'yamakkanthai',   'fongmanthai',
-        'zerothai',       'onethai',        'twothai',        'threethai',
-        'fourthai',       'fivethai',       'sixthai',        'seventhai',
-        'eightthai',      'ninethai',       'angkhankhuthai', 'khomutthai',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef'
-    ],
-# Western Europe
-    'ISO-8859-1' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'currency',       'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'questiondown',
-        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
-        'Adieresis',      'Aring',          'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
-        'Eth',            'Ntilde',         'Ograve',         'Oacute',
-        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
-        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Yacute',         'Thorn',          'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'atilde',
-        'adieresis',      'aring',          'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'igrave',         'iacute',         'icircumflex',    'idieresis',
-        'eth',            'ntilde',         'ograve',         'oacute',
-        'ocircumflex',    'otilde',         'odieresis',      'divide',
-        'oslash',         'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'yacute',         'thorn',          'ydieresis'
-    ],
-# Central Europe
-    'ISO-8859-2' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'Aogonek',        'breve',          'Lslash',
-        'currency',       'Lcaron',         'Sacute',         'section',
-        'dieresis',       'Scaron',         'Scedilla',       'Tcaron',
-        'Zacute',         'hyphen',         'Zcaron',         'Zdotaccent',
-        'degree',         'aogonek',        'ogonek',         'lslash',
-        'acute',          'lcaron',         'sacute',         'caron',
-        'cedilla',        'scaron',         'scedilla',       'tcaron',
-        'zacute',         'hungarumlaut',   'zcaron',         'zdotaccent',
-        'Racute',         'Aacute',         'Acircumflex',    'Abreve',
-        'Adieresis',      'Lacute',         'Cacute',         'Ccedilla',
-        'Ccaron',         'Eacute',         'Eogonek',        'Edieresis',
-        'Ecaron',         'Iacute',         'Icircumflex',    'Dcaron',
-        'Dcroat',         'Nacute',         'Ncaron',         'Oacute',
-        'Ocircumflex',    'Ohungarumlaut',  'Odieresis',      'multiply',
-        'Rcaron',         'Uring',          'Uacute',         'Uhungarumlaut',
-        'Udieresis',      'Yacute',         'Tcommaaccent',   'germandbls',
-        'racute',         'aacute',         'acircumflex',    'abreve',
-        'adieresis',      'lacute',         'cacute',         'ccedilla',
-        'ccaron',         'eacute',         'eogonek',        'edieresis',
-        'ecaron',         'iacute',         'icircumflex',    'dcaron',
-        'dcroat',         'nacute',         'ncaron',         'oacute',
-        'ocircumflex',    'ohungarumlaut',  'odieresis',      'divide',
-        'rcaron',         'uring',          'uacute',         'uhungarumlaut',
-        'udieresis',      'yacute',         'tcommaaccent',   'dotaccent'
-    ],
-# Baltic
-    'ISO-8859-4' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'Aogonek',        'kgreenlandic',   'Rcommaaccent',
-        'currency',       'Itilde',         'Lcommaaccent',   'section',
-        'dieresis',       'Scaron',         'Emacron',        'Gcommaaccent',
-        'Tbar',           'hyphen',         'Zcaron',         'macron',
-        'degree',         'aogonek',        'ogonek',         'rcommaaccent',
-        'acute',          'itilde',         'lcommaaccent',   'caron',
-        'cedilla',        'scaron',         'emacron',        'gcommaaccent',
-        'tbar',           'Eng',            'zcaron',         'eng',
-        'Amacron',        'Aacute',         'Acircumflex',    'Atilde',
-        'Adieresis',      'Aring',          'AE',             'Iogonek',
-        'Ccaron',         'Eacute',         'Eogonek',        'Edieresis',
-        'Edotaccent',     'Iacute',         'Icircumflex',    'Imacron',
-        'Dcroat',         'Ncommaaccent',   'Omacron',        'Kcommaaccent',
-        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
-        'Oslash',         'Uogonek',        'Uacute',         'Ucircumflex',
-        'Udieresis',      'Utilde',         'Umacron',        'germandbls',
-        'amacron',        'aacute',         'acircumflex',    'atilde',
-        'adieresis',      'aring',          'ae',             'iogonek',
-        'ccaron',         'eacute',         'eogonek',        'edieresis',
-        'edotaccent',     'iacute',         'icircumflex',    'imacron',
-        'dcroat',         'ncommaaccent',   'omacron',        'kcommaaccent',
-        'ocircumflex',    'otilde',         'odieresis',      'divide',
-        'oslash',         'uogonek',        'uacute',         'ucircumflex',
-        'udieresis',      'utilde',         'umacron',        'dotaccent'
-    ],
-# Cyrillic
-    'ISO-8859-5' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'afii10023',      'afii10051',      'afii10052',
-        'afii10053',      'afii10054',      'afii10055',      'afii10056',
-        'afii10057',      'afii10058',      'afii10059',      'afii10060',
-        'afii10061',      'hyphen',         'afii10062',      'afii10145',
-        'afii10017',      'afii10018',      'afii10019',      'afii10020',
-        'afii10021',      'afii10022',      'afii10024',      'afii10025',
-        'afii10026',      'afii10027',      'afii10028',      'afii10029',
-        'afii10030',      'afii10031',      'afii10032',      'afii10033',
-        'afii10034',      'afii10035',      'afii10036',      'afii10037',
-        'afii10038',      'afii10039',      'afii10040',      'afii10041',
-        'afii10042',      'afii10043',      'afii10044',      'afii10045',
-        'afii10046',      'afii10047',      'afii10048',      'afii10049',
-        'afii10065',      'afii10066',      'afii10067',      'afii10068',
-        'afii10069',      'afii10070',      'afii10072',      'afii10073',
-        'afii10074',      'afii10075',      'afii10076',      'afii10077',
-        'afii10078',      'afii10079',      'afii10080',      'afii10081',
-        'afii10082',      'afii10083',      'afii10084',      'afii10085',
-        'afii10086',      'afii10087',      'afii10088',      'afii10089',
-        'afii10090',      'afii10091',      'afii10092',      'afii10093',
-        'afii10094',      'afii10095',      'afii10096',      'afii10097',
-        'afii61352',      'afii10071',      'afii10099',      'afii10100',
-        'afii10101',      'afii10102',      'afii10103',      'afii10104',
-        'afii10105',      'afii10106',      'afii10107',      'afii10108',
-        'afii10109',      'section',        'afii10110',      'afii10193'
-    ],
-# Greek
-    'ISO-8859-7' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'quoteleft',      'quoteright',     'sterling',
-        '.notdef',        '.notdef',        'brokenbar',      'section',
-        'dieresis',       'copyright',      '.notdef',        'guillemotleft',
-        'logicalnot',     'hyphen',         '.notdef',        'afii00208',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'tonos',          'dieresistonos',  'Alphatonos',     'periodcentered',
-        'Epsilontonos',   'Etatonos',       'Iotatonos',      'guillemotright',
-        'Omicrontonos',   'onehalf',        'Upsilontonos',   'Omegatonos',
-        'iotadieresistonos','Alpha',          'Beta',           'Gamma',
-        'Delta',          'Epsilon',        'Zeta',           'Eta',
-        'Theta',          'Iota',           'Kappa',          'Lambda',
-        'Mu',             'Nu',             'Xi',             'Omicron',
-        'Pi',             'Rho',            '.notdef',        'Sigma',
-        'Tau',            'Upsilon',        'Phi',            'Chi',
-        'Psi',            'Omega',          'Iotadieresis',   'Upsilondieresis',
-        'alphatonos',     'epsilontonos',   'etatonos',       'iotatonos',
-        'upsilondieresistonos','alpha',          'beta',           'gamma',
-        'delta',          'epsilon',        'zeta',           'eta',
-        'theta',          'iota',           'kappa',          'lambda',
-        'mu',             'nu',             'xi',             'omicron',
-        'pi',             'rho',            'sigma1',         'sigma',
-        'tau',            'upsilon',        'phi',            'chi',
-        'psi',            'omega',          'iotadieresis',   'upsilondieresis',
-        'omicrontonos',   'upsilontonos',   'omegatonos',     '.notdef'
-    ],
-# Turkish
-    'ISO-8859-9' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'currency',       'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'questiondown',
-        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
-        'Adieresis',      'Aring',          'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
-        'Gbreve',         'Ntilde',         'Ograve',         'Oacute',
-        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
-        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Idotaccent',     'Scedilla',       'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'atilde',
-        'adieresis',      'aring',          'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'igrave',         'iacute',         'icircumflex',    'idieresis',
-        'gbreve',         'ntilde',         'ograve',         'oacute',
-        'ocircumflex',    'otilde',         'odieresis',      'divide',
-        'oslash',         'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'dotlessi',       'scedilla',       'ydieresis'
-    ],
-# Thai
-    'ISO-8859-11' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'kokaithai',      'khokhaithai',    'khokhuatthai',
-        'khokhwaithai',   'khokhonthai',    'khorakhangthai', 'ngonguthai',
-        'chochanthai',    'chochingthai',   'chochangthai',   'sosothai',
-        'chochoethai',    'yoyingthai',     'dochadathai',    'topatakthai',
-        'thothanthai',    'thonangmonthothai','thophuthaothai', 'nonenthai',
-        'dodekthai',      'totaothai',      'thothungthai',   'thothahanthai',
-        'thothongthai',   'nonuthai',       'bobaimaithai',   'poplathai',
-        'phophungthai',   'fofathai',       'phophanthai',    'fofanthai',
-        'phosamphaothai', 'momathai',       'yoyakthai',      'roruathai',
-        'ruthai',         'lolingthai',     'luthai',         'wowaenthai',
-        'sosalathai',     'sorusithai',     'sosuathai',      'hohipthai',
-        'lochulathai',    'oangthai',       'honokhukthai',   'paiyannoithai',
-        'saraathai',      'maihanakatthai', 'saraaathai',     'saraamthai',
-        'saraithai',      'saraiithai',     'sarauethai',     'saraueethai',
-        'sarauthai',      'sarauuthai',     'phinthuthai',    '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        'bahtthai',
-        'saraethai',      'saraaethai',     'saraothai',      'saraaimaimuanthai',
-        'saraaimaimalaithai','lakkhangyaothai','maiyamokthai',   'maitaikhuthai',
-        'maiekthai',      'maithothai',     'maitrithai',     'maichattawathai',
-        'thanthakhatthai','nikhahitthai',   'yamakkanthai',   'fongmanthai',
-        'zerothai',       'onethai',        'twothai',        'threethai',
-        'fourthai',       'fivethai',       'sixthai',        'seventhai',
-        'eightthai',      'ninethai',       'angkhankhuthai', 'khomutthai',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef'
-    ],
-# Western Europe
-    'ISO-8859-15' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'Euro',           'yen',            'Scaron',         'section',
-        'scaron',         'copyright',      'ordfeminine',    'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'Zcaron',         'mu',             'paragraph',      'periodcentered',
-        'zcaron',         'onesuperior',    'ordmasculine',   'guillemotright',
-        'OE',             'oe',             'Ydieresis',      'questiondown',
-        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
-        'Adieresis',      'Aring',          'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
-        'Eth',            'Ntilde',         'Ograve',         'Oacute',
-        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
-        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Yacute',         'Thorn',          'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'atilde',
-        'adieresis',      'aring',          'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'igrave',         'iacute',         'icircumflex',    'idieresis',
-        'eth',            'ntilde',         'ograve',         'oacute',
-        'ocircumflex',    'otilde',         'odieresis',      'divide',
-        'oslash',         'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'yacute',         'thorn',          'ydieresis'
-    ],
-# Central Europe
-    'ISO-8859-16' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'Aogonek',        'aogonek',        'Lslash',
-        'Euro',           'quotedblbase',   'Scaron',         'section',
-        'scaron',         'copyright',      'Scommaaccent',   'guillemotleft',
-        'Zacute',         'hyphen',         'zacute',         'Zdotaccent',
-        'degree',         'plusminus',      'Ccaron',         'lslash',
-        'Zcaron',         'quotedblright',  'paragraph',      'periodcentered',
-        'zcaron',         'ccaron',         'scommaaccent',   'guillemotright',
-        'OE',             'oe',             'Ydieresis',      'zdotaccent',
-        'Agrave',         'Aacute',         'Acircumflex',    'Abreve',
-        'Adieresis',      'Cacute',         'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
-        'Dcroat',         'Nacute',         'Ograve',         'Oacute',
-        'Ocircumflex',    'Ohungarumlaut',  'Odieresis',      'Sacute',
-        'Uhungarumlaut',  'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Eogonek',        'Tcommaaccent',   'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'abreve',
-        'adieresis',      'cacute',         'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'igrave',         'iacute',         'icircumflex',    'idieresis',
-        'dcroat',         'nacute',         'ograve',         'oacute',
-        'ocircumflex',    'ohungarumlaut',  'odieresis',      'sacute',
-        'uhungarumlaut',  'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'eogonek',        'tcommaaccent',   'ydieresis'
-    ],
-# Russian
-    'KOI8-R' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'SF100000',       'SF110000',       'SF010000',       'SF030000',
-        'SF020000',       'SF040000',       'SF080000',       'SF090000',
-        'SF060000',       'SF070000',       'SF050000',       'upblock',
-        'dnblock',        'block',          'lfblock',        'rtblock',
-        'ltshade',        'shade',          'dkshade',        'integraltp',
-        'filledbox',      'periodcentered', 'radical',        'approxequal',
-        'lessequal',      'greaterequal',   'space',          'integralbt',
-        'degree',         'twosuperior',    'periodcentered', 'divide',
-        'SF430000',       'SF240000',       'SF510000',       'afii10071',
-        'SF520000',       'SF390000',       'SF220000',       'SF210000',
-        'SF250000',       'SF500000',       'SF490000',       'SF380000',
-        'SF280000',       'SF270000',       'SF260000',       'SF360000',
-        'SF370000',       'SF420000',       'SF190000',       'afii10023',
-        'SF200000',       'SF230000',       'SF470000',       'SF480000',
-        'SF410000',       'SF450000',       'SF460000',       'SF400000',
-        'SF540000',       'SF530000',       'SF440000',       'copyright',
-        'afii10096',      'afii10065',      'afii10066',      'afii10088',
-        'afii10069',      'afii10070',      'afii10086',      'afii10068',
-        'afii10087',      'afii10074',      'afii10075',      'afii10076',
-        'afii10077',      'afii10078',      'afii10079',      'afii10080',
-        'afii10081',      'afii10097',      'afii10082',      'afii10083',
-        'afii10084',      'afii10085',      'afii10072',      'afii10067',
-        'afii10094',      'afii10093',      'afii10073',      'afii10090',
-        'afii10095',      'afii10091',      'afii10089',      'afii10092',
-        'afii10048',      'afii10017',      'afii10018',      'afii10040',
-        'afii10021',      'afii10022',      'afii10038',      'afii10020',
-        'afii10039',      'afii10026',      'afii10027',      'afii10028',
-        'afii10029',      'afii10030',      'afii10031',      'afii10032',
-        'afii10033',      'afii10049',      'afii10034',      'afii10035',
-        'afii10036',      'afii10037',      'afii10024',      'afii10019',
-        'afii10046',      'afii10045',      'afii10025',      'afii10042',
-        'afii10047',      'afii10043',      'afii10041',      'afii10044'
-    ],
-# Ukrainian
-    'KOI8-U' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'SF100000',       'SF110000',       'SF010000',       'SF030000',
-        'SF020000',       'SF040000',       'SF080000',       'SF090000',
-        'SF060000',       'SF070000',       'SF050000',       'upblock',
-        'dnblock',        'block',          'lfblock',        'rtblock',
-        'ltshade',        'shade',          'dkshade',        'integraltp',
-        'filledbox',      'bullet',         'radical',        'approxequal',
-        'lessequal',      'greaterequal',   'space',          'integralbt',
-        'degree',         'twosuperior',    'periodcentered', 'divide',
-        'SF430000',       'SF240000',       'SF510000',       'afii10071',
-        'afii10101',      'SF390000',       'afii10103',      'afii10104',
-        'SF250000',       'SF500000',       'SF490000',       'SF380000',
-        'SF280000',       'afii10098',      'SF260000',       'SF360000',
-        'SF370000',       'SF420000',       'SF190000',       'afii10023',
-        'afii10053',      'SF230000',       'afii10055',      'afii10056',
-        'SF410000',       'SF450000',       'SF460000',       'SF400000',
-        'SF540000',       'afii10050',      'SF440000',       'copyright',
-        'afii10096',      'afii10065',      'afii10066',      'afii10088',
-        'afii10069',      'afii10070',      'afii10086',      'afii10068',
-        'afii10087',      'afii10074',      'afii10075',      'afii10076',
-        'afii10077',      'afii10078',      'afii10079',      'afii10080',
-        'afii10081',      'afii10097',      'afii10082',      'afii10083',
-        'afii10084',      'afii10085',      'afii10072',      'afii10067',
-        'afii10094',      'afii10093',      'afii10073',      'afii10090',
-        'afii10095',      'afii10091',      'afii10089',      'afii10092',
-        'afii10048',      'afii10017',      'afii10018',      'afii10040',
-        'afii10021',      'afii10022',      'afii10038',      'afii10020',
-        'afii10039',      'afii10026',      'afii10027',      'afii10028',
-        'afii10029',      'afii10030',      'afii10031',      'afii10032',
-        'afii10033',      'afii10049',      'afii10034',      'afii10035',
-        'afii10036',      'afii10037',      'afii10024',      'afii10019',
-        'afii10046',      'afii10045',      'afii10025',      'afii10042',
-        'afii10047',      'afii10043',      'afii10041',      'afii10044'
-    ]
-}
-
-def ReadAFM(file, map)
-
-    # Read a font metric file
-    a = IO.readlines(file)
-
-    raise "File no found: #{file}" if a.size == 0
-
-    widths = {}
-    fm = {}
-    fix = { 'Edot' => 'Edotaccent', 'edot' => 'edotaccent',
-            'Idot' => 'Idotaccent',
-            'Zdot' => 'Zdotaccent', 'zdot' => 'zdotaccent',
-            'Odblacute' => 'Ohungarumlaut', 'odblacute' => 'ohungarumlaut',
-            'Udblacute' => 'Uhungarumlaut', 'udblacute' => 'uhungarumlaut',
-            'Gcedilla' => 'Gcommaaccent', 'gcedilla' => 'gcommaaccent',
-            'Kcedilla' => 'Kcommaaccent', 'kcedilla' => 'kcommaaccent',
-            'Lcedilla' => 'Lcommaaccent', 'lcedilla' => 'lcommaaccent',
-            'Ncedilla' => 'Ncommaaccent', 'ncedilla' => 'ncommaaccent',
-            'Rcedilla' => 'Rcommaaccent', 'rcedilla' => 'rcommaaccent',
-            'Scedilla' => 'Scommaaccent',' scedilla' => 'scommaaccent',
-            'Tcedilla' => 'Tcommaaccent',' tcedilla' => 'tcommaaccent',
-            'Dslash' => 'Dcroat', 'dslash' => 'dcroat',
-            'Dmacron' => 'Dcroat', 'dmacron' => 'dcroat',
-            'combininggraveaccent' => 'gravecomb',
-            'combininghookabove' => 'hookabovecomb',
-            'combiningtildeaccent' => 'tildecomb',
-            'combiningacuteaccent' => 'acutecomb',
-            'combiningdotbelow' => 'dotbelowcomb',
-            'dongsign' => 'dong'
-        }
-
-    a.each do |line|
-
-        e = line.rstrip.split(' ')
-	next if e.size < 2
-
-	code  = e[0]
-	param = e[1]
-
-	if code == 'C' then
-
-	    # Character metrics
-	    cc = e[1].to_i
-	    w  = e[4]
-	    gn = e[7]
-
-	    gn = 'Euro' if gn[-4, 4] == '20AC'
-
-	    if fix[gn] then
-
-		# Fix incorrect glyph name
-		0.upto(map.size - 1) do |i|
-		    if map[i] == fix[gn] then
-			map[i] = gn
-		    end
-		end
-	    end
-
-	    if map.size == 0 then
-		# Symbolic font: use built-in encoding
-		widths[cc] = w
-	    else
-		widths[gn] = w
-		fm['CapXHeight'] = e[13].to_i if gn == 'X'
-	    end
-
-	    fm['MissingWidth'] = w if gn == '.notdef'
-
-	elsif code == 'FontName' then
-	    fm['FontName'] = param
-	elsif code == 'Weight' then
-	    fm['Weight'] = param
-	elsif code == 'ItalicAngle' then
-	    fm['ItalicAngle'] = param.to_f
-	elsif code == 'Ascender' then
-	    fm['Ascender'] = param.to_i
-	elsif code == 'Descender' then
-	    fm['Descender'] = param.to_i
-	elsif code == 'UnderlineThickness' then
-	    fm['UnderlineThickness'] = param.to_i
-	elsif code == 'UnderlinePosition' then
-	    fm['UnderlinePosition'] = param.to_i
-	elsif code == 'IsFixedPitch' then
-	    fm['IsFixedPitch'] = (param == 'true')
-	elsif code == 'FontBBox' then
-	    fm['FontBBox'] = "[#{e[1]},#{e[2]},#{e[3]},#{e[4]}]"
-	elsif code == 'CapHeight' then
-	    fm['CapHeight'] = param.to_i
-	elsif code == 'StdVW' then
-	    fm['StdVW'] = param.to_i
-	end
-    end
-
-    raise 'FontName not found' unless fm['FontName']
-
-    if map.size > 0 then
-	widths['.notdef'] = 600 unless widths['.notdef']
-
-	if (widths['Delta'] == nil) && widths['increment'] then
-	    widths['Delta'] = widths['increment']
-	end
-
-	# Order widths according to map
-	0.upto(255) do |i|
-	    if widths[map[i]] == nil
-		puts "Warning: character #{map[i]} is missing"
-		widths[i] = widths['.notdef']
-	    else
-		widths[i] = widths[map[i]]
-	    end
-	end
-    end
-
-    fm['Widths'] = widths
-
-    return fm
-end
-
-def MakeFontDescriptor(fm, symbolic)
-
-    # Ascent
-    asc = fm['Ascender'] ? fm['Ascender'] : 1000
-    fd = "{\n        'Ascent' => '#{asc}'"
-
-    # Descent
-    desc = fm['Descender'] ? fm['Descender'] : -200
-    fd += ", 'Descent' => '#{desc}'"
-
-    # CapHeight
-    if fm['CapHeight'] then
-        ch = fm['CapHeight']
-    elsif fm['CapXHeight']
-        ch = fm['CapXHeight']
-    else
-        ch = asc
-    end
-    fd += ", 'CapHeight' => '#{ch}'"
-
-    # Flags
-    flags = 0
-
-    if fm['IsFixedPitch'] then
-        flags += 1 << 0
-    end
-
-    if symbolic then
-        flags += 1 << 2
-    else
-        flags += 1 << 5
-    end
-
-    if fm['ItalicAngle'] && (fm['ItalicAngle'] != 0) then
-        flags += 1 << 6
-    end
-
-    fd += ",\n        'Flags' => '#{flags}'"
-
-    # FontBBox
-    if fm['FontBBox'] then
-        fbb = fm['FontBBox'].gsub(/,/, ' ')
-    else
-        fbb = "[0 #{desc - 100} 1000 #{asc + 100}]"
-    end
-
-    fd += ", 'FontBBox' => '#{fbb}'"
-
-    # ItalicAngle
-    ia = fm['ItalicAngle'] ? fm['ItalicAngle'] : 0
-    fd += ",\n        'ItalicAngle' => '#{ia}'"
-
-    # StemV
-    if fm['StdVW'] then
-        stemv = fm['StdVW']
-    elsif fm['Weight'] && (/bold|black/i =~ fm['Weight'])
-        stemv = 120
-    else
-        stemv = 70
-    end
-
-    fd += ", 'StemV' => '#{stemv}'"
-
-    # MissingWidth
-    if fm['MissingWidth'] then
-        fd += ", 'MissingWidth' => '#{fm['MissingWidth']}'"
-    end
-
-    fd += "\n        }"
-    return fd
-end
-
-def MakeWidthArray(fm)
-
-    # Make character width array
-    s = "        [\n        "
-
-    cw = fm['Widths']
-
-    0.upto(255) do |i|
-        s += "%5d" % cw[i]
-        s += "," if i != 255
-        s += "\n        " if (i % 8) == 7
-    end
-
-    s += ']'
-
-    return s
-end
-
-def MakeFontEncoding(map)
-
-    # Build differences from reference encoding
-    ref = Charencodings['cp1252']
-    s = ''
-    last = 0
-    32.upto(255) do |i|
-	if map[i] != ref[i] then
-	    if i != last + 1 then
-		s += i.to_s + ' '
-            end
-	    last = i
-	    s += '/' + map[i] + ' '
-	end
-    end
-    return s.rstrip
-end
-
-def ReadShort(f)
-    a = f.read(2).unpack('n')
-    return a[0]
-end
-
-def ReadLong(f)
-    a = f.read(4).unpack('N')
-    return a[0]
-end
-
-def CheckTTF(file)
-
-    rl = false
-    pp = false
-    e  = false
-
-    # Check if font license allows embedding
-    File.open(file, 'rb') do |f|
-
-        # Extract number of tables
-        f.seek(4, IO::SEEK_CUR)
-	nb = ReadShort(f)
-        f.seek(6, IO::SEEK_CUR)
-
-        # Seek OS/2 table
-	found = false
-        0.upto(nb - 1) do |i|
-            if f.read(4) == 'OS/2' then
-                found = true
-                break
-            end
-
-           f.seek(12, IO::SEEK_CUR)
-        end
-
-	if ! found then
-            return
-        end
-
-        f.seek(4, IO::SEEK_CUR)
-        offset = ReadLong(f)
-        f.seek(offset, IO::SEEK_SET)
-
-        # Extract fsType flags
-        f.seek(8, IO::SEEK_CUR)
-	fsType = ReadShort(f)
-
-	rl = (fsType & 0x02) != 0
-	pp = (fsType & 0x04) != 0
-	e  = (fsType & 0x08) != 0
-    end
-
-    if rl && ( ! pp) && ( ! e) then
-        puts 'Warning: font license does not allow embedding'
-    end
-end
-
-#
-# fontfile: path to TTF file (or empty string if not to be embedded)
-# afmfile:  path to AFM file
-# enc:      font encoding (or empty string for symbolic fonts)
-# patch:    optional patch for encoding
-# type :    font type if $fontfile is empty
-#
-def MakeFont(fontfile, afmfile, enc = 'cp1252', patch = {}, type = 'TrueType')
-    # Generate a font definition file
-    if (enc != nil) && (enc != '') then
-	map = Charencodings[enc]
-	patch.each { |cc, gn| map[cc] = gn }
-    else
-	map = []
-    end
-
-    raise "Error: AFM file not found: #{afmfile}" unless File.exists?(afmfile)
-
-    fm = ReadAFM(afmfile, map)
-
-    if (enc != nil) && (enc != '') then
-	diff = MakeFontEncoding(map)
-    else
-	diff = ''
-    end
-
-    fd = MakeFontDescriptor(fm, (map.size == 0))
-
-    # Find font type
-    if fontfile then
-        ext = File.extname(fontfile).downcase.sub(/^\./, '')
-
-        if ext == 'ttf' then
-            type = 'TrueType'
-        elsif ext == 'pfb'
-            type = 'Type1'
-        else
-            raise "Error: unrecognized font file extension: #{ext}"
-        end
-    else
-	    raise "Error: incorrect font type: #{type}" if (type != 'TrueType') && (type != 'Type1')
-    end
-    printf "type = #{type}\n"
-    # Start generation
-    s  = "# #{fm['FontName']} font definition\n\n"
-    s += "module FontDef\n"
-    s += "    def FontDef.type\n        '#{type}'\n    end\n"
-    s += "    def FontDef.name\n        '#{fm['FontName']}'\n    end\n"
-    s += "    def FontDef.desc\n        #{fd}\n    end\n"
-
-    if fm['UnderlinePosition'] == nil then
-        fm['UnderlinePosition'] = -100
-    end
-
-    if fm['UnderlineThickness'] == nil then
-        fm['UnderlineThickness'] = 50
-    end
-
-    s += "    def FontDef.up\n        #{fm['UnderlinePosition']}\n    end\n"
-    s += "    def FontDef.ut\n        #{fm['UnderlineThickness']}\n    end\n"
-
-    w = MakeWidthArray(fm)
-    s += "    def FontDef.cw\n#{w}\n    end\n"
-
-    s += "    def FontDef.enc\n        '#{enc}'\n    end\n"
-    s += "    def FontDef.diff\n        #{(diff == nil) || (diff == '') ? 'nil' : '\'' + diff + '\''}\n    end\n"
-
-    basename = File.basename(afmfile, '.*')
-
-    if fontfile then
-        # Embedded font
-        if ! File.exist?(fontfile) then
-            raise "Error: font file not found: #{fontfile}"
-        end
-
-        if type == 'TrueType' then
-            CheckTTF(fontfile)
-        end
-
-	file = ''
-        File.open(fontfile, 'rb') do |f|
-            file = f.read()
-        end
-
-        if type == 'Type1' then
-            # Find first two sections and discard third one
-            header = file[0] == 128
-            file = file[6, file.length - 6] if header
-
-            pos = file.index('eexec')
-            raise 'Error: font file does not seem to be valid Type1' if pos == nil
-
-            size1 = pos + 6
-
-            file = file[0, size1] + file[size1 + 6, file.length - (size1 + 6)] if header && file[size1] == 128
-
-            pos = file.index('00000000')
-            raise 'Error: font file does not seem to be valid Type1' if pos == nil
-
-            size2 = pos - size1
-            file = file[0, size1 + size2]
-        end
-
-        if require 'zlib' then
-            File.open(basename + '.z', 'wb') { |f| f.write(Zlib::Deflate.deflate(file)) }
-            s += "    def FontDef.file\n        '#{basename}.z'\n    end\n"
-            puts "Font file compressed ('#{basename}.z')"
-        else
-            s += "    def FontDef.file\n        '#{File.basename(fontfile)}'\n    end\n"
-            puts 'Notice: font file could not be compressed (zlib not available)'
-        end
-
-        if type == 'Type1' then
-            s += "    def FontDef.size1\n        '#{size1}'\n    end\n"
-            s += "    def FontDef.size2\n        '#{size2}'\n    end\n"
-        else
-            s += "    def FontDef.originalsize\n        '#{File.size(fontfile)}'\n    end\n"
-        end
-
-    else
-        # Not embedded font
-        s += "    def FontDef.file\n        ''\n    end\n"
-    end
-
-    s += "end\n"
-    File.open(basename + '.rb', 'w') { |file| file.write(s)}
-    puts "Font definition file generated (#{basename}.rb)"
-end
-
-
-if $0 == __FILE__ then
-    if ARGV.length >= 3 then
-        enc = ARGV[2]
-    else
-        enc = 'cp1252'
-    end
-
-    if ARGV.length >= 4 then
-        patch = ARGV[3]
-    else
-        patch = {}
-    end
-
-    if ARGV.length >= 5 then
-        type = ARGV[4]
-    else
-        type = 'TrueType'
-    end
-
-    MakeFont(ARGV[0], ARGV[1], enc, patch, type)
-end
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/rfpdf.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,346 +0,0 @@
-module RFPDF
-  COLOR_PALETTE = {
-	  :black => [0x00, 0x00, 0x00],
-	  :white => [0xff, 0xff, 0xff],
-  }.freeze
-
-  # Draw a line from (<tt>x1, y1</tt>) to (<tt>x2, y2</tt>).
-  # 
-  # Options are:
-  # * <tt>:line_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:line_width</tt> - Default value is <tt>0.5</tt>.
-  #
-  # Example:
-  #
-	#   draw_line(x1, y1, x1, y1+h, :line_color => ReportHelper::COLOR_PALETTE[:dark_blue], :line_width => 1)
-	#
-  def draw_line(x1, y1, x2, y2, options = {})
-    options[:line_color] ||= COLOR_PALETTE[:black]
-    options[:line_width] ||= 0.5
-    set_draw_color(options[:line_color])
-    SetLineWidth(options[:line_width])
-    Line(x1, y1, x2, y2)
-  end
-
-  # Draw a string of <tt>text</tt> at (<tt>x, y</tt>).
-  # 
-  # Options are:
-  # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:font_size</tt> - Default value is <tt>10</tt>.
-  # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
-  #
-  # Example:
-  #
-	#   draw_text(x, y, header_left, :font_size => 10)
-	#
-  def draw_text(x, y, text, options = {})
-    options[:font_color] ||= COLOR_PALETTE[:black]
-    options[:font_size] ||= 10
-    options[:font_style] ||= ''
-    set_text_color(options[:font_color])
-    SetFont('Arial', options[:font_style], options[:font_size])
-    SetXY(x, y)
-    Write(options[:font_size] + 4, text)
-  end
-
-  # Draw a block of <tt>text</tt> at (<tt>x, y</tt>) bounded by <tt>left_margin</tt> and <tt>right_margin</tt>. Both
-  # margins are measured from their corresponding edge.
-  # 
-  # Options are:
-  # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:font_size</tt> - Default value is <tt>10</tt>.
-  # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
-  #
-  # Example:
-  #
-	#   draw_text_block(left_margin, 85, "question", left_margin, 280,
-  #       :font_color => ReportHelper::COLOR_PALETTE[:dark_blue],
-  #       :font_size => 12,
-  #       :font_style => 'I')
-	#
-  def draw_text_block(x, y, text, left_margin, right_margin, options = {})
-    options[:font_color] ||= COLOR_PALETTE[:black]
-    options[:font_size] ||= 10
-    options[:font_style] ||= ''
-    set_text_color(options[:font_color])
-    SetFont('Arial', options[:font_style], options[:font_size])
-    SetXY(x, y)
-    SetLeftMargin(left_margin)
-    SetRightMargin(right_margin)
-    Write(options[:font_size] + 4, text)
-    SetMargins(0,0,0)
-  end
-
-  # Draw a box at (<tt>x, y</tt>), <tt>w</tt> wide and <tt>h</tt> high.
-  # 
-  # Options are:
-  # * <tt>:border</tt> - Draw a border, 0 = no, 1 = yes? Default value is <tt>1</tt>.
-  # * <tt>:border_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:border_width</tt> - Default value is <tt>0.5</tt>.
-  # * <tt>:fill</tt> - Fill the box, 0 = no, 1 = yes? Default value is <tt>1</tt>.
-  # * <tt>:fill_color</tt> - Default value is nothing or <tt>COLOR_PALETTE[:white]</tt>.
-  #
-  # Example:
-  #
-	#   draw_box(x, y - 1, 38, 22)
-	#
-  def draw_box(x, y, w, h, options = {})
-    options[:border] ||= 1
-    options[:border_color] ||= COLOR_PALETTE[:black]
-    options[:border_width] ||= 0.5
-    options[:fill] ||= 1
-    options[:fill_color] ||= COLOR_PALETTE[:white]
-    SetLineWidth(options[:border_width])
-    set_draw_color(options[:border_color])
-    set_fill_color(options[:fill_color])
-    fd = ""
-    fd = "D" if options[:border] == 1
-    fd += "F" if options[:fill] == 1
-    Rect(x, y, w, h, fd)
-  end
-  
-  # Draw a string of <tt>text</tt> at (<tt>x, y</tt>) in a box <tt>w</tt> wide and <tt>h</tt> high.
-  # 
-  # Options are:
-  # * <tt>:align</tt> - Vertical alignment 'C' = center, 'L' = left, 'R' = right. Default value is <tt>'C'</tt>.
-  # * <tt>:border</tt> - Draw a border, 0 = no, 1 = yes? Default value is <tt>0</tt>.
-  # * <tt>:border_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:border_width</tt> - Default value is <tt>0.5</tt>.
-  # * <tt>:fill</tt> - Fill the box, 0 = no, 1 = yes? Default value is <tt>1</tt>.
-  # * <tt>:fill_color</tt> - Default value is nothing or <tt>COLOR_PALETTE[:white]</tt>.
-  # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:font_size</tt> - Default value is nothing or <tt>8</tt>.
-  # * <tt>:font_style</tt> - 'B' = bold, 'I' = italic, 'U' = underline. Default value is nothing <tt>''</tt>.
-  # * <tt>:padding</tt> - Default value is nothing or <tt>2</tt>.
-  # * <tt>:valign</tt> - 'M' = middle, 'T' = top, 'B' = bottom. Default value is nothing or <tt>'M'</tt>.
-  #
-  # Example:
-  #
-	#   draw_text_box(x, y - 1, 38, 22, 
-  #                 "your_score_title", 
-  #                 :fill => 0,
-  #                 :font_color => ReportHelper::COLOR_PALETTE[:blue], 
-  #                 :font_line_spacing => 0,
-  #                 :font_style => "B",
-  #                 :valign => "M")
-	#
-  def draw_text_box(x, y, w, h, text, options = {})
-    options[:align] ||= 'C'
-    options[:border] ||= 0
-    options[:border_color] ||= COLOR_PALETTE[:black]
-    options[:border_width] ||= 0.5
-    options[:fill] ||= 1
-    options[:fill_color] ||= COLOR_PALETTE[:white]
-    options[:font_color] ||= COLOR_PALETTE[:black]
-    options[:font_size] ||= 8
-    options[:font_line_spacing] ||= options[:font_size] * 0.3
-    options[:font_style] ||= ''
-    options[:padding] ||= 2
-    options[:valign] ||= "M"
-		if options[:fill] == 1 or options[:border] == 1
-      draw_box(x, y, w, h, options)
-  	end    
-    SetMargins(0,0,0)
-    set_text_color(options[:font_color])
-  	font_size = options[:font_size]
-    SetFont('Arial', options[:font_style], font_size)
-  	font_size += options[:font_line_spacing]
-  	case options[:valign]
-  	  when "B"
-  	    y -= options[:padding]
-        text = "\n" + text if text["\n"].nil?
-  	  when "T"
-  	    y += options[:padding]
-  	end
-    SetXY(x, y)
-  	if GetStringWidth(text) > w or not text["\n"].nil? or options[:valign] == "T"
-    	font_size += options[:font_size] * 0.1
-    	#TODO 2006-07-21 Level=1 - this is assuming a 2 line text
-    	SetXY(x, y + ((h - (font_size * 2)) / 2)) if options[:valign] == "M"
-      MultiCell(w, font_size, text, 0, options[:align])
-    else
-      Cell(w, h, text, 0, 0, options[:align])
-    end
-  end
-  
-  # Draw a string of <tt>text</tt> at (<tt>x, y</tt>) as a title.
-  # 
-  # Options are:
-  # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:font_size</tt> - Default value is <tt>18</tt>.
-  # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
-  #
-  # Example:
-  #
-	#   draw_title(left_margin, 60, 
-	#       "title:", 
-	#       :font_color => ReportHelper::COLOR_PALETTE[:dark_blue])
-	#
-  def draw_title(x, y, title, options = {})
-    options[:font_color] ||= COLOR_PALETTE[:black]
-    options[:font_size] ||= 18
-    options[:font_style] ||= ''
-    set_text_color(options[:font_color])
-    SetFont('Arial', options[:font_style], options[:font_size])
-  	SetXY(x, y)
-  	Write(options[:font_size] + 2, title)
-  end
-
-  # Set the draw color. Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  #
-  # Example:
-  #
-	#   set_draw_color(ReportHelper::COLOR_PALETTE[:dark_blue])
-	#
-  def set_draw_color(color = COLOR_PALETTE[:black])
-    SetDrawColor(color[0], color[1], color[2])
-  end
-
-  # Set the fill color. Default value is <tt>COLOR_PALETTE[:white]</tt>.
-  #
-  # Example:
-  #
-	#   set_fill_color(ReportHelper::COLOR_PALETTE[:dark_blue])
-	#
-  def set_fill_color(color = COLOR_PALETTE[:white])
-    SetFillColor(color[0], color[1], color[2])
-  end
-
-  # Set the text color. Default value is <tt>COLOR_PALETTE[:white]</tt>.
-  #
-  # Example:
-  #
-	#   set_text_color(ReportHelper::COLOR_PALETTE[:dark_blue])
-	#
-  def set_text_color(color = COLOR_PALETTE[:black])
-    SetTextColor(color[0], color[1], color[2])
-  end
-    
-  # Write a string containing html characters. Default value is <tt>COLOR_PALETTE[:white]</tt>.
-  #
-  # Options are:
-  # * <tt>:height</tt> - Line height. Default value is <tt>20</tt>.
-  #
-  # Example:
-  #
-	#   write_html(html, :height => 12)
-	#
-  def write_html(html, options = {})
-    options[:height] ||= 20
-    #HTML parser
-    @href = nil
-    @style = {}
-    html.gsub!("\n",' ')
-    re = %r{ ( <!--.*?--> |
-               <  (?:
-                  [^<>"] +
-                  |
-                  "  (?: \\.  |  [^\\"]+  ) *  "
-                  ) *
-               >
-             )  }xm
-
-    html.split(re).each do |value|
-      if "<" == value[0,1]
-        #Tag
-        if (value[1, 1] == '/')
-          close_tag(value[2..-2], options)
-        else
-          tag = value[1..-2]
-          open_tag(tag, options)
-        end
-      else
-        #Text
-        if @href
-          put_link(@href,value)
-        else
-          Write(options[:height], value)
-        end
-      end
-    end
-  end
-
-  def open_tag(tag, options = {}) #:nodoc:
-    #Opening tag
-    tag = tag.to_s.upcase
-    set_style(tag, true) if tag == 'B' or tag == 'I' or tag == 'U'
-    @href = options['HREF'] if tag == 'A'
-    Ln(options[:height]) if tag == 'BR'
-  end
-
-  def close_tag(tag, options = {}) #:nodoc:
-    #Closing tag
-    tag = tag.to_s.upcase
-    set_style(tag, false) if tag == 'B' or tag == 'I' or  tag == 'U'
-    @href = '' if $tag == 'A'
-  end
-
-  def set_style(tag, enable = true) #:nodoc:
-    #Modify style and select corresponding font
-    style = ""
-    @style[tag] = enable
-    ['B','I','U'].each do |s|
-      style += s if not @style[s].nil? and @style[s]
-    end
-    SetFont('', style)
-  end
-
-  def put_link(url, txt) #:nodoc:
-    #Put a hyperlink
-    SetTextColor(0,0,255)
-    set_style('U',true)
-    Write(5, txt, url)
-    set_style('U',false)
-    SetTextColor(0)
-  end 
-end
-
-# class FPDF
-#   alias_method :set_margins         , :SetMargins
-#   alias_method :set_left_margin      , :SetLeftMargin
-#   alias_method :set_top_margin       , :SetTopMargin
-#   alias_method :set_right_margin     , :SetRightMargin
-#   alias_method :set_auto_pagebreak   , :SetAutoPageBreak
-#   alias_method :set_display_mode     , :SetDisplayMode
-#   alias_method :set_compression     , :SetCompression
-#   alias_method :set_title           , :SetTitle
-#   alias_method :set_subject         , :SetSubject
-#   alias_method :set_author          , :SetAuthor
-#   alias_method :set_keywords        , :SetKeywords
-#   alias_method :set_creator         , :SetCreator
-#   alias_method :set_draw_color       , :SetDrawColor
-#   alias_method :set_fill_color       , :SetFillColor
-#   alias_method :set_text_color       , :SetTextColor
-#   alias_method :set_line_width       , :SetLineWidth
-#   alias_method :set_font            , :SetFont
-#   alias_method :set_font_size        , :SetFontSize
-#   alias_method :set_link            , :SetLink
-#   alias_method :set_y               , :SetY
-#   alias_method :set_xy              , :SetXY
-#   alias_method :get_string_width     , :GetStringWidth
-#   alias_method :get_x               , :GetX
-#   alias_method :set_x               , :SetX
-#   alias_method :get_y               , :GetY
-#   alias_method :accept_pagev_break    , :AcceptPageBreak
-#   alias_method :add_font            , :AddFont
-#   alias_method :add_link            , :AddLink
-#   alias_method :add_page            , :AddPage
-#   alias_method :alias_nb_pages       , :AliasNbPages
-#   alias_method :cell               , :Cell
-#   alias_method :close              , :Close
-#   alias_method :error              , :Error
-#   alias_method :footer             , :Footer
-#   alias_method :header             , :Header
-#   alias_method :image              , :Image
-#   alias_method :line               , :Line
-#   alias_method :link               , :Link
-#   alias_method :ln                 , :Ln
-#   alias_method :multi_cell          , :MultiCell
-#   alias_method :open               , :Open
-#   alias_method :Open               , :open
-#   alias_method :output             , :Output
-#   alias_method :page_no             , :PageNo
-#   alias_method :rect               , :Rect
-#   alias_method :text               , :Text
-#   alias_method :write              , :Write
-# end
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/view.rb.svn-base	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-# Copyright (c) 2006 4ssoM LLC <www.4ssoM.com>
-#
-# The MIT License
-#
-# 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.
-#
-# Thanks go out to Bruce Williams of codefluency who created RTex. This 
-# template handler is modification of his work.
-#
-# Example Registration
-# 
-#   ActionView::Base::register_template_handler 'rfpdf', RFpdfView
-
-module RFPDF
-  
-  class View
-    @@backward_compatibility_mode = false
-    cattr_accessor :backward_compatibility_mode
-    
-    def initialize(action_view)
-      @action_view = action_view
-      # Override with @options_for_rfpdf Hash in your controller
-      @options = {
-        # Run through latex first? (for table of contents, etc)
-        :pre_process => false,
-        # Debugging mode; raises exception
-        :debug => false,
-        # Filename of pdf to generate
-        :file_name => "#{@action_view.controller.action_name}.pdf",
-        # Temporary Directory
-        :temp_dir => "#{File.expand_path(RAILS_ROOT)}/tmp"
-      }.merge(@action_view.controller.instance_eval{ @options_for_rfpdf } || {}).with_indifferent_access
-    end
-    
-    def self.compilable?
-      false
-    end
-
-    def compilable?
-      self.class.compilable?
-    end
-
-    def render(template, local_assigns = {})
-			@pdf_name = "Default.pdf" if @pdf_name.nil?
-		  unless @action_view.controller.headers["Content-Type"] == 'application/pdf'
-			  @generate = true
-				@action_view.controller.headers["Content-Type"] = 'application/pdf'
-				@action_view.controller.headers["Content-disposition:"] = "inline; filename=\"#{@options[:file_name]}\""
-			end
-      assigns = @action_view.assigns.dup
-    
-      if content_for_layout = @action_view.instance_variable_get("@content_for_layout")
-        assigns['content_for_layout'] = content_for_layout
-      end
-
-      result = @action_view.instance_eval do
-			  assigns.each do |key,val|
-			    instance_variable_set "@#{key}", val
-		    end
-			  local_assigns.each do |key,val|
-		  		class << self; self; end.send(:define_method,key){ val }
-				end
-        ERB.new(@@backward_compatibility_mode == true ? template : template.source).result(binding) 
-      end
-    end
-
-  end
-  
-end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/rfpdf/action_controller.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,40 @@
+module RFPDF
+  module ActionController
+
+    DEFAULT_RFPDF_OPTIONS = {:inline=>true}
+      
+      def self.included(base)
+        base.extend ClassMethods
+      end
+
+      module ClassMethods
+        def rfpdf(options)
+          rfpdf_options = breakdown_rfpdf_options options
+          write_inheritable_hash(:rfpdf, rfpdf_options)
+        end
+
+      private
+
+        def breakdown_rfpdf_options(options)
+          rfpdf_options = options.dup
+          rfpdf_options
+        end
+      end
+
+      def rfpdf(options)
+        @rfpdf_options ||= DEFAULT_RFPDF_OPTIONS.dup
+        @rfpdf_options.merge! options
+      end
+
+
+    private
+
+      def compute_rfpdf_options
+        @rfpdf_options ||= DEFAULT_RFPDF_OPTIONS.dup
+        @rfpdf_options.merge!(self.class.read_inheritable_attribute(:rfpdf) || {}) {|k,o,n| o}
+        @rfpdf_options
+      end
+  end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/rfpdf/action_view.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,12 @@
+module RFPDF
+  module ActionView
+
+  private
+    def _rfpdf_compile_setup(dsl_setup = false)
+      compile_support = RFPDF::TemplateHandler::CompileSupport.new(controller)
+      @rfpdf_options = compile_support.options
+    end
+
+  end
+end
+
--- a/vendor/plugins/rfpdf/lib/rfpdf/bookmark.rb	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-# Translation of the bookmark class from the PHP FPDF script from Olivier Plathey
-# Translated by Sylvain Lafleur and ?? with the help of Brian Ollenberger
-#
-# First added in 1.53b
-#
-# Usage is as follows:
-#
-# require 'fpdf'
-# require 'bookmark'
-# pdf = FPDF.new
-# pdf.extend(PDF_Bookmark)
-#
-# This allows it to be combined with other extensions, such as the Chinese
-# module.
-
-module PDF_Bookmark
-    def PDF_Bookmark.extend_object(o)
-        o.instance_eval('@outlines,@OutlineRoot=[],0')
-        super(o)
-    end
-
-    def Bookmark(txt,level=0,y=0)
-        y=self.GetY() if y==-1
-        @outlines.push({'t'=>txt,'l'=>level,'y'=>y,'p'=>self.PageNo()})
-    end
-
-    def putbookmarks
-        @nb=@outlines.size
-        return if @nb==0
-        lru=[]
-        level=0
-        @outlines.each_index do |i|
-            o=@outlines[i]
-            if o['l']>0
-                parent=lru[o['l']-1]
-                # Set parent and last pointers
-                @outlines[i]['parent']=parent
-                @outlines[parent]['last']=i
-                if o['l']>level
-                    # Level increasing: set first pointer
-                    @outlines[parent]['first']=i
-                end
-            else
-                @outlines[i]['parent']=@nb
-            end
-            if o['l']<=level and i>0
-                # Set prev and next pointers
-                prev=lru[o['l']]
-                @outlines[prev]['next']=i
-                @outlines[i]['prev']=prev
-            end
-            lru[o['l']]=i
-            level=o['l']
-        end
-        # Outline items
-        n=@n+1
-        @outlines.each_index do |i|
-            o=@outlines[i]
-            newobj
-            out('<</Title '+(textstring(o['t'])))
-            out('/Parent '+(n+o['parent']).to_s+' 0 R')
-            if o['prev']
-                out('/Prev '+(n+o['prev']).to_s+' 0 R')
-            end
-            if o['next']
-                out('/Next '+(n+o['next']).to_s+' 0 R')
-            end
-            if o['first']
-                out('/First '+(n+o['first']).to_s+' 0 R')
-            end
-            if o['last']
-                out('/Last '+(n+o['last']).to_s+' 0 R')
-            end
-            out(sprintf('/Dest [%d 0 R /XYZ 0 %.2f
-null]',1+2*o['p'],(@h-o['y'])*@k))
-            out('/Count 0>>')
-            out('endobj')
-        end
-        # Outline root
-        newobj
-        @OutlineRoot=@n
-        out('<</Type /Outlines /First '+n.to_s+' 0 R')
-           out('/Last '+(n+lru[0]).to_s+' 0 R>>')
-           out('endobj')
-    end
-
-    def putresources
-        super
-        putbookmarks
-    end
-
-    def putcatalog
-        super
-        if not @outlines.empty?
-            out('/Outlines '+@OutlineRoot.to_s+' 0 R')
-            out('/PageMode /UseOutlines')
-        end
-    end
-end
--- a/vendor/plugins/rfpdf/lib/rfpdf/chinese.rb	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,473 +0,0 @@
-# Copyright (c) 2006 4ssoM LLC <www.4ssoM.com>
-# 1.12 contributed by Ed Moss.
-#
-# The MIT License
-#
-# 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.
-#
-# This is direct port of chinese.php
-#
-# Chinese PDF support.
-#
-# Usage is as follows:
-#
-# require 'fpdf'
-# require 'chinese'
-# pdf = FPDF.new
-# pdf.extend(PDF_Chinese)
-#
-# This allows it to be combined with other extensions, such as the bookmark
-# module.
-
-module PDF_Chinese
-
-  Big5_widths={' '=>250,'!'=>250,'"'=>408,'#'=>668,''=>490,'%'=>875,'&'=>698,'\''=>250,
-  	'('=>240,')'=>240,'*'=>417,'+'=>667,','=>250,'-'=>313,'.'=>250,'/'=>520,'0'=>500,'1'=>500,
-  	'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>250,''=>250,
-  	'<'=>667,'='=>667,'>'=>667,'?'=>396,'@'=>921,'A'=>677,'B'=>615,'C'=>719,'D'=>760,'E'=>625,
-  	'F'=>552,'G'=>771,'H'=>802,'I'=>354,'J'=>354,'K'=>781,'L'=>604,'M'=>927,'N'=>750,'O'=>823,
-  	'P'=>563,'Q'=>823,'R'=>729,'S'=>542,'T'=>698,'U'=>771,'V'=>729,'W'=>948,'X'=>771,'Y'=>677,
-  	'Z'=>635,'['=>344,'\\'=>520,']'=>344,'^'=>469,'_'=>500,'`'=>250,'a'=>469,'b'=>521,'c'=>427,
-  	'd'=>521,'e'=>438,'f'=>271,'g'=>469,'h'=>531,'i'=>250,'j'=>250,'k'=>458,'l'=>240,'m'=>802,
-  	'n'=>531,'o'=>500,'p'=>521,'q'=>521,'r'=>365,'s'=>333,'t'=>292,'u'=>521,'v'=>458,'w'=>677,
-  	'x'=>479,'y'=>458,'z'=>427,'{'=>480,'|'=>496,'end'=>480,'~'=>667}
-
-  GB_widths={' '=>207,'!'=>270,'"'=>342,'#'=>467,''=>462,'%'=>797,'&'=>710,'\''=>239,
-  	'('=>374,')'=>374,'*'=>423,'+'=>605,','=>238,'-'=>375,'.'=>238,'/'=>334,'0'=>462,'1'=>462,
-  	'2'=>462,'3'=>462,'4'=>462,'5'=>462,'6'=>462,'7'=>462,'8'=>462,'9'=>462,':'=>238,''=>238,
-  	'<'=>605,'='=>605,'>'=>605,'?'=>344,'@'=>748,'A'=>684,'B'=>560,'C'=>695,'D'=>739,'E'=>563,
-  	'F'=>511,'G'=>729,'H'=>793,'I'=>318,'J'=>312,'K'=>666,'L'=>526,'M'=>896,'N'=>758,'O'=>772,
-  	'P'=>544,'Q'=>772,'R'=>628,'S'=>465,'T'=>607,'U'=>753,'V'=>711,'W'=>972,'X'=>647,'Y'=>620,
-  	'Z'=>607,'['=>374,'\\'=>333,']'=>374,'^'=>606,'_'=>500,'`'=>239,'a'=>417,'b'=>503,'c'=>427,
-  	'd'=>529,'e'=>415,'f'=>264,'g'=>444,'h'=>518,'i'=>241,'j'=>230,'k'=>495,'l'=>228,'m'=>793,
-  	'n'=>527,'o'=>524,'p'=>524,'q'=>504,'r'=>338,'s'=>336,'t'=>277,'u'=>517,'v'=>450,'w'=>652,
-  	'x'=>466,'y'=>452,'z'=>407,'{'=>370,'|'=>258,'end'=>370,'~'=>605}
-
-  def AddCIDFont(family,style,name,cw,cMap,registry)
-#ActionController::Base::logger.debug registry.to_a.join(":").to_s
-  	fontkey=family.downcase+style.upcase
-  	unless @fonts[fontkey].nil?
-  		Error("Font already added: family style")
-		end
-  	i=@fonts.length+1
-  	name=name.gsub(' ','')
-    @fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-130,'ut'=>40,'cw'=>cw, 'CMap'=>cMap,'registry'=>registry}
-  end
-
-  def AddCIDFonts(family,name,cw,cMap,registry)
-  	AddCIDFont(family,'',name,cw,cMap,registry)
-  	AddCIDFont(family,'B',name+',Bold',cw,cMap,registry)
-  	AddCIDFont(family,'I',name+',Italic',cw,cMap,registry)
-  	AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry)
-  end
-
-  def AddBig5Font(family='Big5',name='MSungStd-Light-Acro')
-  	#Add Big5 font with proportional Latin
-  	cw=Big5_widths
-  	cMap='ETenms-B5-H'
-  	registry={'ordering'=>'CNS1','supplement'=>0}
-#ActionController::Base::logger.debug registry.to_a.join(":").to_s
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def AddBig5hwFont(family='Big5-hw',name='MSungStd-Light-Acro')
-  	#Add Big5 font with half-witdh Latin
-    cw = {}
-    32.upto(126) do |i|
-  		cw[i.chr]=500
-		end
-  	cMap='ETen-B5-H'
-  	registry={'ordering'=>'CNS1','supplement'=>0}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def AddGBFont(family='GB',name='STSongStd-Light-Acro')
-  	#Add GB font with proportional Latin
-  	cw=GB_widths
-  	cMap='GBKp-EUC-H'
-  	registry={'ordering'=>'GB1','supplement'=>2}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def AddGBhwFont(family='GB-hw',name='STSongStd-Light-Acro')
-  	#Add GB font with half-width Latin
-    32.upto(126) do |i|
-  		cw[i.chr]=500
-		end
-  	cMap='GBK-EUC-H'
-  	registry={'ordering'=>'GB1','supplement'=>2}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def GetStringWidth(s)
-  	if(@CurrentFont['type']=='Type0')
-  		return GetMBStringWidth(s)
-  	else
-  		return super(s)
-		end
-  end
-
-  def GetMBStringWidth(s)
-  	#Multi-byte version of GetStringWidth()
-  	l=0
-  	cw=@CurrentFont['cw']
-  	nb=s.length
-  	i=0
-  	while(i<nb)
-  		c=s[i]
-  		if(c<128)
-  			l+=cw[c.chr] if cw[c.chr]
-  			i+=1
-  		else
-  			l+=1000
-  			i+=2
-  		end
-  	end
-  	return l*@FontSize/1000
-  end
-
-  def MultiCell(w,h,txt,border=0,align='L',fill=0)
-  	if(@CurrentFont['type']=='Type0')
-  		MBMultiCell(w,h,txt,border,align,fill)
-  	else
-  		super(w,h,txt,border,align,fill)
-		end
-  end
-
-  def MBMultiCell(w,h,txt,border=0,align='L',fill=0)
-  	#Multi-byte version of MultiCell()
-  	cw=@CurrentFont['cw']
-  	if(w==0)
-  		w=@w-@rMargin-@x
-		end
-  	wmax=(w-2*@cMargin)*1000/@FontSize
-  	s=txt.gsub("\r",'')
-  	nb=s.length
-  	if(nb>0 and s[nb-1]=="\n")
-  		nb-=1
-		end
-  	b=0
-  	if(border)
-  		if(border==1)
-  			border='LTRB'
-  			b='LRT'
-  			b2='LR'
-  		else
-  			b2=''
-  			if(border.to_s.index('L'))
-  				b2+='L'
-				end
-  			if(border.to_s.index('R'))
-  				b2+='R'
-				end
-  			b=border.to_s.index('T') ? b2+'T' : b2
-  		end
-  	end
-  	sep=-1
-  	i=0
-  	j=0
-  	l=0
-  	nl=1
-  	while(i<nb)
-  		#Get next character
-  		c=s[i]
-  		#Check if ASCII or MB
-  		ascii=(c<128)
-  		if(c.chr=="\n")
-  			#Explicit line break
-  			Cell(w,h,s[j,i-j],b,2,align,fill)
-  			i+=1
-  			sep=-1
-  			j=i
-  			l=0
-  			nl+=1
-  			if(border and nl==2)
-  				b=b2
-				end
-  			next
-  		end
-  		if(!ascii)
-  			sep=i
-  			ls=l
-  		elsif(c==' ')
-  			sep=i
-  			ls=l
-  		end
-  		l+=ascii ? (cw[c.chr] || 0) : 1100
-  		if(l>wmax)
-  			#Automatic line break
-  			if(sep==-1 or i==j)
-  				if(i==j)
-  					i+=ascii ? 1 : 3
-					end
-  				Cell(w,h,s[j,i-j],b,2,align,fill)
-  			else
-  				Cell(w,h,s[j,sep-j],b,2,align,fill)
-  				i=(s[sep]==' ') ? sep+1 : sep
-  			end
-  			sep=-1
-  			j=i
-  			l=0
-#  			nl+=1
-  			if(border and nl==2)
-  				b=b2
-  			end
-  		else
-  			i+=ascii ? 1 : 3
-  		end
-  	end
-  	#Last chunk
-  	if(border and not border.to_s.index('B').nil?)
-  		b+='B'
-		end
-  	Cell(w,h,s[j,i-j],b,2,align,fill)
-  	@x=@lMargin
-  end
-
-  def Write(h,txt,link='')
-  	if(@CurrentFont['type']=='Type0')
-  		MBWrite(h,txt,link)
-  	else
-  		super(h,txt,link)
-		end
-  end
-
-  def MBWrite(h,txt,link)
-  	#Multi-byte version of Write()
-  	cw=@CurrentFont['cw']
-  	w=@w-@rMargin-@x
-  	wmax=(w-2*@cMargin)*1000/@FontSize
-  	s=txt.gsub("\r",'')
-  	nb=s.length
-  	sep=-1
-  	i=0
-  	j=0
-  	l=0
-  	nl=1
-  	while(i<nb)
-  		#Get next character
-  		c=s[i]
-  		#Check if ASCII or MB
-  		ascii=(c<128)
-  		if(c.chr=="\n")
-  			#Explicit line break
-  			Cell(w,h,s[j,i-j],0,2,'',0,link)
-  			i+=1
-  			sep=-1
-  			j=i
-  			l=0
-  			if(nl==1)
-  				@x=@lMargin
-  				w=@w-@rMargin-@x
-  				wmax=(w-2*@cMargin)*1000/@FontSize
-  			end
-  			nl+=1
-  			next
-  		end
-  		if(!ascii or c==' ')
-  			sep=i
-			end
-  		l+=ascii ? cw[c.chr] : 1100
-  		if(l>wmax)
-  			#Automatic line break
-  			if(sep==-1 or i==j)
-  				if(@x>@lMargin)
-  					#Move to next line
-  					@x=@lMargin
-  					@y+=h
-  					w=@w-@rMargin-@x
-  					wmax=(w-2*@cMargin)*1000/@FontSize
-  					i+=1
-  					nl+=1
-  					next
-  				end
-  				if(i==j)
-  					i+=ascii ? 1 : 3
-					end
-  				Cell(w,h,s[j,i-j],0,2,'',0,link)
-  			else
-  				Cell(w,h,s[j,sep-j],0,2,'',0,link)
-  				i=(s[sep]==' ') ? sep+1 : sep
-  			end
-  			sep=-1
-  			j=i
-  			l=0
-  			if(nl==1)
-  				@x=@lMargin
-  				w=@w-@rMargin-@x
-  				wmax=(w-2*@cMargin)*1000/@FontSize
-  			end
-  			nl+=1
-  		else
-  			i+=ascii ? 1 : 3
-			end
-  	end
-  	#Last chunk
-  	if(i!=j)
-  		Cell(l/1000*@FontSize,h,s[j,i-j],0,0,'',0,link)
-		end
-  end
-
-private
-
-  def putfonts()
-  	nf=@n
-    @diffs.each do |diff|
-  		#Encodings
-  		newobj()
-  		out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['+diff+']>>')
-  		out('endobj')
-  	end
-  	# mqr=get_magic_quotes_runtime()
-  	# set_magic_quotes_runtime(0)
-    @FontFiles.each_pair do |file, info|
-  		#Font file embedding
-  		newobj()
-  		@FontFiles[file]['n']=@n
-  		if(defined('FPDF_FONTPATH'))
-  			file=FPDF_FONTPATH+file
-			end
-  		size=filesize(file)
-  		if(!size)
-  			Error('Font file not found')
-			end
-  		out('<</Length '+size)
-  		if(file[-2]=='.z')
-  			out('/Filter /FlateDecode')
-			end
-  		out('/Length1 '+info['length1'])
-  		unless info['length2'].nil?
-  			out('/Length2 '+info['length2']+' /Length3 0')
-			end
-  		out('>>')
-  		f=fopen(file,'rb')
-  		putstream(fread(f,size))
-  		fclose(f)
-  		out('endobj')
-  	end
-#
-  	# set_magic_quotes_runtime(mqr)
-#
-    @fonts.each_pair do |k, font|
-  		#Font objects
-  		newobj()
-  		@fonts[k]['n']=@n
-  		out('<</Type /Font')
-  		if(font['type']=='Type0')
-  			putType0(font)
-  		else
-  			name=font['name']
-  			out('/BaseFont /'+name)
-  			if(font['type']=='core')
-  				#Standard font
-  				out('/Subtype /Type1')
-  				if(name!='Symbol' and name!='ZapfDingbats')
-  					out('/Encoding /WinAnsiEncoding')
-  			end
-  			else
-  				#Additional font
-  				out('/Subtype /'+font['type'])
-  				out('/FirstChar 32')
-  				out('/LastChar 255')
-  				out('/Widths '+(@n+1)+' 0 R')
-  				out('/FontDescriptor '+(@n+2)+' 0 R')
-  				if(font['enc'])
-  					if !font['diff'].nil?
-  						out('/Encoding '+(nf+font['diff'])+' 0 R')
-  					else
-  						out('/Encoding /WinAnsiEncoding')
-  					end
-  				end
-  			end
-  			out('>>')
-  			out('endobj')
-  			if(font['type']!='core')
-  				#Widths
-  				newobj()
-  				cw=font['cw']
-  				s='['
-          32.upto(255) do |i|
-  					s+=cw[i.chr]+' '
-  				end
-  				out(s+']')
-  				out('endobj')
-  				#Descriptor
-  				newobj()
-  				s='<</Type /FontDescriptor /FontName /'+name
-  				font['desc'].each_pair do |k, v|
-  					s+=' /'+k+' '+v
-  				end
-  				file=font['file']
-  				if(file)
-  					s+=' /FontFile'+(font['type']=='Type1' ? '' : '2')+' '+@FontFiles[file]['n']+' 0 R'
-  				end
-  				out(s+'>>')
-  				out('endobj')
-  			end
-  		end
-  	end
-  end
-
-  def putType0(font)
-  	#Type0
-  	out('/Subtype /Type0')
-  	out('/BaseFont /'+font['name']+'-'+font['CMap'])
-  	out('/Encoding /'+font['CMap'])
-  	out('/DescendantFonts ['+(@n+1).to_s+' 0 R]')
-  	out('>>')
-  	out('endobj')
-  	#CIDFont
-  	newobj()
-  	out('<</Type /Font')
-  	out('/Subtype /CIDFontType0')
-  	out('/BaseFont /'+font['name'])
-  	out('/CIDSystemInfo <</Registry '+textstring('Adobe')+' /Ordering '+textstring(font['registry']['ordering'])+' /Supplement '+font['registry']['supplement'].to_s+'>>')
-  	out('/FontDescriptor '+(@n+1).to_s+' 0 R')
-  	if(font['CMap']=='ETen-B5-H')
-  		w='13648 13742 500'
-  	elsif(font['CMap']=='GBK-EUC-H')
-  		w='814 907 500 7716 [500]'
-  	else
-      # ActionController::Base::logger.debug font['cw'].keys.sort.join(' ').to_s
-      # ActionController::Base::logger.debug font['cw'].values.join(' ').to_s
-  		w='1 ['
-  		font['cw'].keys.sort.each {|key|
-  		  w+=font['cw'][key].to_s + " "
-# ActionController::Base::logger.debug key.to_s
-# ActionController::Base::logger.debug font['cw'][key].to_s
-  		}
-  		w +=']'
-  	end
-  	out('/W ['+w+']>>')
-  	out('endobj')
-  	#Font descriptor
-  	newobj()
-  	out('<</Type /FontDescriptor')
-  	out('/FontName /'+font['name'])
-  	out('/Flags 6')
-  	out('/FontBBox [0 -200 1000 900]')
-  	out('/ItalicAngle 0')
-  	out('/Ascent 800')
-  	out('/Descent -200')
-  	out('/CapHeight 800')
-  	out('/StemV 50')
-  	out('>>')
-  	out('endobj')
-  end
-end
--- a/vendor/plugins/rfpdf/lib/rfpdf/errors.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/lib/rfpdf/errors.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,4 +1,6 @@
 module RFPDF
-  class GenerationError < StandardError #:nodoc:
+  module Errors
+    class GenerationError < StandardError #:nodoc:
+    end
   end
 end
\ No newline at end of file
--- a/vendor/plugins/rfpdf/lib/rfpdf/fpdf.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/lib/rfpdf/fpdf.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -16,13 +16,18 @@
 # Bookmarks contributed by Sylvain Lafleur.
 #
 # 1.53 contributed by Ed Moss
-#   Handle '\n' at the beginning of a string
+#   Make sure all \n references are inside double quotes - Fix some multicell bugs
+#   Handle "\n" at the beginning of a string
 # Bookmarks contributed by Sylvain Lafleur.
 
 require 'date'
 require 'zlib'
 
 class FPDF
+  include RFPDF
+  
+  attr_accessor :default_font
+	
     FPDF_VERSION = '1.53d'
 
     Charwidths =  {
@@ -63,6 +68,7 @@
         @pages=[]
         @OrientationChanges=[]
         @state=0
+        @default_font = "arial"
         @fonts={}
         @FontFiles={}
         @diffs=[]
@@ -169,6 +175,10 @@
         @PDFVersion='1.3'
     end
 
+    def GetMargins()
+        return @lMargin, @tMargin, @rMargin
+    end
+
     def SetMargins(left, top, right=-1)
         # Set left, top and right margins
         @lMargin=left
@@ -334,6 +344,7 @@
         @TextColor=tc
         @ColorFlag=cf
     end
+	  alias_method :add_page, :AddPage
 
     def Header
         # To be implemented in your inherited class
@@ -403,6 +414,70 @@
         out(sprintf('%.2f w',width*@k)) if @page>0
     end
 
+    def Circle(mid_x, mid_y, radius, style='')
+      mid_y = (@h-mid_y)*@k
+      out(sprintf("q\n")) # postscript content in pdf
+      # init line type etc. with /GSD gs G g (grey) RG rg (RGB) w=line witdh etc. 
+      out(sprintf("1 j\n")) # line join
+      # translate ("move") circle to mid_y, mid_y
+      out(sprintf("1 0 0 1 %f %f cm", mid_x, mid_y))
+      kappa = 0.5522847498307933984022516322796
+      # Quadrant 1 
+      x_s = 0.0 # 12 o'clock 
+      y_s = 0.0 + radius
+      x_e = 0.0 + radius # 3 o'clock 
+      y_e = 0.0
+      out(sprintf("%f %f m\n", x_s, y_s)) # move to 12 o'clock 
+      # cubic bezier control point 1, start height and kappa * radius to the right 
+      bx_e1 = x_s + (radius * kappa)
+      by_e1 = y_s
+      # cubic bezier control point 2, end and kappa * radius above 
+      bx_e2 = x_e
+      by_e2 = y_e + (radius * kappa)
+      # draw cubic bezier from current point to x_e/y_e with bx_e1/by_e1 and bx_e2/by_e2 as bezier control points
+      out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e))
+      # Quadrant 2 
+      x_s = x_e 
+      y_s = y_e # 3 o'clock 
+      x_e = 0.0 
+      y_e = 0.0 - radius # 6 o'clock 
+      bx_e1 = x_s # cubic bezier point 1 
+      by_e1 = y_s - (radius * kappa)
+      bx_e2 = x_e + (radius * kappa) # cubic bezier point 2 
+      by_e2 = y_e
+      out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e))
+      # Quadrant 3 
+      x_s = x_e 
+      y_s = y_e # 6 o'clock 
+      x_e = 0.0 - radius
+      y_e = 0.0 # 9 o'clock 
+      bx_e1 = x_s - (radius * kappa) # cubic bezier point 1 
+      by_e1 = y_s
+      bx_e2 = x_e # cubic bezier point 2 
+      by_e2 = y_e - (radius * kappa)
+      out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e))
+      # Quadrant 4 
+      x_s = x_e 
+      y_s = y_e # 9 o'clock 
+      x_e = 0.0 
+      y_e = 0.0 + radius # 12 o'clock 
+      bx_e1 = x_s # cubic bezier point 1 
+      by_e1 = y_s + (radius * kappa)
+      bx_e2 = x_e - (radius * kappa) # cubic bezier point 2 
+      by_e2 = y_e
+      out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e))
+      if style=='F'
+          op='f'
+      elsif style=='FD' or style=='DF'
+          op='b'
+      else
+          op='s'
+      end
+      out(sprintf("#{op}\n")) # stroke circle, do not fill and close path 
+      # for filling etc. b, b*, f, f*
+      out(sprintf("Q\n")) # finish postscript in PDF
+    end
+    
     def Line(x1, y1, x2, y2)
         # Draw a line
         out(sprintf('%.2f %.2f m %.2f %.2f l S',
@@ -418,6 +493,7 @@
         else
             op='S'
         end
+        # x y width height re
         out(sprintf('%.2f %.2f %.2f %.2f re %s', x*@k,(@h-y)*@k,w*@k,-h*@k,op))
     end
 
@@ -566,10 +642,7 @@
 
     def Text(x, y, txt)
         # Output a string
-        txt.gsub!(')', '\\)')
-        txt.gsub!('(', '\\(')
-        txt.gsub!('\\', '\\\\')
-        s=sprintf('BT %.2f %.2f Td (%s) Tj ET',x*@k,(@h-y)*@k,txt);
+        s=sprintf('BT %.2f %.2f Td (%s) Tj ET',x*@k,(@h-y)*@k, escape(txt));
         s=s+' '+dounderline(x,y,txt) if @underline and txt!=''
         s='q '+@TextColor+' '+s+' Q' if @ColorFlag
         out(s)
@@ -580,9 +653,17 @@
         @AutoPageBreak
     end
 
+    def BreakThePage?(h)
+      if (@y + h) > @PageBreakTrigger and !@InFooter and self.AcceptPageBreak
+        true
+      else
+        false
+      end
+    end
+    
     def Cell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='')
         # Output a cell
-        if @y+h>@PageBreakTrigger and !@InFooter and self.AcceptPageBreak
+        if self.BreakThePage?(h)
             # Automatic page break
             x=@x
             ws=@ws
@@ -635,14 +716,11 @@
             else
                 dx=@cMargin
             end
-            txt = txt.gsub(')', '\\)')
-            txt.gsub!('(', '\\(')
-            txt.gsub!('\\', '\\\\')
             if @ColorFlag
                 s=s+'q '+@TextColor+' '
             end
             s=s+sprintf('BT %.2f %.2f Td (%s) Tj ET',
-                (@x+dx)*@k,(@h-(@y+0.5*h+0.3*@FontSize))*@k,txt)
+                (@x+dx)*@k,(@h-(@y+0.5*h+0.3*@FontSize))*@k,escape(txt))
             s=s+' '+dounderline(@x+dx,@y+0.5*h+0.3*@FontSize,txt) if @underline
             s=s+' Q' if @ColorFlag
             if link and link != ''
@@ -665,9 +743,9 @@
         cw=@CurrentFont['cw']
         w=@w-@rMargin-@x if w==0
         wmax=(w-2*@cMargin)*1000/@FontSize
-        s=txt.gsub('\r','')
+        s=txt.gsub("\r",'')
         nb=s.length
-        nb=nb-1 if nb>0 and s[nb-1].chr=='\n'
+        nb=nb-1 if nb>0 and s[nb-1].chr=="\n"
         b=0
         if border!=0
             if border==1
@@ -682,70 +760,66 @@
             end
         end
         sep=-1
-        i=0
-        j=0
+        to_index=0
+        from_j=0
         l=0
         ns=0
         nl=1
-        while i<nb
+        while to_index<nb
             # Get next character
-            c=s[i].chr
-            if c=="\n"
+            char=s[to_index]
+            if char=="\n"[0]
                 # Explicit line break
                 if @ws>0
                     @ws=0
                     out('0 Tw')
                 end
 #Ed Moss               
-# Don't let i go negative
-                end_i = i == 0 ? 0 : i - 1
-                # Changed from s[j..i] to fix bug reported by Hans Allis.
-                self.Cell(w,h,s[j..end_i],b,2,align,fill) 
+                end_i = to_index == 0 ? 0 : to_index - 1
+                # Changed from s[from_j..to_index] to fix bug reported by Hans Allis.
+                self.Cell(w,h,s[from_j..end_i],b,2,align,fill) 
 #                
-                i=i+1
+                to_index=to_index+1
                 sep=-1
-                j=i
+                from_j=to_index
                 l=0
                 ns=0
                 nl=nl+1
                 b=b2 if border and nl==2
             else
-                if c==' '
-                    sep=i
+                if char==' '[0]
+                    sep=to_index
                     ls=l
                     ns=ns+1
                 end
-                l=l+GetCharWidth(cw, c[0])
+                l=l+GetCharWidth(cw, char)
                 if l>wmax
                     # Automatic line break
                     if sep==-1
-                        i=i+1 if i==j
+                        to_index=to_index+1 if to_index==from_j
                         if @ws>0
                             @ws=0
                             out('0 Tw')
                         end
-                        self.Cell(w,h,s[j..i],b,2,align,fill)
 #Ed Moss
-# Added so that it wouldn't print the last character of the string if it got close
-#FIXME 2006-07-18 Level=0 - but it still puts out an extra new line
-                        i += 1
+                        self.Cell(w,h,s[from_j..to_index-1],b,2,align,fill)
 #
                     else
                         if align=='J'
                             @ws=(ns>1) ? (wmax-ls)/1000.0*@FontSize/(ns-1) : 0
                             out(sprintf('%.3f Tw',@ws*@k))
                         end
-                        self.Cell(w,h,s[j..sep],b,2,align,fill)
-                        i=sep+1
+                        self.Cell(w,h,s[from_j..sep],b,2,align,fill)
+                        to_index=sep+1
                     end
                     sep=-1
-                    j=i
+                    from_j=to_index
                     l=0
                     ns=0
                     nl=nl+1
                     b=b2 if border and nl==2
                 else
-                    i=i+1
+                    to_index=to_index+1
                 end
             end
         end
@@ -756,7 +830,7 @@
             out('0 Tw')
         end
         b=b+'B' if border!=0 and not border.index('B').nil?
-        self.Cell(w,h,s[j..i],b,2,align,fill)
+        self.Cell(w,h,s[from_j..to_index],b,2,align,fill)
         @x=@lMargin
     end
     
@@ -1273,7 +1347,7 @@
         out('startxref')
         out(o)
         out('%%EOF')
-        state=3
+        @state=3
     end
 
     def beginpage(orientation)
@@ -1458,7 +1532,7 @@
 
     def escape(s)
         # Add \ before \, ( and )
-        s.gsub('\\','\\\\').gsub('(','\\(').gsub(')','\\)')
+        s.gsub('\\','\\\\\\').gsub('(','\\(').gsub(')','\\)')
     end
 
     def putstream(s)
--- a/vendor/plugins/rfpdf/lib/rfpdf/fpdf_eps.rb	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,139 +0,0 @@
-# Information
-# 
-# PDF_EPS class from Valentin Schmidt ported to ruby by Thiago Jackiw (tjackiw@gmail.com) 
-# working for Mingle LLC (www.mingle.com)
-# Release Date: July 13th, 2006
-# 
-# Description
-# 
-# This script allows to embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files. 
-# Only vector drawing is supported, not text or bitmap. Although the script was successfully 
-# tested with various AI format versions, best results are probably achieved with files that 
-# were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2).
-# 
-# ImageEps(string file, float x, float y [, float w [, float h [, string link [, boolean useBoundingBox]]]])
-# 
-# Same parameters as for regular FPDF::Image() method, with an additional one:
-# 
-# useBoundingBox: specifies whether to position the bounding box (true) or the complete canvas (false) 
-# at location (x,y). Default value is true.
-#
-# First added to the Ruby FPDF distribution in 1.53c
-#
-# Usage is as follows:
-#
-# require 'fpdf'
-# require 'fpdf_eps'
-# pdf = FPDF.new
-# pdf.extend(PDF_EPS)
-# pdf.ImageEps(...)
-#
-# This allows it to be combined with other extensions, such as the bookmark
-# module.
-
-module PDF_EPS
-    def ImageEps(file, x, y, w=0, h=0, link='', use_bounding_box=true)
-        data = nil
-        if File.exists?(file)
-            File.open(file, 'rb') do |f|
-                data = f.read()
-            end
-        else
-            Error('EPS file not found: '+file)
-        end
-        
-        # Find BoundingBox param
-        regs = data.scan(/%%BoundingBox: [^\r\n]*/m)
-        regs << regs[0].gsub(/%%BoundingBox: /, '')
-        if regs.size > 1
-            tmp = regs[1].to_s.split(' ')
-            @x1 = tmp[0].to_i
-            @y1 = tmp[1].to_i
-            @x2 = tmp[2].to_i
-            @y2 = tmp[3].to_i
-        else
-            Error('No BoundingBox found in EPS file: '+file)
-        end
-        f_start = data.index('%%EndSetup')
-        f_start = data.index('%%EndProlog') if f_start === false
-        f_start = data.index('%%BoundingBox') if f_start === false
-        
-        data = data.slice(f_start, data.length)
-        
-        f_end = data.index('%%PageTrailer')
-        f_end = data.index('showpage') if f_end === false
-        data = data.slice(0, f_end) if f_end
-        
-        # save the current graphic state
-        out('q')
-        
-        k = @k
-        
-        # Translate
-        if use_bounding_box
-            dx = x*k-@x1
-            dy = @hPt-@y2-y*k
-        else
-            dx = x*k
-            dy = -y*k
-        end
-        tm = [1,0,0,1,dx,dy]
-        out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm',
-            tm[0], tm[1], tm[2], tm[3], tm[4], tm[5]))
-        
-        if w > 0
-            scale_x = w/((@x2-@x1)/k)
-            if h > 0
-                scale_y = h/((@y2-@y1)/k)
-            else
-                scale_y = scale_x
-                h = (@y2-@y1)/k * scale_y
-            end
-        else
-            if h > 0
-                scale_y = $h/((@y2-@y1)/$k)
-                scale_x = scale_y
-                w = (@x2-@x1)/k * scale_x
-            else
-                w = (@x2-@x1)/k
-                h = (@y2-@y1)/k
-            end
-        end
-        
-        if !scale_x.nil?
-            # Scale
-            tm = [scale_x,0,0,scale_y,0,@hPt*(1-scale_y)]
-            out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm',
-                tm[0], tm[1], tm[2], tm[3], tm[4], tm[5]))
-        end
-        
-        data.split(/\r\n|[\r\n]/).each do |line|
-            next if line == '' || line[0,1] == '%'
-            len = line.length
-            # next if (len > 2 && line[len-2,len] != ' ')
-            cmd = line[len-2,len].strip
-            case cmd
-                when 'm', 'l', 'v', 'y', 'c', 'k', 'K', 'g', 'G', 's', 'S', 'J', 'j', 'w', 'M', 'd':
-                    out(line)
-                
-                when 'L':
-                    line[len-1,len]='l'
-                    out(line)
-                
-                when 'C':
-                    line[len-1,len]='c'
-                    out(line)
-                
-                when 'f', 'F':
-                    out('f*')
-                
-                when 'b', 'B':
-                    out(cmd + '*')
-            end
-        end
-        
-        # restore previous graphic state
-        out('Q')
-        Link(x,y,w,h,link) if link
-    end
-end
--- a/vendor/plugins/rfpdf/lib/rfpdf/japanese.rb	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,468 +0,0 @@
-# Copyright (c) 2006 4ssoM LLC <www.4ssoM.com>
-# 1.12 contributed by Ed Moss.
-#
-# The MIT License
-#
-# 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.
-#
-# This is direct port of japanese.php
-#
-# Japanese PDF support.
-#
-# Usage is as follows:
-#
-# require 'fpdf'
-# require 'chinese'
-# pdf = FPDF.new
-# pdf.extend(PDF_Japanese)
-#
-# This allows it to be combined with other extensions, such as the bookmark
-# module.
-
-module PDF_Japanese
-
-  SJIS_widths={' ' => 278, '!' => 299, '"' => 353, '#' => 614, '$' => 614, '%' => 721, '&' => 735, '\'' => 216, 
-  	'(' => 323, ')' => 323, '*' => 449, '+' => 529, ',' => 219, '-' => 306, '.' => 219, '/' => 453, '0' => 614, '1' => 614, 
-  	'2' => 614, '3' => 614, '4' => 614, '5' => 614, '6' => 614, '7' => 614, '8' => 614, '9' => 614, ':' => 219, ';' => 219, 
-  	'<' => 529, '=' => 529, '>' => 529, '?' => 486, '@' => 744, 'A' => 646, 'B' => 604, 'C' => 617, 'D' => 681, 'E' => 567, 
-  	'F' => 537, 'G' => 647, 'H' => 738, 'I' => 320, 'J' => 433, 'K' => 637, 'L' => 566, 'M' => 904, 'N' => 710, 'O' => 716, 
-  	'P' => 605, 'Q' => 716, 'R' => 623, 'S' => 517, 'T' => 601, 'U' => 690, 'V' => 668, 'W' => 990, 'X' => 681, 'Y' => 634, 
-  	'Z' => 578, '[' => 316, '\\' => 614, ']' => 316, '^' => 529, '_' => 500, '`' => 387, 'a' => 509, 'b' => 566, 'c' => 478, 
-  	'd' => 565, 'e' => 503, 'f' => 337, 'g' => 549, 'h' => 580, 'i' => 275, 'j' => 266, 'k' => 544, 'l' => 276, 'm' => 854, 
-  	'n' => 579, 'o' => 550, 'p' => 578, 'q' => 566, 'r' => 410, 's' => 444, 't' => 340, 'u' => 575, 'v' => 512, 'w' => 760, 
-  	'x' => 503, 'y' => 529, 'z' => 453, '{' => 326, '|' => 380, '}' => 326, '~' => 387}
-
-  def AddCIDFont(family,style,name,cw,cMap,registry)  	
-    fontkey=family.downcase+style.upcase
-  	unless @fonts[fontkey].nil?
-  		Error("CID font already added: family style")
-  	end  
-  	i=@fonts.length+1
-  	@fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-120,'ut'=>40,'cw'=>cw,
-  	  'CMap'=>cMap,'registry'=>registry}
-  end
-
-  def AddCIDFonts(family,name,cw,cMap,registry)
-  	AddCIDFont(family,'',name,cw,cMap,registry)
-  	AddCIDFont(family,'B',name+',Bold',cw,cMap,registry)
-  	AddCIDFont(family,'I',name+',Italic',cw,cMap,registry)
-  	AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry)
-  end
-
-  def AddSJISFont(family='SJIS')
-  	#Add SJIS font with proportional Latin
-  	name='KozMinPro-Regular-Acro'
-  	cw=SJIS_widths
-  	cMap='90msp-RKSJ-H'
-  	registry={'ordering'=>'Japan1','supplement'=>2}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def AddSJIShwFont(family='SJIS-hw')
-  	#Add SJIS font with half-width Latin
-  	name='KozMinPro-Regular-Acro'
-    32.upto(126) do |i|
-  		cw[i.chr]=500
-  	end  
-  	cMap='90ms-RKSJ-H'
-  	registry={'ordering'=>'Japan1','supplement'=>2}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def GetStringWidth(s)
-  	if(@CurrentFont['type']=='Type0')
-  		return GetSJISStringWidth(s)
-  	else
-  		return super(s)
-  	end  
-  end
-
-  def GetSJISStringWidth(s)
-  	#SJIS version of GetStringWidth()
-  	l=0
-  	cw=@CurrentFont['cw']
-  	nb=s.length
-  	i=0
-  	while(i<nb)
-  		o=s[i]
-  		if(o<128)
-  			#ASCII
-  			l+=cw[o.chr]
-  			i+=1
-  		elsif(o>=161 and o<=223)
-  			#Half-width katakana
-  			l+=500
-  			i+=1
-  		else
-  			#Full-width character
-  			l+=1000
-  			i+=2
-  		end
-  	end
-  	return l*@FontSize/1000
-  end
-
-  def MultiCell(w,h,txt,border=0,align='L',fill=0)
-  	if(@CurrentFont['type']=='Type0')
-  		SJISMultiCell(w,h,txt,border,align,fill)
-  	else
-  		super(w,h,txt,border,align,fill)
-  	end  
-  end
-
-  def SJISMultiCell(w,h,txt,border=0,align='L',fill=0)
-  	#Output text with automatic or explicit line breaks
-  	cw=@CurrentFont['cw']
-  	if(w==0)
-  		w=@w-@rMargin-@x
-  	end  
-  	wmax=(w-2*@cMargin)*1000/@FontSize
-  	s=txt.gsub("\r",'')
-  	nb=s.length
-  	if(nb>0 and s[nb-1]=="\n")
-  		nb-=1
-  	end  
-  	b=0
-  	if(border)
-  		if(border==1)
-  			border='LTRB'
-  			b='LRT'
-  			b2='LR'
-  		else
-  			b2=''
-  			if(border.to_s.index('L'))
-  				b2+='L'
-      	end  
-  			if(border.to_s.index('R'))
-  				b2+='R'
-      	end  
-  			b=border.to_s.index('T') ? b2+'T' : b2
-  		end
-  	end
-  	sep=-1
-  	i=0
-  	j=0
-  	l=0
-  	nl=1
-  	while(i<nb)
-  		#Get next character
-  		c=s[i]
-  		o=c #o=ord(c)
-  		if(o==10)
-  			#Explicit line break
-  			Cell(w,h,s[j,i-j],b,2,align,fill)
-  			i+=1
-  			sep=-1
-  			j=i
-  			l=0
-  			nl+=1
-  			if(border and nl==2)
-  				b=b2
-      	end  
-  			next
-  		end
-  		if(o<128)
-  			#ASCII
-  			l+=cw[c.chr]
-  			n=1
-  			if(o==32)
-  				sep=i
-      	end  
-  		elsif(o>=161 and o<=223)
-  			#Half-width katakana
-  			l+=500
-  			n=1
-  			sep=i
-  		else
-  			#Full-width character
-  			l+=1000
-  			n=2
-  			sep=i
-  		end
-  		if(l>wmax)
-  			#Automatic line break
-  			if(sep==-1 or i==j)
-  				if(i==j)
-  					i+=n
-        	end  
-  				Cell(w,h,s[j,i-j],b,2,align,fill)
-  			else
-  				Cell(w,h,s[j,sep-j],b,2,align,fill)
-  				i=(s[sep]==' ') ? sep+1 : sep
-  			end
-  			sep=-1
-  			j=i
-  			l=0
-  			nl+=1
-  			if(border and nl==2)
-  				b=b2
-      	end  
-  		else
-  			i+=n
-  			if(o>=128)
-  				sep=i
-  			end
-  		end
-  	end
-  	#Last chunk
-  	if(border and not border.to_s.index('B').nil?)
-  		b+='B'
-  	end  
-  	Cell(w,h,s[j,i-j],b,2,align,fill)
-  	@x=@lMargin
-  end
-
-  def Write(h,txt,link='')
-  	if(@CurrentFont['type']=='Type0')
-  		SJISWrite(h,txt,link)
-  	else
-  		super(h,txt,link)
-  	end  
-  end
-
-  def SJISWrite(h,txt,link)
-  	#SJIS version of Write()
-  	cw=@CurrentFont['cw']
-  	w=@w-@rMargin-@x
-  	wmax=(w-2*@cMargin)*1000/@FontSize
-  	s=txt.gsub("\r",'')
-  	nb=s.length
-  	sep=-1
-  	i=0
-  	j=0
-  	l=0
-  	nl=1
-  	while(i<nb)
-  		#Get next character
-  		c=s[i]
-  		o=c
-  		if(o==10)
-  			#Explicit line break
-  			Cell(w,h,s[j,i-j],0,2,'',0,link)
-  			i+=1
-  			sep=-1
-  			j=i
-  			l=0
-  			if(nl==1)
-  				#Go to left margin
-  				@x=@lMargin
-  				w=@w-@rMargin-@x
-  				wmax=(w-2*@cMargin)*1000/@FontSize
-  			end
-  			nl+=1
-  			next
-  		end
-  		if(o<128)
-  			#ASCII
-  			l+=cw[c.chr]
-  			n=1
-  			if(o==32)
-  				sep=i
-      	end  
-  		elsif(o>=161 and o<=223)
-  			#Half-width katakana
-  			l+=500
-  			n=1
-  			sep=i
-  		else
-  			#Full-width character
-  			l+=1000
-  			n=2
-  			sep=i
-  		end
-  		if(l>wmax)
-  			#Automatic line break
-  			if(sep==-1 or i==j)
-  				if(@x>@lMargin)
-  					#Move to next line
-  					@x=@lMargin
-  					@y+=h
-  					w=@w-@rMargin-@x
-  					wmax=(w-2*@cMargin)*1000/@FontSize
-  					i+=n
-  					nl+=1
-  					next
-  				end
-  				if(i==j)
-  					i+=n
-        	end  
-  				Cell(w,h,s[j,i-j],0,2,'',0,link)
-  			else
-  				Cell(w,h,s[j,sep-j],0,2,'',0,link)
-  				i=(s[sep]==' ') ? sep+1 : sep
-  			end
-  			sep=-1
-  			j=i
-  			l=0
-  			if(nl==1)
-  				@x=@lMargin
-  				w=@w-@rMargin-@x
-  				wmax=(w-2*@cMargin)*1000/@FontSize
-  			end
-  			nl+=1
-  		else
-  			i+=n
-  			if(o>=128)
-  				sep=i
-      	end  
-  		end
-  	end
-  	#Last chunk
-  	if(i!=j)
-  		Cell(l/1000*@FontSize,h,s[j,i-j],0,0,'',0,link)
-  	end  
-  end
-  
-private
-
-  def putfonts()
-  	nf=@n
-    @diffs.each do |diff|
-  		#Encodings
-  		newobj()
-  		out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['+diff+']>>')
-  		out('endobj')
-  	end
-  	# mqr=get_magic_quotes_runtime()
-  	# set_magic_quotes_runtime(0)
-    @FontFiles.each_pair do |file, info|
-  		#Font file embedding
-  		newobj()
-  		@FontFiles[file]['n']=@n
-  		if(defined('FPDF_FONTPATH'))
-  			file=FPDF_FONTPATH+file
-    	end  
-  		size=filesize(file)
-  		if(!size)
-  			Error('Font file not found')
-    	end  
-  		out('<</Length '+size)
-  		if(file[-2]=='.z')
-  			out('/Filter /FlateDecode')
-    	end  
-  		out('/Length1 '+info['length1'])
-  		unless info['length2'].nil?
-  			out('/Length2 '+info['length2']+' /Length3 0')
-    	end  
-  		out('>>')
-  		f=fopen(file,'rb')
-  		putstream(fread(f,size))
-  		fclose(f)
-  		out('endobj')
-  	end
-  	# set_magic_quotes_runtime(mqr)
-    @fonts.each_pair do |k, font|
-  		#Font objects
-  		newobj()
-  		@fonts[k]['n']=@n
-  		out('<</Type /Font')
-  		if(font['type']=='Type0')
-  			putType0(font)
-  		else
-  			name=font['name']
-  			out('/BaseFont /'+name)
-  			if(font['type']=='core')
-  				#Standard font
-  				out('/Subtype /Type1')
-  				if(name!='Symbol' and name!='ZapfDingbats')
-  					out('/Encoding /WinAnsiEncoding')
-  				end
-  			else
-  				#Additional font
-  				out('/Subtype /'+font['type'])
-  				out('/FirstChar 32')
-  				out('/LastChar 255')
-  				out('/Widths '+(@n+1)+' 0 R')
-  				out('/FontDescriptor '+(@n+2)+' 0 R')
-  				if(font['enc'])
-  					if !font['diff'].nil?
-  						out('/Encoding '+(nf+font['diff'])+' 0 R')
-  					else
-  						out('/Encoding /WinAnsiEncoding')
-          	end  
-  				end
-  			end
-  			out('>>')
-  			out('endobj')
-  			if(font['type']!='core')
-  				#Widths
-  				newobj()
-  				cw=font['cw']
-  				s='['
-          32.upto(255) do |i|
-  					s+=cw[i.chr]+' '
-        	end  
-  				out(s+']')
-  				out('endobj')
-  				#Descriptor
-  				newobj()
-  				s='<</Type /FontDescriptor /FontName /'+name
-  				font['desc'].each_pair do |k, v|
-  					s+=' /'+k+' '+v
-        	end  
-  				file=font['file']
-  				if(file)
-  					s+=' /FontFile'+(font['type']=='Type1' ? '' : '2')+' '+@FontFiles[file]['n']+' 0 R'
-        	end  
-  				out(s+'>>')
-  				out('endobj')
-  			end
-  		end
-  	end
-  end
-
-  def putType0(font)
-  	#Type0
-  	out('/Subtype /Type0')
-  	out('/BaseFont /'+font['name']+'-'+font['CMap'])
-  	out('/Encoding /'+font['CMap'])
-  	out('/DescendantFonts ['+(@n+1).to_s+' 0 R]')
-  	out('>>')
-  	out('endobj')
-  	#CIDFont
-  	newobj()
-  	out('<</Type /Font')
-  	out('/Subtype /CIDFontType0')
-  	out('/BaseFont /'+font['name'])
-  	out('/CIDSystemInfo <</Registry (Adobe) /Ordering ('+font['registry']['ordering']+') /Supplement '+font['registry']['supplement'].to_s+'>>')
-  	out('/FontDescriptor '+(@n+1).to_s+' 0 R')
-  	w='/W [1 ['
-		font['cw'].keys.sort.each {|key|
-		  w+=font['cw'][key].to_s + " "
-# ActionController::Base::logger.debug key.to_s
-# ActionController::Base::logger.debug font['cw'][key].to_s
-		}
-  	out(w+'] 231 325 500 631 [500] 326 389 500]')
-  	out('>>')
-  	out('endobj')
-  	#Font descriptor
-  	newobj()
-  	out('<</Type /FontDescriptor')
-  	out('/FontName /'+font['name'])
-  	out('/Flags 6')
-  	out('/FontBBox [0 -200 1000 900]')
-  	out('/ItalicAngle 0')
-  	out('/Ascent 800')
-  	out('/Descent -200')
-  	out('/CapHeight 800')
-  	out('/StemV 60')
-  	out('>>')
-  	out('endobj')
-  end
-end
--- a/vendor/plugins/rfpdf/lib/rfpdf/korean.rb	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,436 +0,0 @@
-# Copyright (c) 2006 4ssoM LLC <www.4ssoM.com>
-# 1.12 contributed by Ed Moss.
-#
-# The MIT License
-#
-# 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.
-#
-# This is direct port of korean.php
-#
-# Korean PDF support.
-#
-# Usage is as follows:
-#
-# require 'fpdf'
-# require 'chinese'
-# pdf = FPDF.new
-# pdf.extend(PDF_Korean)
-#
-# This allows it to be combined with other extensions, such as the bookmark
-# module.
-
-module PDF_Korean
-
-UHC_widths={' ' => 333, '!' => 416, '"' => 416, '#' => 833, '$' => 625, '%' => 916, '&' => 833, '\'' => 250, 
-	'(' => 500, ')' => 500, '*' => 500, '+' => 833, ',' => 291, '-' => 833, '.' => 291, '/' => 375, '0' => 625, '1' => 625, 
-	'2' => 625, '3' => 625, '4' => 625, '5' => 625, '6' => 625, '7' => 625, '8' => 625, '9' => 625, ':' => 333, ';' => 333, 
-	'<' => 833, '=' => 833, '>' => 916, '?' => 500, '@' => 1000, 'A' => 791, 'B' => 708, 'C' => 708, 'D' => 750, 'E' => 708, 
-	'F' => 666, 'G' => 750, 'H' => 791, 'I' => 375, 'J' => 500, 'K' => 791, 'L' => 666, 'M' => 916, 'N' => 791, 'O' => 750, 
-	'P' => 666, 'Q' => 750, 'R' => 708, 'S' => 666, 'T' => 791, 'U' => 791, 'V' => 750, 'W' => 1000, 'X' => 708, 'Y' => 708, 
-	'Z' => 666, '[' => 500, '\\' => 375, ']' => 500, '^' => 500, '_' => 500, '`' => 333, 'a' => 541, 'b' => 583, 'c' => 541, 
-	'd' => 583, 'e' => 583, 'f' => 375, 'g' => 583, 'h' => 583, 'i' => 291, 'j' => 333, 'k' => 583, 'l' => 291, 'm' => 875, 
-	'n' => 583, 'o' => 583, 'p' => 583, 'q' => 583, 'r' => 458, 's' => 541, 't' => 375, 'u' => 583, 'v' => 583, 'w' => 833, 
-	'x' => 625, 'y' => 625, 'z' => 500, '{' => 583, '|' => 583, '}' => 583, '~' => 750}
-
-  def AddCIDFont(family,style,name,cw,cMap,registry)
-    fontkey=family.downcase+style.upcase
-    unless @fonts[fontkey].nil?
-  		Error("Font already added: family style")
-    end
-  	i=@fonts.length+1
-  	name=name.gsub(' ','')
-  	@fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-130,'ut'=>40,'cw'=>cw,
-  	  'CMap'=>cMap,'registry'=>registry}
-  end
-
-  def AddCIDFonts(family,name,cw,cMap,registry)
-  	AddCIDFont(family,'',name,cw,cMap,registry)
-  	AddCIDFont(family,'B',name+',Bold',cw,cMap,registry)
-  	AddCIDFont(family,'I',name+',Italic',cw,cMap,registry)
-  	AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry)
-  end
-
-  def AddUHCFont(family='UHC',name='HYSMyeongJoStd-Medium-Acro')
-  	#Add UHC font with proportional Latin
-  	cw=UHC_widths
-  	cMap='KSCms-UHC-H'
-  	registry={'ordering'=>'Korea1','supplement'=>1}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def AddUHChwFont(family='UHC-hw',name='HYSMyeongJoStd-Medium-Acro')
-  	#Add UHC font with half-witdh Latin
-    32.upto(126) do |i|
-  		cw[i.chr]=500
-    end
-  	cMap='KSCms-UHC-HW-H'
-  	registry={'ordering'=>'Korea1','supplement'=>1}
-  	AddCIDFonts(family,name,cw,cMap,registry)
-  end
-
-  def GetStringWidth(s)
-  	if(@CurrentFont['type']=='Type0')
-  		return GetMBStringWidth(s)
-  	else
-  		return super(s)
-    end
-  end
-
-  def GetMBStringWidth(s)
-  	#Multi-byte version of GetStringWidth()
-  	l=0
-  	cw=@CurrentFont['cw']
-  	nb=s.length
-  	i=0
-  	while(i<nb)
-  		c=s[i]
-  		if(c<128)
-  			l+=cw[c.chr]
-  			i+=1
-  		else
-  			l+=1000
-  			i+=2
-  		end
-  	end
-  	return l*@FontSize/1000
-  end
-
-  def MultiCell(w,h,txt,border=0,align='L',fill=0)
-  	if(@CurrentFont['type']=='Type0')
-  		MBMultiCell(w,h,txt,border,align,fill)
-  	else
-  		super(w,h,txt,border,align,fill)
-    end
-  end
-
-  def MBMultiCell(w,h,txt,border=0,align='L',fill=0)
-  	#Multi-byte version of MultiCell()
-  	cw=@CurrentFont['cw']
-  	if(w==0)
-  		w=@w-@rMargin-@x
-    end
-  	wmax=(w-2*@cMargin)*1000/@FontSize
-  	s=txt.gsub("\r",'')
-  	nb=s.length
-  	if(nb>0 and s[nb-1]=="\n")
-  		nb-=1
-    end
-  	b=0
-  	if(border)
-  		if(border==1)
-  			border='LTRB'
-  			b='LRT'
-  			b2='LR'
-  		else
-  			b2=''
-  			if(border.to_s.index('L').nil?)
-  				b2+='L'
-        end
-  			if(border.to_s.index('R').nil?)
-  				b2+='R'
-        end
-  			b=border.to_s.index('T').nil? ? b2+'T' : b2
-  		end
-  	end
-  	sep=-1
-  	i=0
-  	j=0
-  	l=0
-  	nl=1
-  	while(i<nb)
-  		#Get next character
-  		c=s[i]
-  		#Check if ASCII or MB
-  		ascii=(c<128)
-  		if(c=="\n")
-  			#Explicit line break
-  			Cell(w,h,s[j,i-j],b,2,align,fill)
-  			i+=1
-  			sep=-1
-  			j=i
-  			l=0
-  			nl+=1
-  			if(border and nl==2)
-  				b=b2
-        end
-  			next
-  		end
-  		if(!ascii)
-  			sep=i
-  			ls=l
-  		elsif(c==' ')
-  			sep=i
-  			ls=l
-  		end
-  		l+=(ascii ? cw[c.chr] : 1000) || 0
-  		if(l>wmax)
-  			#Automatic line break
-  			if(sep==-1 or i==j)
-  				if(i==j)
-  					i+=ascii ? 1 : 2
-          end
-  				Cell(w,h,s[j,i-j],b,2,align,fill)
-  			else
-  				Cell(w,h,s[j,sep-j],b,2,align,fill)
-  				i=(s[sep]==' ') ? sep+1 : sep
-  			end
-  			sep=-1
-  			j=i
-  			l=0
-  			nl+=1
-  			if(border and nl==2)
-  				b=b2
-        end
-  		else
-  			i+=ascii ? 1 : 2
-      end
-  	end
-  	#Last chunk
-  	if(border and not border.to_s.index('B').nil?)
-  		b+='B'
-    end
-  	Cell(w,h,s[j,i-j],b,2,align,fill)
-  	@x=@lMargin
-  end
-
-  def Write(h,txt,link='')
-  	if(@CurrentFont['type']=='Type0')
-  		MBWrite(h,txt,link)
-  	else
-  		super(h,txt,link)
-    end
-  end
-
-  def MBWrite(h,txt,link)
-  	#Multi-byte version of Write()
-  	cw=@CurrentFont['cw']
-  	w=@w-@rMargin-@x
-  	wmax=(w-2*@cMargin)*1000/@FontSize
-  	s=txt.gsub("\r",'')
-  	nb=s.length
-  	sep=-1
-  	i=0
-  	j=0
-  	l=0
-  	nl=1
-  	while(i<nb)
-  		#Get next character
-  		c=s[i]
-  		#Check if ASCII or MB
-  		ascii=(c<128)
-  		if(c=="\n")
-  			#Explicit line break
-  			Cell(w,h,s[j,i-j],0,2,'',0,link)
-  			i+=1
-  			sep=-1
-  			j=i
-  			l=0
-  			if(nl==1)
-  				@x=@lMargin
-  				w=@w-@rMargin-@x
-  				wmax=(w-2*@cMargin)*1000/@FontSize
-  			end
-  			nl+=1
-  			next
-  		end
-  		if(!ascii or c==' ')
-  			sep=i
-      end
-  		l+=ascii ? cw[c.chr] : 1000
-  		if(l>wmax)
-  			#Automatic line break
-  			if(sep==-1 or i==j)
-  				if(@x>@lMargin)
-  					#Move to next line
-  					@x=@lMargin
-  					@y+=h
-  					w=@w-@rMargin-@x
-  					wmax=(w-2*@cMargin)*1000/@FontSize
-  					i+=1
-  					nl+=1
-  					next
-  				end
-  				if(i==j)
-  					i+=ascii ? 1 : 2
-          end
-  				Cell(w,h,s[j,i-j],0,2,'',0,link)
-  			else
-  				Cell(w,h,s[j,sep-j],0,2,'',0,link)
-  				i=(s[sep]==' ') ? sep+1 : sep
-  			end
-  			sep=-1
-  			j=i
-  			l=0
-  			if(nl==1)
-  				@x=@lMargin
-  				w=@w-@rMargin-@x
-  				wmax=(w-2*@cMargin)*1000/@FontSize
-  			end
-  			nl+=1
-  		else
-  			i+=ascii ? 1 : 2
-      end
-  	end
-  	#Last chunk
-  	if(i!=j)
-  		Cell(l/1000*@FontSize,h,s[j,i-j],0,0,'',0,link)
-    end
-  end
-
-private
-
-  def putfonts()
-  	nf=@n
-    @diffs.each do |diff|
-  		#Encodings
-  		newobj()
-  		out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['+diff+']>>')
-  		out('endobj')
-  	end
-  	# mqr=get_magic_quotes_runtime()
-  	# set_magic_quotes_runtime(0)
-    @FontFiles.each_pair do |file, info|
-  		#Font file embedding
-  		newobj()
-  		@FontFiles[file]['n']=@n
-  		if(defined('FPDF_FONTPATH'))
-  			file=FPDF_FONTPATH+file
-      end
-  		size=filesize(file)
-  		if(!size)
-  			Error('Font file not found')
-      end
-  		out('<</Length '+size)
-  		if(file[-2]=='.z')
-  			out('/Filter /FlateDecode')
-      end
-  		out('/Length1 '+info['length1'])
-  		if(not info['length2'].nil?)
-  			out('/Length2 '+info['length2']+' /Length3 0')
-      end
-  		out('>>')
-  		f=fopen(file,'rb')
-  		putstream(fread(f,size))
-  		fclose(f)
-  		out('endobj')
-  	end
-  	# set_magic_quotes_runtime(mqr)
-    @fonts.each_pair do |k, font|
-  		#Font objects
-  		newobj()
-  		@fonts[k]['n']=@n
-  		out('<</Type /Font')
-  		if(font['type']=='Type0')
-  			putType0(font)
-  		else
-  			name=font['name']
-  			out('/BaseFont /'+name)
-  			if(font['type']=='core')
-  				#Standard font
-  				out('/Subtype /Type1')
-  				if(name!='Symbol' and name!='ZapfDingbats')
-  					out('/Encoding /WinAnsiEncoding')
-  				end
-  			else
-  				#Additional font
-  				out('/Subtype /'+font['type'])
-  				out('/FirstChar 32')
-  				out('/LastChar 255')
-  				out('/Widths '+(@n+1)+' 0 R')
-  				out('/FontDescriptor '+(@n+2)+' 0 R')
-  				if(font['enc'])
-  					if(not font['diff'].nil?)
-  						out('/Encoding '+(nf+font['diff'])+' 0 R')
-  					else
-  						out('/Encoding /WinAnsiEncoding')
-            end
-  				end
-  			end
-  			out('>>')
-  			out('endobj')
-  			if(font['type']!='core')
-  				#Widths
-  				newobj()
-  				cw=font['cw']
-  				s='['
-          32.upto(255) do |i|
-  					s+=cw[i.chr]+' '
-          end
-  				out(s+']')
-  				out('endobj')
-  				#Descriptor
-  				newobj()
-  				s='<</Type /FontDescriptor /FontName /'+name
-  				font['desc'].each_pair do |k, v|  				
-  					s+=' /'+k+' '+v
-          end
-  				file=font['file']
-  				if(file)
-  					s+=' /FontFile'+(font['type']=='Type1' ? '' : '2')+' '+@FontFiles[file]['n']+' 0 R'
-          end
-  				out(s+'>>')
-  				out('endobj')
-  			end
-  		end
-  	end
-  end
-  
-  def putType0(font)
-  	#Type0
-  	out('/Subtype /Type0')
-  	out('/BaseFont /'+font['name']+'-'+font['CMap'])
-  	out('/Encoding /'+font['CMap'])
-  	out('/DescendantFonts ['+(@n+1).to_s+' 0 R]')
-  	out('>>')
-  	out('endobj')
-  	#CIDFont
-  	newobj()
-  	out('<</Type /Font')
-  	out('/Subtype /CIDFontType0')
-  	out('/BaseFont /'+font['name'])
-  	out('/CIDSystemInfo <</Registry (Adobe) /Ordering ('+font['registry']['ordering']+') /Supplement '+font['registry']['supplement'].to_s+'>>')
-  	out('/FontDescriptor '+(@n+1).to_s+' 0 R')
-  	if(font['CMap']=='KSCms-UHC-HW-H')
-  		w='8094 8190 500'
-  	else
-  		w='1 ['
-  		font['cw'].keys.sort.each {|key|
-  		  w+=font['cw'][key].to_s + " "
-  # ActionController::Base::logger.debug key.to_s
-  # ActionController::Base::logger.debug font['cw'][key].to_s
-  		}
-  		w +=']'
-    end
-  	out('/W ['+w+']>>')
-  	out('endobj')
-  	#Font descriptor
-  	newobj()
-  	out('<</Type /FontDescriptor')
-  	out('/FontName /'+font['name'])
-  	out('/Flags 6')
-  	out('/FontBBox [0 -200 1000 900]')
-  	out('/ItalicAngle 0')
-  	out('/Ascent 800')
-  	out('/Descent -200')
-  	out('/CapHeight 800')
-  	out('/StemV 50')
-  	out('>>')
-  	out('endobj')
-  end
-end
--- a/vendor/plugins/rfpdf/lib/rfpdf/makefont.rb	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1787 +0,0 @@
-#!/usr/bin/env ruby
-#
-# Utility to generate font definition files
-# Version: 1.1
-# Date:    2006-07-19
-#
-# Changelog:
-#  Version 1.1 - Brian Ollenberger
-#   - Fixed a very small bug in MakeFont for generating FontDef.diff.
-
-Charencodings = {
-# Central Europe
-    'cp1250' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', '.notdef',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        '.notdef',        'perthousand',    'Scaron',         'guilsinglleft',
-        'Sacute',         'Tcaron',         'Zcaron',         'Zacute',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        '.notdef',        'trademark',      'scaron',         'guilsinglright',
-        'sacute',         'tcaron',         'zcaron',         'zacute',
-        'space',          'caron',          'breve',          'Lslash',
-        'currency',       'Aogonek',        'brokenbar',      'section',
-        'dieresis',       'copyright',      'Scedilla',       'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'Zdotaccent',
-        'degree',         'plusminus',      'ogonek',         'lslash',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'cedilla',        'aogonek',        'scedilla',       'guillemotright',
-        'Lcaron',         'hungarumlaut',   'lcaron',         'zdotaccent',
-        'Racute',         'Aacute',         'Acircumflex',    'Abreve',
-        'Adieresis',      'Lacute',         'Cacute',         'Ccedilla',
-        'Ccaron',         'Eacute',         'Eogonek',        'Edieresis',
-        'Ecaron',         'Iacute',         'Icircumflex',    'Dcaron',
-        'Dcroat',         'Nacute',         'Ncaron',         'Oacute',
-        'Ocircumflex',    'Ohungarumlaut',  'Odieresis',      'multiply',
-        'Rcaron',         'Uring',          'Uacute',         'Uhungarumlaut',
-        'Udieresis',      'Yacute',         'Tcommaaccent',   'germandbls',
-        'racute',         'aacute',         'acircumflex',    'abreve',
-        'adieresis',      'lacute',         'cacute',         'ccedilla',
-        'ccaron',         'eacute',         'eogonek',        'edieresis',
-        'ecaron',         'iacute',         'icircumflex',    'dcaron',
-        'dcroat',         'nacute',         'ncaron',         'oacute',
-        'ocircumflex',    'ohungarumlaut',  'odieresis',      'divide',
-        'rcaron',         'uring',          'uacute',         'uhungarumlaut',
-        'udieresis',      'yacute',         'tcommaaccent',   'dotaccent'
-    ],
-# Cyrillic
-    'cp1251' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'afii10051',      'afii10052',      'quotesinglbase', 'afii10100',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        'Euro',           'perthousand',    'afii10058',      'guilsinglleft',
-        'afii10059',      'afii10061',      'afii10060',      'afii10145',
-        'afii10099',      'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        '.notdef',        'trademark',      'afii10106',      'guilsinglright',
-        'afii10107',      'afii10109',      'afii10108',      'afii10193',
-        'space',          'afii10062',      'afii10110',      'afii10057',
-        'currency',       'afii10050',      'brokenbar',      'section',
-        'afii10023',      'copyright',      'afii10053',      'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'afii10056',
-        'degree',         'plusminus',      'afii10055',      'afii10103',
-        'afii10098',      'mu',             'paragraph',      'periodcentered',
-        'afii10071',      'afii61352',      'afii10101',      'guillemotright',
-        'afii10105',      'afii10054',      'afii10102',      'afii10104',
-        'afii10017',      'afii10018',      'afii10019',      'afii10020',
-        'afii10021',      'afii10022',      'afii10024',      'afii10025',
-        'afii10026',      'afii10027',      'afii10028',      'afii10029',
-        'afii10030',      'afii10031',      'afii10032',      'afii10033',
-        'afii10034',      'afii10035',      'afii10036',      'afii10037',
-        'afii10038',      'afii10039',      'afii10040',      'afii10041',
-        'afii10042',      'afii10043',      'afii10044',      'afii10045',
-        'afii10046',      'afii10047',      'afii10048',      'afii10049',
-        'afii10065',      'afii10066',      'afii10067',      'afii10068',
-        'afii10069',      'afii10070',      'afii10072',      'afii10073',
-        'afii10074',      'afii10075',      'afii10076',      'afii10077',
-        'afii10078',      'afii10079',      'afii10080',      'afii10081',
-        'afii10082',      'afii10083',      'afii10084',      'afii10085',
-        'afii10086',      'afii10087',      'afii10088',      'afii10089',
-        'afii10090',      'afii10091',      'afii10092',      'afii10093',
-        'afii10094',      'afii10095',      'afii10096',      'afii10097'
-    ],
-# Western Europe
-    'cp1252' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', 'florin',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        'circumflex',     'perthousand',    'Scaron',         'guilsinglleft',
-        'OE',             '.notdef',        'Zcaron',         '.notdef',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        'tilde',          'trademark',      'scaron',         'guilsinglright',
-        'oe',             '.notdef',        'zcaron',         'Ydieresis',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'currency',       'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'questiondown',
-        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
-        'Adieresis',      'Aring',          'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
-        'Eth',            'Ntilde',         'Ograve',         'Oacute',
-        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
-        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Yacute',         'Thorn',          'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'atilde',
-        'adieresis',      'aring',          'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'igrave',         'iacute',         'icircumflex',    'idieresis',
-        'eth',            'ntilde',         'ograve',         'oacute',
-        'ocircumflex',    'otilde',         'odieresis',      'divide',
-        'oslash',         'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'yacute',         'thorn',          'ydieresis'
-    ],
-# Greek
-    'cp1253' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', 'florin',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        '.notdef',        'perthousand',    '.notdef',        'guilsinglleft',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        '.notdef',        'trademark',      '.notdef',        'guilsinglright',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'dieresistonos',  'Alphatonos',     'sterling',
-        'currency',       'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      '.notdef',        'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'afii00208',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'tonos',          'mu',             'paragraph',      'periodcentered',
-        'Epsilontonos',   'Etatonos',       'Iotatonos',      'guillemotright',
-        'Omicrontonos',   'onehalf',        'Upsilontonos',   'Omegatonos',
-        'iotadieresistonos','Alpha',          'Beta',           'Gamma',
-        'Delta',          'Epsilon',        'Zeta',           'Eta',
-        'Theta',          'Iota',           'Kappa',          'Lambda',
-        'Mu',             'Nu',             'Xi',             'Omicron',
-        'Pi',             'Rho',            '.notdef',        'Sigma',
-        'Tau',            'Upsilon',        'Phi',            'Chi',
-        'Psi',            'Omega',          'Iotadieresis',   'Upsilondieresis',
-        'alphatonos',     'epsilontonos',   'etatonos',       'iotatonos',
-        'upsilondieresistonos','alpha',          'beta',           'gamma',
-        'delta',          'epsilon',        'zeta',           'eta',
-        'theta',          'iota',           'kappa',          'lambda',
-        'mu',             'nu',             'xi',             'omicron',
-        'pi',             'rho',            'sigma1',         'sigma',
-        'tau',            'upsilon',        'phi',            'chi',
-        'psi',            'omega',          'iotadieresis',   'upsilondieresis',
-        'omicrontonos',   'upsilontonos',   'omegatonos',     '.notdef'
-    ],
-# Turkish
-    'cp1254' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', 'florin',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        'circumflex',     'perthousand',    'Scaron',         'guilsinglleft',
-        'OE',             '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        'tilde',          'trademark',      'scaron',         'guilsinglright',
-        'oe',             '.notdef',        '.notdef',        'Ydieresis',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'currency',       'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'questiondown',
-        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
-        'Adieresis',      'Aring',          'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
-        'Gbreve',         'Ntilde',         'Ograve',         'Oacute',
-        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
-        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Idotaccent',     'Scedilla',       'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'atilde',
-        'adieresis',      'aring',          'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'igrave',         'iacute',         'icircumflex',    'idieresis',
-        'gbreve',         'ntilde',         'ograve',         'oacute',
-        'ocircumflex',    'otilde',         'odieresis',      'divide',
-        'oslash',         'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'dotlessi',       'scedilla',       'ydieresis'
-    ],
-# Hebrew
-    'cp1255' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', 'florin',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        'circumflex',     'perthousand',    '.notdef',        'guilsinglleft',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        'tilde',          'trademark',      '.notdef',        'guilsinglright',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'afii57636',      'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      'multiply',       'guillemotleft',
-        'logicalnot',     'sfthyphen',      'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'middot',
-        'cedilla',        'onesuperior',    'divide',         'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'questiondown',
-        'afii57799',      'afii57801',      'afii57800',      'afii57802',
-        'afii57793',      'afii57794',      'afii57795',      'afii57798',
-        'afii57797',      'afii57806',      '.notdef',        'afii57796',
-        'afii57807',      'afii57839',      'afii57645',      'afii57841',
-        'afii57842',      'afii57804',      'afii57803',      'afii57658',
-        'afii57716',      'afii57717',      'afii57718',      'gereshhebrew',
-        'gershayimhebrew','.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'afii57664',      'afii57665',      'afii57666',      'afii57667',
-        'afii57668',      'afii57669',      'afii57670',      'afii57671',
-        'afii57672',      'afii57673',      'afii57674',      'afii57675',
-        'afii57676',      'afii57677',      'afii57678',      'afii57679',
-        'afii57680',      'afii57681',      'afii57682',      'afii57683',
-        'afii57684',      'afii57685',      'afii57686',      'afii57687',
-        'afii57688',      'afii57689',      'afii57690',      '.notdef',
-        '.notdef',        'afii299',        'afii300',        '.notdef'
-    ],
-# Baltic
-    'cp1257' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', '.notdef',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        '.notdef',        'perthousand',    '.notdef',        'guilsinglleft',
-        '.notdef',        'dieresis',       'caron',          'cedilla',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        '.notdef',        'trademark',      '.notdef',        'guilsinglright',
-        '.notdef',        'macron',         'ogonek',         '.notdef',
-        'space',          '.notdef',        'cent',           'sterling',
-        'currency',       '.notdef',        'brokenbar',      'section',
-        'Oslash',         'copyright',      'Rcommaaccent',   'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'AE',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'oslash',         'onesuperior',    'rcommaaccent',   'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'ae',
-        'Aogonek',        'Iogonek',        'Amacron',        'Cacute',
-        'Adieresis',      'Aring',          'Eogonek',        'Emacron',
-        'Ccaron',         'Eacute',         'Zacute',         'Edotaccent',
-        'Gcommaaccent',   'Kcommaaccent',   'Imacron',        'Lcommaaccent',
-        'Scaron',         'Nacute',         'Ncommaaccent',   'Oacute',
-        'Omacron',        'Otilde',         'Odieresis',      'multiply',
-        'Uogonek',        'Lslash',         'Sacute',         'Umacron',
-        'Udieresis',      'Zdotaccent',     'Zcaron',         'germandbls',
-        'aogonek',        'iogonek',        'amacron',        'cacute',
-        'adieresis',      'aring',          'eogonek',        'emacron',
-        'ccaron',         'eacute',         'zacute',         'edotaccent',
-        'gcommaaccent',   'kcommaaccent',   'imacron',        'lcommaaccent',
-        'scaron',         'nacute',         'ncommaaccent',   'oacute',
-        'omacron',        'otilde',         'odieresis',      'divide',
-        'uogonek',        'lslash',         'sacute',         'umacron',
-        'udieresis',      'zdotaccent',     'zcaron',         'dotaccent'
-    ],
-# Vietnamese
-    'cp1258' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        'quotesinglbase', 'florin',
-        'quotedblbase',   'ellipsis',       'dagger',         'daggerdbl',
-        'circumflex',     'perthousand',    '.notdef',        'guilsinglleft',
-        'OE',             '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        'tilde',          'trademark',      '.notdef',        'guilsinglright',
-        'oe',             '.notdef',        '.notdef',        'Ydieresis',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'currency',       'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'questiondown',
-        'Agrave',         'Aacute',         'Acircumflex',    'Abreve',
-        'Adieresis',      'Aring',          'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'gravecomb',      'Iacute',         'Icircumflex',    'Idieresis',
-        'Dcroat',         'Ntilde',         'hookabovecomb',  'Oacute',
-        'Ocircumflex',    'Ohorn',          'Odieresis',      'multiply',
-        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Uhorn',          'tildecomb',      'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'abreve',
-        'adieresis',      'aring',          'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'acutecomb',      'iacute',         'icircumflex',    'idieresis',
-        'dcroat',         'ntilde',         'dotbelowcomb',   'oacute',
-        'ocircumflex',    'ohorn',          'odieresis',      'divide',
-        'oslash',         'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'uhorn',          'dong',           'ydieresis'
-    ],
-# Thai
-    'cp874' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'Euro',           '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        'ellipsis',       '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        'quoteleft',      'quoteright',     'quotedblleft',
-        'quotedblright',  'bullet',         'endash',         'emdash',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'kokaithai',      'khokhaithai',    'khokhuatthai',
-        'khokhwaithai',   'khokhonthai',    'khorakhangthai', 'ngonguthai',
-        'chochanthai',    'chochingthai',   'chochangthai',   'sosothai',
-        'chochoethai',    'yoyingthai',     'dochadathai',    'topatakthai',
-        'thothanthai',    'thonangmonthothai', 'thophuthaothai', 'nonenthai',
-        'dodekthai',      'totaothai',      'thothungthai',   'thothahanthai',
-        'thothongthai',   'nonuthai',       'bobaimaithai',   'poplathai',
-        'phophungthai',   'fofathai',       'phophanthai',    'fofanthai',
-        'phosamphaothai', 'momathai',       'yoyakthai',      'roruathai',
-        'ruthai',         'lolingthai',     'luthai',         'wowaenthai',
-        'sosalathai',     'sorusithai',     'sosuathai',      'hohipthai',
-        'lochulathai',    'oangthai',       'honokhukthai',   'paiyannoithai',
-        'saraathai',      'maihanakatthai', 'saraaathai',     'saraamthai',
-        'saraithai',      'saraiithai',     'sarauethai',     'saraueethai',
-        'sarauthai',      'sarauuthai',     'phinthuthai',    '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        'bahtthai',
-        'saraethai',      'saraaethai',     'saraothai',      'saraaimaimuanthai',
-        'saraaimaimalaithai', 'lakkhangyaothai', 'maiyamokthai', 'maitaikhuthai',
-        'maiekthai',      'maithothai',     'maitrithai',     'maichattawathai',
-        'thanthakhatthai', 'nikhahitthai',  'yamakkanthai',   'fongmanthai',
-        'zerothai',       'onethai',        'twothai',        'threethai',
-        'fourthai',       'fivethai',       'sixthai',        'seventhai',
-        'eightthai',      'ninethai',       'angkhankhuthai', 'khomutthai',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef'
-    ],
-# Western Europe
-    'ISO-8859-1' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'currency',       'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'questiondown',
-        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
-        'Adieresis',      'Aring',          'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
-        'Eth',            'Ntilde',         'Ograve',         'Oacute',
-        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
-        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Yacute',         'Thorn',          'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'atilde',
-        'adieresis',      'aring',          'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'igrave',         'iacute',         'icircumflex',    'idieresis',
-        'eth',            'ntilde',         'ograve',         'oacute',
-        'ocircumflex',    'otilde',         'odieresis',      'divide',
-        'oslash',         'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'yacute',         'thorn',          'ydieresis'
-    ],
-# Central Europe
-    'ISO-8859-2' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'Aogonek',        'breve',          'Lslash',
-        'currency',       'Lcaron',         'Sacute',         'section',
-        'dieresis',       'Scaron',         'Scedilla',       'Tcaron',
-        'Zacute',         'hyphen',         'Zcaron',         'Zdotaccent',
-        'degree',         'aogonek',        'ogonek',         'lslash',
-        'acute',          'lcaron',         'sacute',         'caron',
-        'cedilla',        'scaron',         'scedilla',       'tcaron',
-        'zacute',         'hungarumlaut',   'zcaron',         'zdotaccent',
-        'Racute',         'Aacute',         'Acircumflex',    'Abreve',
-        'Adieresis',      'Lacute',         'Cacute',         'Ccedilla',
-        'Ccaron',         'Eacute',         'Eogonek',        'Edieresis',
-        'Ecaron',         'Iacute',         'Icircumflex',    'Dcaron',
-        'Dcroat',         'Nacute',         'Ncaron',         'Oacute',
-        'Ocircumflex',    'Ohungarumlaut',  'Odieresis',      'multiply',
-        'Rcaron',         'Uring',          'Uacute',         'Uhungarumlaut',
-        'Udieresis',      'Yacute',         'Tcommaaccent',   'germandbls',
-        'racute',         'aacute',         'acircumflex',    'abreve',
-        'adieresis',      'lacute',         'cacute',         'ccedilla',
-        'ccaron',         'eacute',         'eogonek',        'edieresis',
-        'ecaron',         'iacute',         'icircumflex',    'dcaron',
-        'dcroat',         'nacute',         'ncaron',         'oacute',
-        'ocircumflex',    'ohungarumlaut',  'odieresis',      'divide',
-        'rcaron',         'uring',          'uacute',         'uhungarumlaut',
-        'udieresis',      'yacute',         'tcommaaccent',   'dotaccent'
-    ],
-# Baltic
-    'ISO-8859-4' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'Aogonek',        'kgreenlandic',   'Rcommaaccent',
-        'currency',       'Itilde',         'Lcommaaccent',   'section',
-        'dieresis',       'Scaron',         'Emacron',        'Gcommaaccent',
-        'Tbar',           'hyphen',         'Zcaron',         'macron',
-        'degree',         'aogonek',        'ogonek',         'rcommaaccent',
-        'acute',          'itilde',         'lcommaaccent',   'caron',
-        'cedilla',        'scaron',         'emacron',        'gcommaaccent',
-        'tbar',           'Eng',            'zcaron',         'eng',
-        'Amacron',        'Aacute',         'Acircumflex',    'Atilde',
-        'Adieresis',      'Aring',          'AE',             'Iogonek',
-        'Ccaron',         'Eacute',         'Eogonek',        'Edieresis',
-        'Edotaccent',     'Iacute',         'Icircumflex',    'Imacron',
-        'Dcroat',         'Ncommaaccent',   'Omacron',        'Kcommaaccent',
-        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
-        'Oslash',         'Uogonek',        'Uacute',         'Ucircumflex',
-        'Udieresis',      'Utilde',         'Umacron',        'germandbls',
-        'amacron',        'aacute',         'acircumflex',    'atilde',
-        'adieresis',      'aring',          'ae',             'iogonek',
-        'ccaron',         'eacute',         'eogonek',        'edieresis',
-        'edotaccent',     'iacute',         'icircumflex',    'imacron',
-        'dcroat',         'ncommaaccent',   'omacron',        'kcommaaccent',
-        'ocircumflex',    'otilde',         'odieresis',      'divide',
-        'oslash',         'uogonek',        'uacute',         'ucircumflex',
-        'udieresis',      'utilde',         'umacron',        'dotaccent'
-    ],
-# Cyrillic
-    'ISO-8859-5' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'afii10023',      'afii10051',      'afii10052',
-        'afii10053',      'afii10054',      'afii10055',      'afii10056',
-        'afii10057',      'afii10058',      'afii10059',      'afii10060',
-        'afii10061',      'hyphen',         'afii10062',      'afii10145',
-        'afii10017',      'afii10018',      'afii10019',      'afii10020',
-        'afii10021',      'afii10022',      'afii10024',      'afii10025',
-        'afii10026',      'afii10027',      'afii10028',      'afii10029',
-        'afii10030',      'afii10031',      'afii10032',      'afii10033',
-        'afii10034',      'afii10035',      'afii10036',      'afii10037',
-        'afii10038',      'afii10039',      'afii10040',      'afii10041',
-        'afii10042',      'afii10043',      'afii10044',      'afii10045',
-        'afii10046',      'afii10047',      'afii10048',      'afii10049',
-        'afii10065',      'afii10066',      'afii10067',      'afii10068',
-        'afii10069',      'afii10070',      'afii10072',      'afii10073',
-        'afii10074',      'afii10075',      'afii10076',      'afii10077',
-        'afii10078',      'afii10079',      'afii10080',      'afii10081',
-        'afii10082',      'afii10083',      'afii10084',      'afii10085',
-        'afii10086',      'afii10087',      'afii10088',      'afii10089',
-        'afii10090',      'afii10091',      'afii10092',      'afii10093',
-        'afii10094',      'afii10095',      'afii10096',      'afii10097',
-        'afii61352',      'afii10071',      'afii10099',      'afii10100',
-        'afii10101',      'afii10102',      'afii10103',      'afii10104',
-        'afii10105',      'afii10106',      'afii10107',      'afii10108',
-        'afii10109',      'section',        'afii10110',      'afii10193'
-    ],
-# Greek
-    'ISO-8859-7' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'quoteleft',      'quoteright',     'sterling',
-        '.notdef',        '.notdef',        'brokenbar',      'section',
-        'dieresis',       'copyright',      '.notdef',        'guillemotleft',
-        'logicalnot',     'hyphen',         '.notdef',        'afii00208',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'tonos',          'dieresistonos',  'Alphatonos',     'periodcentered',
-        'Epsilontonos',   'Etatonos',       'Iotatonos',      'guillemotright',
-        'Omicrontonos',   'onehalf',        'Upsilontonos',   'Omegatonos',
-        'iotadieresistonos','Alpha',          'Beta',           'Gamma',
-        'Delta',          'Epsilon',        'Zeta',           'Eta',
-        'Theta',          'Iota',           'Kappa',          'Lambda',
-        'Mu',             'Nu',             'Xi',             'Omicron',
-        'Pi',             'Rho',            '.notdef',        'Sigma',
-        'Tau',            'Upsilon',        'Phi',            'Chi',
-        'Psi',            'Omega',          'Iotadieresis',   'Upsilondieresis',
-        'alphatonos',     'epsilontonos',   'etatonos',       'iotatonos',
-        'upsilondieresistonos','alpha',          'beta',           'gamma',
-        'delta',          'epsilon',        'zeta',           'eta',
-        'theta',          'iota',           'kappa',          'lambda',
-        'mu',             'nu',             'xi',             'omicron',
-        'pi',             'rho',            'sigma1',         'sigma',
-        'tau',            'upsilon',        'phi',            'chi',
-        'psi',            'omega',          'iotadieresis',   'upsilondieresis',
-        'omicrontonos',   'upsilontonos',   'omegatonos',     '.notdef'
-    ],
-# Turkish
-    'ISO-8859-9' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'currency',       'yen',            'brokenbar',      'section',
-        'dieresis',       'copyright',      'ordfeminine',    'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'acute',          'mu',             'paragraph',      'periodcentered',
-        'cedilla',        'onesuperior',    'ordmasculine',   'guillemotright',
-        'onequarter',     'onehalf',        'threequarters',  'questiondown',
-        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
-        'Adieresis',      'Aring',          'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
-        'Gbreve',         'Ntilde',         'Ograve',         'Oacute',
-        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
-        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Idotaccent',     'Scedilla',       'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'atilde',
-        'adieresis',      'aring',          'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'igrave',         'iacute',         'icircumflex',    'idieresis',
-        'gbreve',         'ntilde',         'ograve',         'oacute',
-        'ocircumflex',    'otilde',         'odieresis',      'divide',
-        'oslash',         'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'dotlessi',       'scedilla',       'ydieresis'
-    ],
-# Thai
-    'ISO-8859-11' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'kokaithai',      'khokhaithai',    'khokhuatthai',
-        'khokhwaithai',   'khokhonthai',    'khorakhangthai', 'ngonguthai',
-        'chochanthai',    'chochingthai',   'chochangthai',   'sosothai',
-        'chochoethai',    'yoyingthai',     'dochadathai',    'topatakthai',
-        'thothanthai',    'thonangmonthothai','thophuthaothai', 'nonenthai',
-        'dodekthai',      'totaothai',      'thothungthai',   'thothahanthai',
-        'thothongthai',   'nonuthai',       'bobaimaithai',   'poplathai',
-        'phophungthai',   'fofathai',       'phophanthai',    'fofanthai',
-        'phosamphaothai', 'momathai',       'yoyakthai',      'roruathai',
-        'ruthai',         'lolingthai',     'luthai',         'wowaenthai',
-        'sosalathai',     'sorusithai',     'sosuathai',      'hohipthai',
-        'lochulathai',    'oangthai',       'honokhukthai',   'paiyannoithai',
-        'saraathai',      'maihanakatthai', 'saraaathai',     'saraamthai',
-        'saraithai',      'saraiithai',     'sarauethai',     'saraueethai',
-        'sarauthai',      'sarauuthai',     'phinthuthai',    '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        'bahtthai',
-        'saraethai',      'saraaethai',     'saraothai',      'saraaimaimuanthai',
-        'saraaimaimalaithai','lakkhangyaothai','maiyamokthai',   'maitaikhuthai',
-        'maiekthai',      'maithothai',     'maitrithai',     'maichattawathai',
-        'thanthakhatthai','nikhahitthai',   'yamakkanthai',   'fongmanthai',
-        'zerothai',       'onethai',        'twothai',        'threethai',
-        'fourthai',       'fivethai',       'sixthai',        'seventhai',
-        'eightthai',      'ninethai',       'angkhankhuthai', 'khomutthai',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef'
-    ],
-# Western Europe
-    'ISO-8859-15' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclamdown',     'cent',           'sterling',
-        'Euro',           'yen',            'Scaron',         'section',
-        'scaron',         'copyright',      'ordfeminine',    'guillemotleft',
-        'logicalnot',     'hyphen',         'registered',     'macron',
-        'degree',         'plusminus',      'twosuperior',    'threesuperior',
-        'Zcaron',         'mu',             'paragraph',      'periodcentered',
-        'zcaron',         'onesuperior',    'ordmasculine',   'guillemotright',
-        'OE',             'oe',             'Ydieresis',      'questiondown',
-        'Agrave',         'Aacute',         'Acircumflex',    'Atilde',
-        'Adieresis',      'Aring',          'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
-        'Eth',            'Ntilde',         'Ograve',         'Oacute',
-        'Ocircumflex',    'Otilde',         'Odieresis',      'multiply',
-        'Oslash',         'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Yacute',         'Thorn',          'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'atilde',
-        'adieresis',      'aring',          'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'igrave',         'iacute',         'icircumflex',    'idieresis',
-        'eth',            'ntilde',         'ograve',         'oacute',
-        'ocircumflex',    'otilde',         'odieresis',      'divide',
-        'oslash',         'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'yacute',         'thorn',          'ydieresis'
-    ],
-# Central Europe
-    'ISO-8859-16' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'Aogonek',        'aogonek',        'Lslash',
-        'Euro',           'quotedblbase',   'Scaron',         'section',
-        'scaron',         'copyright',      'Scommaaccent',   'guillemotleft',
-        'Zacute',         'hyphen',         'zacute',         'Zdotaccent',
-        'degree',         'plusminus',      'Ccaron',         'lslash',
-        'Zcaron',         'quotedblright',  'paragraph',      'periodcentered',
-        'zcaron',         'ccaron',         'scommaaccent',   'guillemotright',
-        'OE',             'oe',             'Ydieresis',      'zdotaccent',
-        'Agrave',         'Aacute',         'Acircumflex',    'Abreve',
-        'Adieresis',      'Cacute',         'AE',             'Ccedilla',
-        'Egrave',         'Eacute',         'Ecircumflex',    'Edieresis',
-        'Igrave',         'Iacute',         'Icircumflex',    'Idieresis',
-        'Dcroat',         'Nacute',         'Ograve',         'Oacute',
-        'Ocircumflex',    'Ohungarumlaut',  'Odieresis',      'Sacute',
-        'Uhungarumlaut',  'Ugrave',         'Uacute',         'Ucircumflex',
-        'Udieresis',      'Eogonek',        'Tcommaaccent',   'germandbls',
-        'agrave',         'aacute',         'acircumflex',    'abreve',
-        'adieresis',      'cacute',         'ae',             'ccedilla',
-        'egrave',         'eacute',         'ecircumflex',    'edieresis',
-        'igrave',         'iacute',         'icircumflex',    'idieresis',
-        'dcroat',         'nacute',         'ograve',         'oacute',
-        'ocircumflex',    'ohungarumlaut',  'odieresis',      'sacute',
-        'uhungarumlaut',  'ugrave',         'uacute',         'ucircumflex',
-        'udieresis',      'eogonek',        'tcommaaccent',   'ydieresis'
-    ],
-# Russian
-    'KOI8-R' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'SF100000',       'SF110000',       'SF010000',       'SF030000',
-        'SF020000',       'SF040000',       'SF080000',       'SF090000',
-        'SF060000',       'SF070000',       'SF050000',       'upblock',
-        'dnblock',        'block',          'lfblock',        'rtblock',
-        'ltshade',        'shade',          'dkshade',        'integraltp',
-        'filledbox',      'periodcentered', 'radical',        'approxequal',
-        'lessequal',      'greaterequal',   'space',          'integralbt',
-        'degree',         'twosuperior',    'periodcentered', 'divide',
-        'SF430000',       'SF240000',       'SF510000',       'afii10071',
-        'SF520000',       'SF390000',       'SF220000',       'SF210000',
-        'SF250000',       'SF500000',       'SF490000',       'SF380000',
-        'SF280000',       'SF270000',       'SF260000',       'SF360000',
-        'SF370000',       'SF420000',       'SF190000',       'afii10023',
-        'SF200000',       'SF230000',       'SF470000',       'SF480000',
-        'SF410000',       'SF450000',       'SF460000',       'SF400000',
-        'SF540000',       'SF530000',       'SF440000',       'copyright',
-        'afii10096',      'afii10065',      'afii10066',      'afii10088',
-        'afii10069',      'afii10070',      'afii10086',      'afii10068',
-        'afii10087',      'afii10074',      'afii10075',      'afii10076',
-        'afii10077',      'afii10078',      'afii10079',      'afii10080',
-        'afii10081',      'afii10097',      'afii10082',      'afii10083',
-        'afii10084',      'afii10085',      'afii10072',      'afii10067',
-        'afii10094',      'afii10093',      'afii10073',      'afii10090',
-        'afii10095',      'afii10091',      'afii10089',      'afii10092',
-        'afii10048',      'afii10017',      'afii10018',      'afii10040',
-        'afii10021',      'afii10022',      'afii10038',      'afii10020',
-        'afii10039',      'afii10026',      'afii10027',      'afii10028',
-        'afii10029',      'afii10030',      'afii10031',      'afii10032',
-        'afii10033',      'afii10049',      'afii10034',      'afii10035',
-        'afii10036',      'afii10037',      'afii10024',      'afii10019',
-        'afii10046',      'afii10045',      'afii10025',      'afii10042',
-        'afii10047',      'afii10043',      'afii10041',      'afii10044'
-    ],
-# Ukrainian
-    'KOI8-U' => [
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        '.notdef',        '.notdef',        '.notdef',        '.notdef',
-        'space',          'exclam',         'quotedbl',       'numbersign',
-        'dollar',         'percent',        'ampersand',      'quotesingle',
-        'parenleft',      'parenright',     'asterisk',       'plus',
-        'comma',          'hyphen',         'period',         'slash',
-        'zero',           'one',            'two',            'three',
-        'four',           'five',           'six',            'seven',
-        'eight',          'nine',           'colon',          'semicolon',
-        'less',           'equal',          'greater',        'question',
-        'at',             'A',              'B',              'C',
-        'D',              'E',              'F',              'G',
-        'H',              'I',              'J',              'K',
-        'L',              'M',              'N',              'O',
-        'P',              'Q',              'R',              'S',
-        'T',              'U',              'V',              'W',
-        'X',              'Y',              'Z',              'bracketleft',
-        'backslash',      'bracketright',   'asciicircum',    'underscore',
-        'grave',          'a',              'b',              'c',
-        'd',              'e',              'f',              'g',
-        'h',              'i',              'j',              'k',
-        'l',              'm',              'n',              'o',
-        'p',              'q',              'r',              's',
-        't',              'u',              'v',              'w',
-        'x',              'y',              'z',              'braceleft',
-        'bar',            'braceright',     'asciitilde',     '.notdef',
-        'SF100000',       'SF110000',       'SF010000',       'SF030000',
-        'SF020000',       'SF040000',       'SF080000',       'SF090000',
-        'SF060000',       'SF070000',       'SF050000',       'upblock',
-        'dnblock',        'block',          'lfblock',        'rtblock',
-        'ltshade',        'shade',          'dkshade',        'integraltp',
-        'filledbox',      'bullet',         'radical',        'approxequal',
-        'lessequal',      'greaterequal',   'space',          'integralbt',
-        'degree',         'twosuperior',    'periodcentered', 'divide',
-        'SF430000',       'SF240000',       'SF510000',       'afii10071',
-        'afii10101',      'SF390000',       'afii10103',      'afii10104',
-        'SF250000',       'SF500000',       'SF490000',       'SF380000',
-        'SF280000',       'afii10098',      'SF260000',       'SF360000',
-        'SF370000',       'SF420000',       'SF190000',       'afii10023',
-        'afii10053',      'SF230000',       'afii10055',      'afii10056',
-        'SF410000',       'SF450000',       'SF460000',       'SF400000',
-        'SF540000',       'afii10050',      'SF440000',       'copyright',
-        'afii10096',      'afii10065',      'afii10066',      'afii10088',
-        'afii10069',      'afii10070',      'afii10086',      'afii10068',
-        'afii10087',      'afii10074',      'afii10075',      'afii10076',
-        'afii10077',      'afii10078',      'afii10079',      'afii10080',
-        'afii10081',      'afii10097',      'afii10082',      'afii10083',
-        'afii10084',      'afii10085',      'afii10072',      'afii10067',
-        'afii10094',      'afii10093',      'afii10073',      'afii10090',
-        'afii10095',      'afii10091',      'afii10089',      'afii10092',
-        'afii10048',      'afii10017',      'afii10018',      'afii10040',
-        'afii10021',      'afii10022',      'afii10038',      'afii10020',
-        'afii10039',      'afii10026',      'afii10027',      'afii10028',
-        'afii10029',      'afii10030',      'afii10031',      'afii10032',
-        'afii10033',      'afii10049',      'afii10034',      'afii10035',
-        'afii10036',      'afii10037',      'afii10024',      'afii10019',
-        'afii10046',      'afii10045',      'afii10025',      'afii10042',
-        'afii10047',      'afii10043',      'afii10041',      'afii10044'
-    ]
-}
-
-def ReadAFM(file, map)
-
-    # Read a font metric file
-    a = IO.readlines(file)
-
-    raise "File no found: #{file}" if a.size == 0
-
-    widths = {}
-    fm = {}
-    fix = { 'Edot' => 'Edotaccent', 'edot' => 'edotaccent',
-            'Idot' => 'Idotaccent',
-            'Zdot' => 'Zdotaccent', 'zdot' => 'zdotaccent',
-            'Odblacute' => 'Ohungarumlaut', 'odblacute' => 'ohungarumlaut',
-            'Udblacute' => 'Uhungarumlaut', 'udblacute' => 'uhungarumlaut',
-            'Gcedilla' => 'Gcommaaccent', 'gcedilla' => 'gcommaaccent',
-            'Kcedilla' => 'Kcommaaccent', 'kcedilla' => 'kcommaaccent',
-            'Lcedilla' => 'Lcommaaccent', 'lcedilla' => 'lcommaaccent',
-            'Ncedilla' => 'Ncommaaccent', 'ncedilla' => 'ncommaaccent',
-            'Rcedilla' => 'Rcommaaccent', 'rcedilla' => 'rcommaaccent',
-            'Scedilla' => 'Scommaaccent',' scedilla' => 'scommaaccent',
-            'Tcedilla' => 'Tcommaaccent',' tcedilla' => 'tcommaaccent',
-            'Dslash' => 'Dcroat', 'dslash' => 'dcroat',
-            'Dmacron' => 'Dcroat', 'dmacron' => 'dcroat',
-            'combininggraveaccent' => 'gravecomb',
-            'combininghookabove' => 'hookabovecomb',
-            'combiningtildeaccent' => 'tildecomb',
-            'combiningacuteaccent' => 'acutecomb',
-            'combiningdotbelow' => 'dotbelowcomb',
-            'dongsign' => 'dong'
-        }
-
-    a.each do |line|
-
-        e = line.rstrip.split(' ')
-	next if e.size < 2
-
-	code  = e[0]
-	param = e[1]
-
-	if code == 'C' then
-
-	    # Character metrics
-	    cc = e[1].to_i
-	    w  = e[4]
-	    gn = e[7]
-
-	    gn = 'Euro' if gn[-4, 4] == '20AC'
-
-	    if fix[gn] then
-
-		# Fix incorrect glyph name
-		0.upto(map.size - 1) do |i|
-		    if map[i] == fix[gn] then
-			map[i] = gn
-		    end
-		end
-	    end
-
-	    if map.size == 0 then
-		# Symbolic font: use built-in encoding
-		widths[cc] = w
-	    else
-		widths[gn] = w
-		fm['CapXHeight'] = e[13].to_i if gn == 'X'
-	    end
-
-	    fm['MissingWidth'] = w if gn == '.notdef'
-
-	elsif code == 'FontName' then
-	    fm['FontName'] = param
-	elsif code == 'Weight' then
-	    fm['Weight'] = param
-	elsif code == 'ItalicAngle' then
-	    fm['ItalicAngle'] = param.to_f
-	elsif code == 'Ascender' then
-	    fm['Ascender'] = param.to_i
-	elsif code == 'Descender' then
-	    fm['Descender'] = param.to_i
-	elsif code == 'UnderlineThickness' then
-	    fm['UnderlineThickness'] = param.to_i
-	elsif code == 'UnderlinePosition' then
-	    fm['UnderlinePosition'] = param.to_i
-	elsif code == 'IsFixedPitch' then
-	    fm['IsFixedPitch'] = (param == 'true')
-	elsif code == 'FontBBox' then
-	    fm['FontBBox'] = "[#{e[1]},#{e[2]},#{e[3]},#{e[4]}]"
-	elsif code == 'CapHeight' then
-	    fm['CapHeight'] = param.to_i
-	elsif code == 'StdVW' then
-	    fm['StdVW'] = param.to_i
-	end
-    end
-
-    raise 'FontName not found' unless fm['FontName']
-
-    if map.size > 0 then
-	widths['.notdef'] = 600 unless widths['.notdef']
-
-	if (widths['Delta'] == nil) && widths['increment'] then
-	    widths['Delta'] = widths['increment']
-	end
-
-	# Order widths according to map
-	0.upto(255) do |i|
-	    if widths[map[i]] == nil
-		puts "Warning: character #{map[i]} is missing"
-		widths[i] = widths['.notdef']
-	    else
-		widths[i] = widths[map[i]]
-	    end
-	end
-    end
-
-    fm['Widths'] = widths
-
-    return fm
-end
-
-def MakeFontDescriptor(fm, symbolic)
-
-    # Ascent
-    asc = fm['Ascender'] ? fm['Ascender'] : 1000
-    fd = "{\n        'Ascent' => '#{asc}'"
-
-    # Descent
-    desc = fm['Descender'] ? fm['Descender'] : -200
-    fd += ", 'Descent' => '#{desc}'"
-
-    # CapHeight
-    if fm['CapHeight'] then
-        ch = fm['CapHeight']
-    elsif fm['CapXHeight']
-        ch = fm['CapXHeight']
-    else
-        ch = asc
-    end
-    fd += ", 'CapHeight' => '#{ch}'"
-
-    # Flags
-    flags = 0
-
-    if fm['IsFixedPitch'] then
-        flags += 1 << 0
-    end
-
-    if symbolic then
-        flags += 1 << 2
-    else
-        flags += 1 << 5
-    end
-
-    if fm['ItalicAngle'] && (fm['ItalicAngle'] != 0) then
-        flags += 1 << 6
-    end
-
-    fd += ",\n        'Flags' => '#{flags}'"
-
-    # FontBBox
-    if fm['FontBBox'] then
-        fbb = fm['FontBBox'].gsub(/,/, ' ')
-    else
-        fbb = "[0 #{desc - 100} 1000 #{asc + 100}]"
-    end
-
-    fd += ", 'FontBBox' => '#{fbb}'"
-
-    # ItalicAngle
-    ia = fm['ItalicAngle'] ? fm['ItalicAngle'] : 0
-    fd += ",\n        'ItalicAngle' => '#{ia}'"
-
-    # StemV
-    if fm['StdVW'] then
-        stemv = fm['StdVW']
-    elsif fm['Weight'] && (/bold|black/i =~ fm['Weight'])
-        stemv = 120
-    else
-        stemv = 70
-    end
-
-    fd += ", 'StemV' => '#{stemv}'"
-
-    # MissingWidth
-    if fm['MissingWidth'] then
-        fd += ", 'MissingWidth' => '#{fm['MissingWidth']}'"
-    end
-
-    fd += "\n        }"
-    return fd
-end
-
-def MakeWidthArray(fm)
-
-    # Make character width array
-    s = "        [\n        "
-
-    cw = fm['Widths']
-
-    0.upto(255) do |i|
-        s += "%5d" % cw[i]
-        s += "," if i != 255
-        s += "\n        " if (i % 8) == 7
-    end
-
-    s += ']'
-
-    return s
-end
-
-def MakeFontEncoding(map)
-
-    # Build differences from reference encoding
-    ref = Charencodings['cp1252']
-    s = ''
-    last = 0
-    32.upto(255) do |i|
-	if map[i] != ref[i] then
-	    if i != last + 1 then
-		s += i.to_s + ' '
-            end
-	    last = i
-	    s += '/' + map[i] + ' '
-	end
-    end
-    return s.rstrip
-end
-
-def ReadShort(f)
-    a = f.read(2).unpack('n')
-    return a[0]
-end
-
-def ReadLong(f)
-    a = f.read(4).unpack('N')
-    return a[0]
-end
-
-def CheckTTF(file)
-
-    rl = false
-    pp = false
-    e  = false
-
-    # Check if font license allows embedding
-    File.open(file, 'rb') do |f|
-
-        # Extract number of tables
-        f.seek(4, IO::SEEK_CUR)
-	nb = ReadShort(f)
-        f.seek(6, IO::SEEK_CUR)
-
-        # Seek OS/2 table
-	found = false
-        0.upto(nb - 1) do |i|
-            if f.read(4) == 'OS/2' then
-                found = true
-                break
-            end
-
-           f.seek(12, IO::SEEK_CUR)
-        end
-
-	if ! found then
-            return
-        end
-
-        f.seek(4, IO::SEEK_CUR)
-        offset = ReadLong(f)
-        f.seek(offset, IO::SEEK_SET)
-
-        # Extract fsType flags
-        f.seek(8, IO::SEEK_CUR)
-	fsType = ReadShort(f)
-
-	rl = (fsType & 0x02) != 0
-	pp = (fsType & 0x04) != 0
-	e  = (fsType & 0x08) != 0
-    end
-
-    if rl && ( ! pp) && ( ! e) then
-        puts 'Warning: font license does not allow embedding'
-    end
-end
-
-#
-# fontfile: path to TTF file (or empty string if not to be embedded)
-# afmfile:  path to AFM file
-# enc:      font encoding (or empty string for symbolic fonts)
-# patch:    optional patch for encoding
-# type :    font type if $fontfile is empty
-#
-def MakeFont(fontfile, afmfile, enc = 'cp1252', patch = {}, type = 'TrueType')
-    # Generate a font definition file
-    if (enc != nil) && (enc != '') then
-	map = Charencodings[enc]
-	patch.each { |cc, gn| map[cc] = gn }
-    else
-	map = []
-    end
-
-    raise "Error: AFM file not found: #{afmfile}" unless File.exists?(afmfile)
-
-    fm = ReadAFM(afmfile, map)
-
-    if (enc != nil) && (enc != '') then
-	diff = MakeFontEncoding(map)
-    else
-	diff = ''
-    end
-
-    fd = MakeFontDescriptor(fm, (map.size == 0))
-
-    # Find font type
-    if fontfile then
-        ext = File.extname(fontfile).downcase.sub(/^\./, '')
-
-        if ext == 'ttf' then
-            type = 'TrueType'
-        elsif ext == 'pfb'
-            type = 'Type1'
-        else
-            raise "Error: unrecognized font file extension: #{ext}"
-        end
-    else
-	    raise "Error: incorrect font type: #{type}" if (type != 'TrueType') && (type != 'Type1')
-    end
-    printf "type = #{type}\n"
-    # Start generation
-    s  = "# #{fm['FontName']} font definition\n\n"
-    s += "module FontDef\n"
-    s += "    def FontDef.type\n        '#{type}'\n    end\n"
-    s += "    def FontDef.name\n        '#{fm['FontName']}'\n    end\n"
-    s += "    def FontDef.desc\n        #{fd}\n    end\n"
-
-    if fm['UnderlinePosition'] == nil then
-        fm['UnderlinePosition'] = -100
-    end
-
-    if fm['UnderlineThickness'] == nil then
-        fm['UnderlineThickness'] = 50
-    end
-
-    s += "    def FontDef.up\n        #{fm['UnderlinePosition']}\n    end\n"
-    s += "    def FontDef.ut\n        #{fm['UnderlineThickness']}\n    end\n"
-
-    w = MakeWidthArray(fm)
-    s += "    def FontDef.cw\n#{w}\n    end\n"
-
-    s += "    def FontDef.enc\n        '#{enc}'\n    end\n"
-    s += "    def FontDef.diff\n        #{(diff == nil) || (diff == '') ? 'nil' : '\'' + diff + '\''}\n    end\n"
-
-    basename = File.basename(afmfile, '.*')
-
-    if fontfile then
-        # Embedded font
-        if ! File.exist?(fontfile) then
-            raise "Error: font file not found: #{fontfile}"
-        end
-
-        if type == 'TrueType' then
-            CheckTTF(fontfile)
-        end
-
-	file = ''
-        File.open(fontfile, 'rb') do |f|
-            file = f.read()
-        end
-
-        if type == 'Type1' then
-            # Find first two sections and discard third one
-            header = file[0] == 128
-            file = file[6, file.length - 6] if header
-
-            pos = file.index('eexec')
-            raise 'Error: font file does not seem to be valid Type1' if pos == nil
-
-            size1 = pos + 6
-
-            file = file[0, size1] + file[size1 + 6, file.length - (size1 + 6)] if header && file[size1] == 128
-
-            pos = file.index('00000000')
-            raise 'Error: font file does not seem to be valid Type1' if pos == nil
-
-            size2 = pos - size1
-            file = file[0, size1 + size2]
-        end
-
-        if require 'zlib' then
-            File.open(basename + '.z', 'wb') { |f| f.write(Zlib::Deflate.deflate(file)) }
-            s += "    def FontDef.file\n        '#{basename}.z'\n    end\n"
-            puts "Font file compressed ('#{basename}.z')"
-        else
-            s += "    def FontDef.file\n        '#{File.basename(fontfile)}'\n    end\n"
-            puts 'Notice: font file could not be compressed (zlib not available)'
-        end
-
-        if type == 'Type1' then
-            s += "    def FontDef.size1\n        '#{size1}'\n    end\n"
-            s += "    def FontDef.size2\n        '#{size2}'\n    end\n"
-        else
-            s += "    def FontDef.originalsize\n        '#{File.size(fontfile)}'\n    end\n"
-        end
-
-    else
-        # Not embedded font
-        s += "    def FontDef.file\n        ''\n    end\n"
-    end
-
-    s += "end\n"
-    File.open(basename + '.rb', 'w') { |file| file.write(s)}
-    puts "Font definition file generated (#{basename}.rb)"
-end
-
-
-if $0 == __FILE__ then
-    if ARGV.length >= 3 then
-        enc = ARGV[2]
-    else
-        enc = 'cp1252'
-    end
-
-    if ARGV.length >= 4 then
-        patch = ARGV[3]
-    else
-        patch = {}
-    end
-
-    if ARGV.length >= 5 then
-        type = ARGV[4]
-    else
-        type = 'TrueType'
-    end
-
-    MakeFont(ARGV[0], ARGV[1], enc, patch, type)
-end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/rfpdf/math.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,90 @@
+# Various mathematical calculations extracted from the PDF::Writer for Ruby gem.
+# - http://rubyforge.org/projects/ruby-pdf
+# - Copyright 2003 - 2005 Austin Ziegler.
+# - Licensed under a MIT-style licence.
+#
+
+module RFPDF::Math
+  PI2   = ::Math::PI * 2.0
+
+  # One degree of arc measured in terms of radians.
+  DR  = PI2 / 360.0
+  # One radian of arc, measured in terms of degrees.
+  RD  = 360 / PI2
+  # One degree of arc, measured in terms of gradians.
+  DG  = 400 / 360.0
+  # One gradian of arc, measured in terms of degrees.
+  GD  = 360 / 400.0
+  # One radian of arc, measured in terms of gradians.
+  RG  = 400 / PI2
+  # One gradian of arc, measured in terms of radians.
+  GR  = PI2 / 400.0
+
+  # Truncate the remainder.
+  def remt(num, den)
+    num - den * (num / den.to_f).to_i
+  end
+
+  # Wrap radian values within the range of radians (0..PI2).
+  def rad2rad(rad)
+    remt(rad, PI2)
+  end
+
+  # Wrap degree values within the range of degrees (0..360).
+  def deg2deg(deg)
+    remt(deg, 360)
+  end
+
+  # Wrap gradian values within the range of gradians (0..400).
+  def grad2grad(grad)
+    remt(grad, 400)
+  end
+
+  # Convert degrees to radians. The value will be constrained to the
+  # range of radians (0..PI2) unless +wrap+ is false.
+  def deg2rad(deg, wrap = true)
+    rad = DR * deg
+    rad = rad2rad(rad) if wrap
+    rad
+  end
+
+  # Convert degrees to gradians. The value will be constrained to the
+  # range of gradians (0..400) unless +wrap+ is false.
+  def deg2grad(deg, wrap = true)
+    grad = DG * deg
+    grad = grad2grad(grad) if wrap
+    grad
+  end
+
+  # Convert radians to degrees. The value will be constrained to the
+  # range of degrees (0..360) unless +wrap+ is false.
+  def rad2deg(rad, wrap = true)
+    deg = RD * rad
+    deg = deg2deg(deg) if wrap
+    deg
+  end
+
+  # Convert radians to gradians. The value will be constrained to the
+  # range of gradians (0..400) unless +wrap+ is false.
+  def rad2grad(rad, wrap = true)
+    grad = RG * rad
+    grad = grad2grad(grad) if wrap
+    grad
+  end
+
+  # Convert gradians to degrees. The value will be constrained to the
+  # range of degrees (0..360) unless +wrap+ is false.
+  def grad2deg(grad, wrap = true)
+    deg = GD * grad
+    deg = deg2deg(deg) if wrap
+    deg
+  end
+
+  # Convert gradians to radians. The value will be constrained to the
+  # range of radians (0..PI2) unless +wrap+ is false.
+  def grad2rad(grad, wrap = true)
+    rad = GR * grad
+    rad = rad2rad(rad) if wrap
+    rad
+  end
+end
--- a/vendor/plugins/rfpdf/lib/rfpdf/rfpdf.rb	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,346 +0,0 @@
-module RFPDF
-  COLOR_PALETTE = {
-	  :black => [0x00, 0x00, 0x00],
-	  :white => [0xff, 0xff, 0xff],
-  }.freeze
-
-  # Draw a line from (<tt>x1, y1</tt>) to (<tt>x2, y2</tt>).
-  # 
-  # Options are:
-  # * <tt>:line_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:line_width</tt> - Default value is <tt>0.5</tt>.
-  #
-  # Example:
-  #
-	#   draw_line(x1, y1, x1, y1+h, :line_color => ReportHelper::COLOR_PALETTE[:dark_blue], :line_width => 1)
-	#
-  def draw_line(x1, y1, x2, y2, options = {})
-    options[:line_color] ||= COLOR_PALETTE[:black]
-    options[:line_width] ||= 0.5
-    set_draw_color(options[:line_color])
-    SetLineWidth(options[:line_width])
-    Line(x1, y1, x2, y2)
-  end
-
-  # Draw a string of <tt>text</tt> at (<tt>x, y</tt>).
-  # 
-  # Options are:
-  # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:font_size</tt> - Default value is <tt>10</tt>.
-  # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
-  #
-  # Example:
-  #
-	#   draw_text(x, y, header_left, :font_size => 10)
-	#
-  def draw_text(x, y, text, options = {})
-    options[:font_color] ||= COLOR_PALETTE[:black]
-    options[:font_size] ||= 10
-    options[:font_style] ||= ''
-    set_text_color(options[:font_color])
-    SetFont('Arial', options[:font_style], options[:font_size])
-    SetXY(x, y)
-    Write(options[:font_size] + 4, text)
-  end
-
-  # Draw a block of <tt>text</tt> at (<tt>x, y</tt>) bounded by <tt>left_margin</tt> and <tt>right_margin</tt>. Both
-  # margins are measured from their corresponding edge.
-  # 
-  # Options are:
-  # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:font_size</tt> - Default value is <tt>10</tt>.
-  # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
-  #
-  # Example:
-  #
-	#   draw_text_block(left_margin, 85, "question", left_margin, 280,
-  #       :font_color => ReportHelper::COLOR_PALETTE[:dark_blue],
-  #       :font_size => 12,
-  #       :font_style => 'I')
-	#
-  def draw_text_block(x, y, text, left_margin, right_margin, options = {})
-    options[:font_color] ||= COLOR_PALETTE[:black]
-    options[:font_size] ||= 10
-    options[:font_style] ||= ''
-    set_text_color(options[:font_color])
-    SetFont('Arial', options[:font_style], options[:font_size])
-    SetXY(x, y)
-    SetLeftMargin(left_margin)
-    SetRightMargin(right_margin)
-    Write(options[:font_size] + 4, text)
-    SetMargins(0,0,0)
-  end
-
-  # Draw a box at (<tt>x, y</tt>), <tt>w</tt> wide and <tt>h</tt> high.
-  # 
-  # Options are:
-  # * <tt>:border</tt> - Draw a border, 0 = no, 1 = yes? Default value is <tt>1</tt>.
-  # * <tt>:border_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:border_width</tt> - Default value is <tt>0.5</tt>.
-  # * <tt>:fill</tt> - Fill the box, 0 = no, 1 = yes? Default value is <tt>1</tt>.
-  # * <tt>:fill_color</tt> - Default value is nothing or <tt>COLOR_PALETTE[:white]</tt>.
-  #
-  # Example:
-  #
-	#   draw_box(x, y - 1, 38, 22)
-	#
-  def draw_box(x, y, w, h, options = {})
-    options[:border] ||= 1
-    options[:border_color] ||= COLOR_PALETTE[:black]
-    options[:border_width] ||= 0.5
-    options[:fill] ||= 1
-    options[:fill_color] ||= COLOR_PALETTE[:white]
-    SetLineWidth(options[:border_width])
-    set_draw_color(options[:border_color])
-    set_fill_color(options[:fill_color])
-    fd = ""
-    fd = "D" if options[:border] == 1
-    fd += "F" if options[:fill] == 1
-    Rect(x, y, w, h, fd)
-  end
-  
-  # Draw a string of <tt>text</tt> at (<tt>x, y</tt>) in a box <tt>w</tt> wide and <tt>h</tt> high.
-  # 
-  # Options are:
-  # * <tt>:align</tt> - Vertical alignment 'C' = center, 'L' = left, 'R' = right. Default value is <tt>'C'</tt>.
-  # * <tt>:border</tt> - Draw a border, 0 = no, 1 = yes? Default value is <tt>0</tt>.
-  # * <tt>:border_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:border_width</tt> - Default value is <tt>0.5</tt>.
-  # * <tt>:fill</tt> - Fill the box, 0 = no, 1 = yes? Default value is <tt>1</tt>.
-  # * <tt>:fill_color</tt> - Default value is nothing or <tt>COLOR_PALETTE[:white]</tt>.
-  # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:font_size</tt> - Default value is nothing or <tt>8</tt>.
-  # * <tt>:font_style</tt> - 'B' = bold, 'I' = italic, 'U' = underline. Default value is nothing <tt>''</tt>.
-  # * <tt>:padding</tt> - Default value is nothing or <tt>2</tt>.
-  # * <tt>:valign</tt> - 'M' = middle, 'T' = top, 'B' = bottom. Default value is nothing or <tt>'M'</tt>.
-  #
-  # Example:
-  #
-	#   draw_text_box(x, y - 1, 38, 22, 
-  #                 "your_score_title", 
-  #                 :fill => 0,
-  #                 :font_color => ReportHelper::COLOR_PALETTE[:blue], 
-  #                 :font_line_spacing => 0,
-  #                 :font_style => "B",
-  #                 :valign => "M")
-	#
-  def draw_text_box(x, y, w, h, text, options = {})
-    options[:align] ||= 'C'
-    options[:border] ||= 0
-    options[:border_color] ||= COLOR_PALETTE[:black]
-    options[:border_width] ||= 0.5
-    options[:fill] ||= 1
-    options[:fill_color] ||= COLOR_PALETTE[:white]
-    options[:font_color] ||= COLOR_PALETTE[:black]
-    options[:font_size] ||= 8
-    options[:font_line_spacing] ||= options[:font_size] * 0.3
-    options[:font_style] ||= ''
-    options[:padding] ||= 2
-    options[:valign] ||= "M"
-		if options[:fill] == 1 or options[:border] == 1
-      draw_box(x, y, w, h, options)
-  	end    
-    SetMargins(0,0,0)
-    set_text_color(options[:font_color])
-  	font_size = options[:font_size]
-    SetFont('Arial', options[:font_style], font_size)
-  	font_size += options[:font_line_spacing]
-  	case options[:valign]
-  	  when "B"
-  	    y -= options[:padding]
-        text = "\n" + text if text["\n"].nil?
-  	  when "T"
-  	    y += options[:padding]
-  	end
-    SetXY(x, y)
-  	if GetStringWidth(text) > w or not text["\n"].nil? or options[:valign] == "T"
-    	font_size += options[:font_size] * 0.1
-    	#TODO 2006-07-21 Level=1 - this is assuming a 2 line text
-    	SetXY(x, y + ((h - (font_size * 2)) / 2)) if options[:valign] == "M"
-      MultiCell(w, font_size, text, 0, options[:align])
-    else
-      Cell(w, h, text, 0, 0, options[:align])
-    end
-  end
-  
-  # Draw a string of <tt>text</tt> at (<tt>x, y</tt>) as a title.
-  # 
-  # Options are:
-  # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  # * <tt>:font_size</tt> - Default value is <tt>18</tt>.
-  # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
-  #
-  # Example:
-  #
-	#   draw_title(left_margin, 60, 
-	#       "title:", 
-	#       :font_color => ReportHelper::COLOR_PALETTE[:dark_blue])
-	#
-  def draw_title(x, y, title, options = {})
-    options[:font_color] ||= COLOR_PALETTE[:black]
-    options[:font_size] ||= 18
-    options[:font_style] ||= ''
-    set_text_color(options[:font_color])
-    SetFont('Arial', options[:font_style], options[:font_size])
-  	SetXY(x, y)
-  	Write(options[:font_size] + 2, title)
-  end
-
-  # Set the draw color. Default value is <tt>COLOR_PALETTE[:black]</tt>.
-  #
-  # Example:
-  #
-	#   set_draw_color(ReportHelper::COLOR_PALETTE[:dark_blue])
-	#
-  def set_draw_color(color = COLOR_PALETTE[:black])
-    SetDrawColor(color[0], color[1], color[2])
-  end
-
-  # Set the fill color. Default value is <tt>COLOR_PALETTE[:white]</tt>.
-  #
-  # Example:
-  #
-	#   set_fill_color(ReportHelper::COLOR_PALETTE[:dark_blue])
-	#
-  def set_fill_color(color = COLOR_PALETTE[:white])
-    SetFillColor(color[0], color[1], color[2])
-  end
-
-  # Set the text color. Default value is <tt>COLOR_PALETTE[:white]</tt>.
-  #
-  # Example:
-  #
-	#   set_text_color(ReportHelper::COLOR_PALETTE[:dark_blue])
-	#
-  def set_text_color(color = COLOR_PALETTE[:black])
-    SetTextColor(color[0], color[1], color[2])
-  end
-    
-  # Write a string containing html characters. Default value is <tt>COLOR_PALETTE[:white]</tt>.
-  #
-  # Options are:
-  # * <tt>:height</tt> - Line height. Default value is <tt>20</tt>.
-  #
-  # Example:
-  #
-	#   write_html(html, :height => 12)
-	#
-  def write_html(html, options = {})
-    options[:height] ||= 20
-    #HTML parser
-    @href = nil
-    @style = {}
-    html.gsub!("\n",' ')
-    re = %r{ ( <!--.*?--> |
-               <  (?:
-                  [^<>"] +
-                  |
-                  "  (?: \\.  |  [^\\"]+  ) *  "
-                  ) *
-               >
-             )  }xm
-
-    html.split(re).each do |value|
-      if "<" == value[0,1]
-        #Tag
-        if (value[1, 1] == '/')
-          close_tag(value[2..-2], options)
-        else
-          tag = value[1..-2]
-          open_tag(tag, options)
-        end
-      else
-        #Text
-        if @href
-          put_link(@href,value)
-        else
-          Write(options[:height], value)
-        end
-      end
-    end
-  end
-
-  def open_tag(tag, options = {}) #:nodoc:
-    #Opening tag
-    tag = tag.to_s.upcase
-    set_style(tag, true) if tag == 'B' or tag == 'I' or tag == 'U'
-    @href = options['HREF'] if tag == 'A'
-    Ln(options[:height]) if tag == 'BR'
-  end
-
-  def close_tag(tag, options = {}) #:nodoc:
-    #Closing tag
-    tag = tag.to_s.upcase
-    set_style(tag, false) if tag == 'B' or tag == 'I' or  tag == 'U'
-    @href = '' if $tag == 'A'
-  end
-
-  def set_style(tag, enable = true) #:nodoc:
-    #Modify style and select corresponding font
-    style = ""
-    @style[tag] = enable
-    ['B','I','U'].each do |s|
-      style += s if not @style[s].nil? and @style[s]
-    end
-    SetFont('', style)
-  end
-
-  def put_link(url, txt) #:nodoc:
-    #Put a hyperlink
-    SetTextColor(0,0,255)
-    set_style('U',true)
-    Write(5, txt, url)
-    set_style('U',false)
-    SetTextColor(0)
-  end 
-end
-
-# class FPDF
-#   alias_method :set_margins         , :SetMargins
-#   alias_method :set_left_margin      , :SetLeftMargin
-#   alias_method :set_top_margin       , :SetTopMargin
-#   alias_method :set_right_margin     , :SetRightMargin
-#   alias_method :set_auto_pagebreak   , :SetAutoPageBreak
-#   alias_method :set_display_mode     , :SetDisplayMode
-#   alias_method :set_compression     , :SetCompression
-#   alias_method :set_title           , :SetTitle
-#   alias_method :set_subject         , :SetSubject
-#   alias_method :set_author          , :SetAuthor
-#   alias_method :set_keywords        , :SetKeywords
-#   alias_method :set_creator         , :SetCreator
-#   alias_method :set_draw_color       , :SetDrawColor
-#   alias_method :set_fill_color       , :SetFillColor
-#   alias_method :set_text_color       , :SetTextColor
-#   alias_method :set_line_width       , :SetLineWidth
-#   alias_method :set_font            , :SetFont
-#   alias_method :set_font_size        , :SetFontSize
-#   alias_method :set_link            , :SetLink
-#   alias_method :set_y               , :SetY
-#   alias_method :set_xy              , :SetXY
-#   alias_method :get_string_width     , :GetStringWidth
-#   alias_method :get_x               , :GetX
-#   alias_method :set_x               , :SetX
-#   alias_method :get_y               , :GetY
-#   alias_method :accept_pagev_break    , :AcceptPageBreak
-#   alias_method :add_font            , :AddFont
-#   alias_method :add_link            , :AddLink
-#   alias_method :add_page            , :AddPage
-#   alias_method :alias_nb_pages       , :AliasNbPages
-#   alias_method :cell               , :Cell
-#   alias_method :close              , :Close
-#   alias_method :error              , :Error
-#   alias_method :footer             , :Footer
-#   alias_method :header             , :Header
-#   alias_method :image              , :Image
-#   alias_method :line               , :Line
-#   alias_method :link               , :Link
-#   alias_method :ln                 , :Ln
-#   alias_method :multi_cell          , :MultiCell
-#   alias_method :open               , :Open
-#   alias_method :Open               , :open
-#   alias_method :output             , :Output
-#   alias_method :page_no             , :PageNo
-#   alias_method :rect               , :Rect
-#   alias_method :text               , :Text
-#   alias_method :write              , :Write
-# end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/rfpdf/template_handler/compile_support.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,73 @@
+module RFPDF
+  module TemplateHandler
+
+    class CompileSupport
+      # extend ActiveSupport::Memoizable
+      
+      attr_reader :options
+
+      def initialize(controller)
+        @controller = controller
+        @options = pull_options
+        set_headers
+      end
+
+      def pull_options
+        @controller.send :compute_rfpdf_options || {}
+      end
+
+      def set_headers
+        set_pragma
+        set_cache_control
+        set_content_type
+        set_disposition
+      end
+
+      # TODO: kept around from railspdf-- maybe not needed anymore? should check.
+      def ie_request?
+        @controller.request.env['HTTP_USER_AGENT'] =~ /msie/i
+      end
+      # memoize :ie_request?
+
+      # added to make ie happy with ssl pdf's (per naisayer)
+      def ssl_request?
+        # @controller.request.env['SERVER_PROTOCOL'].downcase == "https"
+        @controller.request.ssl?
+      end
+      # memoize :ssl_request?
+
+      # TODO: kept around from railspdf-- maybe not needed anymore? should check.
+      def set_pragma
+        if ssl_request? && ie_request?
+          @controller.headers['Pragma'] = 'public' # added to make ie ssl pdfs work (per naisayer)
+        else
+          @controller.headers['Pragma'] ||= ie_request? ? 'no-cache' : ''
+        end
+      end
+
+      # TODO: kept around from railspdf-- maybe not needed anymore? should check.
+      def set_cache_control
+        if ssl_request? && ie_request?
+          @controller.headers['Cache-Control'] = 'maxage=1' # added to make ie ssl pdfs work (per naisayer)
+        else
+          @controller.headers['Cache-Control'] ||= ie_request? ? 'no-cache, must-revalidate' : ''
+        end
+      end
+
+      def set_content_type
+        @controller.response.content_type ||= Mime::PDF
+      end
+
+      def set_disposition
+        inline = options[:inline] ? 'inline' : 'attachment'
+        filename = options[:filename] ? "filename=#{options[:filename]}" : nil
+        @controller.headers["Content-Disposition"] = [inline,filename].compact.join(';')
+      end
+
+    end
+
+  end
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/rfpdf/template_handlers/base.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,12 @@
+module RFPDF
+  module TemplateHandlers
+    class Base < ::ActionView::TemplateHandlers::ERB
+      
+      def compile(template)
+        src = "_rfpdf_compile_setup;" + super
+      end
+    end
+  end
+end
+
+
--- a/vendor/plugins/rfpdf/lib/rfpdf/view.rb	Thu Mar 03 15:08:45 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-# Copyright (c) 2006 4ssoM LLC <www.4ssoM.com>
-#
-# The MIT License
-#
-# 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.
-#
-# Thanks go out to Bruce Williams of codefluency who created RTex. This 
-# template handler is modification of his work.
-#
-# Example Registration
-# 
-#   ActionView::Base::register_template_handler 'rfpdf', RFpdfView
-
-module RFPDF
-  
-  class View
-    @@backward_compatibility_mode = false
-    cattr_accessor :backward_compatibility_mode
-    
-    def initialize(action_view)
-      @action_view = action_view
-      # Override with @options_for_rfpdf Hash in your controller
-      @options = {
-        # Run through latex first? (for table of contents, etc)
-        :pre_process => false,
-        # Debugging mode; raises exception
-        :debug => false,
-        # Filename of pdf to generate
-        :file_name => "#{@action_view.controller.action_name}.pdf",
-        # Temporary Directory
-        :temp_dir => "#{File.expand_path(RAILS_ROOT)}/tmp"
-      }.merge(@action_view.controller.instance_eval{ @options_for_rfpdf } || {}).with_indifferent_access
-    end
-    
-    def self.compilable?
-      false
-    end
-
-    def compilable?
-      self.class.compilable?
-    end
-
-    def render(template, local_assigns = {})
-			@pdf_name = "Default.pdf" if @pdf_name.nil?
-		  unless @action_view.controller.headers["Content-Type"] == 'application/pdf'
-			  @generate = true
-				@action_view.controller.headers["Content-Type"] = 'application/pdf'
-				@action_view.controller.headers["Content-disposition:"] = "inline; filename=\"#{@options[:file_name]}\""
-			end
-      assigns = @action_view.assigns.dup
-    
-      if content_for_layout = @action_view.instance_variable_get("@content_for_layout")
-        assigns['content_for_layout'] = content_for_layout
-      end
-
-      result = @action_view.instance_eval do
-			  assigns.each do |key,val|
-			    instance_variable_set "@#{key}", val
-		    end
-			  local_assigns.each do |key,val|
-		  		class << self; self; end.send(:define_method,key){ val }
-				end
-        ERB.new(@@backward_compatibility_mode == true ? template : template.source).result(binding) 
-      end
-    end
-
-  end
-  
-end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/tcpdf.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,3825 @@
+#============================================================+
+# File name   : tcpdf.rb
+# Begin       : 2002-08-03
+# Last Update : 2007-03-20
+# Author      : Nicola Asuni
+# Version     : 1.53.0.TC031
+# License     : GNU LGPL (http://www.gnu.org/copyleft/lesser.html)
+#
+# Description : This is a Ruby class for generating PDF files 
+#               on-the-fly without requiring external 
+#               extensions.
+#
+# IMPORTANT:
+# This class is an extension and improvement of the Public Domain 
+# FPDF class by Olivier Plathey (http://www.fpdf.org).
+#
+# Main changes by Nicola Asuni:
+#    Ruby porting;
+#    UTF-8 Unicode support;
+#    code refactoring;
+#    source code clean up;
+#    code style and formatting;
+#    source code documentation using phpDocumentor (www.phpdoc.org);
+#    All ISO page formats were included;
+#    image scale factor;
+#    includes methods to parse and printsome XHTML code, supporting the following elements: h1, h2, h3, h4, h5, h6, b, u, i, a, img, p, br, strong, em, font, blockquote, li, ul, ol, hr, td, th, tr, table, sup, sub, small;
+#    includes a method to print various barcode formats using an improved version of "Generic Barcode Render Class" by Karim Mribti (http://www.mribti.com/barcode/) (require GD library: http://www.boutell.com/gd/);
+#    defines standard Header() and Footer() methods.
+#
+#   Ported to Ruby by Ed Moss 2007-08-06
+#
+#============================================================+
+
+#
+# TCPDF Class.
+# @package com.tecnick.tcpdf
+#
+ 
+@@version = "1.53.0.TC031"
+@@fpdf_charwidths = {}
+
+PDF_PRODUCER = 'TCPDF via RFPDF 1.53.0.TC031 (http://tcpdf.sourceforge.net)'
+
+module TCPDFFontDescriptor
+  @@descriptors = { 'freesans' => {} }
+  @@font_name = 'freesans'
+
+  def self.font(font_name)
+    @@descriptors[font_name.gsub(".rb", "")]
+  end
+
+  def self.define(font_name = 'freesans')
+    @@descriptors[font_name] ||= {}
+    yield @@descriptors[font_name]
+  end
+end
+
+# This is a Ruby class for generating PDF files on-the-fly without requiring external extensions.<br>
+# This class is an extension and improvement of the FPDF class by Olivier Plathey (http://www.fpdf.org).<br>
+# This version contains some changes: [porting to Ruby, support for UTF-8 Unicode, code style and formatting, php documentation (www.phpdoc.org), ISO page formats, minor improvements, image scale factor]<br>
+# TCPDF project (http://tcpdf.sourceforge.net) is based on the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org).<br>
+# To add your own TTF fonts please read /fonts/README.TXT
+# @name TCPDF
+# @package com.tecnick.tcpdf
+# @@version 1.53.0.TC031
+# @author Nicola Asuni
+# @link http://tcpdf.sourceforge.net
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+class TCPDF
+  include RFPDF
+  include Core::RFPDF
+  include RFPDF::Math
+  
+  cattr_accessor :k_cell_height_ratio
+  @@k_cell_height_ratio = 1.25
+
+  cattr_accessor :k_blank_image
+  @@k_blank_image = ""
+  
+  cattr_accessor :k_small_ratio  
+  @@k_small_ratio = 2/3.0
+  
+  cattr_accessor :k_path_cache
+  @@k_path_cache = File.join(RAILS_ROOT, 'tmp')
+  
+  cattr_accessor :k_path_url_cache
+  @@k_path_url_cache = File.join(RAILS_ROOT, 'tmp')
+  
+  cattr_accessor :decoder
+		
+	attr_accessor :barcode
+	
+	attr_accessor :buffer
+	
+	attr_accessor :diffs
+	
+	attr_accessor :color_flag
+	
+	attr_accessor :default_table_columns
+	
+	attr_accessor :default_font
+
+	attr_accessor :draw_color
+	
+	attr_accessor :encoding
+	
+	attr_accessor :fill_color
+	
+	attr_accessor :fonts
+	
+	attr_accessor :font_family
+	
+	attr_accessor :font_files
+	
+	cattr_accessor :font_path
+	
+	attr_accessor :font_style
+	
+	attr_accessor :font_size_pt
+	
+	attr_accessor :header_width
+	
+	attr_accessor :header_logo
+	
+	attr_accessor :header_logo_width
+	
+	attr_accessor :header_title
+	
+	attr_accessor :header_string
+	
+	attr_accessor :images
+	
+	attr_accessor :img_scale
+	
+	attr_accessor :in_footer
+	
+	attr_accessor :is_unicode
+
+	attr_accessor :lasth
+	
+	attr_accessor :links
+	
+	attr_accessor :listordered
+	
+	attr_accessor :listcount
+	
+	attr_accessor :lispacer
+	
+	attr_accessor :n
+	
+	attr_accessor :offsets
+	
+	attr_accessor :orientation_changes
+	
+	attr_accessor :page
+	
+	attr_accessor :page_links
+	
+	attr_accessor :pages
+	
+	attr_accessor :pdf_version
+	
+	attr_accessor :prevfill_color
+	
+	attr_accessor :prevtext_color
+	
+	attr_accessor :print_header
+	
+	attr_accessor :print_footer
+	
+	attr_accessor :state
+	
+	attr_accessor :tableborder
+	
+	attr_accessor :tdbegin
+	
+	attr_accessor :tdwidth
+	
+	attr_accessor :tdheight
+	
+	attr_accessor :tdalign
+	
+	attr_accessor :tdfill
+	
+	attr_accessor :tempfontsize
+	
+	attr_accessor :text_color
+	
+	attr_accessor :underline
+	
+	attr_accessor :ws
+	
+	#
+	# This is the class constructor. 
+	# It allows to set up the page format, the orientation and 
+	# the measure unit used in all the methods (except for the font sizes).
+	# @since 1.0
+	# @param string :orientation page orientation. Possible values are (case insensitive):<ul><li>P or Portrait (default)</li><li>L or Landscape</li></ul>
+	# @param string :unit User measure unit. Possible values are:<ul><li>pt: point</li><li>mm: millimeter (default)</li><li>cm: centimeter</li><li>in: inch</li></ul><br />A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit.
+	# @param mixed :format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).<ul><li>4A0</li><li>2A0</li><li>A0</li><li>A1</li><li>A2</li><li>A3</li><li>A4 (default)</li><li>A5</li><li>A6</li><li>A7</li><li>A8</li><li>A9</li><li>A10</li><li>B0</li><li>B1</li><li>B2</li><li>B3</li><li>B4</li><li>B5</li><li>B6</li><li>B7</li><li>B8</li><li>B9</li><li>B10</li><li>C0</li><li>C1</li><li>C2</li><li>C3</li><li>C4</li><li>C5</li><li>C6</li><li>C7</li><li>C8</li><li>C9</li><li>C10</li><li>RA0</li><li>RA1</li><li>RA2</li><li>RA3</li><li>RA4</li><li>SRA0</li><li>SRA1</li><li>SRA2</li><li>SRA3</li><li>SRA4</li><li>LETTER</li><li>LEGAL</li><li>EXECUTIVE</li><li>FOLIO</li></ul>
+	# @param boolean :unicode TRUE means that the input text is unicode (default = true)
+	# @param String :encoding charset encoding; default is UTF-8
+	#
+	def initialize(orientation = 'P',  unit = 'mm', format = 'A4', unicode = true, encoding = "UTF-8")
+		
+		# Set internal character encoding to ASCII#
+		#FIXME 2007-05-25 (EJM) Level=0 - 
+		# if (respond_to?("mb_internal_encoding") and mb_internal_encoding())
+		# 	@internal_encoding = mb_internal_encoding();
+		# 	mb_internal_encoding("ASCII");
+		# }
+			
+		#Some checks
+		dochecks();
+		
+		begin	  
+		  @@decoder = HTMLEntities.new 
+		rescue
+		  @@decoder = nil
+		end
+		
+		#Initialization of properties
+  	@barcode ||= false
+		@buffer ||= ''
+		@diffs ||= []
+		@color_flag ||= false
+  	@default_table_columns ||= 4
+  	@default_font ||= "FreeSans" if unicode
+  	@default_font ||= "Helvetica"
+		@draw_color ||= '0 G'
+  	@encoding ||= "UTF-8"
+		@fill_color ||= '0 g'
+		@fonts ||= {}
+		@font_family ||= ''
+		@font_files ||= {}
+		@font_style ||= ''
+		@font_size ||= 12
+		@font_size_pt ||= 12
+  	@header_width ||= 0
+  	@header_logo ||= ""
+  	@header_logo_width ||= 30
+  	@header_title ||= ""
+  	@header_string ||= ""
+		@images ||= {}
+  	@img_scale ||= 1
+		@in_footer ||= false
+		@is_unicode = unicode
+		@lasth ||= 0
+		@links ||= []
+  	@listordered ||= false
+  	@listcount ||= 0
+  	@lispacer ||= ""
+		@n ||= 2
+		@offsets ||= []
+		@orientation_changes ||= []
+		@page ||= 0
+		@page_links ||= {}
+		@pages ||= []
+  	@pdf_version ||= "1.3"
+  	@prevfill_color ||= [255,255,255]
+  	@prevtext_color ||= [0,0,0]
+  	@print_header ||= false
+  	@print_footer ||= false
+		@state ||= 0
+  	@tableborder ||= 0
+  	@tdbegin ||= false
+  	@tdwidth ||= 0
+  	@tdheight ||= 0
+  	@tdalign ||= "L"
+  	@tdfill ||= 0
+  	@tempfontsize ||= 10
+		@text_color ||= '0 g'
+		@underline ||= false
+		@ws ||= 0
+		
+		#Standard Unicode fonts
+		@core_fonts = {
+		'courier'=>'Courier',
+		'courierB'=>'Courier-Bold',
+		'courierI'=>'Courier-Oblique',
+		'courierBI'=>'Courier-BoldOblique',
+		'helvetica'=>'Helvetica',
+		'helveticaB'=>'Helvetica-Bold',
+		'helveticaI'=>'Helvetica-Oblique',
+		'helveticaBI'=>'Helvetica-BoldOblique',
+		'times'=>'Times-Roman',
+		'timesB'=>'Times-Bold',
+		'timesI'=>'Times-Italic',
+		'timesBI'=>'Times-BoldItalic',
+		'symbol'=>'Symbol',
+		'zapfdingbats'=>'ZapfDingbats'}
+
+		#Scale factor
+		case unit.downcase
+			when 'pt' ; @k=1
+			when 'mm' ; @k=72/25.4
+			when 'cm' ; @k=72/2.54
+			when 'in' ; @k=72
+			else Error("Incorrect unit: #{unit}")
+		end
+
+		#Page format
+		if format.is_a?(String)
+			# Page formats (45 standard ISO paper formats and 4 american common formats).
+			# Paper cordinates are calculated in this way: (inches# 72) where (1 inch = 2.54 cm)
+			case (format.upcase)
+				when  '4A0' ; format = [4767.87,6740.79]
+				when  '2A0' ; format = [3370.39,4767.87]
+				when  'A0' ; format = [2383.94,3370.39]
+				when  'A1' ; format = [1683.78,2383.94]
+				when  'A2' ; format = [1190.55,1683.78]
+				when  'A3' ; format = [841.89,1190.55]
+				when  'A4' ; format = [595.28,841.89] # ; default
+				when  'A5' ; format = [419.53,595.28]
+				when  'A6' ; format = [297.64,419.53]
+				when  'A7' ; format = [209.76,297.64]
+				when  'A8' ; format = [147.40,209.76]
+				when  'A9' ; format = [104.88,147.40]
+				when  'A10' ; format = [73.70,104.88]
+				when  'B0' ; format = [2834.65,4008.19]
+				when  'B1' ; format = [2004.09,2834.65]
+				when  'B2' ; format = [1417.32,2004.09]
+				when  'B3' ; format = [1000.63,1417.32]
+				when  'B4' ; format = [708.66,1000.63]
+				when  'B5' ; format = [498.90,708.66]
+				when  'B6' ; format = [354.33,498.90]
+				when  'B7' ; format = [249.45,354.33]
+				when  'B8' ; format = [175.75,249.45]
+				when  'B9' ; format = [124.72,175.75]
+				when  'B10' ; format = [87.87,124.72]
+				when  'C0' ; format = [2599.37,3676.54]
+				when  'C1' ; format = [1836.85,2599.37]
+				when  'C2' ; format = [1298.27,1836.85]
+				when  'C3' ; format = [918.43,1298.27]
+				when  'C4' ; format = [649.13,918.43]
+				when  'C5' ; format = [459.21,649.13]
+				when  'C6' ; format = [323.15,459.21]
+				when  'C7' ; format = [229.61,323.15]
+				when  'C8' ; format = [161.57,229.61]
+				when  'C9' ; format = [113.39,161.57]
+				when  'C10' ; format = [79.37,113.39]
+				when  'RA0' ; format = [2437.80,3458.27]
+				when  'RA1' ; format = [1729.13,2437.80]
+				when  'RA2' ; format = [1218.90,1729.13]
+				when  'RA3' ; format = [864.57,1218.90]
+				when  'RA4' ; format = [609.45,864.57]
+				when  'SRA0' ; format = [2551.18,3628.35]
+				when  'SRA1' ; format = [1814.17,2551.18]
+				when  'SRA2' ; format = [1275.59,1814.17]
+				when  'SRA3' ; format = [907.09,1275.59]
+				when  'SRA4' ; format = [637.80,907.09]
+				when  'LETTER' ; format = [612.00,792.00]
+				when  'LEGAL' ; format = [612.00,1008.00]
+				when  'EXECUTIVE' ; format = [521.86,756.00]
+				when  'FOLIO' ; format = [612.00,936.00]
+				#else then Error("Unknown page format: #{format}"
+			end
+			@fw_pt = format[0]
+			@fh_pt = format[1]
+		else
+			@fw_pt = format[0]*@k
+			@fh_pt = format[1]*@k
+		end
+
+		@fw = @fw_pt/@k
+		@fh = @fh_pt/@k
+
+		#Page orientation
+		orientation = orientation.downcase
+		if orientation == 'p' or orientation == 'portrait'
+			@def_orientation = 'P'
+			@w_pt = @fw_pt
+			@h_pt = @fh_pt
+		elsif orientation == 'l' or orientation == 'landscape'
+			@def_orientation = 'L'
+			@w_pt = @fh_pt
+			@h_pt = @fw_pt
+		else
+			Error("Incorrect orientation: #{orientation}")
+		end
+
+		@cur_orientation = @def_orientation
+		@w = @w_pt/@k
+		@h = @h_pt/@k
+		#Page margins (1 cm)
+		margin = 28.35/@k
+		SetMargins(margin, margin)
+		#Interior cell margin (1 mm)
+		@c_margin = margin / 10
+		#Line width (0.2 mm)
+		@line_width = 0.567 / @k
+		#Automatic page break
+		SetAutoPageBreak(true, 2 * margin)
+		#Full width display mode
+		SetDisplayMode('fullwidth')
+		#Compression
+		SetCompression(true)
+		#Set default PDF version number
+		@pdf_version = "1.3"
+		
+		@encoding = encoding
+		@b = 0
+		@i = 0
+		@u = 0
+		@href = ''
+		@fontlist = ["arial", "times", "courier", "helvetica", "symbol"]
+		@issetfont = false
+		@issetcolor = false
+	
+		SetFillColor(200, 200, 200, true)
+		SetTextColor(0, 0, 0, true)
+	end
+	
+	#
+	# Set the image scale.
+	# @param float :scale image scale.
+	# @author Nicola Asuni
+	# @since 1.5.2
+	#
+	def SetImageScale(scale)
+		@img_scale = scale;
+	end
+  alias_method :set_image_scale, :SetImageScale
+	
+	#
+	# Returns the image scale.
+	# @return float image scale.
+	# @author Nicola Asuni
+	# @since 1.5.2
+	#
+	def GetImageScale()
+		return @img_scale;
+	end
+  alias_method :get_image_scale, :GetImageScale
+  
+	#
+	# Returns the page width in units.
+	# @return int page width.
+	# @author Nicola Asuni
+	# @since 1.5.2
+	#
+	def GetPageWidth()
+		return @w;
+	end
+  alias_method :get_page_width, :GetPageWidth
+  
+	#
+	# Returns the page height in units.
+	# @return int page height.
+	# @author Nicola Asuni
+	# @since 1.5.2
+	#
+	def GetPageHeight()
+		return @h;
+	end
+  alias_method :get_page_height, :GetPageHeight
+  
+	#
+	# Returns the page break margin.
+	# @return int page break margin.
+	# @author Nicola Asuni
+	# @since 1.5.2
+	#
+	def GetBreakMargin()
+		return @b_margin;
+	end
+  alias_method :get_break_margin, :GetBreakMargin
+
+	#
+	# Returns the scale factor (number of points in user unit).
+	# @return int scale factor.
+	# @author Nicola Asuni
+	# @since 1.5.2
+	#
+	def GetScaleFactor()
+		return @k;
+	end
+  alias_method :get_scale_factor, :GetScaleFactor
+
+	#
+	# Defines the left, top and right margins. By default, they equal 1 cm. Call this method to change them.
+	# @param float :left Left margin.
+	# @param float :top Top margin.
+	# @param float :right Right margin. Default value is the left one.
+	# @since 1.0
+	# @see SetLeftMargin(), SetTopMargin(), SetRightMargin(), SetAutoPageBreak()
+	#
+	def SetMargins(left, top, right=-1)
+		#Set left, top and right margins
+		@l_margin = left
+		@t_margin = top
+		if (right == -1)
+			right = left
+		end
+		@r_margin = right
+	end
+  alias_method :set_margins, :SetMargins
+
+	#
+	# Defines the left margin. The method can be called before creating the first page. If the current abscissa gets out of page, it is brought back to the margin.
+	# @param float :margin The margin.
+	# @since 1.4
+	# @see SetTopMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins()
+	#
+	def SetLeftMargin(margin)
+		#Set left margin
+		@l_margin = margin
+		if ((@page>0) and (@x < margin))
+			@x = margin
+		end
+	end
+  alias_method :set_left_margin, :SetLeftMargin
+
+	#
+	# Defines the top margin. The method can be called before creating the first page.
+	# @param float :margin The margin.
+	# @since 1.5
+	# @see SetLeftMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins()
+	#
+	def SetTopMargin(margin)
+		#Set top margin
+		@t_margin = margin
+	end
+  alias_method :set_top_margin, :SetTopMargin
+
+	#
+	# Defines the right margin. The method can be called before creating the first page.
+	# @param float :margin The margin.
+	# @since 1.5
+	# @see SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins()
+	#
+	def SetRightMargin(margin)
+		#Set right margin
+		@r_margin = margin
+	end
+  alias_method :set_right_margin, :SetRightMargin
+
+	#
+	# Enables or disables the automatic page breaking mode. When enabling, the second parameter is the distance from the bottom of the page that defines the triggering limit. By default, the mode is on and the margin is 2 cm.
+	# @param boolean :auto Boolean indicating if mode should be on or off.
+	# @param float :margin Distance from the bottom of the page.
+	# @since 1.0
+	# @see Cell(), MultiCell(), AcceptPageBreak()
+	#
+	def SetAutoPageBreak(auto, margin=0)
+		#Set auto page break mode and triggering margin
+		@auto_page_break = auto
+		@b_margin = margin
+		@page_break_trigger = @h - margin
+	end
+  alias_method :set_auto_page_break, :SetAutoPageBreak
+
+	#
+	# Defines the way the document is to be displayed by the viewer. The zoom level can be set: pages can be displayed entirely on screen, occupy the full width of the window, use real size, be scaled by a specific zooming factor or use viewer default (configured in the Preferences menu of Acrobat). The page layout can be specified too: single at once, continuous display, two columns or viewer default. By default, documents use the full width mode with continuous display.
+	# @param mixed :zoom The zoom to use. It can be one of the following string values or a number indicating the zooming factor to use. <ul><li>fullpage: displays the entire page on screen </li><li>fullwidth: uses maximum width of window</li><li>real: uses real size (equivalent to 100% zoom)</li><li>default: uses viewer default mode</li></ul>
+	# @param string :layout The page layout. Possible values are:<ul><li>single: displays one page at once</li><li>continuous: displays pages continuously (default)</li><li>two: displays two pages on two columns</li><li>default: uses viewer default mode</li></ul>
+	# @since 1.2
+	#
+	def SetDisplayMode(zoom, layout = 'continuous')
+		#Set display mode in viewer
+		if (zoom == 'fullpage' or zoom == 'fullwidth' or zoom == 'real' or zoom == 'default' or !zoom.is_a?(String))
+			@zoom_mode = zoom
+		else
+			Error("Incorrect zoom display mode: #{zoom}")
+		end
+		if (layout == 'single' or layout == 'continuous' or layout == 'two' or layout == 'default')
+			@layout_mode = layout
+		else
+			Error("Incorrect layout display mode: #{layout}")
+		end
+	end
+  alias_method :set_display_mode, :SetDisplayMode
+
+	#
+	# Activates or deactivates page compression. When activated, the internal representation of each page is compressed, which leads to a compression ratio of about 2 for the resulting document. Compression is on by default.
+	# Note: the Zlib extension is required for this feature. If not present, compression will be turned off.
+	# @param boolean :compress Boolean indicating if compression must be enabled.
+	# @since 1.4
+	#
+	def SetCompression(compress)
+		#Set page compression
+		if (respond_to?('gzcompress'))
+			@compress = compress
+		else
+			@compress = false
+		end
+	end
+  alias_method :set_compression, :SetCompression
+
+	#
+	# Defines the title of the document.
+	# @param string :title The title.
+	# @since 1.2
+	# @see SetAuthor(), SetCreator(), SetKeywords(), SetSubject()
+	#
+	def SetTitle(title)
+		#Title of document
+		@title = title
+	end
+  alias_method :set_title, :SetTitle
+
+	#
+	# Defines the subject of the document.
+	# @param string :subject The subject.
+	# @since 1.2
+	# @see SetAuthor(), SetCreator(), SetKeywords(), SetTitle()
+	#
+	def SetSubject(subject)
+		#Subject of document
+		@subject = subject
+	end
+  alias_method :set_subject, :SetSubject
+
+	#
+	# Defines the author of the document.
+	# @param string :author The name of the author.
+	# @since 1.2
+	# @see SetCreator(), SetKeywords(), SetSubject(), SetTitle()
+	#
+	def SetAuthor(author)
+		#Author of document
+		@author = author
+	end
+  alias_method :set_author, :SetAuthor
+
+	#
+	# Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'.
+	# @param string :keywords The list of keywords.
+	# @since 1.2
+	# @see SetAuthor(), SetCreator(), SetSubject(), SetTitle()
+	#
+	def SetKeywords(keywords)
+		#Keywords of document
+		@keywords = keywords
+	end
+  alias_method :set_keywords, :SetKeywords
+
+	#
+	# Defines the creator of the document. This is typically the name of the application that generates the PDF.
+	# @param string :creator The name of the creator.
+	# @since 1.2
+	# @see SetAuthor(), SetKeywords(), SetSubject(), SetTitle()
+	#
+	def SetCreator(creator)
+		#Creator of document
+		@creator = creator
+	end
+  alias_method :set_creator, :SetCreator
+
+	#
+	# Defines an alias for the total number of pages. It will be substituted as the document is closed.<br />
+	# <b>Example:</b><br />
+	# <pre>
+	# class PDF extends TCPDF {
+	# 	def Footer()
+	# 		#Go to 1.5 cm from bottom
+	# 		SetY(-15);
+	# 		#Select Arial italic 8
+	# 		SetFont('Arial','I',8);
+	# 		#Print current and total page numbers
+	# 		Cell(0,10,'Page '.PageNo().'/{nb}',0,0,'C');
+	# 	end
+	# }
+	# :pdf=new PDF();
+	# :pdf->alias_nb_pages();
+	# </pre>
+	# @param string :alias The alias. Default valuenb}.
+	# @since 1.4
+	# @see PageNo(), Footer()
+	#
+	def AliasNbPages(alias_nb ='{nb}')
+		#Define an alias for total number of pages
+		@alias_nb_pages = escapetext(alias_nb)
+	end
+	alias_method :alias_nb_pages, :AliasNbPages
+
+	#
+	# This method is automatically called in case of fatal error; it simply outputs the message and halts the execution. An inherited class may override it to customize the error handling but should always halt the script, or the resulting document would probably be invalid.
+	# 2004-06-11 :: Nicola Asuni : changed bold tag with strong
+	# @param string :msg The error message
+	# @since 1.0
+	#
+	def Error(msg)
+		#Fatal error
+		raise ("TCPDF error: #{msg}")
+	end
+  alias_method :error, :Error
+
+	#
+	# This method begins the generation of the PDF document. It is not necessary to call it explicitly because AddPage() does it automatically.
+	# Note: no page is created by this method
+	# @since 1.0
+	# @see AddPage(), Close()
+	#
+	def Open()
+		#Begin document
+		@state = 1
+	end
+  # alias_method :open, :Open
+
+	#
+	# Terminates the PDF document. It is not necessary to call this method explicitly because Output() does it automatically. If the document contains no page, AddPage() is called to prevent from getting an invalid document.
+	# @since 1.0
+	# @see Open(), Output()
+	#
+	def Close()
+		#Terminate document
+		if (@state==3)
+			return;
+		end
+		if (@page==0)
+			AddPage();
+		end
+		#Page footer
+		@in_footer=true;
+		Footer();
+		@in_footer=false;
+		#Close page
+		endpage();
+		#Close document
+		enddoc();
+	end
+  # alias_method :close, :Close
+
+	#
+	# Adds a new page to the document. If a page is already present, the Footer() method is called first to output the footer. Then the page is added, the current position set to the top-left corner according to the left and top margins, and Header() is called to display the header.
+	# The font which was set before calling is automatically restored. There is no need to call SetFont() again if you want to continue with the same font. The same is true for colors and line width.
+	# The origin of the coordinate system is at the top-left corner and increasing ordinates go downwards.
+	# @param string :orientation Page orientation. Possible values are (case insensitive):<ul><li>P or Portrait</li><li>L or Landscape</li></ul> The default value is the one passed to the constructor.
+	# @since 1.0
+	# @see TCPDF(), Header(), Footer(), SetMargins()
+	#
+	def AddPage(orientation='')
+		#Start a new page
+		if (@state==0)
+			Open();
+		end
+		family=@font_family;
+		style=@font_style + (@underline ? 'U' : '');
+		size=@font_size_pt;
+		lw=@line_width;
+		dc=@draw_color;
+		fc=@fill_color;
+		tc=@text_color;
+		cf=@color_flag;
+		if (@page>0)
+			#Page footer
+			@in_footer=true;
+			Footer();
+			@in_footer=false;
+			#Close page
+			endpage();
+		end
+		#Start new page
+		beginpage(orientation);
+		#Set line cap style to square
+		out('2 J');
+		#Set line width
+		@line_width = lw;
+		out(sprintf('%.2f w', lw*@k));
+		#Set font
+		if (family)
+			SetFont(family, style, size);
+		end
+		#Set colors
+		@draw_color = dc;
+		if (dc!='0 G')
+			out(dc);
+		end
+		@fill_color = fc;
+		if (fc!='0 g')
+			out(fc);
+		end
+		@text_color = tc;
+		@color_flag = cf;
+		#Page header
+		Header();
+		#Restore line width
+		if (@line_width != lw)
+			@line_width = lw;
+			out(sprintf('%.2f w', lw*@k));
+		end
+		#Restore font
+		if (family)
+			SetFont(family, style, size);
+		end
+		#Restore colors
+		if (@draw_color != dc)
+			@draw_color = dc;
+			out(dc);
+		end
+		if (@fill_color != fc)
+			@fill_color = fc;
+			out(fc);
+		end
+		@text_color = tc;
+		@color_flag = cf;
+	end
+	  alias_method :add_page, :AddPage
+	
+  #
+  # Rotate object.
+  # @param float :angle angle in degrees for counter-clockwise rotation
+  # @param int :x abscissa of the rotation center. Default is current x position
+  # @param int :y ordinate of the rotation center. Default is current y position
+  #
+  def Rotate(angle, x="", y="")
+
+  	if (x == '')
+  		x = @x;
+  	end
+  	
+  	if (y == '')
+  		y = @y;
+  	end
+  	
+  	if (@rtl)
+  		x = @w - x;
+  		angle = -@angle;
+  	end
+  	
+  	y = (@h - y) * @k;
+  	x *= @k;
+
+  	# calculate elements of transformation matrix
+  	tm = []
+  	tm[0] = ::Math::cos(deg2rad(angle));
+  	tm[1] = ::Math::sin(deg2rad(angle));
+  	tm[2] = -tm[1];
+  	tm[3] = tm[0];
+  	tm[4] = x + tm[1] * y - tm[0] * x;
+  	tm[5] = y - tm[0] * y - tm[1] * x;
+
+  	# generate the transformation matrix
+  	Transform(tm);
+  end
+    alias_method :rotate, :Rotate
+  
+  #
+	# Starts a 2D tranformation saving current graphic state.
+	# This function must be called before scaling, mirroring, translation, rotation and skewing.
+	# Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior.
+	#
+	def StartTransform
+		out('q');
+	end
+	  alias_method :start_transform, :StartTransform
+	
+	#
+	# Stops a 2D tranformation restoring previous graphic state.
+	# This function must be called after scaling, mirroring, translation, rotation and skewing.
+	# Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior.
+	#
+	def StopTransform
+		out('Q');
+	end
+	  alias_method :stop_transform, :StopTransform
+	
+  #
+	# Apply graphic transformations.
+	# @since 2.1.000 (2008-01-07)
+	# @see StartTransform(), StopTransform()
+	#
+	def Transform(tm)
+		x = out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm', tm[0], tm[1], tm[2], tm[3], tm[4], tm[5]));
+	end
+	  alias_method :transform, :Transform
+		
+	#
+ 	# Set header data.
+	# @param string :ln header image logo
+	# @param string :lw header image logo width in mm
+	# @param string :ht string to print as title on document header
+	# @param string :hs string to print on document header
+	#
+	def SetHeaderData(ln="", lw=0, ht="", hs="")
+		@header_logo = ln || ""
+		@header_logo_width = lw || 0
+		@header_title = ht || ""
+		@header_string = hs || ""
+	end
+	  alias_method :set_header_data, :SetHeaderData
+	
+	#
+ 	# Set header margin.
+	# (minimum distance between header and top page margin)
+	# @param int :hm distance in millimeters
+	#
+	def SetHeaderMargin(hm=10)
+		@header_margin = hm;
+	end
+	  alias_method :set_header_margin, :SetHeaderMargin
+	
+	#
+ 	# Set footer margin.
+	# (minimum distance between footer and bottom page margin)
+	# @param int :fm distance in millimeters
+	#
+	def SetFooterMargin(fm=10)
+		@footer_margin = fm;
+	end
+	  alias_method :set_footer_margin, :SetFooterMargin
+	
+	#
+ 	# Set a flag to print page header.
+	# @param boolean :val set to true to print the page header (default), false otherwise. 
+	#
+	def SetPrintHeader(val=true)
+		@print_header = val;
+	end
+	  alias_method :set_print_header, :SetPrintHeader
+	
+	#
+ 	# Set a flag to print page footer.
+	# @param boolean :value set to true to print the page footer (default), false otherwise. 
+	#
+	def SetPrintFooter(val=true)
+		@print_footer = val;
+	end
+	  alias_method :set_print_footer, :SetPrintFooter
+	
+	#
+ 	# This method is used to render the page header.
+ 	# It is automatically called by AddPage() and could be overwritten in your own inherited class.
+	#
+	def Header()
+		if (@print_header)
+			if (@original_l_margin.nil?)
+				@original_l_margin = @l_margin;
+			end
+			if (@original_r_margin.nil?)
+				@original_r_margin = @r_margin;
+			end
+			
+			#set current position
+			SetXY(@original_l_margin, @header_margin);
+			
+			if ((@header_logo) and (@header_logo != @@k_blank_image))
+				Image(@header_logo, @original_l_margin, @header_margin, @header_logo_width);
+			else
+				@img_rb_y = GetY();
+			end
+			
+			cell_height = ((@@k_cell_height_ratio * @header_font[2]) / @k).round(2)
+			
+			header_x = @original_l_margin + (@header_logo_width * 1.05); #set left margin for text data cell
+			
+			# header title
+			SetFont(@header_font[0], 'B', @header_font[2] + 1);
+			SetX(header_x);
+			Cell(@header_width, cell_height, @header_title, 0, 1, 'L'); 
+			
+			# header string
+			SetFont(@header_font[0], @header_font[1], @header_font[2]);
+			SetX(header_x);
+			MultiCell(@header_width, cell_height, @header_string, 0, 'L', 0);
+			
+			# print an ending header line
+			if (@header_width)
+				#set style for cell border
+				SetLineWidth(0.3);
+				SetDrawColor(0, 0, 0);
+				SetY(1 + (@img_rb_y > GetY() ? @img_rb_y : GetY()));
+				SetX(@original_l_margin);
+				Cell(0, 0, '', 'T', 0, 'C'); 
+			end
+			
+			#restore position
+			SetXY(@original_l_margin, @t_margin);
+		end
+	end
+	  alias_method :header, :Header
+	
+	#
+ 	# This method is used to render the page footer. 
+ 	# It is automatically called by AddPage() and could be overwritten in your own inherited class.
+	#
+	def Footer()
+		if (@print_footer)
+			
+			if (@original_l_margin.nil?)
+				@original_l_margin = @l_margin;
+			end
+			if (@original_r_margin.nil?)
+				@original_r_margin = @r_margin;
+			end
+			
+			#set font
+			SetFont(@footer_font[0], @footer_font[1] , @footer_font[2]);
+			#set style for cell border
+			line_width = 0.3;
+			SetLineWidth(line_width);
+			SetDrawColor(0, 0, 0);
+			
+			footer_height = ((@@k_cell_height_ratio * @footer_font[2]) / @k).round; #footer height, was , 2)
+			#get footer y position
+			footer_y = @h - @footer_margin - footer_height;
+			#set current position
+			SetXY(@original_l_margin, footer_y); 
+			
+			#print document barcode
+			if (@barcode)
+				Ln();
+				barcode_width = ((@w - @original_l_margin - @original_r_margin)).round; #max width
+				writeBarcode(@original_l_margin, footer_y + line_width, barcode_width, footer_height - line_width, "C128B", false, false, 2, @barcode);
+			end
+			
+			SetXY(@original_l_margin, footer_y); 
+			
+			#Print page number
+			Cell(0, footer_height, @l['w_page'] + " " + PageNo().to_s + ' / {nb}', 'T', 0, 'R'); 
+		end
+	end
+	  alias_method :footer, :Footer
+	
+	#
+	# Returns the current page number.
+	# @return int page number
+	# @since 1.0
+	# @see alias_nb_pages()
+	#
+	def PageNo()
+		#Get current page number
+		return @page;
+	end
+  alias_method :page_no, :PageNo
+
+	#
+	# Defines the color used for all drawing operations (lines, rectangles and cell borders). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
+	# @param int :r If g et b are given, red component; if not, indicates the gray level. Value between 0 and 255
+	# @param int :g Green component (between 0 and 255)
+	# @param int :b Blue component (between 0 and 255)
+	# @since 1.3
+	# @see SetFillColor(), SetTextColor(), Line(), Rect(), Cell(), MultiCell()
+	#
+	def SetDrawColor(r, g=-1, b=-1)
+		#Set color for all stroking operations
+		if ((r==0 and g==0 and b==0) or g==-1)
+			@draw_color=sprintf('%.3f G', r/255.0);
+		else
+			@draw_color=sprintf('%.3f %.3f %.3f RG', r/255.0, g/255.0, b/255.0);
+		end
+		if (@page>0)
+			out(@draw_color);
+		end
+	end
+  alias_method :set_draw_color, :SetDrawColor
+
+	#
+	# Defines the color used for all filling operations (filled rectangles and cell backgrounds). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
+	# @param int :r If g et b are given, red component; if not, indicates the gray level. Value between 0 and 255
+	# @param int :g Green component (between 0 and 255)
+	# @param int :b Blue component (between 0 and 255)
+	# @param boolean :storeprev if true stores the RGB array on :prevfill_color variable.
+	# @since 1.3
+	# @see SetDrawColor(), SetTextColor(), Rect(), Cell(), MultiCell()
+	#
+	def SetFillColor(r, g=-1, b=-1, storeprev=false)
+		#Set color for all filling operations
+		if ((r==0 and g==0 and b==0) or g==-1)
+			@fill_color=sprintf('%.3f g', r/255.0);
+		else
+			@fill_color=sprintf('%.3f %.3f %.3f rg', r/255.0, g/255.0, b/255.0);
+		end
+		@color_flag=(@fill_color!=@text_color);
+		if (@page>0)
+			out(@fill_color);
+		end
+		if (storeprev)
+			# store color as previous value
+			@prevfill_color = [r, g, b]
+		end
+	end
+  alias_method :set_fill_color, :SetFillColor
+
+  # This hasn't been ported from tcpdf, it's a variation on SetTextColor for setting cmyk colors
+	def SetCmykFillColor(c, m, y, k, storeprev=false)
+		#Set color for all filling operations
+		@fill_color=sprintf('%.3f %.3f %.3f %.3f k', c, m, y, k);
+		@color_flag=(@fill_color!=@text_color);
+		if (storeprev)
+			# store color as previous value
+			@prevtext_color = [c, m, y, k]
+		end
+		if (@page>0)
+			out(@fill_color);
+		end
+	end
+  alias_method :set_cmyk_fill_color, :SetCmykFillColor
+
+	#
+	# Defines the color used for text. It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
+	# @param int :r If g et b are given, red component; if not, indicates the gray level. Value between 0 and 255
+	# @param int :g Green component (between 0 and 255)
+	# @param int :b Blue component (between 0 and 255)
+	# @param boolean :storeprev if true stores the RGB array on :prevtext_color variable.
+	# @since 1.3
+	# @see SetDrawColor(), SetFillColor(), Text(), Cell(), MultiCell()
+	#
+	def SetTextColor(r, g=-1, b=-1, storeprev=false)
+		#Set color for text
+		if ((r==0 and :g==0 and :b==0) or :g==-1)
+			@text_color=sprintf('%.3f g', r/255.0);
+		else
+			@text_color=sprintf('%.3f %.3f %.3f rg', r/255.0, g/255.0, b/255.0);
+		end
+		@color_flag=(@fill_color!=@text_color);
+		if (storeprev)
+			# store color as previous value
+			@prevtext_color = [r, g, b]
+		end
+	end
+  alias_method :set_text_color, :SetTextColor
+
+  # This hasn't been ported from tcpdf, it's a variation on SetTextColor for setting cmyk colors
+	def SetCmykTextColor(c, m, y, k, storeprev=false)
+		#Set color for text
+		@text_color=sprintf('%.3f %.3f %.3f %.3f k', c, m, y, k);
+		@color_flag=(@fill_color!=@text_color);
+		if (storeprev)
+			# store color as previous value
+			@prevtext_color = [c, m, y, k]
+		end
+	end
+  alias_method :set_cmyk_text_color, :SetCmykTextColor
+  
+	#
+	# Returns the length of a string in user unit. A font must be selected.<br>
+	# Support UTF-8 Unicode [Nicola Asuni, 2005-01-02]
+	# @param string :s The string whose length is to be computed
+	# @return int
+	# @since 1.2
+	#
+	def GetStringWidth(s)
+		#Get width of a string in the current font
+		s = s.to_s;
+		cw = @current_font['cw']
+		w = 0;
+		if (@is_unicode)
+      unicode = UTF8StringToArray(s);
+      unicode.each do |char|
+				if (!cw[char].nil?)
+					w += cw[char];
+				# This should not happen. UTF8StringToArray should guarentee the array is ascii values.
+        # elsif (c!cw[char[0]].nil?)
+        #   w += cw[char[0]];
+        #         elsif (!cw[char.chr].nil?)
+        #           w += cw[char.chr];
+				elsif (!@current_font['desc']['MissingWidth'].nil?)
+					w += @current_font['desc']['MissingWidth']; # set default size
+				else
+					w += 500;
+				end
+			end
+		else
+		  s.each_byte do |c|
+				if cw[c.chr]
+					w += cw[c.chr];
+				elsif cw[?c.chr]
+					w += cw[?c.chr]
+				end
+			end
+		end
+		return (w * @font_size / 1000.0);
+	end
+  alias_method :get_string_width, :GetStringWidth
+
+	#
+	# Defines the line width. By default, the value equals 0.2 mm. The method can be called before the first page is created and the value is retained from page to page.
+	# @param float :width The width.
+	# @since 1.0
+	# @see Line(), Rect(), Cell(), MultiCell()
+	#
+	def SetLineWidth(width)
+		#Set line width
+		@line_width = width;
+		if (@page>0)
+			out(sprintf('%.2f w', width*@k));
+		end
+	end
+  alias_method :set_line_width, :SetLineWidth
+
+	#
+	# Draws a line between two points.
+	# @param float :x1 Abscissa of first point
+	# @param float :y1 Ordinate of first point
+	# @param float :x2 Abscissa of second point
+	# @param float :y2 Ordinate of second point
+	# @since 1.0
+	# @see SetLineWidth(), SetDrawColor()
+	#
+	def Line(x1, y1, x2, y2)
+		#Draw a line
+		out(sprintf('%.2f %.2f m %.2f %.2f l S', x1 * @k, (@h - y1) * @k, x2 * @k, (@h - y2) * @k));
+	end
+  alias_method :line, :Line
+
+  def Circle(mid_x, mid_y, radius, style='')
+    mid_y = (@h-mid_y)*@k
+    out(sprintf("q\n")) # postscript content in pdf
+    # init line type etc. with /GSD gs G g (grey) RG rg (RGB) w=line witdh etc. 
+    out(sprintf("1 j\n")) # line join
+    # translate ("move") circle to mid_y, mid_y
+    out(sprintf("1 0 0 1 %f %f cm", mid_x, mid_y))
+    kappa = 0.5522847498307933984022516322796
+    # Quadrant 1 
+    x_s = 0.0 # 12 o'clock 
+    y_s = 0.0 + radius
+    x_e = 0.0 + radius # 3 o'clock 
+    y_e = 0.0
+    out(sprintf("%f %f m\n", x_s, y_s)) # move to 12 o'clock 
+    # cubic bezier control point 1, start height and kappa * radius to the right 
+    bx_e1 = x_s + (radius * kappa)
+    by_e1 = y_s
+    # cubic bezier control point 2, end and kappa * radius above 
+    bx_e2 = x_e
+    by_e2 = y_e + (radius * kappa)
+    # draw cubic bezier from current point to x_e/y_e with bx_e1/by_e1 and bx_e2/by_e2 as bezier control points
+    out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e))
+    # Quadrant 2 
+    x_s = x_e 
+    y_s = y_e # 3 o'clock 
+    x_e = 0.0 
+    y_e = 0.0 - radius # 6 o'clock 
+    bx_e1 = x_s # cubic bezier point 1 
+    by_e1 = y_s - (radius * kappa)
+    bx_e2 = x_e + (radius * kappa) # cubic bezier point 2 
+    by_e2 = y_e
+    out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e))
+    # Quadrant 3 
+    x_s = x_e 
+    y_s = y_e # 6 o'clock 
+    x_e = 0.0 - radius
+    y_e = 0.0 # 9 o'clock 
+    bx_e1 = x_s - (radius * kappa) # cubic bezier point 1 
+    by_e1 = y_s
+    bx_e2 = x_e # cubic bezier point 2 
+    by_e2 = y_e - (radius * kappa)
+    out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e))
+    # Quadrant 4 
+    x_s = x_e 
+    y_s = y_e # 9 o'clock 
+    x_e = 0.0 
+    y_e = 0.0 + radius # 12 o'clock 
+    bx_e1 = x_s # cubic bezier point 1 
+    by_e1 = y_s + (radius * kappa)
+    bx_e2 = x_e - (radius * kappa) # cubic bezier point 2 
+    by_e2 = y_e
+    out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e))
+    if style=='F'
+        op='f'
+    elsif style=='FD' or style=='DF'
+        op='b'
+    else
+        op='s'
+    end
+    out(sprintf("#{op}\n")) # stroke circle, do not fill and close path 
+    # for filling etc. b, b*, f, f*
+    out(sprintf("Q\n")) # finish postscript in PDF
+  end
+  alias_method :circle, :Circle
+
+	#
+	# Outputs a rectangle. It can be drawn (border only), filled (with no border) or both.
+	# @param float :x Abscissa of upper-left corner
+	# @param float :y Ordinate of upper-left corner
+	# @param float :w Width
+	# @param float :h Height
+	# @param string :style Style of rendering. Possible values are:<ul><li>D or empty string: draw (default)</li><li>F: fill</li><li>DF or FD: draw and fill</li></ul>
+	# @since 1.0
+	# @see SetLineWidth(), SetDrawColor(), SetFillColor()
+	#
+	def Rect(x, y, w, h, style='')
+		#Draw a rectangle
+		if (style=='F')
+			op='f';
+		elsif (style=='FD' or style=='DF')
+			op='B';
+		else
+			op='S';
+		end
+		out(sprintf('%.2f %.2f %.2f %.2f re %s', x * @k, (@h - y) * @k, w * @k, -h * @k, op));
+	end
+  alias_method :rect, :Rect
+
+	#
+	# Imports a TrueType or Type1 font and makes it available. It is necessary to generate a font definition file first with the makefont.rb utility. The definition file (and the font file itself when embedding) must be present either in the current directory or in the one indicated by FPDF_FONTPATH if the constant is defined. If it could not be found, the error "Could not include font definition file" is generated.
+	# Support UTF-8 Unicode [Nicola Asuni, 2005-01-02].
+	# <b>Example</b>:<br />
+	# <pre>
+	# :pdf->AddFont('Comic','I');
+	# # is equivalent to:
+	# :pdf->AddFont('Comic','I','comici.rb');
+	# </pre>
+	# @param string :family Font family. The name can be chosen arbitrarily. If it is a standard family name, it will override the corresponding font.
+	# @param string :style Font style. Possible values are (case insensitive):<ul><li>empty string: regular (default)</li><li>B: bold</li><li>I: italic</li><li>BI or IB: bold italic</li></ul>
+	# @param string :file The font definition file. By default, the name is built from the family and style, in lower case with no space.
+	# @since 1.5
+	# @see SetFont()
+	#
+	def AddFont(family, style='', file='')
+		if (family.empty?)
+			return;
+		end
+
+		#Add a TrueType or Type1 font
+		family = family.downcase
+		if ((!@is_unicode) and (family == 'arial'))
+			family = 'helvetica';
+		end
+
+		style=style.upcase
+		style=style.gsub('U','');
+		if (style == 'IB')
+			style = 'BI';
+		end
+
+		fontkey = family + style;
+		# check if the font has been already added
+		if !@fonts[fontkey].nil?
+			return;
+		end
+
+		if (file=='')
+			file = family.gsub(' ', '') + style.downcase + '.rb';
+		end
+		font_file_name = getfontpath(file)
+		if (font_file_name.nil?)
+			# try to load the basic file without styles
+			file = family.gsub(' ', '') + '.rb';
+  		font_file_name = getfontpath(file)
+		end
+    if font_file_name.nil?
+			Error("Could not find font #{file}.")
+    end
+		require(getfontpath(file))
+		font_desc = TCPDFFontDescriptor.font(file)
+
+		if (font_desc[:name].nil? and @@fpdf_charwidths.nil?)
+			Error('Could not include font definition file');
+		end
+
+		i = @fonts.length+1;
+		if (@is_unicode)
+			@fonts[fontkey] = {'i' => i, 'type' => font_desc[:type], 'name' => font_desc[:name], 'desc' => font_desc[:desc], 'up' => font_desc[:up], 'ut' => font_desc[:ut], 'cw' => font_desc[:cw], 'enc' => font_desc[:enc], 'file' => font_desc[:file], 'ctg' => font_desc[:ctg], 'cMap' => font_desc[:cMap], 'registry' => font_desc[:registry]}
+			@@fpdf_charwidths[fontkey] = font_desc[:cw];
+		else
+			@fonts[fontkey]={'i' => i, 'type'=>'core', 'name'=>@core_fonts[fontkey], 'up'=>-100, 'ut'=>50, 'cw' => font_desc[:cw]}
+			@@fpdf_charwidths[fontkey] = font_desc[:cw];
+		end
+
+		if (!font_desc[:diff].nil? and (!font_desc[:diff].empty?))
+			#Search existing encodings
+			d=0;
+			nb=@diffs.length;
+			1.upto(nb) do |i|
+				if (@diffs[i]== font_desc[:diff])
+					d = i;
+					break;
+				end
+			end
+			if (d==0)
+				d = nb+1;
+				@diffs[d] = font_desc[:diff];
+			end
+			@fonts[fontkey]['diff'] = d;
+		end
+		if (font_desc[:file] and font_desc[:file].length > 0)
+			if (font_desc[:type] == "TrueType") or (font_desc[:type] == "TrueTypeUnicode")
+				@font_files[font_desc[:file]] = {'length1' => font_desc[:originalsize]}
+			else
+				@font_files[font_desc[:file]] = {'length1' => font_desc[:size1], 'length2' => font_desc[:size2]}
+			end
+		end
+	end
+  alias_method :add_font, :AddFont
+
+	#
+	# Sets the font used to print character strings. It is mandatory to call this method at least once before printing text or the resulting document would not be valid.
+	# The font can be either a standard one or a font added via the AddFont() method. Standard fonts use Windows encoding cp1252 (Western Europe).
+	# The method can be called before the first page is created and the font is retained from page to page.
+	# If you just wish to change the current font size, it is simpler to call SetFontSize().
+	# Note: for the standard fonts, the font metric files must be accessible. There are three possibilities for this:<ul><li>They are in the current directory (the one where the running script lies)</li><li>They are in one of the directories defined by the include_path parameter</li><li>They are in the directory defined by the FPDF_FONTPATH constant</li></ul><br />
+	# Example for the last case (note the trailing slash):<br />
+	# <pre>
+	# define('FPDF_FONTPATH','/home/www/font/');
+	# require('tcpdf.rb');
+	#
+	# #Times regular 12
+	# :pdf->SetFont('Times');
+	# #Arial bold 14
+	# :pdf->SetFont('Arial','B',14);
+	# #Removes bold
+	# :pdf->SetFont('');
+	# #Times bold, italic and underlined 14
+	# :pdf->SetFont('Times','BIU');
+	# </pre><br />
+	# If the file corresponding to the requested font is not found, the error "Could not include font metric file" is generated.
+	# @param string :family Family font. It can be either a name defined by AddFont() or one of the standard families (case insensitive):<ul><li>Courier (fixed-width)</li><li>Helvetica or Arial (synonymous; sans serif)</li><li>Times (serif)</li><li>Symbol (symbolic)</li><li>ZapfDingbats (symbolic)</li></ul>It is also possible to pass an empty string. In that case, the current family is retained.
+	# @param string :style Font style. Possible values are (case insensitive):<ul><li>empty string: regular</li><li>B: bold</li><li>I: italic</li><li>U: underline</li></ul>or any combination. The default value is regular. Bold and italic styles do not apply to Symbol and ZapfDingbats
+	# @param float :size Font size in points. The default value is the current size. If no size has been specified since the beginning of the document, the value taken is 12
+	# @since 1.0
+	# @see AddFont(), SetFontSize(), Cell(), MultiCell(), Write()
+	#
+	def SetFont(family, style='', size=0)
+		# save previous values
+		@prevfont_family = @font_family;
+		@prevfont_style = @font_style;
+
+		family=family.downcase;
+		if (family=='')
+			family=@font_family;
+		end
+		if ((!@is_unicode) and (family == 'arial'))
+			family = 'helvetica';
+		elsif ((family=="symbol") or (family=="zapfdingbats"))
+			style='';
+		end
+		
+		style=style.upcase;
+
+		if (style.include?('U'))
+			@underline=true;
+			style= style.gsub('U','');
+		else
+			@underline=false;
+		end
+		if (style=='IB')
+			style='BI';
+		end
+		if (size==0)
+			size=@font_size_pt;
+		end
+
+		# try to add font (if not already added)
+		AddFont(family, style);
+		
+		#Test if font is already selected
+		if ((@font_family == family) and (@font_style == style) and (@font_size_pt == size))
+			return;
+		end
+		
+		fontkey = family + style;
+		style = '' if (@fonts[fontkey].nil? and !@fonts[family].nil?)
+    
+		#Test if used for the first time
+		if (@fonts[fontkey].nil?)
+			#Check if one of the standard fonts
+			if (!@core_fonts[fontkey].nil?)
+				if @@fpdf_charwidths[fontkey].nil?
+					#Load metric file
+					file = family;
+					if ((family!='symbol') and (family!='zapfdingbats'))
+						file += style.downcase;
+					end
+					if (getfontpath(file + '.rb').nil?)
+						# try to load the basic file without styles
+						file = family;
+						fontkey = family;
+					end
+					require(getfontpath(file + '.rb'));
+      		font_desc = TCPDFFontDescriptor.font(file)
+					if ((@is_unicode and ctg.nil?) or ((!@is_unicode) and (@@fpdf_charwidths[fontkey].nil?)) )
+						Error("Could not include font metric file [" + fontkey + "]: " + getfontpath(file + ".rb"));
+					end
+				end
+				i = @fonts.length + 1;
+
+				if (@is_unicode)
+					@fonts[fontkey] = {'i' => i, 'type' => font_desc[:type], 'name' => font_desc[:name], 'desc' => font_desc[:desc], 'up' => font_desc[:up], 'ut' => font_desc[:ut], 'cw' => font_desc[:cw], 'enc' => font_desc[:enc], 'file' => font_desc[:file], 'ctg' => font_desc[:ctg]}
+					@@fpdf_charwidths[fontkey] = font_desc[:cw];
+				else
+					@fonts[fontkey] = {'i' => i, 'type'=>'core', 'name'=>@core_fonts[fontkey], 'up'=>-100, 'ut'=>50, 'cw' => font_desc[:cw]}
+					@@fpdf_charwidths[fontkey] = font_desc[:cw];
+				end
+			else
+				Error('Undefined font: ' + family + ' ' + style);
+			end
+		end
+		#Select it
+		@font_family = family;
+		@font_style = style;
+		@font_size_pt = size;
+		@font_size = size / @k;
+		@current_font = @fonts[fontkey]; # was & may need deep copy?
+		if (@page>0)
+			out(sprintf('BT /F%d %.2f Tf ET', @current_font['i'], @font_size_pt));
+		end
+	end
+  alias_method :set_font, :SetFont
+
+	#
+	# Defines the size of the current font.
+	# @param float :size The size (in points)
+	# @since 1.0
+	# @see SetFont()
+	#
+	def SetFontSize(size)
+		#Set font size in points
+		if (@font_size_pt== size)
+			return;
+		end
+		@font_size_pt = size;
+		@font_size = size.to_f / @k;
+		if (@page > 0)
+			out(sprintf('BT /F%d %.2f Tf ET', @current_font['i'], @font_size_pt));
+		end
+	end
+  alias_method :set_font_size, :SetFontSize
+
+	#
+	# Creates a new internal link and returns its identifier. An internal link is a clickable area which directs to another place within the document.<br />
+	# The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is defined with SetLink().
+	# @since 1.5
+	# @see Cell(), Write(), Image(), Link(), SetLink()
+	#
+	def AddLink()
+		#Create a new internal link
+		n=@links.length+1;
+		@links[n]=[0,0];
+		return n;
+	end
+  alias_method :add_link, :AddLink
+
+	#
+	# Defines the page and position a link points to
+	# @param int :link The link identifier returned by AddLink()
+	# @param float :y Ordinate of target position; -1 indicates the current position. The default value is 0 (top of page)
+	# @param int :page Number of target page; -1 indicates the current page. This is the default value
+	# @since 1.5
+	# @see AddLink()
+	#
+	def SetLink(link, y=0, page=-1)
+		#Set destination of internal link
+		if (y==-1)
+			y=@y;
+		end
+		if (page==-1)
+			page=@page;
+		end
+		@links[link] = [page, y]
+	end
+  alias_method :set_link, :SetLink
+
+	#
+	# Puts a link on a rectangular area of the page. Text or image links are generally put via Cell(), Write() or Image(), but this method can be useful for instance to define a clickable area inside an image.
+	# @param float :x Abscissa of the upper-left corner of the rectangle
+	# @param float :y Ordinate of the upper-left corner of the rectangle
+	# @param float :w Width of the rectangle
+	# @param float :h Height of the rectangle
+	# @param mixed :link URL or identifier returned by AddLink()
+	# @since 1.5
+	# @see AddLink(), Cell(), Write(), Image()
+	#
+	def Link(x, y, w, h, link)
+		#Put a link on the page
+    @page_links ||= Array.new
+    @page_links[@page] ||= Array.new
+    @page_links[@page].push([x * @k, @h_pt - y * @k, w * @k, h*@k, link]);
+	end
+  alias_method :link, :Link
+
+	#
+	# Prints a character string. The origin is on the left of the first charcter, on the baseline. This method allows to place a string precisely on the page, but it is usually easier to use Cell(), MultiCell() or Write() which are the standard methods to print text.
+	# @param float :x Abscissa of the origin
+	# @param float :y Ordinate of the origin
+	# @param string :txt String to print
+	# @since 1.0
+	# @see SetFont(), SetTextColor(), Cell(), MultiCell(), Write()
+	#
+	def Text(x, y, txt)
+		#Output a string
+		s=sprintf('BT %.2f %.2f Td (%s) Tj ET', x * @k, (@h-y) * @k, escapetext(txt));
+		if (@underline and (txt!=''))
+			s += ' ' + dounderline(x, y, txt);
+		end
+		if (@color_flag)
+			s='q ' + @text_color + ' ' + s + ' Q';
+		end
+		out(s);
+	end
+  alias_method :text, :Text
+
+	#
+	# Whenever a page break condition is met, the method is called, and the break is issued or not depending on the returned value. The default implementation returns a value according to the mode selected by SetAutoPageBreak().<br />
+	# This method is called automatically and should not be called directly by the application.<br />
+	# <b>Example:</b><br />
+	# The method is overriden in an inherited class in order to obtain a 3 column layout:<br />
+	# <pre>
+	# class PDF extends TCPDF {
+	# 	var :col=0;
+	#
+	# 	def SetCol(col)
+	# 		#Move position to a column
+	# 		@col = col;
+	# 		:x=10+:col*65;
+	# 		SetLeftMargin(x);
+	# 		SetX(x);
+	# 	end
+	#
+	# 	def AcceptPageBreak()
+	# 		if (@col<2)
+	# 			#Go to next column
+	# 			SetCol(@col+1);
+	# 			SetY(10);
+	# 			return false;
+	# 		end
+	# 		else
+	# 			#Go back to first column and issue page break
+	# 			SetCol(0);
+	# 			return true;
+	# 		end
+	# 	end
+	# }
+	#
+	# :pdf=new PDF();
+	# :pdf->Open();
+	# :pdf->AddPage();
+	# :pdf->SetFont('Arial','',12);
+	# for(i=1;:i<=300;:i++)
+	#     :pdf->Cell(0,5,"Line :i",0,1);
+	# }
+	# :pdf->Output();
+	# </pre>
+	# @return boolean
+	# @since 1.4
+	# @see SetAutoPageBreak()
+	#
+	def AcceptPageBreak()
+		#Accept automatic page break or not
+		return @auto_page_break;
+	end
+  alias_method :accept_page_break, :AcceptPageBreak
+
+  def BreakThePage?(h)
+		if ((@y + h) > @page_break_trigger and !@in_footer and AcceptPageBreak())
+      true
+    else
+      false
+    end
+  end
+  alias_method :break_the_page?, :BreakThePage?
+	#
+	# Prints a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.<br />
+	# If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
+	# @param float :w Cell width. If 0, the cell extends up to the right margin.
+	# @param float :h Cell height. Default value: 0.
+	# @param string :txt String to print. Default value: empty string.
+	# @param mixed :border Indicates if borders must be drawn around the cell. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+	# @param int :ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right</li><li>1: to the beginning of the next line</li><li>2: below</li></ul>
+	# Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
+	# @param string :align Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align (default value)</li><li>C: center</li><li>R: right align</li></ul>
+	# @param int :fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+	# @param mixed :link URL or identifier returned by AddLink().
+	# @since 1.0
+	# @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), AddLink(), Ln(), MultiCell(), Write(), SetAutoPageBreak()
+	#
+	def Cell(w, h=0, txt='', border=0, ln=0, align='', fill=0, link=nil)
+		#Output a cell
+		k=@k;
+		if ((@y + h) > @page_break_trigger and !@in_footer and AcceptPageBreak())
+			#Automatic page break
+			x = @x;
+			ws = @ws;
+			if (ws > 0)
+				@ws = 0;
+				out('0 Tw');
+			end
+			AddPage(@cur_orientation);
+			@x = x;
+			if (ws > 0)
+				@ws = ws;
+				out(sprintf('%.3f Tw', ws * k));
+			end
+		end
+		if (w == 0)
+			w = @w - @r_margin - @x;
+		end
+		s = '';
+		if ((fill.to_i == 1) or (border.to_i == 1))
+			if (fill.to_i == 1)
+				op = (border.to_i == 1) ? 'B' : 'f';
+			else
+				op = 'S';
+			end
+			s = sprintf('%.2f %.2f %.2f %.2f re %s ', @x * k, (@h - @y) * k, w * k, -h * k, op);
+		end
+		if (border.is_a?(String))
+			x=@x;
+			y=@y;
+			if (border.include?('L'))
+				s<<sprintf('%.2f %.2f m %.2f %.2f l S ', x*k,(@h-y)*k, x*k,(@h-(y+h))*k);
+			end
+			if (border.include?('T'))
+				s<<sprintf('%.2f %.2f m %.2f %.2f l S ', x*k,(@h-y)*k,(x+w)*k,(@h-y)*k);
+			end
+			if (border.include?('R'))
+				s<<sprintf('%.2f %.2f m %.2f %.2f l S ',(x+w)*k,(@h-y)*k,(x+w)*k,(@h-(y+h))*k);
+			end
+			if (border.include?('B'))
+				s<<sprintf('%.2f %.2f m %.2f %.2f l S ', x*k,(@h-(y+h))*k,(x+w)*k,(@h-(y+h))*k);
+			end
+		end
+		if (txt != '')
+			width = GetStringWidth(txt);
+			if (align == 'R' || align == 'right')
+				dx = w - @c_margin - width;
+			elsif (align=='C' || align == 'center')
+				dx = (w - width)/2;
+			else
+				dx = @c_margin;
+			end
+			if (@color_flag)
+				s << 'q ' + @text_color + ' ';
+			end
+			txt2 = escapetext(txt);
+			s<<sprintf('BT %.2f %.2f Td (%s) Tj ET', (@x + dx) * k, (@h - (@y + 0.5 * h + 0.3 * @font_size)) * k, txt2);
+			if (@underline)
+				s<<' ' + dounderline(@x + dx, @y + 0.5 * h + 0.3 * @font_size, txt);
+			end
+			if (@color_flag)
+				s<<' Q';
+			end
+			if link && !link.empty?
+				Link(@x + dx, @y + 0.5 * h - 0.5 * @font_size, width, @font_size, link);
+			end
+		end
+		if (s)
+			out(s);
+		end
+		@lasth = h;
+		if (ln.to_i>0)
+			# Go to next line
+			@y += h;
+			if (ln == 1)
+				@x = @l_margin;
+			end
+		else
+			@x += w;
+		end
+	end
+  alias_method :cell, :Cell
+
+	#
+	# This method allows printing text with line breaks. They can be automatic (as soon as the text reaches the right border of the cell) or explicit (via the \n character). As many cells as necessary are output, one below the other.<br />
+	# Text can be aligned, centered or justified. The cell block can be framed and the background painted.
+	# @param float :w Width of cells. If 0, they extend up to the right margin of the page.
+	# @param float :h Height of cells.
+	# @param string :txt String to print
+	# @param mixed :border Indicates if borders must be drawn around the cell block. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+	# @param string :align Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align</li><li>C: center</li><li>R: right align</li><li>J: justification (default value)</li></ul>
+	# @param int :fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+	# @param int :ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right</li><li>1: to the beginning of the next line [DEFAULT]</li><li>2: below</li></ul>
+	# @since 1.3
+	# @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), Cell(), Write(), SetAutoPageBreak()
+	#
+	def MultiCell(w, h, txt, border=0, align='J', fill=0, ln=1)
+		
+		# save current position
+		prevx = @x;
+		prevy = @y;
+		 
+		#Output text with automatic or explicit line breaks
+
+		if (w == 0)
+			w = @w - @r_margin - @x;
+		end
+
+		wmax = (w - 2 * @c_margin);
+
+		s = txt.gsub("\r", ''); # remove carriage returns
+		nb = s.length;
+
+		b=0;
+		if (border)
+			if (border==1)
+				border='LTRB';
+				b='LRT';
+				b2='LR';
+			elsif border.is_a?(String)
+				b2='';
+				if (border.include?('L'))
+					b2<<'L';
+				end
+				if (border.include?('R'))
+					b2<<'R';
+				end
+				b=(border.include?('T')) ? b2 + 'T' : b2;
+			end
+		end
+		sep=-1;
+		to_index=0;
+		from_j=0;
+		l=0;
+		ns=0;
+		nl=1;
+		
+		while to_index < nb
+			#Get next character
+			c = s[to_index];
+			if c == "\n"[0]
+				#Explicit line break
+				if @ws > 0
+					@ws = 0
+					out('0 Tw')
+				end
+        #Ed Moss - change begin            
+        end_i = to_index == 0 ? 0 : to_index - 1
+        # Changed from s[from_j..to_index] to fix bug reported by Hans Allis.
+        from_j = to_index == 0 ? 1 : from_j 
+        Cell(w, h, s[from_j..end_i], b, 2, align, fill) 
+        #change end
+				to_index += 1
+				sep=-1
+        from_j=to_index
+				l=0
+				ns=0
+				nl += 1
+				b = b2 if border and nl==2
+				next
+			end
+			if (c == " "[0])
+				sep = to_index;
+				ls = l;
+				ns += 1;
+			end
+
+			l = GetStringWidth(s[from_j, to_index - from_j + 1]);
+
+			if (l > wmax)
+				#Automatic line break
+				if (sep == -1)
+					if (to_index == from_j)
+						to_index += 1;
+					end
+					if (@ws > 0)
+						@ws = 0;
+						out('0 Tw');
+					end
+          Cell(w, h, s[from_j..to_index-1], b, 2, align, fill) # my FPDF version
+				else
+					if (align=='J' || align=='justify' || align=='justified')
+						@ws = (ns>1) ? (wmax-ls)/(ns-1) : 0;
+						out(sprintf('%.3f Tw', @ws * @k));
+					end
+					Cell(w, h, s[from_j..sep], b, 2, align, fill);
+					to_index = sep + 1;
+				end
+				sep=-1;
+				from_j = to_index;
+				l=0;
+				ns=0;
+				nl += 1;
+				if (border and (nl==2))
+					b = b2;
+				end
+			else
+				to_index += 1;
+			end
+		end
+		#Last chunk
+		if (@ws>0)
+			@ws=0;
+			out('0 Tw');
+		end
+		if (border.is_a?(String) and border.include?('B'))
+			b<<'B';
+		end
+		Cell(w, h, s[from_j, to_index-from_j], b, 2, align, fill);
+		
+		# move cursor to specified position
+		# since 2007-03-03
+		if (ln == 1)
+			# go to the beginning of the next line
+			@x = @l_margin;
+		elsif (ln == 0)
+			# go to the top-right of the cell
+			@y = prevy;
+			@x = prevx + w;
+		elsif (ln == 2)
+			# go to the bottom-left of the cell
+			@x = prevx;
+		end
+	end
+  alias_method :multi_cell, :MultiCell
+
+	#
+	# This method prints text from the current position. When the right margin is reached (or the \n character is met) a line break occurs and text continues from the left margin. Upon method exit, the current position is left just at the end of the text. It is possible to put a link on the text.<br />
+	# <b>Example:</b><br />
+	# <pre>
+	# #Begin with regular font
+	# :pdf->SetFont('Arial','',14);
+	# :pdf->Write(5,'Visit ');
+	# #Then put a blue underlined link
+	# :pdf->SetTextColor(0,0,255);
+	# :pdf->SetFont('','U');
+	# :pdf->Write(5,'www.tecnick.com','http://www.tecnick.com');
+	# </pre>
+	# @param float :h Line height
+	# @param string :txt String to print
+	# @param mixed :link URL or identifier returned by AddLink()
+	# @param int :fill Indicates if the background must be painted (1) or transparent (0). Default value: 0.
+	# @since 1.5
+	# @see SetFont(), SetTextColor(), AddLink(), MultiCell(), SetAutoPageBreak()
+	#
+	def Write(h, txt, link=nil, fill=0)
+
+		#Output text in flowing mode
+		w = @w - @r_margin - @x;
+		wmax = (w - 2 * @c_margin);
+    
+		s = txt.gsub("\r", '');
+		nb = s.length;
+
+		# handle single space character
+		if ((nb==1) and (s == " "))
+			@x += GetStringWidth(s);
+			return;
+		end
+
+		sep=-1;
+		i=0;
+		j=0;
+		l=0;
+		nl=1;
+		while(i<nb)
+			#Get next character
+			c = s[i];
+			if (c == "\n"[0])
+				#Explicit line break
+				Cell(w, h, s[j,i-j], 0, 2, '', fill, link);
+				i += 1;
+				sep = -1;
+				j = i;
+				l = 0;
+				if (nl == 1)
+					@x = @l_margin;
+					w = @w - @r_margin - @x;
+					wmax = (w - 2 * @c_margin);
+				end
+				nl += 1;
+				next
+			end
+			if (c == " "[0])
+				sep= i;
+			end
+			l = GetStringWidth(s[j, i - j + 1]);
+			if (l > wmax)
+				#Automatic line break (word wrapping)
+				if (sep == -1)
+					if (@x > @l_margin)
+						#Move to next line
+						@x = @l_margin;
+						@y += h;
+						w=@w - @r_margin - @x;
+						wmax=(w - 2 * @c_margin);
+						i += 1
+						nl += 1
+						next
+					end
+					if (i == j)
+						i += 1
+					end
+					Cell(w, h, s[j, (i-1)], 0, 2, '', fill, link);
+				else
+					Cell(w, h, s[j, (sep-j)], 0, 2, '', fill, link);
+					i = sep+1;
+				end
+				sep = -1;
+				j = i;
+				l = 0;
+				if (nl==1)
+					@x = @l_margin;
+					w = @w - @r_margin - @x;
+					wmax = (w - 2 * @c_margin);
+				end
+				nl += 1;
+			else
+				i += 1;
+			end
+		end
+		#Last chunk
+		if (i != j)
+			Cell(GetStringWidth(s[j..i]), h, s[j..i], 0, 0, '', fill, link);
+		end
+	end
+  alias_method :write, :Write
+
+	#
+	# Puts an image in the page. The upper-left corner must be given. The dimensions can be specified in different ways:<ul><li>explicit width and height (expressed in user unit)</li><li>one explicit dimension, the other being calculated automatically in order to keep the original proportions</li><li>no explicit dimension, in which case the image is put at 72 dpi</li></ul>
+	# Supported formats are JPEG and PNG.
+	# For JPEG, all flavors are allowed:<ul><li>gray scales</li><li>true colors (24 bits)</li><li>CMYK (32 bits)</li></ul>
+	# For PNG, are allowed:<ul><li>gray scales on at most 8 bits (256 levels)</li><li>indexed colors</li><li>true colors (24 bits)</li></ul>
+	# but are not supported:<ul><li>Interlacing</li><li>Alpha channel</li></ul>
+	# If a transparent color is defined, it will be taken into account (but will be only interpreted by Acrobat 4 and above).<br />
+	# The format can be specified explicitly or inferred from the file extension.<br />
+	# It is possible to put a link on the image.<br />
+	# Remark: if an image is used several times, only one copy will be embedded in the file.<br />
+	# @param string :file Name of the file containing the image.
+	# @param float :x Abscissa of the upper-left corner.
+	# @param float :y Ordinate of the upper-left corner.
+	# @param float :w Width of the image in the page. If not specified or equal to zero, it is automatically calculated.
+	# @param float :h Height of the image in the page. If not specified or equal to zero, it is automatically calculated.
+	# @param string :type Image format. Possible values are (case insensitive): JPG, JPEG, PNG. If not specified, the type is inferred from the file extension.
+	# @param mixed :link URL or identifier returned by AddLink().
+	# @since 1.1
+	# @see AddLink()
+	#
+	def Image(file, x, y, w=0, h=0, type='', link=nil)
+		#Put an image on the page
+		if (@images[file].nil?)
+			#First use of image, get info
+			if (type == '')
+				pos = file.rindex('.');
+				if (pos == 0)
+					Error('Image file has no extension and no type was specified: ' + file);
+				end
+				type = file[pos+1..-1];
+			end
+			type.downcase!
+			if (type == 'jpg' or type == 'jpeg')
+				info=parsejpg(file);
+			elsif (type == 'png')
+				info=parsepng(file);
+			else
+				#Allow for additional formats
+				mtd='parse' + type;
+				if (!self.respond_to?(mtd))
+					Error('Unsupported image type: ' + type);
+				end
+				info=send(mtd, file);
+			end
+			info['i']=@images.length+1;
+			@images[file] = info;
+		else
+			info=@images[file];
+		end
+		#Automatic width and height calculation if needed
+		if ((w == 0) and (h == 0))
+			#Put image at 72 dpi
+			# 2004-06-14 :: Nicola Asuni, scale factor where added
+			w = info['w'] / (@img_scale * @k);
+			h = info['h'] / (@img_scale * @k);
+		end
+		if (w == 0)
+			w = h * info['w'] / info['h'];
+		end
+		if (h == 0)
+			h = w * info['h'] / info['w'];
+		end
+		out(sprintf('q %.2f 0 0 %.2f %.2f %.2f cm /I%d Do Q', w*@k, h*@k, x*@k, (@h-(y+h))*@k, info['i']));
+		if (link)
+			Link(x, y, w, h, link);
+		end
+
+		#2002-07-31 - Nicola Asuni
+		# set right-bottom corner coordinates
+		@img_rb_x = x + w;
+		@img_rb_y = y + h;
+	end
+  alias_method :image, :Image
+
+	#
+	# Performs a line break. The current abscissa goes back to the left margin and the ordinate increases by the amount passed in parameter.
+	# @param float :h The height of the break. By default, the value equals the height of the last printed cell.
+	# @since 1.0
+	# @see Cell()
+	#
+	def Ln(h='')
+		#Line feed; default value is last cell height
+		@x=@l_margin;
+		if (h.is_a?(String))
+			@y += @lasth;
+		else
+			@y += h;
+		end
+	end
+  alias_method :ln, :Ln
+
+	#
+	# Returns the abscissa of the current position.
+	# @return float
+	# @since 1.2
+	# @see SetX(), GetY(), SetY()
+	#
+	def GetX()
+		#Get x position
+		return @x;
+	end
+  alias_method :get_x, :GetX
+
+	#
+	# Defines the abscissa of the current position. If the passed value is negative, it is relative to the right of the page.
+	# @param float :x The value of the abscissa.
+	# @since 1.2
+	# @see GetX(), GetY(), SetY(), SetXY()
+	#
+	def SetX(x)
+		#Set x position
+		if (x>=0)
+			@x = x;
+		else
+			@x=@w+x;
+		end
+	end
+  alias_method :set_x, :SetX
+
+	#
+	# Returns the ordinate of the current position.
+	# @return float
+	# @since 1.0
+	# @see SetY(), GetX(), SetX()
+	#
+	def GetY()
+		#Get y position
+		return @y;
+	end
+  alias_method :get_y, :GetY
+
+	#
+	# Moves the current abscissa back to the left margin and sets the ordinate. If the passed value is negative, it is relative to the bottom of the page.
+	# @param float :y The value of the ordinate.
+	# @since 1.0
+	# @see GetX(), GetY(), SetY(), SetXY()
+	#
+	def SetY(y)
+		#Set y position and reset x
+		@x=@l_margin;
+		if (y>=0)
+			@y = y;
+		else
+			@y=@h+y;
+		end
+	end
+  alias_method :set_y, :SetY
+
+	#
+	# Defines the abscissa and ordinate of the current position. If the passed values are negative, they are relative respectively to the right and bottom of the page.
+	# @param float :x The value of the abscissa
+	# @param float :y The value of the ordinate
+	# @since 1.2
+	# @see SetX(), SetY()
+	#
+	def SetXY(x, y)
+		#Set x and y positions
+		SetY(y);
+		SetX(x);
+	end
+  alias_method :set_xy, :SetXY
+
+	#
+	# Send the document to a given destination: string, local file or browser. In the last case, the plug-in may be used (if present) or a download ("Save as" dialog box) may be forced.<br />
+	# The method first calls Close() if necessary to terminate the document.
+	# @param string :name The name of the file. If not given, the document will be sent to the browser (destination I) with the name doc.pdf.
+	# @param string :dest Destination where to send the document. It can take one of the following values:<ul><li>I: send the file inline to the browser. The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF.</li><li>D: send to the browser and force a file download with the name given by name.</li><li>F: save to a local file with the name given by name.</li><li>S: return the document as a string. name is ignored.</li></ul>If the parameter is not specified but a name is given, destination is F. If no parameter is specified at all, destination is I.<br />
+	# @since 1.0
+	# @see Close()
+	#
+	def Output(name='', dest='')
+		#Output PDF to some destination
+		#Finish document if necessary
+		if (@state < 3)
+			Close();
+		end
+		#Normalize parameters
+		# Boolean no longer supported
+		# if (dest.is_a?(Boolean))
+		# 	dest = dest ? 'D' : 'F';
+		# end
+		dest = dest.upcase
+		if (dest=='')
+			if (name=='')
+				name='doc.pdf';
+				dest='I';
+			else
+				dest='F';
+			end
+		end
+		case (dest)
+			when 'I'
+			  # This is PHP specific code
+				##Send to standard output
+				# if (ob_get_contents())
+				# 	Error('Some data has already been output, can\'t send PDF file');
+				# end
+				# if (php_sapi_name()!='cli')
+				# 	#We send to a browser
+				# 	header('Content-Type: application/pdf');
+				# 	if (headers_sent())
+				# 		Error('Some data has already been output to browser, can\'t send PDF file');
+				# 	end
+				# 	header('Content-Length: ' + @buffer.length);
+				# 	header('Content-disposition: inline; filename="' + name + '"');
+				# end
+				return @buffer;
+				
+			when 'D'
+			  # PHP specific
+				#Download file
+				# if (ob_get_contents())
+				# 	Error('Some data has already been output, can\'t send PDF file');
+				# end
+				# if (!_SERVER['HTTP_USER_AGENT'].nil? && SERVER['HTTP_USER_AGENT'].include?('MSIE'))
+				# 	header('Content-Type: application/force-download');
+				# else
+				# 	header('Content-Type: application/octet-stream');
+				# end
+				# if (headers_sent())
+				# 	Error('Some data has already been output to browser, can\'t send PDF file');
+				# end
+				# header('Content-Length: '+ @buffer.length);
+				# header('Content-disposition: attachment; filename="' + name + '"');
+				return @buffer;
+				
+			when 'F'
+        open(name,'wb') do |f|
+          f.write(@buffer)
+        end
+			   # PHP code
+			   # 				#Save to local file
+			   # 				f=open(name,'wb');
+			   # 				if (!f)
+			   # 					Error('Unable to create output file: ' + name);
+			   # 				end
+			   # 				fwrite(f,@buffer,@buffer.length);
+			   # 				f.close
+				
+			when 'S'
+				#Return as a string
+				return @buffer;
+			else
+				Error('Incorrect output destination: ' + dest);
+			
+		end
+		return '';
+	end
+  alias_method :output, :Output
+
+	# Protected methods
+
+	#
+	# Check for locale-related bug
+	# @access protected
+	#
+	def dochecks()
+		#Check for locale-related bug
+		if (1.1==1)
+			Error('Don\'t alter the locale before including class file');
+		end
+		#Check for decimal separator
+		if (sprintf('%.1f',1.0)!='1.0')
+			setlocale(LC_NUMERIC,'C');
+		end
+	end
+
+	#
+	# Return fonts path
+	# @access protected
+	#
+	def getfontpath(file)
+    # Is it in the @@font_path?
+    if @@font_path
+  		fpath = File.join @@font_path, file
+  	  if File.exists?(fpath)
+  	    return fpath
+      end
+    end
+    # Is it in this plugin's font folder?
+		fpath = File.join File.dirname(__FILE__), 'fonts', file
+	  if File.exists?(fpath)
+	    return fpath
+    end
+    # Could not find it.
+    nil
+	end
+
+	#
+	# Start document
+	# @access protected
+	#
+	def begindoc()
+		#Start document
+		@state=1;
+		out('%PDF-1.3');
+	end
+
+	#
+	# putpages
+	# @access protected
+	#
+	def putpages()
+		nb = @page;
+		if (@alias_nb_pages)
+			nbstr = UTF8ToUTF16BE(nb.to_s, false);
+			#Replace number of pages
+			1.upto(nb) do |n|
+				@pages[n].gsub!(@alias_nb_pages, nbstr)
+			end
+		end
+		if @def_orientation=='P'
+			w_pt=@fw_pt
+			h_pt=@fh_pt
+		else
+			w_pt=@fh_pt
+			h_pt=@fw_pt
+		end
+		filter=(@compress) ? '/Filter /FlateDecode ' : ''
+		1.upto(nb) do |n|
+			#Page
+			newobj
+			out('<</Type /Page')
+			out('/Parent 1 0 R')
+			unless @orientation_changes[n].nil?
+				out(sprintf('/MediaBox [0 0 %.2f %.2f]', h_pt, w_pt))
+			end
+			out('/Resources 2 0 R')
+			if @page_links[n]
+				#Links
+				annots='/Annots ['
+				@page_links[n].each do |pl|
+					rect=sprintf('%.2f %.2f %.2f %.2f', pl[0], pl[1], pl[0]+pl[2], pl[1]-pl[3]);
+					annots<<'<</Type /Annot /Subtype /Link /Rect [' + rect + '] /Border [0 0 0] ';
+					if (pl[4].is_a?(String))
+						annots<<'/A <</S /URI /URI (' + escape(pl[4]) + ')>>>>';
+					else
+						l=@links[pl[4]];
+						h=!@orientation_changes[l[0]].nil? ? w_pt : h_pt;
+						annots<<sprintf('/Dest [%d 0 R /XYZ 0 %.2f null]>>',1+2*l[0], h-l[1]*@k);
+					end
+				end
+				out(annots + ']');
+			end
+			out('/Contents ' + (@n+1).to_s + ' 0 R>>');
+			out('endobj');
+			#Page content
+			p=(@compress) ? gzcompress(@pages[n]) : @pages[n];
+			newobj();
+			out('<<' + filter + '/Length '+ p.length.to_s + '>>');
+			putstream(p);
+			out('endobj');
+		end
+		#Pages root
+		@offsets[1]=@buffer.length;
+		out('1 0 obj');
+		out('<</Type /Pages');
+		kids='/Kids [';
+		0.upto(nb) do |i|
+			kids<<(3+2*i).to_s + ' 0 R ';
+		end
+		out(kids + ']');
+		out('/Count ' + nb.to_s);
+		out(sprintf('/MediaBox [0 0 %.2f %.2f]', w_pt, h_pt));
+		out('>>');
+		out('endobj');
+	end
+
+	#
+	# Adds fonts
+	# putfonts
+	# @access protected
+	#
+	def putfonts()
+		nf=@n;
+		@diffs.each do |diff|
+			#Encodings
+			newobj();
+			out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [' + diff + ']>>');
+			out('endobj');
+		end
+		@font_files.each do |file, info|
+			#Font file embedding
+			newobj();
+			@font_files[file]['n']=@n;
+			font='';
+			open(getfontpath(file),'rb') do |f|
+				font = f.read();
+			end
+			compressed=(file[-2,2]=='.z');
+			if (!compressed && !info['length2'].nil?)
+				header=((font[0][0])==128);
+				if (header)
+					#Strip first binary header
+					font=font[6];
+				end
+				if header && (font[info['length1']][0] == 128)
+					#Strip second binary header
+					font=font[0..info['length1']] + font[info['length1']+6];
+				end
+			end
+			out('<</Length '+ font.length.to_s);
+			if (compressed)
+				out('/Filter /FlateDecode');
+			end
+			out('/Length1 ' + info['length1'].to_s);
+			if (!info['length2'].nil?)
+				out('/Length2 ' + info['length2'].to_s + ' /Length3 0');
+			end
+			out('>>');
+			open(getfontpath(file),'rb') do |f|
+        putstream(font)
+      end
+			out('endobj');
+		end
+		@fonts.each do |k, font|
+			#Font objects
+			@fonts[k]['n']=@n+1;
+			type = font['type'];
+			name = font['name'];
+			if (type=='core')
+				#Standard font
+				newobj();
+				out('<</Type /Font');
+				out('/BaseFont /' + name);
+				out('/Subtype /Type1');
+				if (name!='Symbol' && name!='ZapfDingbats')
+					out('/Encoding /WinAnsiEncoding');
+				end
+				out('>>');
+				out('endobj');
+    	elsif type == 'Type0'
+    		putType0(font)
+			elsif (type=='Type1' || type=='TrueType')
+				#Additional Type1 or TrueType font
+				newobj();
+				out('<</Type /Font');
+				out('/BaseFont /' + name);
+				out('/Subtype /' + type);
+				out('/FirstChar 32 /LastChar 255');
+				out('/Widths ' + (@n+1).to_s + ' 0 R');
+				out('/FontDescriptor ' + (@n+2).to_s + ' 0 R');
+				if (font['enc'])
+					if (!font['diff'].nil?)
+						out('/Encoding ' + (nf+font['diff']).to_s + ' 0 R');
+					else
+						out('/Encoding /WinAnsiEncoding');
+					end
+				end
+				out('>>');
+				out('endobj');
+				#Widths
+				newobj();
+				cw=font['cw']; # &
+				s='[';
+				32.upto(255) do |i|
+					s << cw[i.chr] + ' ';
+				end
+				out(s + ']');
+				out('endobj');
+				#Descriptor
+				newobj();
+				s='<</Type /FontDescriptor /FontName /' + name;
+				font['desc'].each do |k, v|
+					s<<' /' + k + ' ' + v;
+				end
+				file = font['file'];
+				if (file)
+					s<<' /FontFile' + (type=='Type1' ? '' : '2') + ' ' + @font_files[file]['n'] + ' 0 R';
+				end
+				out(s + '>>');
+				out('endobj');
+			else
+				#Allow for additional types
+				mtd='put' + type.downcase;
+				if (!self.respond_to?(mtd))
+					Error('Unsupported font type: ' + type)
+				else
+  				self.send(mtd,font)
+				end
+			end
+		end
+	end
+
+  def putType0(font)
+  	#Type0
+		out('<</Type /Font')
+  	out('/Subtype /Type0')
+  	out('/BaseFont /'+font['name']+'-'+font['cMap'])
+  	out('/Encoding /'+font['cMap'])
+  	out('/DescendantFonts ['+(@n+1).to_s+' 0 R]')
+  	out('>>')
+  	out('endobj')
+  	#CIDFont
+  	newobj()
+  	out('<</Type /Font')
+  	out('/Subtype /CIDFontType0')
+  	out('/BaseFont /'+font['name'])
+  	out('/CIDSystemInfo <</Registry (Adobe) /Ordering ('+font['registry']['ordering']+') /Supplement '+font['registry']['supplement'].to_s+'>>')
+  	out('/FontDescriptor '+(@n+1).to_s+' 0 R')
+  	w='/W [1 ['
+		font['cw'].keys.sort.each {|key|
+		  w+=font['cw'][key].to_s + " "
+# ActionController::Base::logger.debug key.to_s
+# ActionController::Base::logger.debug font['cw'][key].to_s
+		}
+  	out(w+'] 231 325 500 631 [500] 326 389 500]')
+  	out('>>')
+  	out('endobj')
+  	#Font descriptor
+  	newobj()
+  	out('<</Type /FontDescriptor')
+  	out('/FontName /'+font['name'])
+  	out('/Flags 6')
+  	out('/FontBBox [0 -200 1000 900]')
+  	out('/ItalicAngle 0')
+  	out('/Ascent 800')
+  	out('/Descent -200')
+  	out('/CapHeight 800')
+  	out('/StemV 60')
+  	out('>>')
+  	out('endobj')
+  end
+
+	#
+	# putimages
+	# @access protected
+	#
+	def putimages()
+		filter=(@compress) ? '/Filter /FlateDecode ' : '';
+		@images.each do |file, info| # was while(list(file, info)=each(@images))
+			newobj();
+			@images[file]['n']=@n;
+			out('<</Type /XObject');
+			out('/Subtype /Image');
+			out('/Width ' + info['w'].to_s);
+			out('/Height ' + info['h'].to_s);
+			if (info['cs']=='Indexed')
+				out('/ColorSpace [/Indexed /DeviceRGB ' + (info['pal'].length/3-1) + ' ' + (@n+1) + ' 0 R]');
+			else
+				out('/ColorSpace /' + info['cs']);
+				if (info['cs']=='DeviceCMYK')
+					out('/Decode [1 0 1 0 1 0 1 0]');
+				end
+			end
+			out('/BitsPerComponent ' + info['bpc'].to_s);
+			if (!info['f'].nil?)
+				out('/Filter /' + info['f']);
+			end
+			if (!info['parms'].nil?)
+				out(info['parms']);
+			end
+			if (!info['trns'].nil? and info['trns'].kind_of?(Array))
+				trns='';
+				0.upto(info['trns'].length) do |i|
+					trns << info['trns'][i] + ' ' + info['trns'][i] + ' ';
+				end
+				out('/Mask [' + trns + ']');
+			end
+			out('/Length ' + info['data'].length.to_s + '>>');
+			putstream(info['data']);
+      @images[file]['data']=nil
+			out('endobj');
+			#Palette
+			if (info['cs']=='Indexed')
+				newobj();
+				pal=(@compress) ? gzcompress(info['pal']) : :info['pal'];
+				out('<<' + filter + '/Length ' + pal.length.to_s + '>>');
+				putstream(pal);
+				out('endobj');
+			end
+		end
+	end
+
+	#
+	# putxobjectdict
+	# @access protected
+	#
+	def putxobjectdict()
+		@images.each_value do |image|
+			out('/I' + image['i'].to_s + ' ' + image['n'].to_s + ' 0 R');
+		end
+	end
+
+	#
+	# putresourcedict
+	# @access protected
+	#
+	def putresourcedict()
+		out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
+		out('/Font <<');
+		@fonts.each_value do |font|
+			out('/F' + font['i'].to_s + ' ' + font['n'].to_s + ' 0 R');
+		end
+		out('>>');
+		out('/XObject <<');
+		putxobjectdict();
+		out('>>');
+	end
+
+	#
+	# putresources
+	# @access protected
+	#
+	def putresources()
+		putfonts();
+		putimages();
+		#Resource dictionary
+		@offsets[2]=@buffer.length;
+		out('2 0 obj');
+		out('<<');
+		putresourcedict();
+		out('>>');
+		out('endobj');
+	end
+	
+	#
+	# putinfo
+	# @access protected
+	#
+	def putinfo()
+		out('/Producer ' + textstring(PDF_PRODUCER));
+		if (!@title.nil?)
+			out('/Title ' + textstring(@title));
+		end
+		if (!@subject.nil?)
+			out('/Subject ' + textstring(@subject));
+		end
+		if (!@author.nil?)
+			out('/Author ' + textstring(@author));
+		end
+		if (!@keywords.nil?)
+			out('/Keywords ' + textstring(@keywords));
+		end
+		if (!@creator.nil?)
+			out('/Creator ' + textstring(@creator));
+		end
+		out('/CreationDate ' + textstring('D:' + Time.now.strftime('%Y%m%d%H%M%S')));
+	end
+
+	#
+	# putcatalog
+	# @access protected
+	#
+	def putcatalog()
+		out('/Type /Catalog');
+		out('/Pages 1 0 R');
+		if (@zoom_mode=='fullpage')
+			out('/OpenAction [3 0 R /Fit]');
+		elsif (@zoom_mode=='fullwidth')
+			out('/OpenAction [3 0 R /FitH null]');
+		elsif (@zoom_mode=='real')
+			out('/OpenAction [3 0 R /XYZ null null 1]');
+		elsif (!@zoom_mode.is_a?(String))
+			out('/OpenAction [3 0 R /XYZ null null ' + (@zoom_mode/100) + ']');
+		end
+		if (@layout_mode=='single')
+			out('/PageLayout /SinglePage');
+		elsif (@layout_mode=='continuous')
+			out('/PageLayout /OneColumn');
+		elsif (@layout_mode=='two')
+			out('/PageLayout /TwoColumnLeft');
+		end
+	end
+
+	#
+	# puttrailer
+	# @access protected
+	#
+	def puttrailer()
+		out('/Size ' + (@n+1).to_s);
+		out('/Root ' + @n.to_s + ' 0 R');
+		out('/Info ' + (@n-1).to_s + ' 0 R');
+	end
+
+	#
+	# putheader
+	# @access protected
+	#
+	def putheader()
+		out('%PDF-' + @pdf_version);
+	end
+
+	#
+	# enddoc
+	# @access protected
+	#
+	def enddoc()
+		putheader();
+		putpages();
+		putresources();
+		#Info
+		newobj();
+		out('<<');
+		putinfo();
+		out('>>');
+		out('endobj');
+		#Catalog
+		newobj();
+		out('<<');
+		putcatalog();
+		out('>>');
+		out('endobj');
+		#Cross-ref
+		o=@buffer.length;
+		out('xref');
+		out('0 ' + (@n+1).to_s);
+		out('0000000000 65535 f ');
+		1.upto(@n) do |i|
+			out(sprintf('%010d 00000 n ',@offsets[i]));
+		end
+		#Trailer
+		out('trailer');
+		out('<<');
+		puttrailer();
+		out('>>');
+		out('startxref');
+		out(o);
+		out('%%EOF');
+		@state=3;
+	end
+
+	#
+	# beginpage
+	# @access protected
+	#
+	def beginpage(orientation)
+		@page += 1;
+		@pages[@page]='';
+		@state=2;
+		@x=@l_margin;
+		@y=@t_margin;
+		@font_family='';
+		#Page orientation
+		if (orientation.empty?)
+			orientation=@def_orientation;
+		else
+			orientation.upcase!
+			if (orientation!=@def_orientation)
+				@orientation_changes[@page]=true;
+			end
+		end
+		if (orientation!=@cur_orientation)
+			#Change orientation
+			if (orientation=='P')
+				@w_pt=@fw_pt;
+				@h_pt=@fh_pt;
+				@w=@fw;
+				@h=@fh;
+			else
+				@w_pt=@fh_pt;
+				@h_pt=@fw_pt;
+				@w=@fh;
+				@h=@fw;
+			end
+			@page_break_trigger=@h-@b_margin;
+			@cur_orientation = orientation;
+		end
+	end
+
+	#
+	# End of page contents
+	# @access protected
+	#
+	def endpage()
+		@state=1;
+	end
+
+	#
+	# Begin a new object
+	# @access protected
+	#
+	def newobj()
+		@n += 1;
+		@offsets[@n]=@buffer.length;
+		out(@n.to_s + ' 0 obj');
+	end
+
+	#
+	# Underline text
+	# @access protected
+	#
+	def dounderline(x, y, txt)
+		up = @current_font['up'];
+		ut = @current_font['ut'];
+		w = GetStringWidth(txt) + @ws * txt.count(' ');
+		sprintf('%.2f %.2f %.2f %.2f re f', x * @k, (@h - (y - up / 1000.0 * @font_size)) * @k, w * @k, -ut / 1000.0 * @font_size_pt);
+	end
+
+	#
+	# Extract info from a JPEG file
+	# @access protected
+	#
+	def parsejpg(file)
+		a=getimagesize(file);
+		if (a.empty?)
+			Error('Missing or incorrect image file: ' + file);
+		end
+		if (a[2]!='JPEG')
+			Error('Not a JPEG file: ' + file);
+		end
+		if (a['channels'].nil? or a['channels']==3)
+			colspace='DeviceRGB';
+		elsif (a['channels']==4)
+			colspace='DeviceCMYK';
+		else
+			colspace='DeviceGray';
+		end
+		bpc=!a['bits'].nil? ? a['bits'] : 8;
+		#Read whole file
+		data='';
+	  open(file,'rb') do |f|
+			data<<f.read();
+		end
+		return {'w' => a[0],'h' => a[1],'cs' => colspace,'bpc' => bpc,'f'=>'DCTDecode','data' => data}
+	end
+
+	#
+	# Extract info from a PNG file
+	# @access protected
+	#
+	def parsepng(file)
+		f=open(file,'rb');
+		#Check signature
+		if (f.read(8)!=137.chr + 'PNG' + 13.chr + 10.chr + 26.chr + 10.chr)
+			Error('Not a PNG file: ' + file);
+		end
+		#Read header chunk
+		f.read(4);
+		if (f.read(4)!='IHDR')
+			Error('Incorrect PNG file: ' + file);
+		end
+		w=freadint(f);
+		h=freadint(f);
+		bpc=f.read(1)[0];
+		if (bpc>8)
+			Error('16-bit depth not supported: ' + file);
+		end
+		ct=f.read(1)[0];
+		if (ct==0)
+			colspace='DeviceGray';
+		elsif (ct==2)
+			colspace='DeviceRGB';
+		elsif (ct==3)
+			colspace='Indexed';
+		else
+			Error('Alpha channel not supported: ' + file);
+		end
+		if (f.read(1)[0] != 0)
+			Error('Unknown compression method: ' + file);
+		end
+		if (f.read(1)[0]!=0)
+			Error('Unknown filter method: ' + file);
+		end
+		if (f.read(1)[0]!=0)
+			Error('Interlacing not supported: ' + file);
+		end
+		f.read(4);
+		parms='/DecodeParms <</Predictor 15 /Colors ' + (ct==2 ? 3 : 1).to_s + ' /BitsPerComponent ' + bpc.to_s + ' /Columns ' + w.to_s + '>>';
+		#Scan chunks looking for palette, transparency and image data
+		pal='';
+		trns='';
+		data='';
+		begin
+			n=freadint(f);
+			type=f.read(4);
+			if (type=='PLTE')
+				#Read palette
+				pal=f.read( n);
+				f.read(4);
+			elsif (type=='tRNS')
+				#Read transparency info
+				t=f.read( n);
+				if (ct==0)
+					trns = t[1][0]
+				elsif (ct==2)
+					trns = t[[1][0], t[3][0], t[5][0]]
+				else
+					pos=t.include?(0.chr);
+					if (pos!=false)
+						trns = [pos]
+					end
+				end
+				f.read(4);
+			elsif (type=='IDAT')
+				#Read image data block
+				data<<f.read( n);
+				f.read(4);
+			elsif (type=='IEND')
+				break;
+			else
+				f.read( n+4);
+			end
+		end while(n)
+		if (colspace=='Indexed' and pal.empty?)
+			Error('Missing palette in ' + file);
+		end
+		f.close
+		return {'w' => w, 'h' => h, 'cs' => colspace, 'bpc' => bpc, 'f'=>'FlateDecode', 'parms' => parms, 'pal' => pal, 'trns' => trns, 'data' => data}
+	end
+
+	#
+	# Read a 4-byte integer from file
+	# @access protected
+	#
+	def freadint(f)
+    # Read a 4-byte integer from file
+    a = f.read(4).unpack('N')
+    return a[0]
+	end
+
+	#
+	# Format a text string
+	# @access protected
+	#
+	def textstring(s)
+		if (@is_unicode)
+			#Convert string to UTF-16BE
+			s = UTF8ToUTF16BE(s, true);
+		end
+		return '(' +  escape(s) + ')';
+	end
+
+	#
+	# Format a text string
+	# @access protected
+	#
+	def escapetext(s)
+		if (@is_unicode)
+			#Convert string to UTF-16BE
+			s = UTF8ToUTF16BE(s, false);
+		end
+		return escape(s);
+	end
+
+	#
+	# Add \ before \, ( and )
+	# @access protected
+	#
+	def escape(s)
+    # Add \ before \, ( and )
+    s.gsub('\\','\\\\\\').gsub('(','\\(').gsub(')','\\)').gsub(13.chr, '\r')
+	end
+
+	#
+	#
+	# @access protected
+	#
+	def putstream(s)
+		out('stream');
+		out(s);
+		out('endstream');
+	end
+
+	#
+	# Add a line to the document
+	# @access protected
+	#
+	def out(s)
+		if (@state==2)
+			@pages[@page] << s.to_s + "\n";
+		else
+			@buffer << s.to_s + "\n";
+		end
+	end
+
+	#
+	# Adds unicode fonts.<br>
+	# Based on PDF Reference 1.3 (section 5)
+	# @access protected
+	# @author Nicola Asuni
+	# @since 1.52.0.TC005 (2005-01-05)
+	#
+	def puttruetypeunicode(font)
+		# Type0 Font
+		# A composite font composed of other fonts, organized hierarchically
+		newobj();
+		out('<</Type /Font');
+		out('/Subtype /Type0');
+		out('/BaseFont /' + font['name'] + '');
+		out('/Encoding /Identity-H'); #The horizontal identity mapping for 2-byte CIDs; may be used with CIDFonts using any Registry, Ordering, and Supplement values.
+		out('/DescendantFonts [' + (@n + 1).to_s + ' 0 R]');
+		out('/ToUnicode ' + (@n + 2).to_s + ' 0 R');
+		out('>>');
+		out('endobj');
+		
+		# CIDFontType2
+		# A CIDFont whose glyph descriptions are based on TrueType font technology
+		newobj();
+		out('<</Type /Font');
+		out('/Subtype /CIDFontType2');
+		out('/BaseFont /' + font['name'] + '');
+		out('/CIDSystemInfo ' + (@n + 2).to_s + ' 0 R'); 
+		out('/FontDescriptor ' + (@n + 3).to_s + ' 0 R');
+		if (!font['desc']['MissingWidth'].nil?)
+			out('/DW ' + font['desc']['MissingWidth'].to_s + ''); # The default width for glyphs in the CIDFont MissingWidth
+		end
+		w = "";
+		font['cw'].each do |cid, width|
+			w << '' + cid.to_s + ' [' + width.to_s + '] '; # define a specific width for each individual CID
+		end
+		out('/W [' + w + ']'); # A description of the widths for the glyphs in the CIDFont
+		out('/CIDToGIDMap ' + (@n + 4).to_s + ' 0 R');
+		out('>>');
+		out('endobj');
+		
+		# ToUnicode
+		# is a stream object that contains the definition of the CMap
+		# (PDF Reference 1.3 chap. 5.9)
+		newobj();
+		out('<</Length 383>>');
+		out('stream');
+		out('/CIDInit /ProcSet findresource begin');
+		out('12 dict begin');
+		out('begincmap');
+		out('/CIDSystemInfo');
+		out('<</Registry (Adobe)');
+		out('/Ordering (UCS)');
+		out('/Supplement 0');
+		out('>> def');
+		out('/CMapName /Adobe-Identity-UCS def');
+		out('/CMapType 2 def');
+		out('1 begincodespacerange');
+		out('<0000> <FFFF>');
+		out('endcodespacerange');
+		out('1 beginbfrange');
+		out('<0000> <FFFF> <0000>');
+		out('endbfrange');
+		out('endcmap');
+		out('CMapName currentdict /CMap defineresource pop');
+		out('end');
+		out('end');
+		out('endstream');
+		out('endobj');
+		
+		# CIDSystemInfo dictionary
+		# A dictionary containing entries that define the character collection of the CIDFont.
+		newobj();
+		out('<</Registry (Adobe)'); # A string identifying an issuer of character collections
+		out('/Ordering (UCS)'); # A string that uniquely names a character collection issued by a specific registry
+		out('/Supplement 0'); # The supplement number of the character collection.
+		out('>>');
+		out('endobj');
+		
+		# Font descriptor
+		# A font descriptor describing the CIDFont default metrics other than its glyph widths
+		newobj();
+		out('<</Type /FontDescriptor');
+		out('/FontName /' + font['name']);
+		font['desc'].each do |key, value|
+			out('/' + key.to_s + ' ' + value.to_s);
+		end
+		if (font['file'])
+			# A stream containing a TrueType font program
+			out('/FontFile2 ' + @font_files[font['file']]['n'].to_s + ' 0 R');
+		end
+		out('>>');
+		out('endobj');
+
+		# Embed CIDToGIDMap
+		# A specification of the mapping from CIDs to glyph indices
+		newobj();
+		ctgfile = getfontpath(font['ctg'])
+		if (!ctgfile)
+			Error('Font file not found: ' + ctgfile);
+		end
+		size = File.size(ctgfile);
+		out('<</Length ' + size.to_s + '');
+		if (ctgfile[-2,2] == '.z') # check file extension
+			# Decompresses data encoded using the public-domain 
+			# zlib/deflate compression method, reproducing the 
+			# original text or binary data#
+			out('/Filter /FlateDecode');
+		end
+		out('>>');
+    open(ctgfile, "rb") do |f|
+      putstream(f.read())
+    end
+		out('endobj');
+	end
+
+	 #
+	# Converts UTF-8 strings to codepoints array.<br>
+	# Invalid byte sequences will be replaced with 0xFFFD (replacement character)<br>
+	# Based on: http://www.faqs.org/rfcs/rfc3629.html
+	# <pre>
+	# 	  Char. number range  |        UTF-8 octet sequence
+	#       (hexadecimal)    |              (binary)
+	#    --------------------+-----------------------------------------------
+	#    0000 0000-0000 007F | 0xxxxxxx
+	#    0000 0080-0000 07FF | 110xxxxx 10xxxxxx
+	#    0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
+	#    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+	#    ---------------------------------------------------------------------
+	#
+	#   ABFN notation:
+	#   ---------------------------------------------------------------------
+	#   UTF8-octets =#( UTF8-char )
+	#   UTF8-char   = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4
+	#   UTF8-1      = %x00-7F
+	#   UTF8-2      = %xC2-DF UTF8-tail
+	#
+	#   UTF8-3      = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
+	#                 %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
+	#   UTF8-4      = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
+	#                 %xF4 %x80-8F 2( UTF8-tail )
+	#   UTF8-tail   = %x80-BF
+	#   ---------------------------------------------------------------------
+	# </pre>
+	# @param string :str string to process.
+	# @return array containing codepoints (UTF-8 characters values)
+	# @access protected
+	# @author Nicola Asuni
+	# @since 1.53.0.TC005 (2005-01-05)
+	#
+	def UTF8StringToArray(str)
+		if (!@is_unicode)
+			return str; # string is not in unicode
+		end
+
+		unicode = [] # array containing unicode values
+		bytes  = [] # array containing single character byte sequences
+		numbytes  = 1; # number of octetc needed to represent the UTF-8 character
+
+		str = str.to_s; # force :str to be a string
+		
+		str.each_byte do |char|
+			if (bytes.length == 0) # get starting octect
+				if (char <= 0x7F)
+					unicode << char # use the character "as is" because is ASCII
+					numbytes = 1
+				elsif ((char >> 0x05) == 0x06) # 2 bytes character (0x06 = 110 BIN)
+					bytes << ((char - 0xC0) << 0x06) 
+					numbytes = 2
+				elsif ((char >> 0x04) == 0x0E) # 3 bytes character (0x0E = 1110 BIN)
+					bytes << ((char - 0xE0) << 0x0C) 
+					numbytes = 3
+				elsif ((char >> 0x03) == 0x1E) # 4 bytes character (0x1E = 11110 BIN)
+					bytes << ((char - 0xF0) << 0x12)
+					numbytes = 4
+				else
+					# use replacement character for other invalid sequences
+					unicode << 0xFFFD
+					bytes = []
+					numbytes = 1
+				end
+			elsif ((char >> 0x06) == 0x02) # bytes 2, 3 and 4 must start with 0x02 = 10 BIN
+				bytes << (char - 0x80)
+				if (bytes.length == numbytes)
+					# compose UTF-8 bytes to a single unicode value
+					char = bytes[0]
+					1.upto(numbytes-1) do |j|
+						char += (bytes[j] << ((numbytes - j - 1) * 0x06))
+					end
+					if (((char >= 0xD800) and (char <= 0xDFFF)) or (char >= 0x10FFFF))
+						# The definition of UTF-8 prohibits encoding character numbers between
+						# U+D800 and U+DFFF, which are reserved for use with the UTF-16
+						# encoding form (as surrogate pairs) and do not directly represent
+						# characters
+						unicode << 0xFFFD; # use replacement character
+  				else
+  					unicode << char; # add char to array
+					end
+  				# reset data for next char
+  				bytes = []
+  				numbytes = 1;
+				end
+			else
+				# use replacement character for other invalid sequences
+				unicode << 0xFFFD;
+				bytes = []
+				numbytes = 1;
+			end
+		end
+		return unicode;
+	end
+	
+	#
+	# Converts UTF-8 strings to UTF16-BE.<br>
+	# Based on: http://www.faqs.org/rfcs/rfc2781.html
+ 	# <pre>
+	#   Encoding UTF-16:
+	# 
+		#   Encoding of a single character from an ISO 10646 character value to
+	#    UTF-16 proceeds as follows. Let U be the character number, no greater
+	#    than 0x10FFFF.
+	# 
+	#    1) If U < 0x10000, encode U as a 16-bit unsigned integer and
+	#       terminate.
+	# 
+	#    2) Let U' = U - 0x10000. Because U is less than or equal to 0x10FFFF,
+	#       U' must be less than or equal to 0xFFFFF. That is, U' can be
+	#       represented in 20 bits.
+	# 
+	#    3) Initialize two 16-bit unsigned integers, W1 and W2, to 0xD800 and
+	#       0xDC00, respectively. These integers each have 10 bits free to
+	#       encode the character value, for a total of 20 bits.
+	# 
+	#    4) Assign the 10 high-order bits of the 20-bit U' to the 10 low-order
+	#       bits of W1 and the 10 low-order bits of U' to the 10 low-order
+	#       bits of W2. Terminate.
+	# 
+	#    Graphically, steps 2 through 4 look like:
+	#    U' = yyyyyyyyyyxxxxxxxxxx
+	#    W1 = 110110yyyyyyyyyy
+	#    W2 = 110111xxxxxxxxxx
+	# </pre>
+	# @param string :str string to process.
+	# @param boolean :setbom if true set the Byte Order Mark (BOM = 0xFEFF)
+	# @return string
+	# @access protected
+	# @author Nicola Asuni
+	# @since 1.53.0.TC005 (2005-01-05)
+	# @uses UTF8StringToArray
+	#
+	def UTF8ToUTF16BE(str, setbom=true)
+		if (!@is_unicode)
+			return str; # string is not in unicode
+		end
+		outstr = ""; # string to be returned
+		unicode = UTF8StringToArray(str); # array containing UTF-8 unicode values
+		numitems = unicode.length;
+		
+		if (setbom)
+			outstr << "\xFE\xFF"; # Byte Order Mark (BOM)
+		end
+		unicode.each do |char|
+			if (char == 0xFFFD)
+				outstr << "\xFF\xFD"; # replacement character
+			elsif (char < 0x10000)
+				outstr << (char >> 0x08).chr;
+				outstr << (char & 0xFF).chr;
+			else
+				char -= 0x10000;
+				w1 = 0xD800 | (char >> 0x10);
+				w2 = 0xDC00 | (char & 0x3FF);	
+				outstr << (w1 >> 0x08).chr;
+				outstr << (w1 & 0xFF).chr;
+				outstr << (w2 >> 0x08).chr;
+				outstr << (w2 & 0xFF).chr;
+			end
+		end
+		return outstr;
+	end
+	
+	# ====================================================
+	
+	#
+ 	# Set header font.
+	# @param array :font font
+	# @since 1.1
+	#
+	def SetHeaderFont(font)
+		@header_font = font;
+	end
+	alias_method :set_header_font, :SetHeaderFont
+	
+	#
+ 	# Set footer font.
+	# @param array :font font
+	# @since 1.1
+	#
+	def SetFooterFont(font)
+		@footer_font = font;
+	end
+	alias_method :set_footer_font, :SetFooterFont
+	
+	#
+ 	# Set language array.
+	# @param array :language
+	# @since 1.1
+	#
+	def SetLanguageArray(language)
+		@l = language;
+	end
+	alias_method :set_language_array, :SetLanguageArray
+	#
+ 	# Set document barcode.
+	# @param string :bc barcode
+	#
+	def SetBarcode(bc="")
+		@barcode = bc;
+	end
+	
+	#
+ 	# Print Barcode.
+	# @param int :x x position in user units
+	# @param int :y y position in user units
+	# @param int :w width in user units
+	# @param int :h height position in user units
+	# @param string :type type of barcode (I25, C128A, C128B, C128C, C39)
+	# @param string :style barcode style
+	# @param string :font font for text
+	# @param int :xres x resolution
+	# @param string :code code to print
+	#
+	def writeBarcode(x, y, w, h, type, style, font, xres, code)
+		require(File.dirname(__FILE__) + "/barcode/barcode.rb");
+		require(File.dirname(__FILE__) + "/barcode/i25object.rb");
+		require(File.dirname(__FILE__) + "/barcode/c39object.rb");
+		require(File.dirname(__FILE__) + "/barcode/c128aobject.rb");
+		require(File.dirname(__FILE__) + "/barcode/c128bobject.rb");
+		require(File.dirname(__FILE__) + "/barcode/c128cobject.rb");
+		
+		if (code.empty?)
+			return;
+		end
+		
+		if (style.empty?)
+			style  = BCS_ALIGN_LEFT;
+			style |= BCS_IMAGE_PNG;
+			style |= BCS_TRANSPARENT;
+			#:style |= BCS_BORDER;
+			#:style |= BCS_DRAW_TEXT;
+			#:style |= BCS_STRETCH_TEXT;
+			#:style |= BCS_REVERSE_COLOR;
+		end
+		if (font.empty?) then font = BCD_DEFAULT_FONT; end
+		if (xres.empty?) then xres = BCD_DEFAULT_XRES; end
+		
+		scale_factor = 1.5 * xres * @k;
+		bc_w = (w * scale_factor).round #width in points
+		bc_h = (h * scale_factor).round #height in points
+		
+		case (type.upcase)
+			when "I25"
+				obj = I25Object.new(bc_w, bc_h, style, code);
+			when "C128A"
+				obj = C128AObject.new(bc_w, bc_h, style, code);
+			when "C128B"
+				obj = C128BObject.new(bc_w, bc_h, style, code);
+			when "C128C"
+				obj = C128CObject.new(bc_w, bc_h, style, code);
+			when "C39"
+				obj = C39Object.new(bc_w, bc_h, style, code);
+		end
+		
+		obj.SetFont(font);   
+		obj.DrawObject(xres);
+		
+		#use a temporary file....
+		tmpName = tempnam(@@k_path_cache,'img');
+		imagepng(obj.getImage(), tmpName);
+		Image(tmpName, x, y, w, h, 'png');
+		obj.DestroyObject();
+		obj = nil
+		unlink(tmpName);
+	end
+	
+	#
+ 	# Returns the PDF data.
+	#
+	def GetPDFData()
+		if (@state < 3)
+			Close();
+		end
+		return @buffer;
+	end
+	
+	# --- HTML PARSER FUNCTIONS ---
+	
+	#
+	# Allows to preserve some HTML formatting.<br />
+	# Supports: h1, h2, h3, h4, h5, h6, b, u, i, a, img, p, br, strong, em, font, blockquote, li, ul, ol, hr, td, th, tr, table, sup, sub, small
+	# @param string :html text to display
+	# @param boolean :ln if true add a new line after text (default = true)
+	# @param int :fill Indicates if the background must be painted (1) or transparent (0). Default value: 0.
+	#
+	def writeHTML(html, ln=true, fill=0, h=0)
+    
+    @lasth = h if h > 0
+		if (@lasth == 0)
+			#set row height
+			@lasth = @font_size * @@k_cell_height_ratio; 
+		end
+		
+    @href = nil
+    @style = {}
+    html.gsub!(/[\t\r\n\f]/, "")#\0\x0B
+    html.split(/(<[^>]+>)/).each do |element|
+      if "<" == element[0,1]
+        #Tag
+        if (element[1, 1] == '/')
+					closedHTMLTagHandler(element[2..-2].downcase);
+        else
+					#Extract attributes
+					# get tag name
+					tag = element.scan(/([a-zA-Z0-9]*)/).flatten.delete_if {|x| x.length == 0}
+					tag = tag[0].downcase;
+					
+					# get attributes
+					attr_array = element.scan(/([^=\s]*)=["\']?([^"\']*)["\']?/)
+          attrs = {}
+          attr_array.each do |name, value|
+    			  attrs[name.downcase] = value;
+    		  end
+					openHTMLTagHandler(tag, attrs, fill);
+				end
+				
+      else
+        #Text
+				if (@href)
+					addHtmlLink(@href, element, fill);
+				elsif (@tdbegin)
+					if ((element.strip.length > 0) and (element != "&nbsp;"))
+						Cell(@tdwidth, @tdheight, unhtmlentities(element.strip), @tableborder, 0, @tdalign, @tdfill);
+					elsif (element == "&nbsp;")
+						Cell(@tdwidth, @tdheight, '', @tableborder, 0, @tdalign, @tdfill);
+					end
+				elsif ((element.strip.length > 0) and (element != "&nbsp;"))
+					Write(@lasth, unhtmlentities(element), '', fill);
+				end
+      end
+    end
+    
+		if (ln)
+			Ln(@lasth);
+		end
+	end
+  alias_method :write_html, :writeHTML
+
+	#
+	# Prints a cell (rectangular area) with optional borders, background color and html text string. The upper-left corner of the cell corresponds to the current position. After the call, the current position moves to the right or to the next line.<br />
+	# If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
+	# @param float :w Cell width. If 0, the cell extends up to the right margin.
+	# @param float :h Cell minimum height. The cell extends automatically if needed.
+	# @param float :x upper-left corner X coordinate
+	# @param float :y upper-left corner Y coordinate
+	# @param string :html html text to print. Default value: empty string.
+	# @param mixed :border Indicates if borders must be drawn around the cell. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+	# @param int :ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right</li><li>1: to the beginning of the next line</li><li>2: below</li></ul>
+# Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
+	# @param int :fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+	# @see Cell()
+	#
+	def writeHTMLCell(w, h, x, y, html='', border=0, ln=0, fill=0)
+		
+		if (@lasth == 0)
+			#set row height
+			@lasth = @font_size * @@k_cell_height_ratio; 
+		end
+		
+		if (x == 0)
+			x = GetX();
+		end
+		if (y == 0)
+			y = GetY();
+		end
+		
+		# get current page number
+		pagenum = @page;
+		
+		SetX(x);
+		SetY(y);
+				
+		if (w == 0)
+			w = @fw - x - @r_margin;
+		end
+		
+		# store original margin values
+		l_margin = @l_margin;
+		r_margin = @r_margin;
+		
+		# set new margin values
+		SetLeftMargin(x);
+		SetRightMargin(@fw - x - w);
+				
+		# calculate remaining vertical space on page
+		restspace = GetPageHeight() - GetY() - GetBreakMargin();
+		
+		writeHTML(html, true, fill); # write html text
+		
+		currentY =  GetY();
+		
+		# check if a new page has been created
+		if (@page > pagenum)
+			# design a cell around the text on first page
+			currentpage = @page;
+			@page = pagenum;
+			SetY(GetPageHeight() - restspace - GetBreakMargin());
+			h = restspace - 1;
+			Cell(w, h, "", border, ln, 'L', 0);
+			# design a cell around the text on last page
+			@page = currentpage;
+			h = currentY - @t_margin;
+			SetY(@t_margin); # put cursor at the beginning of text
+			Cell(w, h, "", border, ln, 'L', 0);
+		else
+			h = [h, (currentY - y)].max;
+			SetY(y); # put cursor at the beginning of text
+			# design a cell around the text
+			Cell(w, h, "", border, ln, 'L', 0);
+		end
+		
+		# restore original margin values
+		SetLeftMargin(l_margin);
+		SetRightMargin(r_margin);
+		
+		if (ln)
+			Ln(0);
+		end
+	end
+  alias_method :write_html_cell, :writeHTMLCell
+
+	#
+	# Process opening tags.
+	# @param string :tag tag name (in upcase)
+	# @param string :attr tag attribute (in upcase)
+	# @param int :fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+	# @access private
+	#
+	def openHTMLTagHandler(tag, attrs, fill=0)
+		#Opening tag
+		case (tag)
+			when 'table'
+				if attrs['border'].nil? or attrs['border'] == ''
+					@tableborder = 0;
+				else
+					@tableborder = attrs['border'];
+				end
+			when 'tr', 'td', 'th'
+        # SetStyle('b', true) if tag == 'th'
+				
+				if ((!attrs['width'].nil?) and (attrs['width'] != ''))
+					@tdwidth = (attrs['width'].to_i/4);
+				else
+					@tdwidth = ((@w - @l_margin - @r_margin) / @default_table_columns);
+				end
+				if ((!attrs['height'].nil?) and (attrs['height'] != ''))
+					@tdheight=(attrs['height'].to_i / @k);
+				else
+					@tdheight = @lasth;
+				end
+				if ((!attrs['align'].nil?) and (attrs['align'] != ''))
+					case (attrs['align'])
+						when 'center'
+							@tdalign = "C";
+						when 'right'
+							@tdalign = "R";
+						when 'left'
+							@tdalign = "L";
+					end
+				end
+				if ((!attrs['bgcolor'].nil?) and (attrs['bgcolor'] != ''))
+					coul = convertColorHexToDec(attrs['bgcolor']);
+					SetFillColor(coul['R'], coul['G'], coul['B']);
+					@tdfill=1;
+				end
+				@tdbegin=true;
+				
+			when 'hr'
+				Ln();
+				if ((!attrs['width'].nil?) and (attrs['width'] != ''))
+					hrWidth = attrs['width'];
+				else
+					hrWidth = @w - @l_margin - @r_margin;
+				end
+				x = GetX();
+				y = GetY();
+				SetLineWidth(0.2);
+				Line(x, y, x + hrWidth, y);
+				SetLineWidth(0.2);
+				Ln();
+				
+			when 'strong'
+				SetStyle('b', true);
+				
+			when 'em'
+				SetStyle('i', true);
+				
+			when 'b', 'i', 'u'
+				SetStyle(tag, true);
+				
+			when 'a'
+				@href = attrs['href'];
+				
+			when 'img'
+				if (!attrs['src'].nil?)
+					# replace relative path with real server path
+					attrs['src'] = attrs['src'].gsub(@@k_path_url_cache, @@k_path_cache);
+					if (attrs['width'].nil?)
+						attrs['width'] = 0;
+					end
+					if (attrs['height'].nil?)
+						attrs['height'] = 0;
+					end
+					
+					Image(attrs['src'], GetX(),GetY(), pixelsToMillimeters(attrs['width']), pixelsToMillimeters(attrs['height']));
+					#SetX(@img_rb_x);
+					SetY(@img_rb_y);
+					
+				end
+				
+			when 'ul'
+				@listordered = false;
+				@listcount = 0;
+				
+			when 'ol'
+				@listordered = true;
+				@listcount = 0;
+				
+			when 'li'
+				Ln();
+				if (@listordered)
+				  @listcount += 1
+					@lispacer = "    " + (@listcount).to_s + ". ";
+				else
+					#unordered list simbol
+					@lispacer = "    -  ";
+				end
+				Write(@lasth, @lispacer, '', fill);
+
+			when 'blockquote', 'br'
+				Ln();
+				if (@lispacer.length > 0)
+					@x += GetStringWidth(@lispacer);
+				end
+				
+			when 'p'
+				Ln();
+				Ln();
+				
+			when 'sup'
+				currentfont_size = @font_size;
+				@tempfontsize = @font_size_pt;
+				SetFontSize(@font_size_pt * @@k_small_ratio);
+				SetXY(GetX(), GetY() - ((currentfont_size - @font_size)*(@@k_small_ratio)));
+				
+			when 'sub'
+				currentfont_size = @font_size;
+				@tempfontsize = @font_size_pt;
+				SetFontSize(@font_size_pt * @@k_small_ratio);
+				SetXY(GetX(), GetY() + ((currentfont_size - @font_size)*(@@k_small_ratio)));
+				
+			when 'small'
+				currentfont_size = @font_size;
+				@tempfontsize = @font_size_pt;
+				SetFontSize(@font_size_pt * @@k_small_ratio);
+				SetXY(GetX(), GetY() + ((currentfont_size - @font_size)/3));
+				
+			when 'font'
+				if (!attrs['color'].nil? and attrs['color']!='')
+					coul = convertColorHexToDec(attrs['color']);
+					SetTextColor(coul['R'], coul['G'], coul['B']);
+					@issetcolor=true;
+				end
+				if (!attrs['face'].nil? and @fontlist.include?(attrs['face'].downcase))
+					SetFont(attrs['face'].downcase);
+					@issetfont=true;
+				end
+				if (!attrs['size'].nil?)
+					headsize = attrs['size'].to_i;
+				else
+					headsize = 0;
+				end
+				currentfont_size = @font_size;
+				@tempfontsize = @font_size_pt;
+				SetFontSize(@font_size_pt + headsize);
+				@lasth = @font_size * @@k_cell_height_ratio;
+				
+			when 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'
+				headsize = (4 - tag[1,1].to_f) * 2
+				@tempfontsize = @font_size_pt;
+				SetFontSize(@font_size_pt + headsize);
+				SetStyle('b', true);
+				@lasth = @font_size * @@k_cell_height_ratio;
+				
+		end
+	end
+  
+	#
+	# Process closing tags.
+	# @param string :tag tag name (in upcase)
+	# @access private
+	#
+	def closedHTMLTagHandler(tag)
+		#Closing tag
+		case (tag)
+			when 'td','th'
+				@tdbegin = false;
+				@tdwidth = 0;
+				@tdheight = 0;
+				@tdalign = "L";
+				@tdfill = 0;
+				SetFillColor(@prevfill_color[0], @prevfill_color[1], @prevfill_color[2]);
+				
+			when 'tr'
+				Ln();
+				
+			when 'table'
+				@tableborder=0;
+				
+			when 'strong'
+				SetStyle('b', false);
+				
+			when 'em'
+				SetStyle('i', false);
+				
+			when 'b', 'i', 'u'
+				SetStyle(tag, false);
+				
+			when 'a'
+				@href = nil;
+				
+			when 'sup'
+				currentfont_size = @font_size;
+				SetFontSize(@tempfontsize);
+				@tempfontsize = @font_size_pt;
+				SetXY(GetX(), GetY() - ((currentfont_size - @font_size)*(@@k_small_ratio)));
+				
+			when 'sub'
+				currentfont_size = @font_size;
+				SetFontSize(@tempfontsize);
+				@tempfontsize = @font_size_pt;
+				SetXY(GetX(), GetY() + ((currentfont_size - @font_size)*(@@k_small_ratio)));
+				
+			when 'small'
+				currentfont_size = @font_size;
+				SetFontSize(@tempfontsize);
+				@tempfontsize = @font_size_pt;
+				SetXY(GetX(), GetY() - ((@font_size - currentfont_size)/3));
+				
+			when 'font'
+				if (@issetcolor == true)
+					SetTextColor(@prevtext_color[0], @prevtext_color[1], @prevtext_color[2]);
+				end
+				if (@issetfont)
+					@font_family = @prevfont_family;
+					@font_style = @prevfont_style;
+					SetFont(@font_family);
+					@issetfont = false;
+				end
+				currentfont_size = @font_size;
+				SetFontSize(@tempfontsize);
+				@tempfontsize = @font_size_pt;
+				#@text_color = @prevtext_color;
+				@lasth = @font_size * @@k_cell_height_ratio;
+				
+			when 'ul'
+				Ln();
+				
+			when 'ol'
+				Ln();
+				
+			when 'li'
+				@lispacer = "";
+				
+			when 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'
+				SetFontSize(@tempfontsize);
+				@tempfontsize = @font_size_pt;
+				SetStyle('b', false);
+				Ln();
+				@lasth = @font_size * @@k_cell_height_ratio;
+								
+		end
+	end
+	
+	#
+	# Sets font style.
+	# @param string :tag tag name (in lowercase)
+	# @param boolean :enable
+	# @access private
+	#
+	def SetStyle(tag, enable)
+		#Modify style and select corresponding font
+		style='';
+		['b', 'i', 'u'].each do |s|
+				style << s if tag.downcase == s and enable
+		end
+		SetFont('', style);
+	end
+	
+	#
+	# Output anchor link.
+	# @param string :url link URL
+	# @param string :name link name
+	# @param int :fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+	# @access public
+	#
+	def addHtmlLink(url, name, fill=0)
+		#Put a hyperlink
+		SetTextColor(0, 0, 255);
+		SetStyle('u', true);
+		Write(@lasth, name, url, fill);
+		SetStyle('u', false);
+		SetTextColor(0);
+	end
+	
+	#
+	# Returns an associative array (keys: R,G,B) from 
+	# a hex html code (e.g. #3FE5AA).
+	# @param string :color hexadecimal html color [#rrggbb]
+	# @return array
+	# @access private
+	#
+	def convertColorHexToDec(color = "#000000")
+		tbl_color = {}
+		tbl_color['R'] = color[1,2].hex.to_i;
+		tbl_color['G'] = color[3,2].hex.to_i;
+		tbl_color['B'] = color[5,2].hex.to_i;
+		return tbl_color;
+	end
+	
+	#
+	# Converts pixels to millimeters in 72 dpi.
+	# @param int :px pixels
+	# @return float millimeters
+	# @access private
+	#
+	def pixelsToMillimeters(px)
+		return px.to_f * 25.4 / 72;
+	end
+		
+	#
+	# Reverse function for htmlentities.
+	# Convert entities in UTF-8.
+	#
+	# @param :text_to_convert Text to convert.
+	# @return string converted
+	#
+	def unhtmlentities(string)
+	  if @@decoder.nil?
+      CGI.unescapeHTML(string)
+    else
+  	  @@decoder.decode(string)
+    end
+  end
+  
+end # END OF CLASS
+
+#TODO 2007-05-25 (EJM) Level=0 - 
+#Handle special IE contype request
+# if (!_SERVER['HTTP_USER_AGENT'].nil? and (_SERVER['HTTP_USER_AGENT']=='contype'))
+# 	header('Content-Type: application/pdf');
+# 	exit;
+# }
Binary file vendor/plugins/rfpdf/logo_example.png has changed
--- a/vendor/plugins/rfpdf/test/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/rfpdf/test/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/test
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/rfpdf/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 65b672e3025a6dc9ed22dc2cb1356061
 2006-11-21T18:34:04.275680Z
 49
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/test_unicode.rfpdf	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,115 @@
+<%
+  doc_title = "test title";
+  doc_subject = "test description";
+  doc_keywords = "test keywords";
+  htmlcontent = "&lt; € &euro; &#8364; &amp; è &egrave; &copy; &gt;<br /><h1>heading 1</h1><h2>heading 2</h2><h3>heading 3</h3><h4>heading 4</h4><h5>heading 5</h5><h6>heading 6</h6>ordered list:<br /><ol><li><b>bold text</b></li><li><i>italic text</i></li><li><u>underlined text</u></li><li><a href=\"http:#www.tecnick.com\">link to http://www.tecnick.com</a></li><li>test break<br />second line<br />third line</li><li><font size=\"+3\">font + 3</font></li><li><small>small text</small></li><li>normal <sub>subscript</sub> <sup>superscript</sup></li></ul><hr />table:<br /><table border=\"1\" cellspacing=\"1\" cellpadding=\"1\"><tr><th>#</th><th>A</th><th>B</th></tr><tr><th>1</th><td bgcolor=\"#cccccc\">A1</td><td>B1</td></tr><tr><th>2</th><td>A2 € &euro; &#8364; &amp; è &egrave; </td><td>B2</td></tr><tr><th>3</th><td>A3</td><td><font color=\"#FF0000\">B3</font></td></tr></table><hr />image:<br /><img src=\"#{File.join(RAILS_ROOT, 'public')}/logo_example.png\" alt=\"test alt attribute\" width=\"100\" height=\"100\" border=\"0\" />";
+
+
+  # ENGLISH
+
+  @l = {}
+
+  # PAGE META DESCRIPTORS --------------------------------------
+
+  @l['a_meta_charset'] = "UTF-8";
+  @l['a_meta_dir'] = "ltr";
+  @l['a_meta_language'] = "en";
+
+  # TRANSLATIONS --------------------------------------
+  @l['w_page'] = "page";
+
+
+  # create new PDF document (document units are set by default to millimeters)
+  pdf = TCPDF.new
+
+  # set document information
+  pdf.SetCreator("TCPDF");
+  pdf.SetAuthor("TCPDF");
+  pdf.SetTitle(doc_title);
+  pdf.SetSubject(doc_subject);
+  pdf.SetKeywords(doc_keywords);
+
+  pdf.SetHeaderData("#{File.join(RAILS_ROOT, 'public')}/logo_example.png", 20, "header title", "first row\nsecond row\nthird row");
+
+  #set margins
+  pdf.SetMargins(15, 27, 15);
+  #set auto page breaks
+  pdf.SetAutoPageBreak(true, 25);
+  pdf.SetPrintHeader
+  pdf.SetPrintFooter
+  pdf.SetHeaderMargin(5);
+  pdf.SetFooterMargin(10);
+  pdf.SetImageScale(4); #set image scale factor
+
+  pdf.SetHeaderFont(["FreeSans", '', 10]);
+  pdf.SetFooterFont(["FreeSans", '', 8]);
+
+  pdf.SetLanguageArray(@l); #set language items
+
+
+  #initialize document
+  pdf.alias_nb_pages();
+
+  pdf.AddPage();
+
+  # set barcode
+  # pdf.SetBarcode(Time.now.strftime("Y-m-d H:i:s"));
+
+  # output some HTML code
+  pdf.SetFont("vera", "", 10);
+    
+  pdf.writeHTML(htmlcontent, true, 0);
+
+  # output two html columns
+  first_column_width = 80;
+  current_y_position = pdf.GetY();
+  pdf.writeHTMLCell(first_column_width, 0, 0, current_y_position, "<b>hello</b>", 0, 0, 0); 
+  pdf.writeHTMLCell(0, 0, first_column_width, current_y_position, "<i>world</i>", 0, 1, 0); 
+ 
+  # output some content
+  pdf.SetFont("vera", "BI", 20);
+  pdf.Cell(0,10,"TEST Bold-Italic Cell",1,1,'C');
+ 
+  # output some UTF-8 test content
+  pdf.AddPage();
+  pdf.SetFont("FreeSans", "", 12);
+  utf8text = open(File.join(RAILS_ROOT, 'vendor/plugins/rfpdf',"utf8test.txt"), "rb").read; # get utf-8 text form file
+  pdf.SetFillColor(230, 240, 255, true);
+  pdf.Write(5, utf8text, '', 1);
+  
+  # remove page header/footer
+  pdf.SetPrintHeader(false);
+  pdf.SetPrintFooter(false);
+  
+  # Two HTML columns test
+  pdf.AddPage();
+  right_column = "<b>right column</b> right column right column right column right column
+  right column right column right column right column right column right column
+  right column right column right column right column right column right column";
+  left_column = "<b>left column</b> left column left column left column left column left
+  column left column left column left column left column left column left column
+  left column left column left column left column left column left column left
+  column";
+  first_column_width = 80;
+  second_column_width = 80;
+  column_space = 20; 
+  current_y_position = pdf.GetY(); 
+  pdf.writeHTMLCell(first_column_width, 0, 0, 0, left_column, 1, 0, 0);
+  pdf.Cell(0);
+  pdf.writeHTMLCell(second_column_width, 0, first_column_width+column_space, current_y_position, right_column, 0, 0, 0);
+  
+  # add page header/footer
+  pdf.SetPrintHeader(true);
+  pdf.SetPrintFooter(true);
+  
+  pdf.AddPage();
+
+  # Multicell test
+  pdf.MultiCell(40, 5, "A test multicell line 1\ntest multicell line 2\ntest multicell line 3", 1, 'J', 0, 0);
+  pdf.MultiCell(40, 5, "B test multicell line 1\ntest multicell line 2\ntest multicell line 3", 1, 'J', 0);
+  pdf.MultiCell(40, 5, "C test multicell line 1\ntest multicell line 2\ntest multicell line 3", 1, 'J', 0, 0);
+  pdf.MultiCell(40, 5, "D test multicell line 1\ntest multicell line 2\ntest multicell line 3", 1, 'J', 0, 2);
+  pdf.MultiCell(40, 5, "F test multicell line 1\ntest multicell line 2\ntest multicell line 3", 1, 'J', 0);
+
+  #Close and output PDF document
+%><%=pdf.Output()%>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/utf8test.txt	Mon Jun 06 14:41:04 2011 +0100
@@ -0,0 +1,135 @@
+Sentences that contain all letters commonly used in a language
+--------------------------------------------------------------
+
+Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> -- 2001-09-02
+
+This file is UTF-8 encoded.
+
+
+Danish (da)
+---------
+
+  Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen
+  Wolther spillede på xylofon.
+  (= Quiz contestants were eating strawbery with cream while Wolther
+  the circus clown played on xylophone.)
+
+German (de)
+-----------
+
+  Falsches Üben von Xylophonmusik quält jeden größeren Zwerg
+  (= Wrongful practicing of xylophone music tortures every larger dwarf)
+
+  Zwölf Boxkämpfer jagten Eva quer über den Sylter Deich
+  (= Twelve boxing fighters hunted Eva across the dike of Sylt)
+
+  Heizölrückstoßabdämpfung
+  (= fuel oil recoil absorber)
+  (jqvwxy missing, but all non-ASCII letters in one word)
+
+English (en)
+------------
+
+  The quick brown fox jumps over the lazy dog
+
+Spanish (es)
+------------
+
+  El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y 
+  frío, añoraba a su querido cachorro.
+  (Contains every letter and every accent, but not every combination
+  of vowel + acute.)
+
+French (fr)
+-----------
+
+  Portez ce vieux whisky au juge blond qui fume sur son île intérieure, à
+  côté de l'alcôve ovoïde, où les bûches se consument dans l'âtre, ce
+  qui lui permet de penser à la cænogenèse de l'être dont il est question
+  dans la cause ambiguë entendue à Moÿ, dans un capharnaüm qui,
+  pense-t-il, diminue çà et là la qualité de son œuvre. 
+
+  l'île exiguë
+  Où l'obèse jury mûr
+  Fête l'haï volapük,
+  Âne ex aéquo au whist,
+  Ôtez ce vœu déçu.
+
+  Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en
+  canoë au delà des îles, près du mälström où brûlent les novæ.
+
+Irish Gaelic (ga)
+-----------------
+
+  D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh
+
+Hungarian (hu)
+--------------
+
+  Árvíztűrő tükörfúrógép
+  (= flood-proof mirror-drilling machine, only all non-ASCII letters)
+
+Icelandic (is)
+--------------
+
+  Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa
+
+  Sævör grét áðan því úlpan var ónýt
+  (some ASCII letters missing)
+
+Greek (el)
+-------------
+
+  Γαζέες καὶ μυρτιὲς δὲν θὰ βρῶ πιὰ στὸ χρυσαφὶ ξέφωτο
+  (= No more shall I see acacias or myrtles in the golden clearing)
+
+  Ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία
+  (= I uncover the soul-destroying abhorrence)
+
+Japanese (jp)
+-------------
+
+  Hiragana: (Iroha)
+
+  いろはにほへとちりぬるを
+  わかよたれそつねならむ
+  うゐのおくやまけふこえて
+  あさきゆめみしゑひもせす
+
+  Katakana:
+
+  イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム
+  ウヰノオクヤマ ケフコエテ アサキユメミシ ヱヒモセスン
+
+Hebrew (iw)
+-----------
+
+  ? דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה
+
+Polish (pl)
+-----------
+
+  Pchnąć w tę łódź jeża lub ośm skrzyń fig
+  (= To push a hedgehog or eight bins of figs in this boat)
+
+Russian (ru)
+------------
+
+  В чащах юга жил бы цитрус? Да, но фальшивый экземпляр!
+  (= Would a citrus live in the bushes of south? Yes, but only a fake one!)
+
+Thai (th)
+---------
+
+  [--------------------------|------------------------]
+  ๏ เป็นมนุษย์สุดประเสริฐเลิศคุณค่า  กว่าบรรดาฝูงสัตว์เดรัจฉาน
+  จงฝ่าฟันพัฒนาวิชาการ           อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร
+  ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า     หัดอภัยเหมือนกีฬาอัชฌาสัย
+  ปฏิบัติประพฤติกฎกำหนดใจ        พูดจาให้จ๊ะๆ จ๋าๆ น่าฟังเอย ฯ
+
+  [The copyright for the Thai example is owned by The Computer
+  Association of Thailand under the Royal Patronage of His Majesty the
+  King.]
+
+Please let me know if you find others! Special thanks to the people
+from all over the world who contributed these sentences.
--- a/vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/ruby-net-ldap-0.0.4
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 100efd8d000514effa3709713ab85acb
 2007-01-02T08:48:40.736310Z
 134
@@ -72,7 +72,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 e951c712b462c2e6e01f12474d4a23c2
 2007-01-02T08:48:40.736310Z
 134
@@ -106,7 +106,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 ff6d66271209d878dbe3742d8061151e
 2007-01-02T08:48:40.736310Z
 134
@@ -140,7 +140,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 365281a5053e3232092adff0636600b3
 2007-01-02T08:48:40.736310Z
 134
--- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/ruby-net-ldap-0.0.4/lib
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/ruby-net-ldap-0.0.4/lib/net
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 bcd7fbc67923f3cc1491ca301a5c39cb
 2007-01-02T08:48:40.736310Z
 134
@@ -69,7 +69,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 47d5a9c76d96071a1de184dd49c09194
 2007-01-02T08:48:40.736310Z
 134
@@ -103,7 +103,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 40f7f978006674f2b916ce341e5ad684
 2008-02-15T17:22:21.293943Z
 1148
--- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 be6b5dd522a4532ceeda4ab5bddcb53e
 2007-01-02T08:48:40.736310Z
 134
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 dce002e156bf793b6219b50e5d4ede3a
 2007-01-02T08:48:40.736310Z
 134
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 39c1aa4a3ff36f2769b6855a4b56faa7
 2007-02-18T11:45:55.832750Z
 252
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 7acdae44250f47d4b177c0367865d5f7
 2007-01-02T08:48:40.736310Z
 134
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:00.000000Z
 7af528c0721148b904f82e64e523ee74
 2007-01-02T08:48:40.736310Z
 134
--- a/vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries	Thu Mar 03 15:08:45 2011 +0000
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries	Mon Jun 06 14:41:04 2011 +0100
@@ -1,8 +1,8 @@
 10
 
 dir
-4993
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/tests
+6000
+http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/ruby-net-ldap-0.0.4/tests
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:01.000000Z
 d32a0d5d48658b30de358974dc588b6a
 2007-01-02T08:48:40.736310Z
 134
@@ -66,7 +66,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:01.000000Z
 9a4a1de4982131870bcc016b3062b563
 2007-01-02T08:48:40.736310Z
 134
@@ -100,7 +100,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:01.000000Z
 07fadb83b55212328945590db904016b
 2007-01-02T08:48:40.736310Z
 134
@@ -134,7 +134,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:01.000000Z
 f60b9471933a7a534097d3fd1fe38a18
 2007-01-02T08:48:40.736310Z
 134
@@ -168,7 +168,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:01.000000Z
 98e4a39b73665ed7c274457213d8e3d5
 2007-01-02T08:48:40.736310Z
 134
@@ -202,7 +202,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:01.000000Z
 a6eed10e89ba06f4ffa2da720bb1752f
 2007-01-02T08:48:40.736310Z
 134
@@ -236,7 +236,7 @@
 
 
 
-2011-03-03T11:05:12.000000Z
+2011-06-06T13:15:01.000000Z
 3dcbc8b4c3717fa97211a1d75a7fab4f
 2007-01-02T08:48:40.736310Z
 134